Browse Source

iOS config page done; need manually rename main() in SDL source to avoid name confliction for now

Pal Lockheart 7 years ago
parent
commit
fc3a6dcf75

+ 4 - 1
.gitignore

@@ -269,4 +269,7 @@ import-summary.txt
 
 # Android Studio
 .idea
-*.iml
+*.iml
+
+# CocoaPods
+Pods

+ 6 - 2
.travis.yml

@@ -73,17 +73,21 @@ matrix:
           - jarsigner -storetype pkcs12 -keystore winrt/SDLPal.UWP/SDLPal_TemporaryKey.pfx -sigalg SHA1withRSA -digestalg SHA1 -signedjar deploy/sdlpal-release.apk -storepass "" android/app/build/outputs/apk/app-release-unsigned.apk 5f85e55b-6e81-4b08-ac2d-c51f3dae22ae
 
       - os: osx
+        osx_image: xcode8.3
         env: TARGET=iOS
         language: c
         script:
           - cd ios/SDLPal
-          - xcodebuild ONLY_ACTIVE_ARCH=NO CODE_SIGNING_ALLOWED=NO -configuration Release
+          - pod install
+          - sed -i '' 's/int main/int nomain/g' ../../3rd/SDL/src/video/uikit/SDL_uikitappdelegate.m # hackhack
+          - xcodebuild -workspace SDLPal.xcworkspace -scheme SDLPal ONLY_ACTIVE_ARCH=NO CODE_SIGNING_ALLOWED=NO -configuration Release CONFIGURATION_BUILD_DIR=/tmp/sdlpal-build
           - mkdir -p Payload
-          - mv build/Release-iphoneos/SDLPal.app Payload
+          - mv /tmp/sdlpal-build/SDLPal.app Payload
           - zip ../../deploy/sdlpal-impactor.ipa -r Payload
           - cd ../..
 
       - os: osx
+        osx_image: xcode8.3
         env: TARGET=macOS
         language: c
         script:

+ 4 - 1
common.h

@@ -114,6 +114,9 @@ typedef const BYTE *LPCBYTE;
 
 # include <unistd.h>
 # include <dirent.h>
+# ifdef __APPLE__
+#  include <objc/objc.h>
+# endif
 
 # ifndef FALSE
 #  define FALSE               0
@@ -134,7 +137,7 @@ typedef unsigned char       UCHAR, *PUCHAR;
 typedef unsigned short      WORD, *LPWORD;
 typedef unsigned int        DWORD, *LPDWORD;
 typedef int                 INT, *LPINT;
-# ifndef __OBJC__
+# ifndef __APPLE__
 typedef int                 BOOL, *LPBOOL;
 # endif
 typedef unsigned int        UINT, *PUINT, UINT32, *PUINT32;

+ 2 - 0
ios/SDLPal/Podfile

@@ -0,0 +1,2 @@
+target 'SDLPal'
+pod 'ActionSheetPicker-3.0', '~> 2.2.0'

+ 12 - 0
ios/SDLPal/Podfile.lock

@@ -0,0 +1,12 @@
+PODS:
+  - ActionSheetPicker-3.0 (2.2.0)
+
+DEPENDENCIES:
+  - ActionSheetPicker-3.0 (~> 2.2.0)
+
+SPEC CHECKSUMS:
+  ActionSheetPicker-3.0: d11a4c12c6aaf704b8a3f56d179198c99f3e41e6
+
+PODFILE CHECKSUM: cb0e67e3620d915f68ac1b0695b9a096f64afba1
+
+COCOAPODS: 1.2.0

+ 133 - 9
ios/SDLPal/SDLPal.xcodeproj/project.pbxproj

@@ -95,6 +95,7 @@
 		716552AE195BBE7D006E1227 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 716552AD195BBE7D006E1227 /* AudioToolbox.framework */; };
 		716552B0195BBECE006E1227 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 716552AF195BBECE006E1227 /* QuartzCore.framework */; };
 		71AA35801A0BCA4E00793FFF /* util.mm in Sources */ = {isa = PBXBuildFile; fileRef = 71AA357F1A0BCA4E00793FFF /* util.mm */; };
+		C60441781ED9AF3C006C7A7C /* Settings.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C604417A1ED9AF3C006C7A7C /* Settings.storyboard */; };
 		71DCB6961ED9CBB000F120DB /* aviplay.c in Sources */ = {isa = PBXBuildFile; fileRef = 71DCB6941ED9CBB000F120DB /* aviplay.c */; };
 		71DCB6991ED9CCFE00F120DB /* GameController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C622BE731E474CE2000C8970 /* GameController.framework */; };
 		C622BE661E474B5E000C8970 /* audio.c in Sources */ = {isa = PBXBuildFile; fileRef = C622BE641E474B5E000C8970 /* audio.c */; };
@@ -107,8 +108,11 @@
 		C63505741EA6570300186049 /* private.c in Sources */ = {isa = PBXBuildFile; fileRef = C635056C1EA6570300186049 /* private.c */; };
 		C635057F1EA6578700186049 /* native_midi_common.c in Sources */ = {isa = PBXBuildFile; fileRef = C635057B1EA6578700186049 /* native_midi_common.c */; };
 		C63505801EA6578700186049 /* native_midi.m in Sources */ = {isa = PBXBuildFile; fileRef = C635057D1EA6578700186049 /* native_midi.m */; };
+		C66C6CA41ECCB73100CE10C1 /* SDLPal_AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = C66C6CA31ECCB73100CE10C1 /* SDLPal_AppDelegate.m */; };
+		C6743A841ECCAFA700AEF782 /* SettingsTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C6743A831ECCAFA700AEF782 /* SettingsTableViewController.m */; };
 		C694CF871EB6197C0006F937 /* gs_instruments.dls in Resources */ = {isa = PBXBuildFile; fileRef = C694CF861EB619660006F937 /* gs_instruments.dls */; };
 		C6E974A21E49C24500F76B17 /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C6E9749D1E49C22D00F76B17 /* libSDL2.a */; };
+		F9BC4A0C6F1B983EB45414F3 /* libPods-SDLPal.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2765B76B4AC93B4F654F1289 /* libPods-SDLPal.a */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
@@ -136,6 +140,7 @@
 /* End PBXContainerItemProxy section */
 
 /* Begin PBXFileReference section */
+		2765B76B4AC93B4F654F1289 /* libPods-SDLPal.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-SDLPal.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 		57FB00E81B7A4FEA005FCF4C /* dbemuopl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dbemuopl.cpp; sourceTree = "<group>"; };
 		57FB00E91B7A4FEA005FCF4C /* dbemuopl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dbemuopl.h; sourceTree = "<group>"; };
 		57FB00EA1B7A4FEA005FCF4C /* dbopl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dbopl.cpp; sourceTree = "<group>"; };
@@ -340,6 +345,9 @@
 		71AA357F1A0BCA4E00793FFF /* util.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = util.mm; sourceTree = "<group>"; };
 		71DCB6941ED9CBB000F120DB /* aviplay.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = aviplay.c; path = ../../../aviplay.c; sourceTree = "<group>"; };
 		71DCB6951ED9CBB000F120DB /* aviplay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = aviplay.h; path = ../../../aviplay.h; sourceTree = "<group>"; };
+		C604417B1ED9B500006C7A7C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Settings.storyboard; sourceTree = "<group>"; };
+		C604417D1ED9B521006C7A7C /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/Settings.strings"; sourceTree = "<group>"; };
+		C604417E1ED9B60C006C7A7C /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Settings.strings"; sourceTree = "<group>"; };
 		C622BE4E1E474AAF000C8970 /* SDL.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SDL.xcodeproj; path = "../../3rd/SDL/Xcode-iOS/SDL/SDL.xcodeproj"; sourceTree = "<group>"; };
 		C622BE641E474B5E000C8970 /* audio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = audio.c; path = ../../../audio.c; sourceTree = "<group>"; };
 		C622BE651E474B5E000C8970 /* audio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio.h; path = ../../../audio.h; sourceTree = "<group>"; };
@@ -357,7 +365,13 @@
 		C635057B1EA6578700186049 /* native_midi_common.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = native_midi_common.c; sourceTree = "<group>"; };
 		C635057C1EA6578700186049 /* native_midi_common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = native_midi_common.h; sourceTree = "<group>"; };
 		C635057D1EA6578700186049 /* native_midi.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = native_midi.m; path = ../iOS/SDLPal/SDLPal/native_midi.m; sourceTree = "<group>"; };
+		C66C6CA21ECCB73100CE10C1 /* SDLPal_AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLPal_AppDelegate.h; sourceTree = "<group>"; };
+		C66C6CA31ECCB73100CE10C1 /* SDLPal_AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLPal_AppDelegate.m; sourceTree = "<group>"; };
+		C6743A831ECCAFA700AEF782 /* SettingsTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SettingsTableViewController.m; sourceTree = "<group>"; };
+		C6743A851ECCAFC600AEF782 /* SettingsTableViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SettingsTableViewController.h; sourceTree = "<group>"; };
 		C694CF861EB619660006F937 /* gs_instruments.dls */ = {isa = PBXFileReference; lastKnownFileType = file; name = gs_instruments.dls; path = /System/Library/Components/CoreAudio.component/Contents/Resources/gs_instruments.dls; sourceTree = "<group>"; };
+		E8A03C34C8311310F5BFC81E /* Pods-SDLPal.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SDLPal.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SDLPal/Pods-SDLPal.debug.xcconfig"; sourceTree = "<group>"; };
+		F7379C304509DA5D22123C42 /* Pods-SDLPal.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SDLPal.release.xcconfig"; path = "Pods/Target Support Files/Pods-SDLPal/Pods-SDLPal.release.xcconfig"; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -376,12 +390,22 @@
 				71655061195BB372006E1227 /* UIKit.framework in Frameworks */,
 				71655063195BB372006E1227 /* Foundation.framework in Frameworks */,
 				71655065195BB372006E1227 /* CoreGraphics.framework in Frameworks */,
+				F9BC4A0C6F1B983EB45414F3 /* libPods-SDLPal.a in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 /* End PBXFrameworksBuildPhase section */
 
 /* Begin PBXGroup section */
+		0BAAECF7C4C397CAC97402E4 /* Pods */ = {
+			isa = PBXGroup;
+			children = (
+				E8A03C34C8311310F5BFC81E /* Pods-SDLPal.debug.xcconfig */,
+				F7379C304509DA5D22123C42 /* Pods-SDLPal.release.xcconfig */,
+			);
+			name = Pods;
+			sourceTree = "<group>";
+		};
 		57FB00F01B7A50B0005FCF4C /* liboggvorbis */ = {
 			isa = PBXGroup;
 			children = (
@@ -546,6 +570,7 @@
 				71655067195BB372006E1227 /* Supporting Files */,
 				7165505F195BB372006E1227 /* Frameworks */,
 				7165505E195BB372006E1227 /* Products */,
+				0BAAECF7C4C397CAC97402E4 /* Pods */,
 			);
 			sourceTree = "<group>";
 		};
