|
14 | 14 | 600000000000000000100100 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 610000000000000000100300 /* main.m */; }; |
15 | 15 | 600000000000000000100200 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 610000000000000000100800 /* Images.xcassets */; }; |
16 | 16 | 600000000000000000100300 /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 610000000000000000100900 /* Launch Screen.storyboard */; }; |
17 | | - 60754F822AA5926A0013A4FB /* dylib-Info-template.plist in Resources */ = {isa = PBXBuildFile; fileRef = 60754F802AA57C440013A4FB /* dylib-Info-template.plist */; }; |
18 | 17 | 60813D372B02EED200EFB492 /* Python.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60813D352B02EBFC00EFB492 /* Python.xcframework */; }; |
19 | 18 | 60813D382B02EED200EFB492 /* Python.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 60813D352B02EBFC00EFB492 /* Python.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; |
20 | 19 | 60A04BC728B35FD000DAA9E5 /* app in Resources */ = {isa = PBXBuildFile; fileRef = 610000000000000000100100 /* app */; }; |
|
36 | 35 | /* End PBXCopyFilesBuildPhase section */ |
37 | 36 |
|
38 | 37 | /* Begin PBXFileReference section */ |
39 | | - 60754F802AA57C440013A4FB /* dylib-Info-template.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "dylib-Info-template.plist"; sourceTree = "<group>"; }; |
40 | 38 | 60813D352B02EBFC00EFB492 /* Python.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = Python.xcframework; sourceTree = "<group>"; }; |
41 | 39 | 60A421FC2AB4256300E46BC3 /* app_packages.iphonesimulator */ = {isa = PBXFileReference; lastKnownFileType = folder; path = app_packages.iphonesimulator; sourceTree = "<group>"; }; |
42 | 40 | 60A421FD2AB4256300E46BC3 /* app_packages.iphoneos */ = {isa = PBXFileReference; lastKnownFileType = folder; path = app_packages.iphoneos; sourceTree = "<group>"; }; |
|
119 | 117 | 610000000000000000100700 /* {{ cookiecutter.class_name }}-Prefix.pch */, |
120 | 118 | 60796EEE19190F4100A9926B /* InfoPlist.strings */, |
121 | 119 | 610000000000000000100900 /* Launch Screen.storyboard */, |
122 | | - 60754F802AA57C440013A4FB /* dylib-Info-template.plist */, |
123 | 120 | ); |
124 | 121 | name = "Supporting Files"; |
125 | 122 | sourceTree = "<group>"; |
|
142 | 139 | 60796EDE19190F4100A9926B /* Sources */, |
143 | 140 | 60796EDF19190F4100A9926B /* Frameworks */, |
144 | 141 | 60796EE019190F4100A9926B /* Resources */, |
145 | | - 609384A628B5B958005B2A5D /* Install target specific Python modules */, |
146 | | - 609384A528B45C86005B2A5D /* Sign Python Binary Modules */, |
| 142 | + 609384A628B5B958005B2A5D /* Process Python libraries */, |
147 | 143 | 6060E7A12AF8BF4400C04AE0 /* Embed Frameworks */, |
148 | 144 | ); |
149 | 145 | buildRules = ( |
|
192 | 188 | 600000000000000000100200 /* Images.xcassets in Resources */, |
193 | 189 | 600000000000000000100300 /* Launch Screen.storyboard in Resources */, |
194 | 190 | 60A04BC728B35FD000DAA9E5 /* app in Resources */, |
195 | | - 60754F822AA5926A0013A4FB /* dylib-Info-template.plist in Resources */, |
196 | 191 | ); |
197 | 192 | runOnlyForDeploymentPostprocessing = 0; |
198 | 193 | }; |
199 | 194 | /* End PBXResourcesBuildPhase section */ |
200 | 195 |
|
201 | 196 | /* Begin PBXShellScriptBuildPhase section */ |
202 | | - 609384A528B45C86005B2A5D /* Sign Python Binary Modules */ = { |
| 197 | + 609384A628B5B958005B2A5D /* Process Python libraries */ = { |
203 | 198 | isa = PBXShellScriptBuildPhase; |
204 | 199 | alwaysOutOfDate = 1; |
205 | 200 | buildActionMask = 2147483647; |
|
209 | 204 | ); |
210 | 205 | inputPaths = ( |
211 | 206 | ); |
212 | | - name = "Sign Python Binary Modules"; |
| 207 | + name = "Process Python libraries"; |
213 | 208 | outputFileListPaths = ( |
214 | 209 | ); |
215 | 210 | outputPaths = ( |
216 | 211 | ); |
217 | 212 | runOnlyForDeploymentPostprocessing = 0; |
218 | 213 | shellPath = /bin/sh; |
219 | | - shellScript = "set -e\n\ninstall_dylib () {\n INSTALL_BASE=$1\n FULL_EXT=$2\n\n # The name of the extension file\n EXT=$(basename \"$FULL_EXT\")\n # The name and location of the module\n MODULE_PATH=$(dirname \"$FULL_EXT\") \n MODULE_NAME=$(echo $EXT | cut -d \".\" -f 1) \n # The location of the extension file, relative to the bundle\n RELATIVE_EXT=${FULL_EXT#$CODESIGNING_FOLDER_PATH/} \n # The path to the extension file, relative to the install base\n PYTHON_EXT=${RELATIVE_EXT/$INSTALL_BASE/}\n # The full dotted name of the extension module, constructed from the file path.\n FULL_MODULE_NAME=$(echo $PYTHON_EXT | cut -d \".\" -f 1 | tr \"/\" \".\"); \n # A bundle identifier; not actually used, but required by Xcode framework packaging\n FRAMEWORK_BUNDLE_ID=$(echo $PRODUCT_BUNDLE_IDENTIFIER.$FULL_MODULE_NAME | tr \"_\" \"-\")\n # The name of the framework folder.\n FRAMEWORK_FOLDER=\"Frameworks/$FULL_MODULE_NAME.framework\"\n\n # If the framework folder doesn't exist, create it.\n if [ ! -d \"$CODESIGNING_FOLDER_PATH/$FRAMEWORK_FOLDER\" ]; then\n echo \"Creating framework for $RELATIVE_EXT\" \n mkdir -p \"$CODESIGNING_FOLDER_PATH/$FRAMEWORK_FOLDER\"\n\n cp \"$CODESIGNING_FOLDER_PATH/dylib-Info-template.plist\" \"$CODESIGNING_FOLDER_PATH/$FRAMEWORK_FOLDER/Info.plist\"\n plutil -replace CFBundleExecutable -string \"$FULL_MODULE_NAME\" \"$CODESIGNING_FOLDER_PATH/$FRAMEWORK_FOLDER/Info.plist\"\n plutil -replace CFBundleIdentifier -string \"$FRAMEWORK_BUNDLE_ID\" \"$CODESIGNING_FOLDER_PATH/$FRAMEWORK_FOLDER/Info.plist\"\n fi\n \n echo \"Installing binary for $FRAMEWORK_FOLDER/$FULL_MODULE_NAME\" \n mv \"$FULL_EXT\" \"$CODESIGNING_FOLDER_PATH/$FRAMEWORK_FOLDER/$FULL_MODULE_NAME\"\n if [ -e \"$MODULE_PATH/$MODULE_NAME.xcprivacy\" ];then \n echo \"Installing XCPrivacy file for $FRAMEWORK_FOLDER/$FULL_MODULE_NAME\"\n XCPRIVACY_FILE=\"$CODESIGNING_FOLDER_PATH/$FRAMEWORK_FOLDER/PrivacyInfo.xcprivacy\"\n if [ -e \"$XCPRIVACY_FILE\" ]; then\n rm -rf \"$XCPRIVACY_FILE\"\n fi\n mv \"$MODULE_PATH/$MODULE_NAME.xcprivacy\" \"$XCPRIVACY_FILE\"\n fi\n if [ -e \"$FULL_EXT.dSYM\" ];then \n echo \"Installing dSYM file for $FRAMEWORK_FOLDER/$FULL_MODULE_NAME\"\n DSYM_FILE=\"$BUILT_PRODUCTS_DIR/$FULL_MODULE_NAME.dSYM\"\n if [ -e \"$DSYM_FILE\" ]; then\n rm -rf \"$DSYM_FILE\"\n fi\n mv \"$FULL_EXT.dSYM\" \"$DSYM_FILE\"\n plutil -replace CFBundleIdentifier -string \"$FRAMEWORK_BUNDLE_ID\" \"$BUILT_PRODUCTS_DIR/$FULL_MODULE_NAME.dSYM/Contents/Info.plist\"\n mv \"$BUILT_PRODUCTS_DIR/$FULL_MODULE_NAME.dSYM/Contents/Resources/DWARF/$EXT\" \"$BUILT_PRODUCTS_DIR/$FULL_MODULE_NAME.dSYM/Contents/Resources/DWARF/$FULL_MODULE_NAME\"\n find \"$BUILT_PRODUCTS_DIR/$FULL_MODULE_NAME.dSYM/Contents/Resources\" -name \"$EXT.*\" | while read YML; do\n mv \"$YML\" \"$(dirname \"$YML\")/$FULL_MODULE_NAME.yml\"\n done\n fi\n # Create a placeholder .fwork file where the .so was\n echo \"$FRAMEWORK_FOLDER/$FULL_MODULE_NAME\" > ${FULL_EXT%.so}.fwork\n # Create a back reference to the .so file location in the framework\n echo \"${RELATIVE_EXT%.so}.fwork\" > \"$CODESIGNING_FOLDER_PATH/$FRAMEWORK_FOLDER/$FULL_MODULE_NAME.origin\" \n}\n\necho \"Install standard library extension modules...\"\nfind \"$CODESIGNING_FOLDER_PATH/python/lib/python{{ cookiecutter.python_version|py_tag }}/lib-dynload\" -name \"*.so\" -not -path \"*/*.so.dSYM/*\" | while read FULL_EXT; do\n install_dylib python/lib/python{{ cookiecutter.python_version|py_tag }}/lib-dynload/ \"$FULL_EXT\"\ndone\necho \"Install app package extension modules...\"\nfind \"$CODESIGNING_FOLDER_PATH/app_packages\" -name \"*.so\" -not -path \"*/*.so.dSYM/*\" | while read FULL_EXT; do\n install_dylib app_packages/ \"$FULL_EXT\"\ndone\necho \"Install app extension modules...\"\nfind \"$CODESIGNING_FOLDER_PATH/app\" -name \"*.so\" -not -path \"*/*.so.dSYM/*\" | while read FULL_EXT; do\n install_dylib app/ \"$FULL_EXT\"\ndone\n\n# Clean up dylib template \nrm -f \"$CODESIGNING_FOLDER_PATH/dylib-Info-template.plist\"\n\necho \"Signing frameworks as $EXPANDED_CODE_SIGN_IDENTITY_NAME ($EXPANDED_CODE_SIGN_IDENTITY)...\"\nfind \"$CODESIGNING_FOLDER_PATH/Frameworks\" -name \"*.framework\" -exec /usr/bin/codesign --force --sign \"$EXPANDED_CODE_SIGN_IDENTITY\" ${OTHER_CODE_SIGN_FLAGS:-} -o runtime --timestamp=none --preserve-metadata=identifier,entitlements,flags --generate-entitlement-der \"{}\" \\; \n"; |
220 | | - }; |
221 | | - 609384A628B5B958005B2A5D /* Install target specific Python modules */ = { |
222 | | - isa = PBXShellScriptBuildPhase; |
223 | | - alwaysOutOfDate = 1; |
224 | | - buildActionMask = 2147483647; |
225 | | - files = ( |
226 | | - ); |
227 | | - inputFileListPaths = ( |
228 | | - ); |
229 | | - inputPaths = ( |
230 | | - ); |
231 | | - name = "Install target specific Python modules"; |
232 | | - outputFileListPaths = ( |
233 | | - ); |
234 | | - outputPaths = ( |
235 | | - ); |
236 | | - runOnlyForDeploymentPostprocessing = 0; |
237 | | - shellPath = /bin/sh; |
238 | | - shellScript = "set -e\n\nmkdir -p \"$CODESIGNING_FOLDER_PATH/python/lib\"\nPYTHON_XCFRAMEWORK_PATH=\"Support/Python.xcframework\"\nif [ \"$EFFECTIVE_PLATFORM_NAME\" = \"-iphonesimulator\" ]; then\n echo \"Installing Python modules for iOS Simulator\"\n SLICE_FOLDER=\"ios-arm64_x86_64-simulator\"\n PACKAGES_PATH=\"{{ cookiecutter.class_name }}/app_packages.iphonesimulator\"\nelse\n echo \"Installing Python modules for iOS Device\"\n SLICE_FOLDER=\"ios-arm64\"\n PACKAGES_PATH=\"{{ cookiecutter.class_name }}/app_packages.iphoneos\"\nfi\n\n# Python3.14+ arch-specific lib folder\necho \"CHECK $PROJECT_DIR/$PYTHON_XCFRAMEWORK_PATH/lib\" \nif [ -d \"$PROJECT_DIR/$PYTHON_XCFRAMEWORK_PATH/lib\" ]; then\n rsync -au --delete \"$PROJECT_DIR/$PYTHON_XCFRAMEWORK_PATH/lib/\" \"$CODESIGNING_FOLDER_PATH/python/lib/\"\n rsync -au \"$PROJECT_DIR/$PYTHON_XCFRAMEWORK_PATH/$SLICE_FOLDER/lib-$ARCHS/\" \"$CODESIGNING_FOLDER_PATH/python/lib/\"\nelse\n # A single-arch framework will have a libpython symlink; that can't be included at runtime\n rsync -au --delete \"$PROJECT_DIR/$PYTHON_XCFRAMEWORK_PATH/$SLICE_FOLDER/lib/\" \"$CODESIGNING_FOLDER_PATH/python/lib/\" --exclude 'libpython*.dylib'\nfi\n\nif [ -e \"$PYTHON_SLICE/Python.dSYM\" ]; then \n rsync -au --delete \"$PYTHON_SLICE/Python.dSYM\" \"$BUILT_PRODUCTS_DIR\"\nfi\nrsync -au --delete \"$PROJECT_DIR/$PACKAGES_PATH/\" \"$CODESIGNING_FOLDER_PATH/app_packages\"\n"; |
| 214 | + shellScript = "set -e\nsource $PROJECT_DIR/Support/Python.xcframework/build/utils.sh\n\nif [ \"$EFFECTIVE_PLATFORM_NAME\" = \"-iphonesimulator\" ]; then\n echo \"Installing app packages for iOS Simulator\"\n PACKAGES_PATH=\"app_packages.iphonesimulator\"\nelse\n echo \"Installing app packages for iOS Device\"\n PACKAGES_PATH=\"app_packages.iphoneos\"\nfi\nrsync -au --delete \"$PROJECT_DIR/{{ cookiecutter.class_name }}/$PACKAGES_PATH/\" \"$CODESIGNING_FOLDER_PATH/app_packages\"\n\ninstall_python Support/Python.xcframework app app_packages\n"; |
239 | 215 | showEnvVarsInLog = 0; |
240 | 216 | }; |
241 | 217 | /* End PBXShellScriptBuildPhase section */ |
|
0 commit comments