From f5b3b24c22186f50b3e57fc162ef9790f288c704 Mon Sep 17 00:00:00 2001 From: Ruslan Mustakov Date: Mon, 4 Sep 2017 20:10:03 +0700 Subject: [PATCH] Enhance iOS export - The export process now builds complete .ipa on macOS, instead of just creating XCode project. - The project includes Capabilities games usually require: Game Center, Push Notifications, In-App Purchase. - Icons and launch screens can be specified in export preset. --- editor/editor_export.cpp | 2 + misc/dist/ios_xcode/export_options.plist | 10 + ...ot_debug.iphone => godot.iphone.debug.arm} | 0 ...ot_opt.iphone => godot.iphone.debug.arm64} | 0 misc/dist/ios_xcode/godot.iphone.debug.fat | 0 misc/dist/ios_xcode/godot.iphone.release.arm | 0 .../dist/ios_xcode/godot.iphone.release.arm64 | 0 misc/dist/ios_xcode/godot.iphone.release.fat | 0 .../godot_ios.xcodeproj/project.pbxproj | 198 ++++++---- .../contents.xcworkspacedata | 2 +- .../xcshareddata/xcschemes/godot_ios.xcscheme | 93 +++++ ...568h@2x~iphone.png => Default-568h@2x.png} | Bin .../dist/ios_xcode/godot_ios/Default-667h.png | Bin 683 -> 0 bytes .../ios_xcode/godot_ios/Default-736h@3x.png | Bin 2582 -> 0 bytes .../godot_ios/Default-Landscape-1366h@2x.png | Bin 0 -> 32836 bytes ...736h.png => Default-Landscape-736h@3x.png} | Bin ...e@2x~ipad.png => Default-Landscape@2x.png} | Bin .../godot_ios/Default-Landscape~ipad.png | Bin 634 -> 0 bytes .../godot_ios/Default-Portrait-1366h@2x.png | Bin 0 -> 33309 bytes ...-736h.png => Default-Portrait-736h@3x.png} | Bin .../godot_ios/Default-Portrait@2x.png | Bin 0 -> 33309 bytes .../godot_ios/Default-Portrait@2x~ipad.png | Bin 3070 -> 0 bytes .../godot_ios/Default-Portrait~ipad.png | Bin 589 -> 0 bytes .../ios_xcode/godot_ios/Default@2x~iphone.png | Bin 515 -> 0 bytes .../ios_xcode/godot_ios/Default~iphone.png | Bin 309 -> 0 bytes .../AppIcon.appiconset/Contents.json | 128 ------ .../AppIcon.appiconset/Icon-100.png | Bin 250 -> 0 bytes .../AppIcon.appiconset/Icon-114.png | Bin 253 -> 0 bytes .../AppIcon.appiconset/Icon-120.png | Bin 253 -> 0 bytes .../AppIcon.appiconset/Icon-144.png | Bin 259 -> 0 bytes .../AppIcon.appiconset/Icon-152.png | Bin 260 -> 0 bytes .../AppIcon.appiconset/Icon-180.png | Bin 265 -> 0 bytes .../AppIcon.appiconset/Icon-29.png | Bin 242 -> 0 bytes .../AppIcon.appiconset/Icon-40.png | Bin 240 -> 0 bytes .../AppIcon.appiconset/Icon-50.png | Bin 243 -> 0 bytes .../AppIcon.appiconset/Icon-57.png | Bin 243 -> 0 bytes .../AppIcon.appiconset/Icon-58.png | Bin 243 -> 0 bytes .../AppIcon.appiconset/Icon-60.png | Bin 244 -> 0 bytes .../AppIcon.appiconset/Icon-72.png | Bin 244 -> 0 bytes .../AppIcon.appiconset/Icon-76.png | Bin 246 -> 0 bytes .../AppIcon.appiconset/Icon-80.png | Bin 245 -> 0 bytes .../AppIcon.appiconset/icon-167.png | Bin 262 -> 0 bytes .../AppIcon.appiconset/icon-87.png | Bin 247 -> 0 bytes .../Images.xcassets/AppIcon.appiconset/sizes | 17 - .../ios_xcode/godot_ios/godot_ios-Info.plist | 15 +- .../godot_ios/godot_ios.entitlements | 8 + modules/gdnative/SCsub | 2 +- modules/gdnative/gdnative.cpp | 5 +- modules/gdnative/include/gdnative/gdnative.h | 4 +- .../include/nativescript/godot_nativescript.h | 4 +- modules/gdnative/nativescript/SCsub | 3 + platform/iphone/export/export.cpp | 363 ++++++++++++++++-- 52 files changed, 589 insertions(+), 265 deletions(-) create mode 100644 misc/dist/ios_xcode/export_options.plist rename misc/dist/ios_xcode/{godot_debug.iphone => godot.iphone.debug.arm} (100%) rename misc/dist/ios_xcode/{godot_opt.iphone => godot.iphone.debug.arm64} (100%) create mode 100755 misc/dist/ios_xcode/godot.iphone.debug.fat create mode 100755 misc/dist/ios_xcode/godot.iphone.release.arm create mode 100755 misc/dist/ios_xcode/godot.iphone.release.arm64 create mode 100755 misc/dist/ios_xcode/godot.iphone.release.fat create mode 100644 misc/dist/ios_xcode/godot_ios.xcodeproj/xcshareddata/xcschemes/godot_ios.xcscheme rename misc/dist/ios_xcode/godot_ios/{Default-568h@2x~iphone.png => Default-568h@2x.png} (100%) delete mode 100644 misc/dist/ios_xcode/godot_ios/Default-667h.png delete mode 100644 misc/dist/ios_xcode/godot_ios/Default-736h@3x.png create mode 100644 misc/dist/ios_xcode/godot_ios/Default-Landscape-1366h@2x.png rename misc/dist/ios_xcode/godot_ios/{Default-Landscape-736h.png => Default-Landscape-736h@3x.png} (100%) rename misc/dist/ios_xcode/godot_ios/{Default-Landscape@2x~ipad.png => Default-Landscape@2x.png} (100%) delete mode 100644 misc/dist/ios_xcode/godot_ios/Default-Landscape~ipad.png create mode 100644 misc/dist/ios_xcode/godot_ios/Default-Portrait-1366h@2x.png rename misc/dist/ios_xcode/godot_ios/{Default-736h.png => Default-Portrait-736h@3x.png} (100%) create mode 100644 misc/dist/ios_xcode/godot_ios/Default-Portrait@2x.png delete mode 100644 misc/dist/ios_xcode/godot_ios/Default-Portrait@2x~ipad.png delete mode 100644 misc/dist/ios_xcode/godot_ios/Default-Portrait~ipad.png delete mode 100644 misc/dist/ios_xcode/godot_ios/Default@2x~iphone.png delete mode 100644 misc/dist/ios_xcode/godot_ios/Default~iphone.png delete mode 100644 misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-100.png delete mode 100644 misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-114.png delete mode 100644 misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-120.png delete mode 100644 misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-144.png delete mode 100644 misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-152.png delete mode 100644 misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-180.png delete mode 100644 misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-29.png delete mode 100644 misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-40.png delete mode 100644 misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-50.png delete mode 100644 misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-57.png delete mode 100644 misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-58.png delete mode 100644 misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-60.png delete mode 100644 misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-72.png delete mode 100644 misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-76.png delete mode 100644 misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-80.png delete mode 100644 misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-167.png delete mode 100644 misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-87.png delete mode 100644 misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/sizes create mode 100644 misc/dist/ios_xcode/godot_ios/godot_ios.entitlements diff --git a/editor/editor_export.cpp b/editor/editor_export.cpp index 4caf2641fc..db12998dd2 100644 --- a/editor/editor_export.cpp +++ b/editor/editor_export.cpp @@ -273,6 +273,8 @@ void EditorExportPlatform::gen_debug_flags(Vector &r_flags, int p_flags) } Error EditorExportPlatform::_save_pack_file(void *p_userdata, const String &p_path, const Vector &p_data, int p_file, int p_total) { + if (p_path.ends_with(".so") || p_path.ends_with(".dylib") || p_path.ends_with(".dll")) + return OK; PackData *pd = (PackData *)p_userdata; diff --git a/misc/dist/ios_xcode/export_options.plist b/misc/dist/ios_xcode/export_options.plist new file mode 100644 index 0000000000..86d89a6e42 --- /dev/null +++ b/misc/dist/ios_xcode/export_options.plist @@ -0,0 +1,10 @@ + + + + + method + $export_method + teamID + $team_id + + \ No newline at end of file diff --git a/misc/dist/ios_xcode/godot_debug.iphone b/misc/dist/ios_xcode/godot.iphone.debug.arm similarity index 100% rename from misc/dist/ios_xcode/godot_debug.iphone rename to misc/dist/ios_xcode/godot.iphone.debug.arm diff --git a/misc/dist/ios_xcode/godot_opt.iphone b/misc/dist/ios_xcode/godot.iphone.debug.arm64 similarity index 100% rename from misc/dist/ios_xcode/godot_opt.iphone rename to misc/dist/ios_xcode/godot.iphone.debug.arm64 diff --git a/misc/dist/ios_xcode/godot.iphone.debug.fat b/misc/dist/ios_xcode/godot.iphone.debug.fat new file mode 100755 index 0000000000..e69de29bb2 diff --git a/misc/dist/ios_xcode/godot.iphone.release.arm b/misc/dist/ios_xcode/godot.iphone.release.arm new file mode 100755 index 0000000000..e69de29bb2 diff --git a/misc/dist/ios_xcode/godot.iphone.release.arm64 b/misc/dist/ios_xcode/godot.iphone.release.arm64 new file mode 100755 index 0000000000..e69de29bb2 diff --git a/misc/dist/ios_xcode/godot.iphone.release.fat b/misc/dist/ios_xcode/godot.iphone.release.fat new file mode 100755 index 0000000000..e69de29bb2 diff --git a/misc/dist/ios_xcode/godot_ios.xcodeproj/project.pbxproj b/misc/dist/ios_xcode/godot_ios.xcodeproj/project.pbxproj index bdba8488c8..3f2db94193 100644 --- a/misc/dist/ios_xcode/godot_ios.xcodeproj/project.pbxproj +++ b/misc/dist/ios_xcode/godot_ios.xcodeproj/project.pbxproj @@ -7,18 +7,17 @@ objects = { /* Begin PBXBuildFile section */ - D07CD43F1C5D573600B7FB28 /* Default-568h@2x~iphone.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4331C5D573600B7FB28 /* Default-568h@2x~iphone.png */; }; - D07CD4401C5D573600B7FB28 /* Default-667h.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4341C5D573600B7FB28 /* Default-667h.png */; }; + 1F1575721F582BE20003B888 /* dylibs in Resources */ = {isa = PBXBuildFile; fileRef = 1F1575711F582BE20003B888 /* dylibs */; }; + 1FF4C1851F584E3F00A41E41 /* GameKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FF4C1841F584E3F00A41E41 /* GameKit.framework */; }; + 1FF4C1871F584E5600A41E41 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FF4C1861F584E5600A41E41 /* StoreKit.framework */; }; + D07CD43F1C5D573600B7FB28 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4331C5D573600B7FB28 /* Default-568h@2x.png */; }; D07CD4411C5D573600B7FB28 /* Default-667h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4351C5D573600B7FB28 /* Default-667h@2x.png */; }; - D07CD4421C5D573600B7FB28 /* Default-736h.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4361C5D573600B7FB28 /* Default-736h.png */; }; - D07CD4431C5D573600B7FB28 /* Default-736h@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4371C5D573600B7FB28 /* Default-736h@3x.png */; }; - D07CD4441C5D573600B7FB28 /* Default-Landscape-736h.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4381C5D573600B7FB28 /* Default-Landscape-736h.png */; }; - D07CD4451C5D573600B7FB28 /* Default-Landscape@2x~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4391C5D573600B7FB28 /* Default-Landscape@2x~ipad.png */; }; - D07CD4461C5D573600B7FB28 /* Default-Landscape~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD43A1C5D573600B7FB28 /* Default-Landscape~ipad.png */; }; - D07CD4471C5D573600B7FB28 /* Default-Portrait@2x~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD43B1C5D573600B7FB28 /* Default-Portrait@2x~ipad.png */; }; - D07CD4481C5D573600B7FB28 /* Default-Portrait~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD43C1C5D573600B7FB28 /* Default-Portrait~ipad.png */; }; - D07CD4491C5D573600B7FB28 /* Default@2x~iphone.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD43D1C5D573600B7FB28 /* Default@2x~iphone.png */; }; - D07CD44A1C5D573600B7FB28 /* Default~iphone.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD43E1C5D573600B7FB28 /* Default~iphone.png */; }; + D07CD4421C5D573600B7FB28 /* Default-Portrait-736h@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4361C5D573600B7FB28 /* Default-Portrait-736h@3x.png */; }; + D07CD4441C5D573600B7FB28 /* Default-Landscape-736h@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4381C5D573600B7FB28 /* Default-Landscape-736h@3x.png */; }; + D07CD4451C5D573600B7FB28 /* Default-Landscape@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4391C5D573600B7FB28 /* Default-Landscape@2x.png */; }; + D07CD4461C5D573600B7FB28 /* Default-Landscape-1366h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD43A1C5D573600B7FB28 /* Default-Landscape-1366h@2x.png */; }; + D07CD4471C5D573600B7FB28 /* Default-Portrait@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD43B1C5D573600B7FB28 /* Default-Portrait@2x.png */; }; + D07CD4481C5D573600B7FB28 /* Default-Portrait-1366h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD43C1C5D573600B7FB28 /* Default-Portrait-1366h@2x.png */; }; D07CD44E1C5D589C00B7FB28 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D07CD44D1C5D589C00B7FB28 /* Images.xcassets */; }; D0BCFE3818AEBDA2004A7AAE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3718AEBDA2004A7AAE /* Foundation.framework */; }; D0BCFE3A18AEBDA2004A7AAE /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3918AEBDA2004A7AAE /* CoreGraphics.framework */; }; @@ -26,36 +25,36 @@ D0BCFE3E18AEBDA2004A7AAE /* GLKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3D18AEBDA2004A7AAE /* GLKit.framework */; }; D0BCFE4018AEBDA2004A7AAE /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3F18AEBDA2004A7AAE /* OpenGLES.framework */; }; D0BCFE4618AEBDA2004A7AAE /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = D0BCFE4418AEBDA2004A7AAE /* InfoPlist.strings */; }; - D0BCFE7818AEBFEB004A7AAE /* data.pck in Resources */ = {isa = PBXBuildFile; fileRef = D0BCFE7718AEBFEB004A7AAE /* data.pck */; }; - D0BCFE7A18AEC06A004A7AAE /* godot_opt.iphone in Resources */ = {isa = PBXBuildFile; fileRef = D0BCFE7918AEC06A004A7AAE /* godot_opt.iphone */; }; + D0BCFE7818AEBFEB004A7AAE /* $binary.pck in Resources */ = {isa = PBXBuildFile; fileRef = D0BCFE7718AEBFEB004A7AAE /* $binary.pck */; }; + D0BCFE7A18AEC06A004A7AAE /* $binary.iphone in Resources */ = {isa = PBXBuildFile; fileRef = D0BCFE7918AEC06A004A7AAE /* $binary.iphone */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - D07CD4331C5D573600B7FB28 /* Default-568h@2x~iphone.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x~iphone.png"; sourceTree = ""; }; - D07CD4341C5D573600B7FB28 /* Default-667h.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-667h.png"; sourceTree = ""; }; + 1F1575711F582BE20003B888 /* dylibs */ = {isa = PBXFileReference; lastKnownFileType = folder; name = dylibs; path = dylibs; sourceTree = ""; }; + 1FF4C1841F584E3F00A41E41 /* GameKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameKit.framework; path = System/Library/Frameworks/GameKit.framework; sourceTree = SDKROOT; }; + 1FF4C1861F584E5600A41E41 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; }; + 1FF4C1881F584E6300A41E41 /* $binary.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = $binary.entitlements; sourceTree = ""; }; + D07CD4331C5D573600B7FB28 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; D07CD4351C5D573600B7FB28 /* Default-667h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-667h@2x.png"; sourceTree = ""; }; - D07CD4361C5D573600B7FB28 /* Default-736h.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-736h.png"; sourceTree = ""; }; - D07CD4371C5D573600B7FB28 /* Default-736h@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-736h@3x.png"; sourceTree = ""; }; - D07CD4381C5D573600B7FB28 /* Default-Landscape-736h.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Landscape-736h.png"; sourceTree = ""; }; - D07CD4391C5D573600B7FB28 /* Default-Landscape@2x~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Landscape@2x~ipad.png"; sourceTree = ""; }; - D07CD43A1C5D573600B7FB28 /* Default-Landscape~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Landscape~ipad.png"; sourceTree = ""; }; - D07CD43B1C5D573600B7FB28 /* Default-Portrait@2x~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Portrait@2x~ipad.png"; sourceTree = ""; }; - D07CD43C1C5D573600B7FB28 /* Default-Portrait~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Portrait~ipad.png"; sourceTree = ""; }; - D07CD43D1C5D573600B7FB28 /* Default@2x~iphone.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default@2x~iphone.png"; sourceTree = ""; }; - D07CD43E1C5D573600B7FB28 /* Default~iphone.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default~iphone.png"; sourceTree = ""; }; + D07CD4361C5D573600B7FB28 /* Default-Portrait-736h@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Portrait-736h@3x.png"; sourceTree = ""; }; + D07CD4381C5D573600B7FB28 /* Default-Landscape-736h@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Landscape-736h@3x.png"; sourceTree = ""; }; + D07CD4391C5D573600B7FB28 /* Default-Landscape@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Landscape@2x.png"; sourceTree = ""; }; + D07CD43A1C5D573600B7FB28 /* Default-Landscape-1366h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Landscape-1366h@2x.png"; sourceTree = ""; }; + D07CD43B1C5D573600B7FB28 /* Default-Portrait@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Portrait@2x.png"; sourceTree = ""; }; + D07CD43C1C5D573600B7FB28 /* Default-Portrait-1366h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Portrait-1366h@2x.png"; sourceTree = ""; }; D07CD44D1C5D589C00B7FB28 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; - D0BCFE3418AEBDA2004A7AAE /* godot_ios.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = godot_ios.app; sourceTree = BUILT_PRODUCTS_DIR; }; + D0BCFE3418AEBDA2004A7AAE /* $binary.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = $binary.app; sourceTree = BUILT_PRODUCTS_DIR; }; D0BCFE3718AEBDA2004A7AAE /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; D0BCFE3918AEBDA2004A7AAE /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; D0BCFE3B18AEBDA2004A7AAE /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; D0BCFE3D18AEBDA2004A7AAE /* GLKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLKit.framework; path = System/Library/Frameworks/GLKit.framework; sourceTree = SDKROOT; }; D0BCFE3F18AEBDA2004A7AAE /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; - D0BCFE4318AEBDA2004A7AAE /* godot_ios-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "godot_ios-Info.plist"; sourceTree = ""; }; + D0BCFE4318AEBDA2004A7AAE /* $binary-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "$binary-Info.plist"; sourceTree = ""; }; D0BCFE4518AEBDA2004A7AAE /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - D0BCFE4918AEBDA2004A7AAE /* godot_ios-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "godot_ios-Prefix.pch"; sourceTree = ""; }; + D0BCFE4918AEBDA2004A7AAE /* $binary-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "$binary-Prefix.pch"; sourceTree = ""; }; D0BCFE6118AEBDA3004A7AAE /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; - D0BCFE7718AEBFEB004A7AAE /* data.pck */ = {isa = PBXFileReference; lastKnownFileType = text; path = data.pck; sourceTree = ""; }; - D0BCFE7918AEC06A004A7AAE /* godot_opt.iphone */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = godot_opt.iphone; sourceTree = ""; }; + D0BCFE7718AEBFEB004A7AAE /* $binary.pck */ = {isa = PBXFileReference; lastKnownFileType = file; path = $binary.pck; sourceTree = ""; }; + D0BCFE7918AEC06A004A7AAE /* $binary.iphone */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = $binary.iphone; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -64,8 +63,10 @@ buildActionMask = 2147483647; files = ( D0BCFE4018AEBDA2004A7AAE /* OpenGLES.framework in Frameworks */, + 1FF4C1871F584E5600A41E41 /* StoreKit.framework in Frameworks */, D0BCFE3A18AEBDA2004A7AAE /* CoreGraphics.framework in Frameworks */, D0BCFE3C18AEBDA2004A7AAE /* UIKit.framework in Frameworks */, + 1FF4C1851F584E3F00A41E41 /* GameKit.framework in Frameworks */, D0BCFE3E18AEBDA2004A7AAE /* GLKit.framework in Frameworks */, D0BCFE3818AEBDA2004A7AAE /* Foundation.framework in Frameworks */, ); @@ -77,9 +78,10 @@ D0BCFE2B18AEBDA2004A7AAE = { isa = PBXGroup; children = ( - D0BCFE7918AEC06A004A7AAE /* godot_opt.iphone */, - D0BCFE7718AEBFEB004A7AAE /* data.pck */, - D0BCFE4118AEBDA2004A7AAE /* godot_ios */, + 1F1575711F582BE20003B888 /* dylibs */, + D0BCFE7918AEC06A004A7AAE /* $binary.iphone */, + D0BCFE7718AEBFEB004A7AAE /* $binary.pck */, + D0BCFE4118AEBDA2004A7AAE /* $binary */, D0BCFE3618AEBDA2004A7AAE /* Frameworks */, D0BCFE3518AEBDA2004A7AAE /* Products */, ); @@ -88,7 +90,7 @@ D0BCFE3518AEBDA2004A7AAE /* Products */ = { isa = PBXGroup; children = ( - D0BCFE3418AEBDA2004A7AAE /* godot_ios.app */, + D0BCFE3418AEBDA2004A7AAE /* $binary.app */, ); name = Products; sourceTree = ""; @@ -96,6 +98,8 @@ D0BCFE3618AEBDA2004A7AAE /* Frameworks */ = { isa = PBXGroup; children = ( + 1FF4C1861F584E5600A41E41 /* StoreKit.framework */, + 1FF4C1841F584E3F00A41E41 /* GameKit.framework */, D0BCFE3718AEBDA2004A7AAE /* Foundation.framework */, D0BCFE3918AEBDA2004A7AAE /* CoreGraphics.framework */, D0BCFE3B18AEBDA2004A7AAE /* UIKit.framework */, @@ -106,33 +110,30 @@ name = Frameworks; sourceTree = ""; }; - D0BCFE4118AEBDA2004A7AAE /* godot_ios */ = { + D0BCFE4118AEBDA2004A7AAE /* $binary */ = { isa = PBXGroup; children = ( - D07CD4331C5D573600B7FB28 /* Default-568h@2x~iphone.png */, - D07CD4341C5D573600B7FB28 /* Default-667h.png */, + 1FF4C1881F584E6300A41E41 /* $binary.entitlements */, + D07CD4331C5D573600B7FB28 /* Default-568h@2x.png */, D07CD4351C5D573600B7FB28 /* Default-667h@2x.png */, - D07CD4361C5D573600B7FB28 /* Default-736h.png */, - D07CD4371C5D573600B7FB28 /* Default-736h@3x.png */, - D07CD4381C5D573600B7FB28 /* Default-Landscape-736h.png */, - D07CD4391C5D573600B7FB28 /* Default-Landscape@2x~ipad.png */, - D07CD43A1C5D573600B7FB28 /* Default-Landscape~ipad.png */, - D07CD43B1C5D573600B7FB28 /* Default-Portrait@2x~ipad.png */, - D07CD43C1C5D573600B7FB28 /* Default-Portrait~ipad.png */, - D07CD43D1C5D573600B7FB28 /* Default@2x~iphone.png */, - D07CD43E1C5D573600B7FB28 /* Default~iphone.png */, + D07CD4361C5D573600B7FB28 /* Default-Portrait-736h@3x.png */, + D07CD4381C5D573600B7FB28 /* Default-Landscape-736h@3x.png */, + D07CD4391C5D573600B7FB28 /* Default-Landscape@2x.png */, + D07CD43A1C5D573600B7FB28 /* Default-Landscape-1366h@2x.png */, + D07CD43B1C5D573600B7FB28 /* Default-Portrait@2x.png */, + D07CD43C1C5D573600B7FB28 /* Default-Portrait-1366h@2x.png */, D07CD44D1C5D589C00B7FB28 /* Images.xcassets */, D0BCFE4218AEBDA2004A7AAE /* Supporting Files */, ); - path = godot_ios; + path = $binary; sourceTree = ""; }; D0BCFE4218AEBDA2004A7AAE /* Supporting Files */ = { isa = PBXGroup; children = ( - D0BCFE4318AEBDA2004A7AAE /* godot_ios-Info.plist */, + D0BCFE4318AEBDA2004A7AAE /* $binary-Info.plist */, D0BCFE4418AEBDA2004A7AAE /* InfoPlist.strings */, - D0BCFE4918AEBDA2004A7AAE /* godot_ios-Prefix.pch */, + D0BCFE4918AEBDA2004A7AAE /* $binary-Prefix.pch */, ); name = "Supporting Files"; sourceTree = ""; @@ -140,9 +141,9 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - D0BCFE3318AEBDA2004A7AAE /* godot_ios */ = { + D0BCFE3318AEBDA2004A7AAE /* $binary */ = { isa = PBXNativeTarget; - buildConfigurationList = D0BCFE7118AEBDA3004A7AAE /* Build configuration list for PBXNativeTarget "godot_ios" */; + buildConfigurationList = D0BCFE7118AEBDA3004A7AAE /* Build configuration list for PBXNativeTarget "$binary" */; buildPhases = ( D0BCFE3018AEBDA2004A7AAE /* Sources */, D0BCFE3118AEBDA2004A7AAE /* Frameworks */, @@ -152,9 +153,9 @@ ); dependencies = ( ); - name = godot_ios; - productName = godot_ios; - productReference = D0BCFE3418AEBDA2004A7AAE /* godot_ios.app */; + name = "$binary"; + productName = "$name"; + productReference = D0BCFE3418AEBDA2004A7AAE /* $binary.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ @@ -165,8 +166,24 @@ attributes = { LastUpgradeCheck = 0500; ORGANIZATIONNAME = GodotEngine; + TargetAttributes = { + D0BCFE3318AEBDA2004A7AAE = { + DevelopmentTeam = $team_id; + SystemCapabilities = { + com.apple.GameCenter = { + enabled = 1; + }; + com.apple.InAppPurchase = { + enabled = 1; + }; + com.apple.Push = { + enabled = 1; + }; + }; + }; + }; }; - buildConfigurationList = D0BCFE2F18AEBDA2004A7AAE /* Build configuration list for PBXProject "godot_ios" */; + buildConfigurationList = D0BCFE2F18AEBDA2004A7AAE /* Build configuration list for PBXProject "$binary" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; @@ -179,7 +196,7 @@ projectDirPath = ""; projectRoot = ""; targets = ( - D0BCFE3318AEBDA2004A7AAE /* godot_ios */, + D0BCFE3318AEBDA2004A7AAE /* $binary */, ); }; /* End PBXProject section */ @@ -189,22 +206,19 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - D07CD4471C5D573600B7FB28 /* Default-Portrait@2x~ipad.png in Resources */, + 1F1575721F582BE20003B888 /* dylibs in Resources */, D07CD44E1C5D589C00B7FB28 /* Images.xcassets in Resources */, - D0BCFE7818AEBFEB004A7AAE /* data.pck in Resources */, - D07CD4461C5D573600B7FB28 /* Default-Landscape~ipad.png in Resources */, + D0BCFE7818AEBFEB004A7AAE /* $binary.pck in Resources */, + D07CD4471C5D573600B7FB28 /* Default-Portrait@2x.png in Resources */, + D07CD4461C5D573600B7FB28 /* Default-Landscape-1366h@2x.png in Resources */, D07CD4411C5D573600B7FB28 /* Default-667h@2x.png in Resources */, - D07CD4401C5D573600B7FB28 /* Default-667h.png in Resources */, - D07CD4431C5D573600B7FB28 /* Default-736h@3x.png in Resources */, - D07CD43F1C5D573600B7FB28 /* Default-568h@2x~iphone.png in Resources */, - D07CD4451C5D573600B7FB28 /* Default-Landscape@2x~ipad.png in Resources */, - D07CD44A1C5D573600B7FB28 /* Default~iphone.png in Resources */, - D07CD4491C5D573600B7FB28 /* Default@2x~iphone.png in Resources */, - D07CD4441C5D573600B7FB28 /* Default-Landscape-736h.png in Resources */, - D07CD4421C5D573600B7FB28 /* Default-736h.png in Resources */, + D07CD43F1C5D573600B7FB28 /* Default-568h@2x.png in Resources */, + D07CD4451C5D573600B7FB28 /* Default-Landscape@2x.png in Resources */, + D07CD4441C5D573600B7FB28 /* Default-Landscape-736h@3x.png in Resources */, + D07CD4421C5D573600B7FB28 /* Default-Portrait-736h@3x.png in Resources */, + D07CD4481C5D573600B7FB28 /* Default-Portrait-1366h@2x.png in Resources */, D0BCFE4618AEBDA2004A7AAE /* InfoPlist.strings in Resources */, - D0BCFE7A18AEC06A004A7AAE /* godot_opt.iphone in Resources */, - D07CD4481C5D573600B7FB28 /* Default-Portrait~ipad.png in Resources */, + D0BCFE7A18AEC06A004A7AAE /* $binary.iphone in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -249,7 +263,7 @@ CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "$code_sign_identity_debug"; COPY_PHASE_STRIP = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; @@ -265,7 +279,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -289,7 +303,8 @@ CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_IDENTITY = "$code_sign_identity_release"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "$code_sign_identity_release"; COPY_PHASE_STRIP = YES; ENABLE_NS_ASSERTIONS = NO; GCC_C_LANGUAGE_STANDARD = gnu99; @@ -299,7 +314,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; @@ -311,13 +326,22 @@ buildSettings = { ARCHS = "$(ARCHS_STANDARD)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = $binary/$binary.entitlements; + CODE_SIGN_IDENTITY = "$code_sign_identity_debug"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "$code_sign_identity_debug"; CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)"; + DEVELOPMENT_TEAM = $team_id; GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "godot_ios/godot_ios-Prefix.pch"; - INFOPLIST_FILE = "godot_ios/godot_ios-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - PRODUCT_BUNDLE_IDENTIFIER = org.godotengine.game.ios; + GCC_PREFIX_HEADER = "$binary/$binary-Prefix.pch"; + INFOPLIST_FILE = "$binary/$binary-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/dylibs", + ); + PRODUCT_BUNDLE_IDENTIFIER = $identifier; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = "$provisioning_profile_uuid_debug"; TARGETED_DEVICE_FAMILY = "1,2"; VALID_ARCHS = "armv7 armv7s"; WRAPPER_EXTENSION = app; @@ -329,14 +353,22 @@ buildSettings = { ARCHS = "$(ARCHS_STANDARD)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Distribution: Ariel Manzur (BYC57PA2Q5)"; + CODE_SIGN_ENTITLEMENTS = $binary/$binary.entitlements; + CODE_SIGN_IDENTITY = "$code_sign_identity_release"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "$code_sign_identity_release"; CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)"; + DEVELOPMENT_TEAM = $team_id; GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "godot_ios/godot_ios-Prefix.pch"; - INFOPLIST_FILE = "godot_ios/godot_ios-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - PRODUCT_BUNDLE_IDENTIFIER = org.godotengine.game.ios; + GCC_PREFIX_HEADER = "$binary/$binary-Prefix.pch"; + INFOPLIST_FILE = "$binary/$binary-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/dylibs", + ); + PRODUCT_BUNDLE_IDENTIFIER = $identifier; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = "$provisioning_profile_uuid_release"; TARGETED_DEVICE_FAMILY = "1,2"; VALID_ARCHS = "armv7 armv7s"; WRAPPER_EXTENSION = app; @@ -346,7 +378,7 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - D0BCFE2F18AEBDA2004A7AAE /* Build configuration list for PBXProject "godot_ios" */ = { + D0BCFE2F18AEBDA2004A7AAE /* Build configuration list for PBXProject "$binary" */ = { isa = XCConfigurationList; buildConfigurations = ( D0BCFE6F18AEBDA3004A7AAE /* Debug */, @@ -355,7 +387,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - D0BCFE7118AEBDA3004A7AAE /* Build configuration list for PBXNativeTarget "godot_ios" */ = { + D0BCFE7118AEBDA3004A7AAE /* Build configuration list for PBXNativeTarget "$binary" */ = { isa = XCConfigurationList; buildConfigurations = ( D0BCFE7218AEBDA3004A7AAE /* Debug */, diff --git a/misc/dist/ios_xcode/godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/misc/dist/ios_xcode/godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 3c9ba38bbe..c9c19829f4 100644 --- a/misc/dist/ios_xcode/godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/misc/dist/ios_xcode/godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:$binary.xcodeproj"> diff --git a/misc/dist/ios_xcode/godot_ios.xcodeproj/xcshareddata/xcschemes/godot_ios.xcscheme b/misc/dist/ios_xcode/godot_ios.xcodeproj/xcshareddata/xcschemes/godot_ios.xcscheme new file mode 100644 index 0000000000..3f0df5c437 --- /dev/null +++ b/misc/dist/ios_xcode/godot_ios.xcodeproj/xcshareddata/xcschemes/godot_ios.xcscheme @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/misc/dist/ios_xcode/godot_ios/Default-568h@2x~iphone.png b/misc/dist/ios_xcode/godot_ios/Default-568h@2x.png similarity index 100% rename from misc/dist/ios_xcode/godot_ios/Default-568h@2x~iphone.png rename to misc/dist/ios_xcode/godot_ios/Default-568h@2x.png diff --git a/misc/dist/ios_xcode/godot_ios/Default-667h.png b/misc/dist/ios_xcode/godot_ios/Default-667h.png deleted file mode 100644 index b13a399c831d66fddf16a0342089c5146fca4b94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 683 zcmeAS@N?(olHy`uVBq!ia0y~yV0y>Ez-q?Gz`(%pXbsVk90|Ns~x}&cn17q6)!xz)y z85kItlDyqr7#Qz%2`^z_VBjq9h%9Dc;8SB@;Qi0|A^7QM1_lQ95>H=O_6KZYLfWD# zYn5Ud7&uKmT^vIyZoR$WD9E6|b6~?yb6%!v_BKMSd(S1#yv}HEq&h>$hjSTAaFgc2 zDG6Q%qukNZ7)=bLd116D7%d4$OTy8Ta731bJ4822E4$y@UCY40pjzS@QIe8al4_M) zl$uzQ%3x$*Xr^mmrfXyrVq{=tY-wd=rfpzkWnge}?TH{14Y~O#nQ4`{HSG9M@D9}A N^K|udS?83{1OPokONsyh diff --git a/misc/dist/ios_xcode/godot_ios/Default-Landscape-1366h@2x.png b/misc/dist/ios_xcode/godot_ios/Default-Landscape-1366h@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ec5b4f78881ad1ffac63b14f8b5a5808144b633a GIT binary patch literal 32836 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 literal 0 HcmV?d00001 diff --git a/misc/dist/ios_xcode/godot_ios/Default-Landscape-736h.png b/misc/dist/ios_xcode/godot_ios/Default-Landscape-736h@3x.png similarity index 100% rename from misc/dist/ios_xcode/godot_ios/Default-Landscape-736h.png rename to misc/dist/ios_xcode/godot_ios/Default-Landscape-736h@3x.png diff --git a/misc/dist/ios_xcode/godot_ios/Default-Landscape@2x~ipad.png b/misc/dist/ios_xcode/godot_ios/Default-Landscape@2x.png similarity index 100% rename from misc/dist/ios_xcode/godot_ios/Default-Landscape@2x~ipad.png rename to misc/dist/ios_xcode/godot_ios/Default-Landscape@2x.png diff --git a/misc/dist/ios_xcode/godot_ios/Default-Landscape~ipad.png b/misc/dist/ios_xcode/godot_ios/Default-Landscape~ipad.png deleted file mode 100644 index 4a761c339acd052b110110f6df826eb20b0b015a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 634 zcmeAS@N?(olHy`uVBq!ia0y~yU}0cjU}j)sU|?XFbWmdf0|Ns~x}&cn17q6)!xz)y z85kItlDyqr7#Qz%2`^z_VBjq9h%9DcVDJEAx0Bg+3=9nHC7!;n><`$)gtW!>E-8M_ zz`!`u)5S5Q;?~=9iXgL@6#mb@CMg!-P$kAV3I;F)8p{*xYo{gOJN3qzfq_A_#5JNM zC9x#cD!C{%u_Tqj$iUD{*T78I$SB0fz{=Rt%E(OHz{twL;N;p9K`0t>^HVa@DsgMr T@uA=yC{cO3`njxgN@xNAS2;xE diff --git a/misc/dist/ios_xcode/godot_ios/Default-Portrait-1366h@2x.png b/misc/dist/ios_xcode/godot_ios/Default-Portrait-1366h@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d054ba2abb2b45094c8c0c5cbc94f45be70d07 GIT binary patch literal 33309 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 literal 0 HcmV?d00001 diff --git a/misc/dist/ios_xcode/godot_ios/Default-736h.png b/misc/dist/ios_xcode/godot_ios/Default-Portrait-736h@3x.png similarity index 100% rename from misc/dist/ios_xcode/godot_ios/Default-736h.png rename to misc/dist/ios_xcode/godot_ios/Default-Portrait-736h@3x.png diff --git a/misc/dist/ios_xcode/godot_ios/Default-Portrait@2x.png b/misc/dist/ios_xcode/godot_ios/Default-Portrait@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d054ba2abb2b45094c8c0c5cbc94f45be70d07 GIT binary patch literal 33309 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 literal 0 HcmV?d00001 diff --git a/misc/dist/ios_xcode/godot_ios/Default-Portrait@2x~ipad.png b/misc/dist/ios_xcode/godot_ios/Default-Portrait@2x~ipad.png deleted file mode 100644 index b09cf21186295cdeb57efebb175863701dd2edcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3070 zcmeAS@N?(olHy`uVBq!ia0y~yU}Iol;9y{6U|?W4vFhk-1_lO}bVpxD2FA7phA*bY zGcYhPC3(BMFfiWj5?;csNDTE7u=w0(E_I=S&13;1Z-xW&D04I%Miaqk zW*99AMoYxe>R_~59BmVfwvC2)!|*^pcSTX;^7BoN!VC-yswJ)wB`Jv|saDBFsfi`2 z3`PcqX1WGux<*DJMg~^KmR3e)+6G2e1_meBo(MwGkei>9nO2Eg!;TLH??4TEPgg&e IbxsLQ06~;OXaE2J diff --git a/misc/dist/ios_xcode/godot_ios/Default-Portrait~ipad.png b/misc/dist/ios_xcode/godot_ios/Default-Portrait~ipad.png deleted file mode 100644 index fa698eb70cb662913e5ec17d43a4ef4cc0dd1dc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 589 zcmeAS@N?(olHy`uVBq!ia0y~yU}j)oU}0cnU|?XVi)CI5;-x$KIx;Y}EiimBEuMja zfhoz`-GzbiZkO;91_lPs0*}aI1_lNXFm^kcZO6dCz+U3%>&pIsO-x8zRAsGFECT~$ zj;D)bNX4zUXAOB77<`$)gtW!>E-8M_ zz`&^F>EaktaqI0FLq-M$9wvp~)2}gEmpd_BN*Cm6by^spAu__LhpF9VPs=s8=*loK zFsPQeMwFx^mZVxG7o{eaq%s&87@FxCnCTiBg%}xF8CzNznQ0psSs56dTzeu2MMG|W ZN@iLmZVfv=6ubk)uBWS?%Q~loCIH58j_m*d diff --git a/misc/dist/ios_xcode/godot_ios/Default~iphone.png b/misc/dist/ios_xcode/godot_ios/Default~iphone.png deleted file mode 100644 index c485a33b03b4887553ecf427d2aea02cce39ca0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 309 zcmeAS@N?(olHy`uVBq!ia0y~yV02($V0^&Hz`(%p=X>W%1_lO}bVpxD2FA7phA*bY zGcYhPC3(BMFfiWj5?;c!C8<`)MX8A;sSHL2hGx13X1Yd3Aw~vP#+Ft_X4(cuRt5$q*PaMM(U6;;l9^VC VTf>eI1@A!N;pyt|DMQvUz| diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Contents.json b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index a458b67873..0000000000 --- a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,128 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "1x", - "filename": "Icon-29.png", - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x", - "filename": "Icon-58.png", - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x", - "filename": "icon-87.png", - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x", - "filename": "Icon-80.png", - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x", - "filename": "Icon-120.png", - }, - { - "idiom" : "iphone", - "size" : "57x57", - "scale" : "1x", - "filename": "Icon-57.png", - }, - { - "idiom" : "iphone", - "size" : "57x57", - "scale" : "2x", - "filename": "Icon-114.png", - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x", - "filename": "Icon-120.png", - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x", - "filename": "Icon-180.png", - }, - { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "1x", - "filename": "Icon-29.png", - }, - { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "2x", - "filename": "Icon-58.png", - }, - { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "1x", - "filename": "Icon-40.png", - }, - { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "2x", - "filename": "Icon-80.png", - }, - { - "idiom" : "ipad", - "size" : "50x50", - "scale" : "1x", - "filename": "Icon-50.png", - }, - { - "idiom" : "ipad", - "size" : "50x50", - "scale" : "2x", - "filename": "Icon-100.png", - }, - { - "idiom" : "ipad", - "size" : "72x72", - "scale" : "1x", - "filename": "Icon-72.png", - }, - { - "idiom" : "ipad", - "size" : "72x72", - "scale" : "2x", - "filename": "Icon-144.png", - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-76.png", - "scale" : "1x", - }, - { - "idiom" : "ipad", - "size" : "76x76", - "scale" : "2x", - "filename": "Icon-152.png", - }, - { - "idiom" : "ipad", - "size" : "83.5x83.5", - "scale" : "2x", - "filename": "icon-167.png", - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-100.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-100.png deleted file mode 100644 index 165f4423b3cad938d65d3c63a53e43720afc5855..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 250 zcmeAS@N?(olHy`uVBq!ia0y~yU`PRBMg|53hKQLfeljpHu%tWsIx;Y}EiimBEuMja zfhoz`-GzbiZkO;91_lPs0*}aI1_lNXFm^kcZO6dCz+U3%>&pIsO-x8zRAsGFECU0B zq^FBxh{fsTAN?$L20fqLDi`kwyrcFF diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-114.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-114.png deleted file mode 100644 index 2e205e920cff70017aa2dc67f9b78d219fb01121..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 253 zcmeAS@N?(olHy`uVBq!ia0y~yU?>7%Mg|53hULq4Twq{eU`coMb!1>{TVVKNT08>- z15=W>y9)#3-7euJ3=9mM1s;*b3=9k&VC;4>+m3;OfxX1j*OmPNo0yQcsLEQUSOx|L z8BZ6-5R22vKl+*Y40=Af|6Keh@SjHg6#G;53=G~Ay5~=NZ=KD+z@S><8c~vxSdwa$ zT$GwvlFDFYU}&amV5Vzi6k=pxWo&6>WTtIkWMyD*a_tF_dl4FP^HVa@DsgMr@uA=y O$X}kWelF{r5}E)pFh!yO diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-120.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-120.png deleted file mode 100644 index 6245f83f484fedb63c5a79e36aaacb8da57f4a5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 253 zcmeAS@N?(olHy`uVBq!ia0y~yV5k6LMg|5320?l5dIkmtmUKs7M+U~W1%@xC#WOH4 zFeQ1ryD%``?Gj$Xz`(#+;1OBOz`)=E#%?FG?HCvs*h@TpUD+S7i3w?os;pItWnf^C z@pN$vu{fRlqn}H{?dRe@f&Vn>r`Vs8e|mWiKZ9{MV^YK0N16-_45}rr5hW>!C8<`) zMX8A;sSHL2hGx13X1Yd3Aw~vP#+Ft_X4(cuRt5$q*PZ~m7oj0HKP5A*61RpO9}3=q O{N?HD=d#Wzp$PzV6+@-~ diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-144.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-144.png deleted file mode 100644 index 7b24e01bc63f413ea90d76600864a8142128741d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 259 zcmeAS@N?(olHy`uVBq!ia0y~yV3+{Hj0_A64Cig{i!v}Uu%tWsIx;Y}EiimBEuMja zfhoz`-GzbiZkO;91_lPs0*}aI1_lNXFm^kcZO6dCz+U3%>&pIsO-x8zRAsGFECU0B zlBbJfh{y4_Ckz=G7!N|bSOxM6n*T^Wu$iT|j(#pt8+rY@mz~JQC6ChV3H00)|WTsW( V*0AG4!8?%eJYD@<);T3K0RSJoM5zD( diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-152.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-152.png deleted file mode 100644 index 344b470fa3009ec2be635d6c26d739b29df32af2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 260 zcmeAS@N?(olHy`uVBq!ia0y~yV3+~Ij0_A63*F*2|+wzM)b(>5@&GB7x~_5{e;2o1UUDVb@N VxHatfQ1A}qJx^CZmvv4FO#r}SMaTdE diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-180.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-180.png deleted file mode 100644 index 0dcebbc3f2ccfb5e4915a2f8445b68249e6ffbe1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 265 zcmeAS@N?(olHy`uVBq!ia0y~yVAuk}j0_A645Hht=QA)cu%tWsIx;Y}EiimBEuMja zfhoz`-GzbiZkO;91_lPs0*}aI1_lNXFm^kcZO6dCz+U3%>&pIsO-x8zRAsGFECU0B zhNp{TNW|f{Ck%NR7&w?W{0#4APGewJd3*Cs=A*se?^VAC5&xfXyJZPkUMjxzgn@xU zwZt`|BqgyV)hf9tHL)a>!N|bSOxM6n*T^Wu$iT|j(#pt8+rY@mz~JQC6Ck%EH00)| ZWTsW(*0AG4!8?#2Jzf1=);T3K0RYb-OrQV& diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-29.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-29.png deleted file mode 100644 index 9ae94e9aaf28038dcc1e3feee3014612af0c1e94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 242 zcmeAS@N?(olHy`uVBq!ia0y~yV2}l2Mg|53hPoF~ix?OfSkfJR9T^zg78t&m7SF)I zz?9_e?!v%$w@Y{l0|NtRfk$L90|SEx7`vU!wqsymU@!6Xb!C6RCMKjUs2!7QTUjfkCyzHKHUXu_VNH5F)%QwmbgZgq$HN4S|t~yCYGc!7#SFv=^B{n z8X1Kc8CV%xS{a#X8yHy`7@S;t0^~%5hTQy=%(P0}8g_grcn9)|r>mdKI;Vst0J_*b A761SM diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-50.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-50.png deleted file mode 100644 index 9e69ed3121d16e44cf8dee8ad8ba420cc5d34234..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 243 zcmeAS@N?(olHy`uVBq!ia0y~yU@!t+a^c}^OhZEU|>)!ag8WRNi0dVN-j!GEJzm0XmXSdz+MWMF8f zYhb2pWE5g#U}bD+Wn`vpU}R-raB}SlkSh@ya`RI%(<*Um*zuv@9mqGHu6{1-oD!M< DC@(ya diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-58.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-58.png deleted file mode 100644 index 6097a6c73b7e694d06dc340d3ff340d47d097976..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 243 zcmeAS@N?(olHy`uVBq!ia0y~yV6XyVMg|53hLZ=%TNxM_SkfJR9T^zg78t&m7SF)I zz?9_e?!v%$w@Y{l0|NtRfk$L90|SEx7`vU!wqsymU@!6Xb!C6RCMKjUsSYL+%*U|>)!ag8WRNi0dVN-j!GEJ!N|bS zOxM6n*T^Wu$iT|j(#pt8+rY@mz~JQC6Ch_IH00)|WTsW(*0AG4!8?$5JYD@<);T3K F0RSMhJ}v+N diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-72.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-72.png deleted file mode 100644 index 34dea8e6ad255261a0d0b14cef0dd51ad45fbb85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 244 zcmeAS@N?(olHy`uVBq!ia0y~yVDJE8Mg|53hT3U;uNW8@SkfJR9T^zg78t&m7SF)I zz?9_e?!v%$w@Y{l0|NtRfk$L9NDCOdoy@jlU|?V`@$_|Nf50Xtq%EqlRwwRQTY@`8yB3=FCzt`Q|Ei6yC4$wjG&C8-QX28L$3 z24=cOMj=K9R>qcAMrPUuMpgy}C)b_;ITN8FH$NpatrE9}9UltbfxP4C>gTe~DWM4f DIe|bl diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-76.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-76.png deleted file mode 100644 index f72eb0b345c2789332313f3ad9516d563eaea9f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 246 zcmeAS@N?(olHy`uVBq!ia0y~yVDJH9Mg|53hWBrB+87uZSkfJR9T^zg78t&m7SF)I zz?9_e?!v%$w@Y{l0|NtRfk$L90|SEx7`vU!wqsymU@!6Xb!C6RCMKjUsqcAMrPUuMpgy}C)b_;ITWEGH$NpatrE9}9Ultbfjs2t>gTe~ HDWM4f?!Z9> diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-80.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-80.png deleted file mode 100644 index 793c9b1f5fd34ef3f385f3f383a4f213f4c1909c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 245 zcmeAS@N?(olHy`uVBq!ia0y~yU~6qpu?aW7`757t`Vy7#Nt6 zyxm+agnPb;&J@#2}4E(1`g&0U-{Q+KS*S-I4P%gEh>BM)@xDOZ;QEo9xctRzKpymT^>bP0l+XkKS)EAH diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-87.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-87.png deleted file mode 100644 index e9b2429754656ca4825b3984bcbb3347ada2857a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 247 zcmeAS@N?(olHy`uVBq!ia0y~yUu%tWsIx;Y}EiimBEuMja zfhoz`-GzbiZkO;91_lPs0*}aI1_lNXFm^kcZO6dCz+U3%>&pIsO-x8zRAsGFECU0B zn5T6%yf;6LW~Toj4iE<%(M-RtPBiJu04UOAvZrIGp!Q0h8-UY-hq7N>FVdQ&MBb@ E0HC8nApigX diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/sizes b/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/sizes deleted file mode 100644 index e328a62cb6..0000000000 --- a/misc/dist/ios_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/sizes +++ /dev/null @@ -1,17 +0,0 @@ -100 -114 -120 -144 -152 -167 -180 -29 -40 -50 -57 -58 -60 -72 -76 -80 -87 diff --git a/misc/dist/ios_xcode/godot_ios/godot_ios-Info.plist b/misc/dist/ios_xcode/godot_ios/godot_ios-Info.plist index f97b0fca36..1531a41bd0 100644 --- a/misc/dist/ios_xcode/godot_ios/godot_ios-Info.plist +++ b/misc/dist/ios_xcode/godot_ios/godot_ios-Info.plist @@ -5,32 +5,33 @@ CFBundleDevelopmentRegion en CFBundleDisplayName - Insert Name Here + $name CFBundleExecutable - godot_opt.iphone + $binary.iphone CFBundleIcons CFBundleIcons~ipad CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) + $identifier CFBundleInfoDictionaryVersion 6.0 CFBundleName - ${PRODUCT_NAME} + $name CFBundlePackageType APPL CFBundleShortVersionString - 1.0 + $short_version CFBundleSignature - ???? + $signature CFBundleVersion - 1.0 + $version LSRequiresIPhoneOS UIRequiredDeviceCapabilities armv7 + gamekit UIRequiresFullScreen diff --git a/misc/dist/ios_xcode/godot_ios/godot_ios.entitlements b/misc/dist/ios_xcode/godot_ios/godot_ios.entitlements new file mode 100644 index 0000000000..903def2af5 --- /dev/null +++ b/misc/dist/ios_xcode/godot_ios/godot_ios.entitlements @@ -0,0 +1,8 @@ + + + + + aps-environment + development + + diff --git a/modules/gdnative/SCsub b/modules/gdnative/SCsub index f386f2b542..39f5ec5378 100644 --- a/modules/gdnative/SCsub +++ b/modules/gdnative/SCsub @@ -11,7 +11,7 @@ gdn_env.add_source_files(env.modules_sources, "nativescript/*.cpp") gdn_env.Append(CPPFLAGS=['-DGDAPI_BUILT_IN']) gdn_env.Append(CPPPATH=['#modules/gdnative/include/']) -if "platform" in env and env["platform"] == "x11": # there has to be a better solution? +if "platform" in env and env["platform"] in ["x11", "iphone"]: env.Append(LINKFLAGS=["-rdynamic"]) env.use_ptrcall = True diff --git a/modules/gdnative/gdnative.cpp b/modules/gdnative/gdnative.cpp index 93a9bac11c..11856e4ffb 100644 --- a/modules/gdnative/gdnative.cpp +++ b/modules/gdnative/gdnative.cpp @@ -234,8 +234,11 @@ bool GDNative::initialize() { ERR_PRINT("No library set for this platform"); return false; } - +#ifdef IPHONE_ENABLED + String path = lib_path.replace("res://", "dylibs/"); +#else String path = ProjectSettings::get_singleton()->globalize_path(lib_path); +#endif Error err = OS::get_singleton()->open_dynamic_library(path, native_handle); if (err != OK) { return false; diff --git a/modules/gdnative/include/gdnative/gdnative.h b/modules/gdnative/include/gdnative/gdnative.h index 18d51daeb3..19dd030637 100644 --- a/modules/gdnative/include/gdnative/gdnative.h +++ b/modules/gdnative/include/gdnative/gdnative.h @@ -49,8 +49,8 @@ extern "C" { #elif defined(__APPLE__) #include "TargetConditionals.h" #if TARGET_OS_IPHONE -#define GDCALLINGCONV -#define GDAPI +#define GDCALLINGCONV __attribute__((visibility("default"))) +#define GDAPI GDCALLINGCONV #elif TARGET_OS_MAC #define GDCALLINGCONV __attribute__((sysv_abi)) #define GDAPI GDCALLINGCONV diff --git a/modules/gdnative/include/nativescript/godot_nativescript.h b/modules/gdnative/include/nativescript/godot_nativescript.h index 96f213ead7..5095b7a83e 100644 --- a/modules/gdnative/include/nativescript/godot_nativescript.h +++ b/modules/gdnative/include/nativescript/godot_nativescript.h @@ -51,8 +51,8 @@ extern "C" { #elif defined(__APPLE__) #include "TargetConditionals.h" #if TARGET_OS_IPHONE -#define GDCALLINGCONV -#define GDAPI +#define GDCALLINGCONV __attribute__((visibility("default"))) +#define GDAPI GDCALLINGCONV #elif TARGET_OS_MAC #define GDCALLINGCONV __attribute__((sysv_abi)) #define GDAPI GDCALLINGCONV diff --git a/modules/gdnative/nativescript/SCsub b/modules/gdnative/nativescript/SCsub index e980e40e8e..178afec64a 100644 --- a/modules/gdnative/nativescript/SCsub +++ b/modules/gdnative/nativescript/SCsub @@ -7,4 +7,7 @@ mod_env.add_source_files(env.modules_sources, "*.cpp") mod_env.Append(CPPPATH='#modules/gdnative') mod_env.Append(CPPFLAGS=['-DGDAPI_BUILT_IN']) +if "platform" in env and env["platform"] in ["x11", "iphone"]: + env.Append(LINKFLAGS=["-rdynamic"]) + Export('mod_env') diff --git a/platform/iphone/export/export.cpp b/platform/iphone/export/export.cpp index 8bb7f23ead..c91781ce1d 100644 --- a/platform/iphone/export/export.cpp +++ b/platform/iphone/export/export.cpp @@ -52,7 +52,14 @@ class EditorExportPlatformIOS : public EditorExportPlatform { Ref logo; - void _fix_config_file(const Ref &p_preset, Vector &pfile, const String &p_name, const String &p_binary); + typedef Error (*FileHandler)(String p_file, void *p_userdata); + static Error _walk_dir_recursive(DirAccess *p_da, FileHandler p_handler, void *p_userdata); + static Error _codesign(String p_file, void *p_userdata); + + void _fix_config_file(const Ref &p_preset, Vector &pfile, const String &p_name, const String &p_binary, bool p_debug); + static Error _export_dylibs(void *p_userdata, const String &p_path, const Vector &p_data, int p_file, int p_total); + Error _export_loading_screens(const Ref &p_preset, const String &p_dest_dir); + Error _export_icons(const Ref &p_preset, const String &p_iconset_dir); protected: virtual void get_preset_features(const Ref &p_preset, List *r_features); @@ -63,7 +70,7 @@ public: virtual String get_os_name() const { return "iOS"; } virtual Ref get_logo() const { return logo; } - virtual String get_binary_extension() const { return "xcodeproj"; } + virtual String get_binary_extension() const { return "ipa"; } virtual Error export_project(const Ref &p_preset, bool p_debug, const String &p_path, int p_flags = 0); virtual bool can_export(const Ref &p_preset, String &r_error, bool &r_missing_templates) const; @@ -96,16 +103,44 @@ void EditorExportPlatformIOS::get_export_options(List *r_options) r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "custom_package/debug", PROPERTY_HINT_GLOBAL_FILE, "zip"), "")); r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "custom_package/release", PROPERTY_HINT_GLOBAL_FILE, "zip"), "")); + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/app_store_team_id"), "")); + + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/provisioning_profile_uuid_debug"), "")); + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/code_sign_identity_debug"), "iPhone Developer")); + r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "application/export_method_debug", PROPERTY_HINT_ENUM, "App Store,Development,Ad-Hoc,Enterprise"), 1)); + + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/provisioning_profile_uuid_release"), "")); + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/code_sign_identity_release"), "iPhone Distribution")); + r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "application/export_method_release", PROPERTY_HINT_ENUM, "App Store,Development,Ad-Hoc,Enterprise"), 0)); + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/name"), "")); r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/info"), "Made with Godot Engine")); - // r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/icon", PROPERTY_HINT_FILE, "png"), "")); r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/identifier"), "org.godotengine.iosgame")); - r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/signature"), "godotiosgame")); + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/signature"), "????")); r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/short_version"), "1.0")); r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/version"), "1.0")); r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/copyright"), "")); r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "application/bits_mode", PROPERTY_HINT_ENUM, "Fat (32 & 64 bits),64 bits,32 bits"), 1)); + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "required_icons/iphone_120x120", PROPERTY_HINT_FILE, "png"), "")); // Home screen on iPhone/iPod Touch with retina display + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "required_icons/ipad_76x76", PROPERTY_HINT_FILE, "png"), "")); // Home screen on iPad + + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "optional_icons/iphone_180x180", PROPERTY_HINT_FILE, "png"), "")); // Home screen on iPhone with retina HD display + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "optional_icons/ipad_152x152", PROPERTY_HINT_FILE, "png"), "")); // Home screen on iPad with retina display + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "optional_icons/ipad_167x167", PROPERTY_HINT_FILE, "png"), "")); // Home screen on iPad Pro + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "optional_icons/spotlight_40x40", PROPERTY_HINT_FILE, "png"), "")); // Spotlight + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "optional_icons/spotlight_80x80", PROPERTY_HINT_FILE, "png"), "")); // Spotlight on devices with retina display + + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "landscape_launch_screens/iphone_2208x1242", PROPERTY_HINT_FILE, "png"), "")); // iPhone 6 Plus, 6s Plus, 7 Plus + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "landscape_launch_screens/ipad_2732x2048", PROPERTY_HINT_FILE, "png"), "")); // 12.9-inch iPad Pro + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "landscape_launch_screens/ipad_2048x1536", PROPERTY_HINT_FILE, "png"), "")); // Other iPads + + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "portrait_launch_screens/iphone_640x1136", PROPERTY_HINT_FILE, "png"), "")); // iPhone 5, 5s, SE + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "portrait_launch_screens/iphone_750x1334", PROPERTY_HINT_FILE, "png"), "")); // iPhone 6, 6s, 7 + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "portrait_launch_screens/iphone_1242x2208", PROPERTY_HINT_FILE, "png"), "")); // iPhone 6 Plus, 6s Plus, 7 Plus + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "portrait_launch_screens/ipad_2048x2732", PROPERTY_HINT_FILE, "png"), "")); // 12.9-inch iPad Pro + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "portrait_launch_screens/ipad_1536x2048", PROPERTY_HINT_FILE, "png"), "")); // Other iPads + r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "texture_format/s3tc"), false)); r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "texture_format/etc"), false)); r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "texture_format/etc2"), true)); @@ -113,11 +148,17 @@ void EditorExportPlatformIOS::get_export_options(List *r_options) /* probably need some more info */ } -void EditorExportPlatformIOS::_fix_config_file(const Ref &p_preset, Vector &pfile, const String &p_name, const String &p_binary) { - +void EditorExportPlatformIOS::_fix_config_file(const Ref &p_preset, Vector &pfile, const String &p_name, const String &p_binary, bool p_debug) { + static const String export_method_string[] = { + "app-store", + "development", + "ad-hoc", + "enterprise" + }; String str; String strnew; str.parse_utf8((const char *)pfile.ptr(), pfile.size()); + print_line(str); Vector lines = str.split("\n"); for (int i = 0; i < lines.size(); i++) { if (lines[i].find("$binary") != -1) { @@ -136,6 +177,19 @@ void EditorExportPlatformIOS::_fix_config_file(const Ref &p_ strnew += lines[i].replace("$signature", p_preset->get("application/signature")) + "\n"; } else if (lines[i].find("$copyright") != -1) { strnew += lines[i].replace("$copyright", p_preset->get("application/copyright")) + "\n"; + } else if (lines[i].find("$team_id") != -1) { + strnew += lines[i].replace("$team_id", p_preset->get("application/app_store_team_id")) + "\n"; + } else if (lines[i].find("$export_method") != -1) { + int export_method = p_preset->get(p_debug ? "application/export_method_debug" : "application/export_method_release"); + strnew += lines[i].replace("$export_method", export_method_string[export_method]) + "\n"; + } else if (lines[i].find("$provisioning_profile_uuid_release") != -1) { + strnew += lines[i].replace("$provisioning_profile_uuid_release", p_preset->get("application/provisioning_profile_uuid_release")) + "\n"; + } else if (lines[i].find("$provisioning_profile_uuid_debug") != -1) { + strnew += lines[i].replace("$provisioning_profile_uuid_debug", p_preset->get("application/provisioning_profile_uuid_debug")) + "\n"; + } else if (lines[i].find("$code_sign_identity_debug") != -1) { + strnew += lines[i].replace("$code_sign_identity_debug", p_preset->get("application/code_sign_identity_debug")) + "\n"; + } else if (lines[i].find("$code_sign_identity_release") != -1) { + strnew += lines[i].replace("$code_sign_identity_release", p_preset->get("application/code_sign_identity_release")) + "\n"; } else { strnew += lines[i] + "\n"; } @@ -150,12 +204,214 @@ void EditorExportPlatformIOS::_fix_config_file(const Ref &p_ } } +Error EditorExportPlatformIOS::_export_dylibs(void *p_userdata, const String &p_path, const Vector &p_data, int p_file, int p_total) { + if (!p_path.ends_with(".dylib")) return OK; + const String &dest_dir = *(String *)p_userdata; + String rel_path = p_path.replace_first("res://", "dylibs/"); + DirAccess *dest_dir_access = DirAccess::open(dest_dir); + ERR_FAIL_COND_V(!dest_dir_access, ERR_CANT_OPEN); + + String base_dir = rel_path.get_base_dir(); + Error make_dir_err = OK; + if (!dest_dir_access->dir_exists(base_dir)) { + make_dir_err = dest_dir_access->make_dir_recursive(base_dir); + } + if (make_dir_err != OK) { + memdelete(dest_dir_access); + return make_dir_err; + } + + Error copy_err = dest_dir_access->copy(p_path, dest_dir + rel_path); + memdelete(dest_dir_access); + + return copy_err; +} + +struct IconInfo { + const char *preset_key; + const char *idiom; + const char *export_name; + const char *actual_size_side; + const char *scale; + const char *unscaled_size; + bool is_required; +}; + +static const IconInfo icon_infos[] = { + { "required_icons/iphone_120x120", "iphone", "Icon-120.png", "120", "2x", "60x60", true }, + { "required_icons/iphone_120x120", "iphone", "Icon-120.png", "120", "3x", "40x40", true }, + + { "required_icons/ipad_76x76", "ipad", "Icon-76.png", "76", "1x", "76x76", false }, + + { "optional_icons/iphone_180x180", "iphone", "Icon-180.png", "180", "3x", "60x60", false }, + + { "optional_icons/ipad_152x152", "ipad", "Icon-152.png", "152", "2x", "76x76", false }, + + { "optional_icons/ipad_167x167", "ipad", "Icon-167.png", "167", "2x", "83.5x83.5", false }, + + { "optional_icons/spotlight_40x40", "ipad", "Icon-40.png", "40", "1x", "40x40", false }, + + { "optional_icons/spotlight_80x80", "iphone", "Icon-80.png", "80", "2x", "40x40", false }, + { "optional_icons/spotlight_80x80", "ipad", "Icon-80.png", "80", "2x", "40x40", false } + +}; + +Error EditorExportPlatformIOS::_export_icons(const Ref &p_preset, const String &p_iconset_dir) { + String json_description = "{\"images\":["; + String sizes; + + DirAccess *da = DirAccess::open(p_iconset_dir); + ERR_FAIL_COND_V(!da, ERR_CANT_OPEN); + + for (int i = 0; i < (sizeof(icon_infos) / sizeof(icon_infos[0])); ++i) { + IconInfo info = icon_infos[i]; + String icon_path = p_preset->get(info.preset_key); + if (icon_path.length() == 0) { + if (info.is_required) { + ERR_PRINT("Required icon is not specified in the preset"); + return ERR_UNCONFIGURED; + } + continue; + } + Error err = da->copy(icon_path, p_iconset_dir + info.export_name); + if (err) { + memdelete(da); + String err_str = String("Failed to export icon: ") + icon_path; + ERR_PRINT(err_str.utf8().get_data()); + return err; + } + sizes += String(info.actual_size_side) + "\n"; + if (i > 0) { + json_description += ","; + } + json_description += String("{"); + json_description += String("\"idiom\":") + "\"" + info.idiom + "\","; + json_description += String("\"size\":") + "\"" + info.unscaled_size + "\","; + json_description += String("\"scale\":") + "\"" + info.scale + "\","; + json_description += String("\"filename\":") + "\"" + info.export_name + "\""; + json_description += String("}"); + } + json_description += "]}"; + memdelete(da); + + FileAccess *json_file = FileAccess::open(p_iconset_dir + "Contents.json", FileAccess::WRITE); + ERR_FAIL_COND_V(!json_file, ERR_CANT_CREATE); + CharString json_utf8 = json_description.utf8(); + json_file->store_buffer((const uint8_t *)json_utf8.get_data(), json_utf8.length()); + memdelete(json_file); + + FileAccess *sizes_file = FileAccess::open(p_iconset_dir + "sizes", FileAccess::WRITE); + ERR_FAIL_COND_V(!sizes_file, ERR_CANT_CREATE); + CharString sizes_utf8 = sizes.utf8(); + sizes_file->store_buffer((const uint8_t *)sizes_utf8.get_data(), sizes_utf8.length()); + memdelete(sizes_file); + + return OK; +} + +struct LoadingScreenInfo { + const char *preset_key; + const char *export_name; +}; + +static const LoadingScreenInfo loading_screen_infos[] = { + { "landscape_launch_screens/iphone_2208x1242", "Default-Landscape-736h@3x.png" }, + { "landscape_launch_screens/ipad_2732x2048", "Default-Landscape-1366h@2x.png" }, + { "landscape_launch_screens/ipad_2048x1536", "Default-Landscape@2x.png" }, + + { "portrait_launch_screens/iphone_640x1136", "Default-568h@2x.png" }, + { "portrait_launch_screens/iphone_750x1334", "Default-667h@2x.png" }, + { "portrait_launch_screens/iphone_1242x2208", "Default-Portrait-736h@3x.png" }, + { "portrait_launch_screens/ipad_2048x2732", "Default-Portrait-1366h@2x.png" }, + { "portrait_launch_screens/ipad_1536x2048", "Default-Portrait@2x.png" } +}; + +Error EditorExportPlatformIOS::_export_loading_screens(const Ref &p_preset, const String &p_dest_dir) { + DirAccess *da = DirAccess::open(p_dest_dir); + ERR_FAIL_COND_V(!da, ERR_CANT_OPEN); + + for (int i = 0; i < sizeof(loading_screen_infos) / sizeof(loading_screen_infos[0]); ++i) { + LoadingScreenInfo info = loading_screen_infos[i]; + String loading_screen_file = p_preset->get(info.preset_key); + Error err = da->copy(loading_screen_file, p_dest_dir + info.export_name); + if (err) { + memdelete(da); + String err_str = String("Failed to export loading screen: ") + loading_screen_file; + ERR_PRINT(err_str.utf8().get_data()); + return err; + } + } + memdelete(da); + + return OK; +} + +Error EditorExportPlatformIOS::_walk_dir_recursive(DirAccess *p_da, FileHandler p_handler, void *p_userdata) { + Vector dirs; + String path; + String current_dir = p_da->get_current_dir(); + p_da->list_dir_begin(); + while ((path = p_da->get_next()).length() != 0) { + if (p_da->current_is_dir()) { + if (path != "." && path != "..") { + dirs.push_back(path); + } + } else { + Error err = p_handler(current_dir + "/" + path, p_userdata); + if (err) { + p_da->list_dir_end(); + return err; + } + } + } + p_da->list_dir_end(); + + for (int i = 0; i < dirs.size(); ++i) { + String dir = dirs[i]; + p_da->change_dir(dir); + Error err = _walk_dir_recursive(p_da, p_handler, p_userdata); + p_da->change_dir(".."); + if (err) { + return err; + } + } + + return OK; +} + +struct CodesignData { + const Ref &preset; + bool debug; + + CodesignData(const Ref &p_preset, bool p_debug) + : preset(p_preset), debug(p_debug) { + } +}; + +Error EditorExportPlatformIOS::_codesign(String p_file, void *p_userdata) { + if (p_file.ends_with(".dylib")) { + CodesignData *data = (CodesignData *)p_userdata; + print_line(String("Signing ") + p_file); + List codesign_args; + codesign_args.push_back("-f"); + codesign_args.push_back("-s"); + codesign_args.push_back(data->preset->get(data->debug ? "application/code_sign_identity_debug" : "application/code_sign_identity_release")); + codesign_args.push_back(p_file); + return OS::get_singleton()->execute("/usr/bin/codesign", codesign_args, true); + } + return OK; +} + Error EditorExportPlatformIOS::export_project(const Ref &p_preset, bool p_debug, const String &p_path, int p_flags) { String src_pkg_name; String dest_dir = p_path.get_base_dir() + "/"; String binary_name = p_path.get_file().get_basename(); - EditorProgress ep("export", "Exporting for iOS", 3); + EditorProgress ep("export", "Exporting for iOS", 5); + + String team_id = p_preset->get("application/app_store_team_id"); + ERR_EXPLAIN("App Store Team ID not specified - cannot configure the project."); + ERR_FAIL_COND_V(team_id.length() == 0, ERR_CANT_OPEN); if (p_debug) src_pkg_name = p_preset->get("custom_package/debug"); @@ -206,6 +462,15 @@ Error EditorExportPlatformIOS::export_project(const Ref &p_p bool found_binary = false; int total_size = 0; + Set files_to_parse; + files_to_parse.insert("godot_ios/godot_ios-Info.plist"); + files_to_parse.insert("godot_ios.xcodeproj/project.pbxproj"); + files_to_parse.insert("export_options.plist"); + files_to_parse.insert("godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata"); + files_to_parse.insert("godot_ios.xcodeproj/xcshareddata/xcschemes/godot_ios.xcscheme"); + + print_line("Unzipping..."); + while (ret == UNZ_OK) { bool is_execute = false; @@ -229,12 +494,9 @@ Error EditorExportPlatformIOS::export_project(const Ref &p_p file = file.replace_first("iphone/", ""); - if (file == "godot_ios.xcodeproj/project.pbxproj") { - print_line("parse pbxproj"); - _fix_config_file(p_preset, data, pkg_name, binary_name); - } else if (file == "godot_ios/godot_ios-Info.plist") { - print_line("parse plist"); - _fix_config_file(p_preset, data, pkg_name, binary_name); + if (files_to_parse.has(file)) { + print_line(String("parse ") + file); + _fix_config_file(p_preset, data, pkg_name, binary_name, p_debug); } else if (file.begins_with("godot.iphone")) { if (file != binary_to_use) { ret = unzGoToNextFile(src_pkg_zip); @@ -264,6 +526,7 @@ Error EditorExportPlatformIOS::export_project(const Ref &p_p if (dir_err) { ERR_PRINTS("Can't create '" + dir_name + "'."); unzClose(src_pkg_zip); + memdelete(tmp_app_path); return ERR_CANT_CREATE; } } @@ -273,6 +536,7 @@ Error EditorExportPlatformIOS::export_project(const Ref &p_p if (!f) { ERR_PRINTS("Can't write '" + file + "'."); unzClose(src_pkg_zip); + memdelete(tmp_app_path); return ERR_CANT_CREATE; }; f->store_buffer(data.ptr(), data.size()); @@ -295,26 +559,79 @@ Error EditorExportPlatformIOS::export_project(const Ref &p_p if (!found_binary) { ERR_PRINTS("Requested template binary '" + binary_to_use + "' not found. It might be missing from your template archive."); - unzClose(src_pkg_zip); + memdelete(tmp_app_path); return ERR_FILE_NOT_FOUND; } - ep.step("Making PKG", 1); + String iconset_dir = dest_dir + binary_name + "/Images.xcassets/AppIcon.appiconset/"; + Error err = OK; + if (!tmp_app_path->dir_exists(iconset_dir)) { + Error err = tmp_app_path->make_dir_recursive(iconset_dir); + } + memdelete(tmp_app_path); + if (err) + return err; + + err = _export_icons(p_preset, iconset_dir); + if (err) + return err; + + err = _export_loading_screens(p_preset, dest_dir + binary_name + "/"); + if (err) + return err; + + ep.step("Making .pck", 1); String pack_path = dest_dir + binary_name + ".pck"; - Error err = save_pack(p_preset, pack_path); - - if (err) { + err = save_pack(p_preset, pack_path); + if (err) + return err; + + err = export_project_files(p_preset, _export_dylibs, &dest_dir); + if (err) return err; - } #ifdef OSX_ENABLED - /* and open up xcode with our new project.... */ - List args; - args.push_back(p_path); - err = OS::get_singleton()->execute("/usr/bin/open", args, false); + ep.step("Making .xcarchive", 2); + String archive_path = p_path.get_basename() + ".xcarchive"; + List archive_args; + archive_args.push_back("-project"); + archive_args.push_back(dest_dir + binary_name + ".xcodeproj"); + archive_args.push_back("-scheme"); + archive_args.push_back(binary_name); + archive_args.push_back("-sdk"); + archive_args.push_back("iphoneos"); + archive_args.push_back("-configuration"); + archive_args.push_back(p_debug ? "Debug" : "Release"); + archive_args.push_back("-destination"); + archive_args.push_back("generic/platform=iOS"); + archive_args.push_back("archive"); + archive_args.push_back("-archivePath"); + archive_args.push_back(archive_path); + err = OS::get_singleton()->execute("/usr/bin/xcodebuild", archive_args, true); ERR_FAIL_COND_V(err, err); + ep.step("Code-signing dylibs", 3); + DirAccess *dylibs_dir = DirAccess::open(archive_path + "/Products/Applications/" + binary_name + ".app/dylibs"); + ERR_FAIL_COND_V(!dylibs_dir, ERR_CANT_OPEN); + CodesignData codesign_data(p_preset, p_debug); + err = _walk_dir_recursive(dylibs_dir, _codesign, &codesign_data); + memdelete(dylibs_dir); + ERR_FAIL_COND_V(err, err); + + ep.step("Making .ipa", 4); + List export_args; + export_args.push_back("-exportArchive"); + export_args.push_back("-archivePath"); + export_args.push_back(archive_path); + export_args.push_back("-exportOptionsPlist"); + export_args.push_back(dest_dir + "export_options.plist"); + export_args.push_back("-exportPath"); + export_args.push_back(dest_dir); + err = OS::get_singleton()->execute("/usr/bin/xcodebuild", export_args, true); + ERR_FAIL_COND_V(err, err); +#else + print_line(".ipa can only be built on macOS. Leaving XCode project without building the package."); #endif return OK;