@@ -571,6 +596,7 @@
 				71655060195BB372006E1227 /* UIKit.framework */,
 				71655062195BB372006E1227 /* Foundation.framework */,
 				71655064195BB372006E1227 /* CoreGraphics.framework */,
+				2765B76B4AC93B4F654F1289 /* libPods-SDLPal.a */,
 			);
 			name = Frameworks;
 			sourceTree = "<group>";
@@ -622,12 +648,18 @@
 		71655067195BB372006E1227 /* Supporting Files */ = {
 			isa = PBXGroup;
 			children = (
+				C626FFBF1E5BCBE700E39DD9 /* pal_config.h */,
+				C66C6CA21ECCB73100CE10C1 /* SDLPal_AppDelegate.h */,
+				C66C6CA31ECCB73100CE10C1 /* SDLPal_AppDelegate.m */,
 				71AA357F1A0BCA4E00793FFF /* util.mm */,
 				7165507D195BB3D8006E1227 /* Icon.png */,
 				71655068195BB372006E1227 /* SDLPal-Info.plist */,
 				71655072195BB372006E1227 /* Default.png */,
 				71655074195BB372006E1227 /* Default@2x.png */,
 				71655076195BB372006E1227 /* Default-568h@2x.png */,
+				C604417A1ED9AF3C006C7A7C /* Settings.storyboard */,
+				C6743A851ECCAFC600AEF782 /* SettingsTableViewController.h */,
+				C6743A831ECCAFA700AEF782 /* SettingsTableViewController.m */,
 			);
 			name = "Supporting Files";
 			path = SDLPal;
@@ -708,7 +740,6 @@
 			isa = PBXGroup;
 			children = (
 				71DCB6951ED9CBB000F120DB /* aviplay.h */,
-				C626FFBF1E5BCBE700E39DD9 /* pal_config.h */,
 				C635056A1EA6570300186049 /* midi.h */,
 				57FB015A1B7A50E0005FCF4C /* codepage.h */,
 				57FB015B1B7A50E0005FCF4C /* fontglyph.h */,
@@ -775,10 +806,13 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = 7165507A195BB372006E1227 /* Build configuration list for PBXNativeTarget "SDLPal" */;
 			buildPhases = (
+				110EC7BBCFA53B90C23ED695 /* [CP] Check Pods Manifest.lock */,
 				C60CBDEB1ED1AD9500B5D156 /* ShellScript */,
 				71655059195BB372006E1227 /* Sources */,
 				7165505A195BB372006E1227 /* Frameworks */,
 				7165505B195BB372006E1227 /* Resources */,
+				0E25B343B96701D736CC551B /* [CP] Embed Pods Frameworks */,
+				F6629F352CD0A33AD0B0EF80 /* [CP] Copy Pods Resources */,
 			);
 			buildRules = (
 			);
@@ -812,6 +846,9 @@
 			hasScannedForEncodings = 0;
 			knownRegions = (
 				en,
+				Base,
+				"zh-Hant",
+				"zh-Hans",
 			);
 			mainGroup = 71655054195BB372006E1227;
 			productRefGroup = 7165505E195BB372006E1227 /* Products */;
@@ -854,6 +891,7 @@
 				71655073195BB372006E1227 /* Default.png in Resources */,
 				71655075195BB372006E1227 /* Default@2x.png in Resources */,
 				71655077195BB372006E1227 /* Default-568h@2x.png in Resources */,
+				C60441781ED9AF3C006C7A7C /* Settings.storyboard in Resources */,
 				7165507F195BB3D8006E1227 /* Icon.png in Resources */,
 				C694CF871EB6197C0006F937 /* gs_instruments.dls in Resources */,
 			);
@@ -862,6 +900,36 @@
 /* End PBXResourcesBuildPhase section */
 
 /* Begin PBXShellScriptBuildPhase section */
+		0E25B343B96701D736CC551B /* [CP] Embed Pods Frameworks */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+			);
+			name = "[CP] Embed Pods Frameworks";
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-SDLPal/Pods-SDLPal-frameworks.sh\"\n";
+			showEnvVarsInLog = 0;
+		};
+		110EC7BBCFA53B90C23ED695 /* [CP] Check Pods Manifest.lock */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+			);
+			name = "[CP] Check Pods Manifest.lock";
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n    # print error to STDERR\n    echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n    exit 1\nfi\n";
+			showEnvVarsInLog = 0;
+		};
 		C60CBDEB1ED1AD9500B5D156 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 2147483647;
@@ -872,8 +940,23 @@
 			outputPaths = (
 			);
 			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = "/bin/sh -x";
+			shellScript = "exec ../../scripts/gengitrev\nsed -i '' 's/int main/int nomain/g' ../../3rd/SDL/src/video/uikit/SDL_uikitappdelegate.m";
+		};
+		F6629F352CD0A33AD0B0EF80 /* [CP] Copy Pods Resources */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+			);
+			name = "[CP] Copy Pods Resources";
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
-			shellScript = "exec ../../scripts/gengitrev";
+			shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-SDLPal/Pods-SDLPal-resources.sh\"\n";
+			showEnvVarsInLog = 0;
 		};
 /* End PBXShellScriptBuildPhase section */
 
@@ -883,6 +966,7 @@
 			buildActionMask = 2147483647;
 			files = (
 				C622BE771E474DF5000C8970 /* util.c in Sources */,
+				C66C6CA41ECCB73100CE10C1 /* SDLPal_AppDelegate.m in Sources */,
 				57FB00EF1B7A4FEA005FCF4C /* demuopl.cpp in Sources */,
 				57FB00ED1B7A4FEA005FCF4C /* dbemuopl.cpp in Sources */,
 				57FB01591B7A50B0005FCF4C /* window.c in Sources */,
@@ -896,6 +980,7 @@
 				57FB01511B7A50B0005FCF4C /* psy.c in Sources */,
 				57FB01551B7A50B0005FCF4C /* smallft.c in Sources */,
 				57FB014B1B7A50B0005FCF4C /* info.c in Sources */,
+				C6743A841ECCAFA700AEF782 /* SettingsTableViewController.m in Sources */,
 				57FB01421B7A50B0005FCF4C /* analysis.c in Sources */,
 				57FB014F1B7A50B0005FCF4C /* mapping0.c in Sources */,
 				57FB01531B7A50B0005FCF4C /* res0.c in Sources */,
@@ -981,11 +1066,25 @@
 		};
 /* End PBXTargetDependency section */
 
+/* Begin PBXVariantGroup section */
+		C604417A1ED9AF3C006C7A7C /* Settings.storyboard */ = {
+			isa = PBXVariantGroup;
+			children = (
+				C604417B1ED9B500006C7A7C /* Base */,
+				C604417D1ED9B521006C7A7C /* zh-Hant */,
+				C604417E1ED9B60C006C7A7C /* zh-Hans */,
+			);
+			name = Settings.storyboard;
+			sourceTree = "<group>";
+		};
+/* End PBXVariantGroup section */
+
 /* Begin XCBuildConfiguration section */
 		71655078195BB372006E1227 /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
 				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
 				CLANG_CXX_LIBRARY = "libc++";
 				CLANG_ENABLE_OBJC_ARC = NO;
@@ -1018,6 +1117,7 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
 				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
 				CLANG_CXX_LIBRARY = "libc++";
 				CLANG_ENABLE_OBJC_ARC = NO;
@@ -1043,57 +1143,81 @@
 		};
 		7165507B195BB372006E1227 /* Debug */ = {
 			isa = XCBuildConfiguration;
+			baseConfigurationReference = E8A03C34C8311310F5BFC81E /* Pods-SDLPal.debug.xcconfig */;
 			buildSettings = {
-				CODE_SIGN_IDENTITY = "iPhone Developer";
+				CLANG_ENABLE_OBJC_ARC = YES;
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
 				DEVELOPMENT_TEAM = "";
 				GCC_PRECOMPILE_PREFIX_HEADER = NO;
 				GCC_PREFIX_HEADER = "";
 				GCC_PREPROCESSOR_DEFINITIONS = (
+					"$(inherited)",
 					"__IOS__=1",
 					"DEBUG=1",
-					"MAC_OS_X_VERSION_MIN_REQUIRED=1060",
+					PAL_HAS_GIT_REVISION,
 				);
 				HEADER_SEARCH_PATHS = (
+					"$(inherited)",
 					../../3rd/SDL/include,
 					../../,
 					../../liboggvorbis/include,
 					../../liboggvorbis/src,
 				);
 				INFOPLIST_FILE = "SDLPal/SDLPal-Info.plist";
-				IPHONEOS_DEPLOYMENT_TARGET = 7.0;
+				INIT_ROUTINE = "";
+				OTHER_LDFLAGS = (
+					"$(inherited)",
+					"-ObjC",
+					"-l\"ActionSheetPicker-3.0\"",
+					"-framework",
+					"\"UIKit\"",
+				);
 				PRODUCT_BUNDLE_IDENTIFIER = io.github.sdlpal;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				PROVISIONING_PROFILE_SPECIFIER = "";
 				TARGETED_DEVICE_FAMILY = "1,2";
+				WARNING_CFLAGS = "";
+				WARNING_LDFLAGS = "";
 				WRAPPER_EXTENSION = app;
 			};
 			name = Debug;
 		};
 		7165507C195BB372006E1227 /* Release */ = {
 			isa = XCBuildConfiguration;
+			baseConfigurationReference = F7379C304509DA5D22123C42 /* Pods-SDLPal.release.xcconfig */;
 			buildSettings = {
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
+				CLANG_ENABLE_OBJC_ARC = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
 				DEVELOPMENT_TEAM = "";
 				GCC_PRECOMPILE_PREFIX_HEADER = NO;
 				GCC_PREFIX_HEADER = "";
 				GCC_PREPROCESSOR_DEFINITIONS = (
+					"$(inherited)",
 					"__IOS__=1",
-					"MAC_OS_X_VERSION_MIN_REQUIRED=1060",
+					PAL_HAS_GIT_REVISION,
 				);
 				HEADER_SEARCH_PATHS = (
+					"$(inherited)",
 					../../3rd/SDL/include,
 					../../,
 					../../liboggvorbis/include,
 					../../liboggvorbis/src,
 				);
 				INFOPLIST_FILE = "SDLPal/SDLPal-Info.plist";
-				IPHONEOS_DEPLOYMENT_TARGET = 7.0;
+				INIT_ROUTINE = "";
+				OTHER_LDFLAGS = (
+					"$(inherited)",
+					"-ObjC",
+					"-l\"ActionSheetPicker-3.0\"",
+					"-framework",
+					"\"UIKit\"",
+				);
 				PRODUCT_BUNDLE_IDENTIFIER = io.github.sdlpal;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				PROVISIONING_PROFILE_SPECIFIER = "";
 				TARGETED_DEVICE_FAMILY = "1,2";
+				WARNING_CFLAGS = "";
+				WARNING_LDFLAGS = "";
 				WRAPPER_EXTENSION = app;
 			};
 			name = Release;

+ 91 - 0
ios/SDLPal/SDLPal.xcodeproj/xcshareddata/xcschemes/SDLPal.xcscheme

@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "0830"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "7165505C195BB372006E1227"
+               BuildableName = "SDLPal.app"
+               BlueprintName = "SDLPal"
+               ReferencedContainer = "container:SDLPal.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "7165505C195BB372006E1227"
+            BuildableName = "SDLPal.app"
+            BlueprintName = "SDLPal"
+            ReferencedContainer = "container:SDLPal.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "7165505C195BB372006E1227"
+            BuildableName = "SDLPal.app"
+            BlueprintName = "SDLPal"
+            ReferencedContainer = "container:SDLPal.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "7165505C195BB372006E1227"
+            BuildableName = "SDLPal.app"
+            BlueprintName = "SDLPal"
+            ReferencedContainer = "container:SDLPal.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 10 - 0
ios/SDLPal/SDLPal.xcworkspace/contents.xcworkspacedata

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "group:SDLPal.xcodeproj">
+   </FileRef>
+   <FileRef
+      location = "group:Pods/Pods.xcodeproj">
+   </FileRef>
+</Workspace>

+ 605 - 0
ios/SDLPal/SDLPal/Base.lproj/Settings.storyboard

@@ -0,0 +1,605 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12120" systemVersion="16F73" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="ka3-r9-J8N">
+    <device id="retina5_5" orientation="portrait">
+        <adaptation id="fullscreen"/>
+    </device>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12088"/>
+        <capability name="Constraints to layout margins" minToolsVersion="6.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <scenes>
+        <!--Navigation Controller-->
+        <scene sceneID="s6S-qZ-ybS">
+            <objects>
+                <navigationController id="ka3-r9-J8N" sceneMemberID="viewController">
+                    <navigationBar key="navigationBar" contentMode="scaleToFill" id="GmC-a9-yEc">
+                        <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
+                        <autoresizingMask key="autoresizingMask"/>
+                    </navigationBar>
+                    <connections>
+                        <segue destination="OQe-Lc-9ZH" kind="relationship" relationship="rootViewController" id="oyb-uS-Dfx"/>
+                    </connections>
+                </navigationController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="gLw-Xr-x3w" userLabel="First Responder" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="-1030" y="18"/>
+        </scene>
+        <!--Settings Table View Controller-->
+        <scene sceneID="msp-BQ-kl5">
+            <objects>
+                <tableViewController id="OQe-Lc-9ZH" customClass="SettingsTableViewController" sceneMemberID="viewController">
+                    <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" id="Fjq-Fi-Zzn">
+                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
+                        <sections>
+                            <tableViewSection headerTitle="General" id="Ct9-Es-qVF">
+                                <cells>
+                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" id="Uok-QG-PGD">
+                                        <rect key="frame" x="0.0" y="55.333333333333336" width="375" height="44"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="Uok-QG-PGD" id="xuB-Rb-6ld">
+                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <subviews>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="Game Resource" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VQP-NM-z3r">
+                                                    <rect key="frame" x="8" y="12" width="157" height="21"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="iTunes File Sharing" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="aNN-DF-3OJ">
+                                                    <rect key="frame" x="173" y="11" width="194" height="21"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="15"/>
+                                                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstAttribute="leadingMargin" secondItem="VQP-NM-z3r" secondAttribute="leading" id="IBK-Mb-nfW"/>
+                                                <constraint firstItem="aNN-DF-3OJ" firstAttribute="centerY" secondItem="xuB-Rb-6ld" secondAttribute="centerY" id="YRc-dr-Deb"/>
+                                                <constraint firstItem="VQP-NM-z3r" firstAttribute="centerY" secondItem="xuB-Rb-6ld" secondAttribute="centerY" id="gZE-0Y-daF"/>
+                                                <constraint firstAttribute="trailingMargin" secondItem="aNN-DF-3OJ" secondAttribute="trailing" id="jpO-tp-l7E"/>
+                                            </constraints>
+                                        </tableViewCellContentView>
+                                    </tableViewCell>
+                                </cells>
+                            </tableViewSection>
+                            <tableViewSection headerTitle="Localization" id="5ym-4D-dzP">
+                                <cells>
+                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="lDb-7T-RVK">
+                                        <rect key="frame" x="0.0" y="155.33333333333334" width="375" height="44"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="lDb-7T-RVK" id="Ukc-wN-81f">
+                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <subviews>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="Translation File" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="vvj-5L-w4s">
+                                                    <rect key="frame" x="8" y="12" width="157" height="21"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QIh-wC-BnL">
+                                                    <rect key="frame" x="173" y="11" width="194" height="21"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="15"/>
+                                                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstAttribute="trailingMargin" secondItem="QIh-wC-BnL" secondAttribute="trailing" id="Llp-rj-AKG"/>
+                                                <constraint firstItem="QIh-wC-BnL" firstAttribute="centerY" secondItem="Ukc-wN-81f" secondAttribute="centerY" id="c2H-YO-NYf"/>
+                                                <constraint firstItem="vvj-5L-w4s" firstAttribute="centerY" secondItem="Ukc-wN-81f" secondAttribute="centerY" id="fPs-Ap-X3q"/>
+                                                <constraint firstAttribute="leadingMargin" secondItem="vvj-5L-w4s" secondAttribute="leading" id="kas-0J-ykr"/>
+                                            </constraints>
+                                        </tableViewCellContentView>
+                                    </tableViewCell>
+                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="UzA-C4-jRW">
+                                        <rect key="frame" x="0.0" y="199.33333333333334" width="375" height="44"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="UzA-C4-jRW" id="x0B-20-KSl">
+                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <subviews>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="Font File" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="FLw-EA-IAl">
+                                                    <rect key="frame" x="8" y="12" width="157" height="21"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="EsV-LN-DsQ">
+                                                    <rect key="frame" x="173" y="11" width="194" height="21"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="15"/>
+                                                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstItem="FLw-EA-IAl" firstAttribute="centerY" secondItem="x0B-20-KSl" secondAttribute="centerY" id="Lic-3B-NGQ"/>
+                                                <constraint firstItem="EsV-LN-DsQ" firstAttribute="centerY" secondItem="x0B-20-KSl" secondAttribute="centerY" id="UK8-Kv-O0W"/>
+                                                <constraint firstAttribute="trailingMargin" secondItem="EsV-LN-DsQ" secondAttribute="trailing" id="dDf-hb-iBs"/>
+                                                <constraint firstAttribute="leadingMargin" secondItem="FLw-EA-IAl" secondAttribute="leading" id="n2I-rq-vHQ"/>
+                                            </constraints>
+                                        </tableViewCellContentView>
+                                    </tableViewCell>
+                                </cells>
+                            </tableViewSection>
+                            <tableViewSection headerTitle="Display" id="KKa-Sg-wye">
+                                <cells>
+                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" id="9a0-he-ORh">
+                                        <rect key="frame" x="0.0" y="299.33333333333337" width="375" height="44"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="9a0-he-ORh" id="mLs-ur-1MO">
+                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <subviews>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="Touch Overlay" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="F74-lN-NuX">
+                                                    <rect key="frame" x="8" y="12" width="157" height="21"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ko1-dc-Oae">
+                                                    <rect key="frame" x="318" y="7" width="51" height="31"/>
+                                                </switch>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstItem="F74-lN-NuX" firstAttribute="centerY" secondItem="mLs-ur-1MO" secondAttribute="centerY" id="5cp-cg-DAV"/>
+                                                <constraint firstAttribute="trailingMargin" secondItem="ko1-dc-Oae" secondAttribute="trailing" id="bLG-ed-pNC"/>
+                                                <constraint firstItem="ko1-dc-Oae" firstAttribute="centerY" secondItem="F74-lN-NuX" secondAttribute="centerY" id="lYj-ND-DaG"/>
+                                                <constraint firstAttribute="leadingMargin" secondItem="F74-lN-NuX" secondAttribute="leading" id="nU8-lC-EsN"/>
+                                            </constraints>
+                                        </tableViewCellContentView>
+                                    </tableViewCell>
+                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" id="c9y-1x-kS3">
+                                        <rect key="frame" x="0.0" y="343.33333333333337" width="375" height="44"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="c9y-1x-kS3" id="Gql-xC-gly">
+                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <subviews>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="Keep Aspect" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1Ej-ro-rVM">
+                                                    <rect key="frame" x="8" y="12" width="157" height="21"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="19s-4h-jrW">
+                                                    <rect key="frame" x="318" y="7" width="51" height="31"/>
+                                                </switch>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstAttribute="leadingMargin" secondItem="1Ej-ro-rVM" secondAttribute="leading" id="GMt-VQ-GCQ"/>
+                                                <constraint firstAttribute="trailingMargin" secondItem="19s-4h-jrW" secondAttribute="trailing" id="c1U-jp-wkC"/>
+                                                <constraint firstItem="1Ej-ro-rVM" firstAttribute="centerY" secondItem="Gql-xC-gly" secondAttribute="centerY" id="dQ3-tv-oO5"/>
+                                                <constraint firstItem="19s-4h-jrW" firstAttribute="centerY" secondItem="1Ej-ro-rVM" secondAttribute="centerY" id="fxr-bn-n0C"/>
+                                            </constraints>
+                                        </tableViewCellContentView>
+                                    </tableViewCell>
+                                </cells>
+                            </tableViewSection>
+                            <tableViewSection headerTitle="Audio" id="kPc-Yq-LOh">
+                                <cells>
+                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="3SU-Gc-7wH">
+                                        <rect key="frame" x="0.0" y="443.33333333333337" width="375" height="44"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="3SU-Gc-7wH" id="76m-CM-YAY">
+                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <subviews>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="BGM" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="H6w-EN-xQ6">
+                                                    <rect key="frame" x="8" y="12" width="157" height="21"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="81c-xL-Y5O">
+                                                    <rect key="frame" x="173" y="11" width="194" height="21"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="15"/>
+                                                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstAttribute="leadingMargin" secondItem="H6w-EN-xQ6" secondAttribute="leading" id="4Aw-fk-Km5"/>
+                                                <constraint firstItem="H6w-EN-xQ6" firstAttribute="centerY" secondItem="76m-CM-YAY" secondAttribute="centerY" id="GAM-cg-btU"/>
+                                                <constraint firstAttribute="trailingMargin" secondItem="81c-xL-Y5O" secondAttribute="trailing" id="hGg-bW-LFk"/>
+                                                <constraint firstItem="81c-xL-Y5O" firstAttribute="centerY" secondItem="76m-CM-YAY" secondAttribute="centerY" id="lbu-Uo-FvF"/>
+                                            </constraints>
+                                        </tableViewCellContentView>
+                                    </tableViewCell>
+                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="Wcd-0e-0uz">
+                                        <rect key="frame" x="0.0" y="487.33333333333337" width="375" height="44"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="Wcd-0e-0uz" id="7gg-Gn-Rbv">
+                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <subviews>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="OPL Synthesizer" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="lpD-tV-FRw">
+                                                    <rect key="frame" x="8" y="12" width="157" height="21"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="v8B-g4-Bkc">
+                                                    <rect key="frame" x="173" y="11" width="194" height="21"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="15"/>
+                                                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstAttribute="trailingMargin" secondItem="v8B-g4-Bkc" secondAttribute="trailing" id="56g-RS-d4z"/>
+                                                <constraint firstItem="v8B-g4-Bkc" firstAttribute="centerY" secondItem="7gg-Gn-Rbv" secondAttribute="centerY" id="C2p-G0-Z8c"/>
+                                                <constraint firstItem="lpD-tV-FRw" firstAttribute="centerY" secondItem="7gg-Gn-Rbv" secondAttribute="centerY" id="GZJ-y3-EQN"/>
+                                                <constraint firstAttribute="leadingMargin" secondItem="lpD-tV-FRw" secondAttribute="leading" id="xNW-ce-MEk"/>
+                                            </constraints>
+                                        </tableViewCellContentView>
+                                    </tableViewCell>
+                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="5P5-9D-K9z">
+                                        <rect key="frame" x="0.0" y="531.33333333333337" width="375" height="44"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="5P5-9D-K9z" id="xWo-4q-ewi">
+                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <subviews>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="OPL Sample Rate" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="LM0-rh-yuy">
+                                                    <rect key="frame" x="8" y="12" width="157" height="21"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="33S-Ni-0yw">
+                                                    <rect key="frame" x="173" y="11" width="194" height="21"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="15"/>
+                                                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstAttribute="leadingMargin" secondItem="LM0-rh-yuy" secondAttribute="leading" id="2Ay-FN-XlR"/>
+                                                <constraint firstItem="33S-Ni-0yw" firstAttribute="centerY" secondItem="xWo-4q-ewi" secondAttribute="centerY" id="AZn-Ke-guf"/>
+                                                <constraint firstAttribute="trailingMargin" secondItem="33S-Ni-0yw" secondAttribute="trailing" id="HVs-RW-jTx"/>
+                                                <constraint firstItem="LM0-rh-yuy" firstAttribute="centerY" secondItem="xWo-4q-ewi" secondAttribute="centerY" id="Ndr-kX-qCu"/>
+                                            </constraints>
+                                        </tableViewCellContentView>
+                                    </tableViewCell>
+                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="3qo-FD-4nl">
+                                        <rect key="frame" x="0.0" y="575.33333333333337" width="375" height="44"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="3qo-FD-4nl" id="A3N-bu-7U7">
+                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <subviews>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="CD Source" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="t2Y-EX-5pB">
+                                                    <rect key="frame" x="8" y="12" width="157" height="21"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="RXF-wq-i6h">
+                                                    <rect key="frame" x="173" y="11" width="194" height="21"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="15"/>
+                                                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstAttribute="leadingMargin" secondItem="t2Y-EX-5pB" secondAttribute="leading" id="ALb-Xw-JzH"/>
+                                                <constraint firstAttribute="trailingMargin" secondItem="RXF-wq-i6h" secondAttribute="trailing" id="ROS-cO-0fx"/>
+                                                <constraint firstItem="RXF-wq-i6h" firstAttribute="centerY" secondItem="A3N-bu-7U7" secondAttribute="centerY" id="Sp5-ui-pXW"/>
+                                                <constraint firstItem="t2Y-EX-5pB" firstAttribute="centerY" secondItem="A3N-bu-7U7" secondAttribute="centerY" id="p1G-ey-jCW"/>
+                                            </constraints>
+                                        </tableViewCellContentView>
+                                    </tableViewCell>
+                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" id="6yy-RI-FfR">
+                                        <rect key="frame" x="0.0" y="619.33333333333337" width="375" height="44"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="6yy-RI-FfR" id="H5X-fx-gXk">
+                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <subviews>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="Stereo" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="sIK-1p-lB9">
+                                                    <rect key="frame" x="8" y="12" width="157" height="21"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="DGe-CJ-C30">
+                                                    <rect key="frame" x="318" y="7" width="51" height="31"/>
+                                                </switch>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstItem="DGe-CJ-C30" firstAttribute="centerY" secondItem="sIK-1p-lB9" secondAttribute="centerY" id="Vpf-LU-GRc"/>
+                                                <constraint firstItem="sIK-1p-lB9" firstAttribute="centerY" secondItem="H5X-fx-gXk" secondAttribute="centerY" id="a9Q-NH-ck2"/>
+                                                <constraint firstAttribute="trailingMargin" secondItem="DGe-CJ-C30" secondAttribute="trailing" id="aG5-Js-o9z"/>
+                                                <constraint firstAttribute="leadingMargin" secondItem="sIK-1p-lB9" secondAttribute="leading" id="pdx-Zy-7nm"/>
+                                            </constraints>
+                                        </tableViewCellContentView>
+                                    </tableViewCell>
+                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" id="WrT-Dr-FrF">
+                                        <rect key="frame" x="0.0" y="663.33333333333337" width="375" height="44"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="WrT-Dr-FrF" id="2Az-da-XqZ">
+                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <subviews>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="SurroundOPL" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7y3-G9-hca">
+                                                    <rect key="frame" x="8" y="12" width="157" height="21"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="YBD-8I-fzH">
+                                                    <rect key="frame" x="318" y="7" width="51" height="31"/>
+                                                </switch>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstAttribute="leadingMargin" secondItem="7y3-G9-hca" secondAttribute="leading" id="0dq-NQ-hcf"/>
+                                                <constraint firstItem="7y3-G9-hca" firstAttribute="centerY" secondItem="2Az-da-XqZ" secondAttribute="centerY" id="kaI-ps-oTV"/>
+                                                <constraint firstItem="YBD-8I-fzH" firstAttribute="centerY" secondItem="7y3-G9-hca" secondAttribute="centerY" id="knd-b3-hWT"/>
+                                                <constraint firstAttribute="trailingMargin" secondItem="YBD-8I-fzH" secondAttribute="trailing" id="oJO-Fm-Bfn"/>
+                                            </constraints>
+                                        </tableViewCellContentView>
+                                    </tableViewCell>
+                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="nhG-Zy-1Uw">
+                                        <rect key="frame" x="0.0" y="707.33333333333337" width="375" height="44"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="nhG-Zy-1Uw" id="Urf-ql-u6V">
+                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <subviews>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="Output SampleRate" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hQp-nd-FWB">
+                                                    <rect key="frame" x="8" y="12" width="157" height="21"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="wWh-kt-jZN">
+                                                    <rect key="frame" x="173" y="11" width="194" height="21"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="15"/>
+                                                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstItem="wWh-kt-jZN" firstAttribute="centerY" secondItem="Urf-ql-u6V" secondAttribute="centerY" id="9SE-Fz-mjR"/>
+                                                <constraint firstAttribute="trailingMargin" secondItem="wWh-kt-jZN" secondAttribute="trailing" id="EtX-Gz-i6w"/>
+                                                <constraint firstAttribute="leadingMargin" secondItem="hQp-nd-FWB" secondAttribute="leading" id="dKw-R0-R4j"/>
+                                                <constraint firstItem="hQp-nd-FWB" firstAttribute="centerY" secondItem="Urf-ql-u6V" secondAttribute="centerY" id="kH4-bd-Ijk"/>
+                                            </constraints>
+                                        </tableViewCellContentView>
+                                    </tableViewCell>
+                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="2aX-ku-Pap">
+                                        <rect key="frame" x="0.0" y="751.33333333333337" width="375" height="44"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="2aX-ku-Pap" id="9ea-vH-MC4">
+                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <subviews>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="Audio Buffer Size" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="azm-6Q-Twc">
+                                                    <rect key="frame" x="8" y="12" width="157" height="21"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="gIJ-cp-Pvp">
+                                                    <rect key="frame" x="173" y="11" width="194" height="21"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="15"/>
+                                                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstAttribute="leadingMargin" secondItem="azm-6Q-Twc" secondAttribute="leading" id="3qn-Sz-i3d"/>
+                                                <constraint firstItem="gIJ-cp-Pvp" firstAttribute="centerY" secondItem="9ea-vH-MC4" secondAttribute="centerY" id="Fd1-v7-rnN"/>
+                                                <constraint firstItem="azm-6Q-Twc" firstAttribute="centerY" secondItem="9ea-vH-MC4" secondAttribute="centerY" id="UU8-G7-17x"/>
+                                                <constraint firstAttribute="trailingMargin" secondItem="gIJ-cp-Pvp" secondAttribute="trailing" id="yZy-WV-m4C"/>
+                                            </constraints>
+                                        </tableViewCellContentView>
+                                    </tableViewCell>
+                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" id="H6k-zH-SLQ">
+                                        <rect key="frame" x="0.0" y="795.33333333333337" width="375" height="44"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="H6k-zH-SLQ" id="3vu-2x-gU2">
+                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <subviews>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="SSRC Quality" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="oQa-bR-CM1">
+                                                    <rect key="frame" x="8" y="12" width="157" height="21"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <slider opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="4" minValue="0.0" maxValue="4" translatesAutoresizingMaskIntoConstraints="NO" id="M1b-8i-ldA">
+                                                    <rect key="frame" x="171" y="7" width="198" height="31"/>
+                                                    <constraints>
+                                                        <constraint firstAttribute="width" constant="194" id="iYs-hM-l2x"/>
+                                                    </constraints>
+                                                </slider>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstItem="oQa-bR-CM1" firstAttribute="centerY" secondItem="3vu-2x-gU2" secondAttribute="centerY" id="BUE-Ev-XQ2"/>
+                                                <constraint firstAttribute="leadingMargin" secondItem="oQa-bR-CM1" secondAttribute="leading" id="CLY-nE-6fl"/>
+                                                <constraint firstItem="M1b-8i-ldA" firstAttribute="centerY" secondItem="oQa-bR-CM1" secondAttribute="centerY" id="Zrq-qm-0qW"/>
+                                                <constraint firstAttribute="trailingMargin" secondItem="M1b-8i-ldA" secondAttribute="trailing" id="ueZ-xM-RHS"/>
+                                            </constraints>
+                                        </tableViewCellContentView>
+                                    </tableViewCell>
+                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" id="m0b-oW-cFG">
+                                        <rect key="frame" x="0.0" y="839.33333333333337" width="375" height="44"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="m0b-oW-cFG" id="C0a-eU-4ng">
+                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <subviews>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="Music Volume" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="csD-lo-BFX">
+                                                    <rect key="frame" x="8" y="12" width="157" height="21"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <slider opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="100" minValue="0.0" maxValue="100" translatesAutoresizingMaskIntoConstraints="NO" id="ts6-3l-05V">
+                                                    <rect key="frame" x="171" y="7.6666666666666661" width="198" height="31"/>
+                                                    <constraints>
+                                                        <constraint firstAttribute="width" constant="194" id="gDJ-hv-b8c"/>
+                                                    </constraints>
+                                                </slider>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstAttribute="trailingMargin" secondItem="ts6-3l-05V" secondAttribute="trailing" id="Huf-XL-BIr"/>
+                                                <constraint firstAttribute="leadingMargin" secondItem="csD-lo-BFX" secondAttribute="leading" id="L8D-ix-A4z"/>
+                                                <constraint firstItem="csD-lo-BFX" firstAttribute="centerY" secondItem="C0a-eU-4ng" secondAttribute="centerY" id="RMR-7J-Fun"/>
+                                                <constraint firstItem="ts6-3l-05V" firstAttribute="centerY" secondItem="csD-lo-BFX" secondAttribute="centerY" id="tnm-kz-ldY"/>
+                                            </constraints>
+                                        </tableViewCellContentView>
+                                    </tableViewCell>
+                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" id="V3l-ah-ZFI">
+                                        <rect key="frame" x="0.0" y="883.33333333333337" width="375" height="44"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="V3l-ah-ZFI" id="eVR-TT-9qV">
+                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <subviews>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="SFX Volume" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="L24-lU-K9K">
+                                                    <rect key="frame" x="8" y="12" width="157" height="21"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <slider opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="100" minValue="0.0" maxValue="100" translatesAutoresizingMaskIntoConstraints="NO" id="fyQ-sQ-eOv">
+                                                    <rect key="frame" x="171" y="7" width="198" height="31"/>
+                                                    <constraints>
+                                                        <constraint firstAttribute="width" constant="194" id="PpE-ei-G2V"/>
+                                                    </constraints>
+                                                </slider>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstAttribute="leadingMargin" secondItem="L24-lU-K9K" secondAttribute="leading" id="NSg-LT-5d0"/>
+                                                <constraint firstItem="L24-lU-K9K" firstAttribute="centerY" secondItem="eVR-TT-9qV" secondAttribute="centerY" id="epv-PA-Mkq"/>
+                                                <constraint firstItem="fyQ-sQ-eOv" firstAttribute="centerY" secondItem="L24-lU-K9K" secondAttribute="centerY" id="uMf-Mu-ECn"/>
+                                                <constraint firstAttribute="trailingMargin" secondItem="fyQ-sQ-eOv" secondAttribute="trailing" id="vW5-Eh-pLv"/>
+                                            </constraints>
+                                        </tableViewCellContentView>
+                                    </tableViewCell>
+                                </cells>
+                            </tableViewSection>
+                            <tableViewSection headerTitle="Logging" id="Lil-2E-Cmo">
+                                <cells>
+                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="tqd-QN-Zcq">
+                                        <rect key="frame" x="0.0" y="983.33333333333337" width="375" height="44"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="tqd-QN-Zcq" id="9Vs-yb-gfS">
+                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <subviews>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="Logging Level" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yup-CB-6Rc">
+                                                    <rect key="frame" x="8" y="12" width="157" height="21"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Ouz-1B-LUZ">
+                                                    <rect key="frame" x="173" y="11" width="194" height="21"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="15"/>
+                                                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstAttribute="leadingMargin" secondItem="yup-CB-6Rc" secondAttribute="leading" id="DqL-e0-pVe"/>
+                                                <constraint firstAttribute="trailingMargin" secondItem="Ouz-1B-LUZ" secondAttribute="trailing" id="QcJ-Qy-9M1"/>
+                                                <constraint firstItem="Ouz-1B-LUZ" firstAttribute="centerY" secondItem="9Vs-yb-gfS" secondAttribute="centerY" id="UV9-eP-yVv"/>
+                                                <constraint firstItem="yup-CB-6Rc" firstAttribute="centerY" secondItem="9Vs-yb-gfS" secondAttribute="centerY" id="XlH-16-9lv"/>
+                                            </constraints>
+                                        </tableViewCellContentView>
+                                    </tableViewCell>
+                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" id="GKK-ca-Bn8">
+                                        <rect key="frame" x="0.0" y="1027.3333333333335" width="375" height="44"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="GKK-ca-Bn8" id="eiA-H0-J1K">
+                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <subviews>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="Log File" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2J1-Pe-ygl">
+                                                    <rect key="frame" x="8" y="12" width="157" height="21"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" textAlignment="right" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="Lc9-WO-Nn2">
+                                                    <rect key="frame" x="173" y="7" width="194" height="30"/>
+                                                    <constraints>
+                                                        <constraint firstAttribute="width" constant="194" id="Zk4-2h-IlY"/>
+                                                    </constraints>
+                                                    <nil key="textColor"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                                    <textInputTraits key="textInputTraits"/>
+                                                </textField>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstAttribute="leadingMargin" secondItem="2J1-Pe-ygl" secondAttribute="leading" id="9lY-F1-TJe"/>
+                                                <constraint firstItem="2J1-Pe-ygl" firstAttribute="centerY" secondItem="eiA-H0-J1K" secondAttribute="centerY" id="Bcn-cj-aGJ"/>
+                                                <constraint firstAttribute="trailingMargin" secondItem="Lc9-WO-Nn2" secondAttribute="trailing" id="VOc-9x-JaS"/>
+                                                <constraint firstItem="Lc9-WO-Nn2" firstAttribute="centerY" secondItem="2J1-Pe-ygl" secondAttribute="centerY" id="rFc-me-YY9"/>
+                                            </constraints>
+                                        </tableViewCellContentView>
+                                    </tableViewCell>
+                                </cells>
+                            </tableViewSection>
+                        </sections>
+                        <connections>
+                            <outlet property="dataSource" destination="OQe-Lc-9ZH" id="gs6-P7-mHO"/>
+                            <outlet property="delegate" destination="OQe-Lc-9ZH" id="HLo-hO-LtC"/>
+                        </connections>
+                    </tableView>
+                    <navigationItem key="navigationItem" id="nMI-cq-FNo">
+                        <barButtonItem key="leftBarButtonItem" title="Discard" id="0TA-XO-i0Z">
+                            <connections>
+                                <action selector="btnDefaultClicked:" destination="OQe-Lc-9ZH" id="iCp-Ta-9kl"/>
+                            </connections>
+                        </barButtonItem>
+                        <barButtonItem key="rightBarButtonItem" title="Confirm" id="R0E-e5-3Mm">
+                            <connections>
+                                <action selector="btnConfirmClicked:" destination="OQe-Lc-9ZH" id="agF-md-dT3"/>
+                            </connections>
+                        </barButtonItem>
+                    </navigationItem>
+                    <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+                    <size key="freeformSize" width="375" height="667"/>
+                    <connections>
+                        <outlet property="lblAudioBufferSize" destination="gIJ-cp-Pvp" id="gMu-3d-fpY"/>
+                        <outlet property="lblCDAudioSource" destination="RXF-wq-i6h" id="51D-b6-xqa"/>
+                        <outlet property="lblFontFile" destination="EsV-LN-DsQ" id="JIk-yL-QhZ"/>
+                        <outlet property="lblLanguageFile" destination="QIh-wC-BnL" id="eIz-Tx-taH"/>
+                        <outlet property="lblLogLevel" destination="Ouz-1B-LUZ" id="gS0-Ad-tFt"/>
+                        <outlet property="lblMusicType" destination="81c-xL-Y5O" id="WQW-qe-zZg"/>
+                        <outlet property="lblOPLRate" destination="33S-Ni-0yw" id="tTq-DY-lFN"/>
+                        <outlet property="lblOPLType" destination="v8B-g4-Bkc" id="MCB-3r-OzR"/>
+                        <outlet property="lblResampleRate" destination="wWh-kt-jZN" id="Lpr-bi-1IG"/>
+                        <outlet property="lblResourceStatus" destination="aNN-DF-3OJ" id="xEz-c3-Pzj"/>
+                        <outlet property="sliderMusicVolume" destination="ts6-3l-05V" id="IBZ-ly-pfr"/>
+                        <outlet property="sliderResampleQuality" destination="M1b-8i-ldA" id="7ri-FK-FrG"/>
+                        <outlet property="sliderSFXVolume" destination="fyQ-sQ-eOv" id="nyn-Zk-ekH"/>
+                        <outlet property="textLogFile" destination="Lc9-WO-Nn2" id="VgO-or-fMN"/>
+                        <outlet property="toggleKeepAspect" destination="19s-4h-jrW" id="ccu-K4-vdC"/>
+                        <outlet property="toggleStereo" destination="DGe-CJ-C30" id="KVM-Cb-Dqk"/>
+                        <outlet property="toggleSurroundOPL" destination="YBD-8I-fzH" id="fbs-J6-e6Z"/>
+                        <outlet property="toggleTouchScreenOverlay" destination="ko1-dc-Oae" id="Z2D-hm-7Ax"/>
+                        <outlet property="transitionView" destination="Pwb-Li-avz" id="ZFM-WI-3U5"/>
+                    </connections>
+                </tableViewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="hs4-N9-FQA" userLabel="First Responder" sceneMemberID="firstResponder"/>
+                <view contentMode="scaleToFill" id="Pwb-Li-avz">
+                    <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                    <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                </view>
+            </objects>
+            <point key="canvasLocation" x="-160.1449275362319" y="17.52717391304348"/>
+        </scene>
+    </scenes>
+</document>

+ 9 - 2
ios/SDLPal/SDLPal/SDLPal-Info.plist

@@ -8,8 +8,6 @@
 	<string>${PRODUCT_NAME}</string>
 	<key>CFBundleExecutable</key>
 	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIconFile</key>
-	<string>Icon</string>
 	<key>CFBundleIdentifier</key>
 	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
 	<key>CFBundleInfoDictionaryVersion</key>
@@ -28,6 +26,8 @@
 	<false/>
 	<key>UIFileSharingEnabled</key>
 	<true/>
+	<key>UIRequiresFullScreen</key>
+	<true/>
 	<key>UIStatusBarHidden</key>
 	<true/>
 	<key>UIStatusBarStyle</key>
@@ -35,6 +35,13 @@
 	<key>UISupportedInterfaceOrientations</key>
 	<array>
 		<string>UIInterfaceOrientationLandscapeRight</string>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
+		<string>UIInterfaceOrientationPortrait</string>
+	</array>
+	<key>UISupportedInterfaceOrientations~ipad</key>
+	<array>
+		<string>UIInterfaceOrientationLandscapeRight</string>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
 	</array>
 </dict>
 </plist>

+ 36 - 0
ios/SDLPal/SDLPal/SDLPal_AppDelegate.h

@@ -0,0 +1,36 @@
+/*
+  Simple DirectMedia Layer
+  Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org>
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+*/
+
+#import <UIKit/UIKit.h>
+
+@interface SDLPalAppDelegate : NSObject<UIApplicationDelegate>
+
+@property (nullable, nonatomic, strong) UIWindow *window;
+
++ (id)sharedAppDelegate;
++ (NSString *)getAppDelegateClassName;
+
+- (void)hideLaunchScreen;
+- (void)launchGame;
+
+@end
+
+/* vi: set ts=4 sw=4 expandtab: */

+ 242 - 0
ios/SDLPal/SDLPal/SDLPal_AppDelegate.m

@@ -0,0 +1,242 @@
+/*
+  Simple DirectMedia Layer
+  Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org>
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+*/
+#include "../src/SDL_internal.h"
+
+#if SDL_VIDEO_DRIVER_UIKIT
+
+#include "../src/video/SDL_sysvideo.h"
+#include "SDL_assert.h"
+#include "SDL_hints.h"
+#include "SDL_system.h"
+#include "SDL_main.h"
+
+#import "SDLPal_AppDelegate.h"
+#import "../src/video/uikit/SDL_uikitmodes.h"
+#import "../src/video/uikit/SDL_uikitwindow.h"
+
+#include "../src/events/SDL_events_c.h"
+
+#ifdef main
+#undef main
+#endif
+
+#include "palcfg.h"
+
+static int forward_argc;
+static char **forward_argv;
+static int exit_status;
+
+int main(int argc, char **argv)
+{
+    int i;
+
+    /* store arguments */
+    forward_argc = argc;
+    forward_argv = (char **)malloc((argc+1) * sizeof(char *));
+    for (i = 0; i < argc; i++) {
+        forward_argv[i] = malloc( (strlen(argv[i])+1) * sizeof(char));
+        strcpy(forward_argv[i], argv[i]);
+    }
+    forward_argv[i] = NULL;
+
+    /* Give over control to run loop, SDLPalAppDelegate will handle most things from here */
+    @autoreleasepool {
+        UIApplicationMain(argc, argv, nil, [SDLPalAppDelegate getAppDelegateClassName]);
+    }
+
+    /* free the memory we used to hold copies of argc and argv */
+    for (i = 0; i < forward_argc; i++) {
+        free(forward_argv[i]);
+    }
+    free(forward_argv);
+
+    return exit_status;
+}
+
+@implementation SDLPalAppDelegate
+
+/* convenience method */
++ (id)sharedAppDelegate
+{
+    /* the delegate is set in UIApplicationMain(), which is guaranteed to be
+     * called before this method */
+    return [UIApplication sharedApplication].delegate;
+}
+
++ (NSString *)getAppDelegateClassName
+{
+    /* subclassing notice: when you subclass this appdelegate, make sure to add
+     * a category to override this method and return the actual name of the
+     * delegate */
+    return @"SDLPalAppDelegate";
+}
+
+- (void)postFinishLaunch
+{
+    /* run the user's application, passing argc and argv */
+    SDL_iPhoneSetEventPump(SDL_TRUE);
+    exit_status = SDL_main(forward_argc, forward_argv);
+    SDL_iPhoneSetEventPump(SDL_FALSE);
+
+    /* exit, passing the return status from the user's application */
+    /* We don't actually exit to support applications that do setup in their
+     * main function and then allow the Cocoa event loop to run. */
+    /* exit(exit_status); */
+    [self restart];
+}
+
+#undef SDL_IPHONE_LAUNCHSCREEN
+
+- (void)launchGame {
+    SDL_SetMainReady();
+    [self performSelector:@selector(postFinishLaunch) withObject:nil afterDelay:0.0];
+    [self.window setBackgroundColor:[UIColor blackColor]];
+}
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
+{
+    [self restart];
+    return YES;
+}
+- (void)restart {
+    PAL_LoadConfig(YES);
+    if( gConfig.fLaunchSetting ) {
+        self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
+        UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Settings" bundle:nil];
+        UIViewController *vc = [sb instantiateInitialViewController];
+        self.window.rootViewController = vc;
+        [self.window makeKeyAndVisible];
+    }else{
+        [self launchGame];
+    }
+}
+
+- (void)applicationWillTerminate:(UIApplication *)application
+{
+    SDL_SendAppEvent(SDL_APP_TERMINATING);
+}
+
+- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
+{
+    SDL_SendAppEvent(SDL_APP_LOWMEMORY);
+}
+
+#if !TARGET_OS_TV
+- (void)application:(UIApplication *)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation
+{
+    BOOL isLandscape = UIInterfaceOrientationIsLandscape(application.statusBarOrientation);
+    SDL_VideoDevice *_this = SDL_GetVideoDevice();
+
+    if (_this && _this->num_displays > 0) {
+        SDL_DisplayMode *desktopmode = &_this->displays[0].desktop_mode;
+        SDL_DisplayMode *currentmode = &_this->displays[0].current_mode;
+
+        /* The desktop display mode should be kept in sync with the screen
+         * orientation so that updating a window's fullscreen state to
+         * SDL_WINDOW_FULLSCREEN_DESKTOP keeps the window dimensions in the
+         * correct orientation. */
+        if (isLandscape != (desktopmode->w > desktopmode->h)) {
+            int height = desktopmode->w;
+            desktopmode->w = desktopmode->h;
+            desktopmode->h = height;
+        }
+
+        /* Same deal with the current mode + SDL_GetCurrentDisplayMode. */
+        if (isLandscape != (currentmode->w > currentmode->h)) {
+            int height = currentmode->w;
+            currentmode->w = currentmode->h;
+            currentmode->h = height;
+        }
+    }
+}
+#endif
+
+- (void)applicationWillResignActive:(UIApplication*)application
+{
+    SDL_VideoDevice *_this = SDL_GetVideoDevice();
+    if (_this) {
+        SDL_Window *window;
+        for (window = _this->windows; window != nil; window = window->next) {
+            SDL_SendWindowEvent(window, SDL_WINDOWEVENT_FOCUS_LOST, 0, 0);
+            SDL_SendWindowEvent(window, SDL_WINDOWEVENT_MINIMIZED, 0, 0);
+        }
+    }
+    SDL_SendAppEvent(SDL_APP_WILLENTERBACKGROUND);
+}
+
+- (void)applicationDidEnterBackground:(UIApplication*)application
+{
+    SDL_SendAppEvent(SDL_APP_DIDENTERBACKGROUND);
+}
+
+- (void)applicationWillEnterForeground:(UIApplication*)application
+{
+    SDL_SendAppEvent(SDL_APP_WILLENTERFOREGROUND);
+}
+
+- (void)applicationDidBecomeActive:(UIApplication*)application
+{
+    SDL_SendAppEvent(SDL_APP_DIDENTERFOREGROUND);
+
+    SDL_VideoDevice *_this = SDL_GetVideoDevice();
+    if (_this) {
+        SDL_Window *window;
+        for (window = _this->windows; window != nil; window = window->next) {
+            SDL_SendWindowEvent(window, SDL_WINDOWEVENT_FOCUS_GAINED, 0, 0);
+            SDL_SendWindowEvent(window, SDL_WINDOWEVENT_RESTORED, 0, 0);
+        }
+    }
+}
+
+- (void)sendDropFileForURL:(NSURL *)url
+{
+    NSURL *fileURL = url.filePathURL;
+    if (fileURL != nil) {
+        SDL_SendDropFile(NULL, fileURL.path.UTF8String);
+    } else {
+        SDL_SendDropFile(NULL, url.absoluteString.UTF8String);
+    }
+    SDL_SendDropComplete(NULL);
+}
+
+#if TARGET_OS_TV
+/* TODO: Use this on iOS 9+ as well? */
+- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
+{
+    /* TODO: Handle options */
+    [self sendDropFileForURL:url];
+    return YES;
+}
+#endif /* TARGET_OS_TV */
+
+#if !TARGET_OS_TV
+- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
+{
+    [self sendDropFileForURL:url];
+    return YES;
+}
+#endif /* !TARGET_OS_TV */
+
+@end
+
+#endif /* SDL_VIDEO_DRIVER_UIKIT */
+
+/* vi: set ts=4 sw=4 expandtab: */

+ 20 - 0
ios/SDLPal/SDLPal/SettingsTableViewController.h

@@ -0,0 +1,20 @@
+//
+//  SettingsViewController.h
+//  SDLPal
+//
+//  Created by palxex on 2017/5/18.
+//  Copyright © 2017年 SDLPAL team. All rights reserved.
+//
+
+#ifndef SettingsViewController_h
+#define SettingsViewController_h
+
+#import <UIKit/UIKit.h>
+
+@interface SettingsTableViewController : UITableViewController {
+    
+}
+@end
+
+
+#endif /* SettingsViewController_h */

+ 223 - 0
ios/SDLPal/SDLPal/SettingsTableViewController.m

@@ -0,0 +1,223 @@
+//
+//  Settings.m
+//  SDLPal
+//
+//  Created by palxex on 2017/5/18.
+//  Copyright © 2017年 SDLPAL team. All rights reserved.
+//
+
+#import "SettingsTableViewController.h"
+#import "SDLPal_AppDelegate.h"
+#import <ActionSheetPicker-3.0/ActionSheetStringPicker.h>
+
+#include "palcfg.h"
+
+@implementation SettingsTableViewController {
+    NSArray *AudioSampleRates;
+    NSArray *AudioBufferSizes;
+    NSArray *OPLSampleRates;
+    NSArray *CDFormats;
+    NSArray *MusicFormats;
+    NSArray *OPLFormats;
+    NSArray *LogLevels;
+    NSMutableArray *AvailFiles;
+    
+    AbstractActionSheetPicker *picker;
+    
+    IBOutlet UIView *transitionView;
+    
+    IBOutlet UILabel *lblResourceStatus;
+    
+    IBOutlet UILabel *lblLanguageFile;
+    IBOutlet UILabel *lblFontFile;
+    
+    IBOutlet UISwitch *toggleTouchScreenOverlay;
+    IBOutlet UISwitch *toggleKeepAspect;
+    
+    IBOutlet UILabel *lblMusicType;
+    IBOutlet UILabel *lblOPLType;
+    IBOutlet UILabel *lblOPLRate;
+    IBOutlet UILabel *lblCDAudioSource;
+    IBOutlet UISwitch *toggleStereo;
+    IBOutlet UISwitch *toggleSurroundOPL;
+    IBOutlet UILabel *lblResampleRate;
+    IBOutlet UILabel *lblAudioBufferSize;
+    IBOutlet UISlider *sliderResampleQuality;
+    IBOutlet UISlider *sliderMusicVolume;
+    IBOutlet UISlider *sliderSFXVolume;
+    
+    IBOutlet UILabel *lblLogLevel;
+    IBOutlet UITextField *textLogFile;
+}
+
+- (BOOL)includedInList:(NSArray*)array name:(NSString *)filename {
+    for( NSString *item in array ) {
+        if( [filename caseInsensitiveCompare:item] == NSOrderedSame )
+            return YES;
+    }
+    return NO;
+}
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    
+    UILabel* tlabel=[[UILabel alloc] initWithFrame:CGRectMake(0,0, 300, 40)];
+    tlabel.text=[NSString stringWithUTF8String:PAL_GIT_REVISION];
+    tlabel.backgroundColor =[UIColor clearColor];
+    tlabel.adjustsFontSizeToFitWidth=YES;
+    self.navigationItem.titleView=tlabel;
+    
+    AudioSampleRates = @[ @"11025", @"22050", @"44100", @"49716" ];
+    AudioBufferSizes = @[ @"512", @"1024", @"2048", @"4096", @"8192" ];
+    OPLSampleRates = @[ @"12429", @"24858", @"44100", @"49716" ];
+    CDFormats = @[ @"MP3", @"OGG" ];
+    MusicFormats = @[ @"MIDI", @"RIX", @"MP3", @"OGG" ];
+    OPLFormats = @[ @"DOSBOX", @"MAME", @"DOSBOXNEW" ];
+    LogLevels = @[ @"VERBOSE", @"DEBUG", @"INFO", @"WARNING", @"ERROR", @"FATAL" ];
+    
+    AvailFiles = [NSMutableArray new];
+    NSArray *builtinList = @[ @"wor16.fon", @"wor16.asc", @"m.msg"];
+    NSArray *builtinExtensionList = @[@"exe",@"drv",@"dll",@"rpg",@"mkf",@"avi",@"dat",@"cfg",@"ini"];
+    for( NSString *filename in [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[NSString stringWithUTF8String:UTIL_BasePath()] error:nil] ) {
+        if( ![self includedInList:builtinExtensionList name:filename.pathExtension] &&
+            ![self includedInList:builtinList name:filename] ) {
+            [AvailFiles addObject:filename];
+        }
+    }
+    
+    [self readConfigs];
+    
+    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
+    tap.cancelsTouchesInView = NO;
+    [self.view addGestureRecognizer:tap];
+}
+-(void)dismissKeyboard
+{
+    [self.view endEditing:YES];
+}
+typedef void(^SelectedBlock)(NSString *selected);
+
+- (void)showPickerWithTitle:(NSString *)title toLabel:(UILabel*)label inArray:(NSArray*)array {
+    [self showPickerWithTitle:title toLabel:label inArray:array allowEmpty:NO];
+}
+- (void)showPickerWithTitle:(NSString *)title toLabel:(UILabel*)label inArray:(NSArray*)array allowEmpty:(BOOL)allowEmpty {
+    [self showPickerWithTitle:title toLabel:label inArray:array allowEmpty:allowEmpty doneBlock:nil];
+}
+- (void)showPickerWithTitle:(NSString *)title toLabel:(UILabel*)label inArray:(NSArray*)array allowEmpty:(BOOL)allowEmpty doneBlock:(SelectedBlock)doneBlock {
+    NSArray *arrayWithEmpty = [array arrayByAddingObject:@""];
+    picker = [ActionSheetStringPicker showPickerWithTitle:nil
+                                                     rows:arrayWithEmpty
+                                         initialSelection:[array containsObject:label.text] ? [array indexOfObject:label.text] : 0
+                                                doneBlock:^(ActionSheetStringPicker *picker, NSInteger selectedIndex, id selectedValue) {
+                                                    label.text = arrayWithEmpty[selectedIndex];
+                                                    if(doneBlock) doneBlock(label.text);
+                                                }
+                                              cancelBlock:nil
+                                                   origin:self.view];
+}
+
+//- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
+//{
+//    float heightForRow = 40;
+//    
+//    if([lblMusicType.text isEqualToString:@"MIDI"] &&
+//      ((indexPath.row == 1 && indexPath.section == 3) ||
+//       (indexPath.row == 1 && indexPath.section == 3)))
+//        return 0;
+//    else
+//        return heightForRow;
+//}
+
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    if( indexPath.section == 1 && indexPath.row == 0 ) { //language file
+        [self showPickerWithTitle:nil toLabel:lblLanguageFile inArray:AvailFiles allowEmpty:YES];
+    }else if( indexPath.section == 1 && indexPath.row == 1 ) { //font file
+        [self showPickerWithTitle:nil toLabel:lblFontFile inArray:AvailFiles allowEmpty:YES];
+    }else if( indexPath.section == 3 && indexPath.row == 0 ) { //BGM
+        [self showPickerWithTitle:nil toLabel:lblMusicType inArray:MusicFormats allowEmpty:NO doneBlock:^(NSString *selected) {
+            [self.tableView reloadData];
+        }];
+    }else if( indexPath.section == 3 && indexPath.row == 1 ) { //OPL Type
+        [self showPickerWithTitle:nil toLabel:lblOPLType inArray:OPLFormats];
+    }else if( indexPath.section == 3 && indexPath.row == 2 ) { //OPL Rate
+        [self showPickerWithTitle:nil toLabel:lblOPLRate inArray:OPLSampleRates];
+    }else if( indexPath.section == 3 && indexPath.row == 3 ) { //CD Source
+        [self showPickerWithTitle:nil toLabel:lblCDAudioSource inArray:CDFormats];
+    }else if( indexPath.section == 3 && indexPath.row == 4 ) { //Stereo
+        toggleStereo.enabled = !toggleStereo.isEnabled;
+    }else if( indexPath.section == 3 && indexPath.row == 5 ) { //Surround
+        toggleSurroundOPL.enabled = !toggleSurroundOPL.isEnabled;
+    }else if( indexPath.section == 3 && indexPath.row == 6 ) { //SampleRate
+        [self showPickerWithTitle:nil toLabel:lblResampleRate inArray:AudioSampleRates];
+    }else if( indexPath.section == 3 && indexPath.row == 7 ) { //Buffer size
+        [self showPickerWithTitle:nil toLabel:lblAudioBufferSize inArray:AudioBufferSizes];
+    }else if( indexPath.section == 4 && indexPath.row == 0 ) { //Log Level
+        [self showPickerWithTitle:nil toLabel:lblLogLevel inArray:LogLevels];
+    }
+}
+
+- (IBAction)btnDefaultClicked:(id)sender {
+    PAL_LoadConfig(NO);
+    [self readConfigs];
+}
+
+- (IBAction)btnConfirmClicked:(id)sender {
+    [UIView transitionFromView:[self.navigationController view]
+                        toView:transitionView
+                      duration:0.65f
+                       options:UIViewAnimationOptionTransitionCurlDown
+                    completion:^(BOOL finished){
+                        [self saveConfigs];
+                        gConfig.fLaunchSetting = NO;
+                        PAL_SaveConfig();
+                        [[SDLPalAppDelegate sharedAppDelegate] launchGame];
+                    }];
+}
+
+- (void)readConfigs {
+    gConfig.fFullScreen = YES; //iOS specific; need this to make sure statusbar hidden in game completely
+    
+    lblLanguageFile.text    = [NSString stringWithUTF8String:gConfig.pszMsgFile  ? gConfig.pszMsgFile  : ""];
+    lblFontFile.text        = [NSString stringWithUTF8String:gConfig.pszFontFile ? gConfig.pszFontFile : ""];
+    textLogFile.text        = [NSString stringWithUTF8String:gConfig.pszLogFile  ? gConfig.pszLogFile  : ""];
+    
+    toggleStereo.enabled        = gConfig.iAudioChannels == 2;
+    toggleSurroundOPL.enabled   = gConfig.fUseSurroundOPL;
+    
+    lblMusicType.text       = MusicFormats[gConfig.eMusicType];
+    lblOPLType.text         = OPLFormats[gConfig.eOPLType];
+    lblOPLRate.text         = [NSString stringWithFormat:@"%d",gConfig.iOPLSampleRate];
+    lblCDAudioSource.text   = CDFormats[gConfig.eCDType-MUSIC_OGG];
+    lblResampleRate.text    = [NSString stringWithFormat:@"%d",gConfig.iSampleRate];
+    lblAudioBufferSize.text = [NSString stringWithFormat:@"%d",gConfig.wAudioBufferSize];
+    
+    sliderMusicVolume.value     = gConfig.iMusicVolume;
+    sliderSFXVolume.value       = gConfig.iSoundVolume;
+    sliderResampleQuality.value = gConfig.iResampleQuality;
+    
+    lblLogLevel.text        = LogLevels[gConfig.iLogLevel];
+}
+
+- (void)saveConfigs {
+    gConfig.pszMsgFile  = [lblLanguageFile.text length] == 0 ? NULL : strdup([[lblLanguageFile  text] UTF8String]);
+    gConfig.pszFontFile = [lblLanguageFile.text length] == 0 ? NULL : strdup([[lblFontFile      text] UTF8String]);
+    gConfig.pszLogFile  = [lblLanguageFile.text length] == 0 ? NULL : strdup([[textLogFile      text] UTF8String]);
+    
+    gConfig.iAudioChannels  = toggleStereo.isEnabled ? 2 : 1;
+    gConfig.fUseSurroundOPL = toggleSurroundOPL.isEnabled;
+    
+    gConfig.eMusicType  = (MUSICTYPE)[MusicFormats indexOfObject:lblMusicType.text];
+    gConfig.eOPLType    = (OPLTYPE  )[OPLFormats   indexOfObject:lblOPLType.text];
+    gConfig.iOPLSampleRate = [lblOPLRate.text intValue];
+    gConfig.eCDType     = (MUSICTYPE)[CDFormats indexOfObject:lblCDAudioSource.text]+MUSIC_OGG;
+    gConfig.iSampleRate = [lblResampleRate.text intValue];
+    gConfig.wAudioBufferSize = [lblAudioBufferSize.text intValue];
+    
+    gConfig.iMusicVolume = sliderMusicVolume.value;
+    gConfig.iSoundVolume = sliderSFXVolume.value;
+    gConfig.iResampleQuality = sliderResampleQuality.value;
+    
+    gConfig.iLogLevel = (LOGLEVEL)[LogLevels indexOfObject:lblLogLevel.text];
+}
+
+@end

+ 0 - 2
ios/SDLPal/SDLPal/native_midi.m

@@ -79,7 +79,6 @@ NativeMidiSong *native_midi_loadsong_RW(SDL_RWops *rw)
         NSURL *midiFileURL = [NSURL URLWithString:[NSString stringWithUTF8String:midiInterFile]];
         NSURL *bankURL = [[NSBundle mainBundle] URLForResource:@"gs_instruments" withExtension: @"dls"];
         if( midiPlayer ) {
-            [midiPlayer dealloc];
             midiPlayer = nil;
         }
         NSError *err=nil;
@@ -98,7 +97,6 @@ void native_midi_freesong(NativeMidiSong *song)
             currentsong = NULL;
         free(song);
         if( midiPlayer ) {
-            [midiPlayer dealloc];
             midiPlayer = nil;
         }
     }

+ 1 - 1
ios/SDLPal/SDLPal/util.mm

@@ -73,7 +73,7 @@ UTIL_Platform_Init(
     UTIL_LogAddOutputCallback([](LOGLEVEL, const char* str, const char*)->void {
         NSLog(@"%s",str);
     }, PAL_DEFAULT_LOGLEVEL);
-    gConfig.fLaunchSetting = FALSE;
+    gConfig.fLaunchSetting = NO;
     return 0;
 }
 

+ 78 - 0
ios/SDLPal/SDLPal/zh-Hans.lproj/Settings.strings

@@ -0,0 +1,78 @@
+
+/* Class = "UIBarButtonItem"; title = "Discard"; ObjectID = "0TA-XO-i0Z"; */
+"0TA-XO-i0Z.title" = "撤销";
+
+/* Class = "UILabel"; text = "保持纵横比"; ObjectID = "1Ej-ro-rVM"; */
+"1Ej-ro-rVM.text" = "保持纵横比";
+
+/* Class = "UILabel"; text = "日志文件"; ObjectID = "2J1-Pe-ygl"; */
+"2J1-Pe-ygl.text" = "日志文件";
+
+/* Class = "UITableViewSection"; headerTitle = "字体及语言设置"; ObjectID = "5ym-4D-dzP"; */
+"5ym-4D-dzP.headerTitle" = "字体及语言设置";
+
+/* Class = "UILabel"; text = "OPL环绕模式"; ObjectID = "7y3-G9-hca"; */
+"7y3-G9-hca.text" = "OPL环绕模式";
+
+/* Class = "UITableViewSection"; headerTitle = "全局"; ObjectID = "Ct9-Es-qVF"; */
+"Ct9-Es-qVF.headerTitle" = "通用";
+
+/* Class = "UILabel"; text = "启用触屏辅助"; ObjectID = "F74-lN-NuX"; */
+"F74-lN-NuX.text" = "启用触屏辅助";
+
+/* Class = "UILabel"; text = "字体文件"; ObjectID = "FLw-EA-IAl"; */
+"FLw-EA-IAl.text" = "字体文件";
+
+/* Class = "UILabel"; text = "BGM音源"; ObjectID = "H6w-EN-xQ6"; */
+"H6w-EN-xQ6.text" = "BGM音源";
+
+/* Class = "UITableViewSection"; headerTitle = "显示设置"; ObjectID = "KKa-Sg-wye"; */
+"KKa-Sg-wye.headerTitle" = "显示设置";
+
+/* Class = "UILabel"; text = "音效音量"; ObjectID = "L24-lU-K9K"; */
+"L24-lU-K9K.text" = "音效音量";
+
+/* Class = "UILabel"; text = "OPL采样率"; ObjectID = "LM0-rh-yuy"; */
+"LM0-rh-yuy.text" = "OPL采样率";
+
+/* Class = "UITableViewSection"; headerTitle = "日志记录设置"; ObjectID = "Lil-2E-Cmo"; */
+"Lil-2E-Cmo.headerTitle" = "日志记录设置";
+
+/* Class = "UIBarButtonItem"; title = "确定"; ObjectID = "R0E-e5-3Mm"; */
+"R0E-e5-3Mm.title" = "确定";
+
+/* Class = "UILabel"; text = "游戏资源"; ObjectID = "VQP-NM-z3r"; */
+"VQP-NM-z3r.text" = "游戏资源";
+
+/* Class = "UILabel"; text = "iTunes 文件分享"; ObjectID = "aNN-DF-3OJ"; */
+"aNN-DF-3OJ.text" = "iTunes 文件分享";
+
+/* Class = "UILabel"; text = "缓冲区"; ObjectID = "azm-6Q-Twc"; */
+"azm-6Q-Twc.text" = "缓冲区";
+
+/* Class = "UILabel"; text = "音乐音量"; ObjectID = "csD-lo-BFX"; */
+"csD-lo-BFX.text" = "音乐音量";
+
+/* Class = "UILabel"; text = "采样率"; ObjectID = "hQp-nd-FWB"; */
+"hQp-nd-FWB.text" = "采样率";
+
+/* Class = "UITableViewSection"; headerTitle = "音频设置"; ObjectID = "kPc-Yq-LOh"; */
+"kPc-Yq-LOh.headerTitle" = "音频设置";
+
+/* Class = "UILabel"; text = "OPL类型"; ObjectID = "lpD-tV-FRw"; */
+"lpD-tV-FRw.text" = "OPL类型";
+
+/* Class = "UILabel"; text = "SSRC质量"; ObjectID = "oQa-bR-CM1"; */
+"oQa-bR-CM1.text" = "SSRC质量";
+
+/* Class = "UILabel"; text = "立体声"; ObjectID = "sIK-1p-lB9"; */
+"sIK-1p-lB9.text" = "立体声";
+
+/* Class = "UILabel"; text = "CD音源"; ObjectID = "t2Y-EX-5pB"; */
+"t2Y-EX-5pB.text" = "CD音源";
+
+/* Class = "UILabel"; text = "语言文件"; ObjectID = "vvj-5L-w4s"; */
+"vvj-5L-w4s.text" = "语言文件";
+
+/* Class = "UILabel"; text = "日志记录级别"; ObjectID = "yup-CB-6Rc"; */
+"yup-CB-6Rc.text" = "日志记录级别";

+ 78 - 0
ios/SDLPal/SDLPal/zh-Hant.lproj/Settings.strings

@@ -0,0 +1,78 @@
+
+/* Class = "UIBarButtonItem"; title = "Discard"; ObjectID = "0TA-XO-i0Z"; */
+"0TA-XO-i0Z.title" = "撤銷";
+
+/* Class = "UILabel"; text = "保持纵横比"; ObjectID = "1Ej-ro-rVM"; */
+"1Ej-ro-rVM.text" = "保持縱橫比";
+
+/* Class = "UILabel"; text = "日志文件"; ObjectID = "2J1-Pe-ygl"; */
+"2J1-Pe-ygl.text" = "自訂日誌檔案";
+
+/* Class = "UITableViewSection"; headerTitle = "字体及语言设置"; ObjectID = "5ym-4D-dzP"; */
+"5ym-4D-dzP.headerTitle" = "字體及語言設定";
+
+/* Class = "UILabel"; text = "OPL环绕模式"; ObjectID = "7y3-G9-hca"; */
+"7y3-G9-hca.text" = "環繞聲";
+
+/* Class = "UITableViewSection"; headerTitle = "全局"; ObjectID = "Ct9-Es-qVF"; */
+"Ct9-Es-qVF.headerTitle" = "一般";
+
+/* Class = "UILabel"; text = "启用触屏辅助"; ObjectID = "F74-lN-NuX"; */
+"F74-lN-NuX.text" = "啓用觸屏輔助";
+
+/* Class = "UILabel"; text = "字体文件"; ObjectID = "FLw-EA-IAl"; */
+"FLw-EA-IAl.text" = "自訂字體檔案";
+
+/* Class = "UILabel"; text = "BGM音源"; ObjectID = "H6w-EN-xQ6"; */
+"H6w-EN-xQ6.text" = "背景音樂格式";
+
+/* Class = "UITableViewSection"; headerTitle = "显示设置"; ObjectID = "KKa-Sg-wye"; */
+"KKa-Sg-wye.headerTitle" = "顯示設置";
+
+/* Class = "UILabel"; text = "音效音量"; ObjectID = "L24-lU-K9K"; */
+"L24-lU-K9K.text" = "音效音量";
+
+/* Class = "UILabel"; text = "OPL采样率"; ObjectID = "LM0-rh-yuy"; */
+"LM0-rh-yuy.text" = "OPL取樣速率";
+
+/* Class = "UITableViewSection"; headerTitle = "日志记录设置"; ObjectID = "Lil-2E-Cmo"; */
+"Lil-2E-Cmo.headerTitle" = "日誌記錄設定";
+
+/* Class = "UIBarButtonItem"; title = "确定"; ObjectID = "R0E-e5-3Mm"; */
+"R0E-e5-3Mm.title" = "確定";
+
+/* Class = "UILabel"; text = "游戏资源"; ObjectID = "VQP-NM-z3r"; */
+"VQP-NM-z3r.text" = "遊戲資源";
+
+/* Class = "UILabel"; text = "iTunes 文件分享"; ObjectID = "aNN-DF-3OJ"; */
+"aNN-DF-3OJ.text" = "iTunes 檔案共享";
+
+/* Class = "UILabel"; text = "缓冲区"; ObjectID = "azm-6Q-Twc"; */
+"azm-6Q-Twc.text" = "音訊緩衝區大小";
+
+/* Class = "UILabel"; text = "音乐音量"; ObjectID = "csD-lo-BFX"; */
+"csD-lo-BFX.text" = "音樂音量";
+
+/* Class = "UILabel"; text = "采样率"; ObjectID = "hQp-nd-FWB"; */
+"hQp-nd-FWB.text" = "取樣速率";
+
+/* Class = "UITableViewSection"; headerTitle = "音频设置"; ObjectID = "kPc-Yq-LOh"; */
+"kPc-Yq-LOh.headerTitle" = "音频设置";
+
+/* Class = "UILabel"; text = "OPL类型"; ObjectID = "lpD-tV-FRw"; */
+"lpD-tV-FRw.text" = "OPL類型";
+
+/* Class = "UILabel"; text = "SSRC质量"; ObjectID = "oQa-bR-CM1"; */
+"oQa-bR-CM1.text" = "SSRC品質";
+
+/* Class = "UILabel"; text = "立体声"; ObjectID = "sIK-1p-lB9"; */
+"sIK-1p-lB9.text" = "環繞聲";
+
+/* Class = "UILabel"; text = "CD音源"; ObjectID = "t2Y-EX-5pB"; */
+"t2Y-EX-5pB.text" = "CD音源";
+
+/* Class = "UILabel"; text = "语言文件"; ObjectID = "vvj-5L-w4s"; */
+"vvj-5L-w4s.text" = "自訂語言檔案";
+
+/* Class = "UILabel"; text = "日志记录级别"; ObjectID = "yup-CB-6Rc"; */
+"yup-CB-6Rc.text" = "日誌記錄級別";

+ 1 - 1
ios/pal_config.h

@@ -48,7 +48,7 @@
 
 #define PAL_HAS_NATIVEMIDI  1
 
-#define PAL_HAS_CONFIG_PAGE 0
+#define PAL_HAS_CONFIG_PAGE 1
 
 #define PAL_HAS_PLATFORM_SPECIFIC_UTILS 1
 

+ 1 - 1
palette.h

@@ -62,7 +62,7 @@ VOID
 PAL_PaletteFade(
    INT         iPaletteNum,
    BOOL        fNight,
-   INT         iDelay
+   BOOL        fUpdateScene
 );
 
 VOID

+ 1 - 1
video.c

@@ -134,7 +134,7 @@ VIDEO_Startup(
    // Before we can render anything, we need a window and a renderer.
    //
    gpWindow = SDL_CreateWindow("Pal", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
-	   gConfig.dwScreenWidth, gConfig.dwScreenHeight, PAL_VIDEO_INIT_FLAGS);
+                               gConfig.dwScreenWidth, gConfig.dwScreenHeight, PAL_VIDEO_INIT_FLAGS | (gConfig.fFullScreen ? SDL_WINDOW_BORDERLESS : 0) );
 
    if (gpWindow == NULL)
    {