Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions {{ cookiecutter.format }}/briefcase.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ app_packages_path = "{{ cookiecutter.class_name }}/app_packages"
info_plist_path = "{{ cookiecutter.class_name }}/{{ cookiecutter.class_name }}-Info.plist"
support_path = "Support"
{{ {
"3.10": "support_revision = 12",
"3.11": "support_revision = 7",
"3.12": "support_revision = 7",
"3.13": "support_revision = 12",
"3.14": "support_revision = 8",
"3.10": "support_revision = 13",
"3.11": "support_revision = 8",
"3.12": "support_revision = 8",
"3.13": "support_revision = 13",
"3.14": "support_revision = 9",
}.get(cookiecutter.python_version|py_tag, "") }}

icon.20 = "{{ cookiecutter.class_name }}/Images.xcassets/AppIcon.appiconset/icon-20.png"
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
600000000000000000100100 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 610000000000000000100300 /* main.m */; };
600000000000000000100200 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 610000000000000000100800 /* Images.xcassets */; };
600000000000000000100300 /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 610000000000000000100900 /* Launch Screen.storyboard */; };
60754F822AA5926A0013A4FB /* dylib-Info-template.plist in Resources */ = {isa = PBXBuildFile; fileRef = 60754F802AA57C440013A4FB /* dylib-Info-template.plist */; };
60813D372B02EED200EFB492 /* Python.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60813D352B02EBFC00EFB492 /* Python.xcframework */; };
60813D382B02EED200EFB492 /* Python.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 60813D352B02EBFC00EFB492 /* Python.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
60A04BC728B35FD000DAA9E5 /* app in Resources */ = {isa = PBXBuildFile; fileRef = 610000000000000000100100 /* app */; };
Expand All @@ -36,7 +35,6 @@
/* End PBXCopyFilesBuildPhase section */

/* Begin PBXFileReference section */
60754F802AA57C440013A4FB /* dylib-Info-template.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "dylib-Info-template.plist"; sourceTree = "<group>"; };
60813D352B02EBFC00EFB492 /* Python.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = Python.xcframework; sourceTree = "<group>"; };
60A421FC2AB4256300E46BC3 /* app_packages.iphonesimulator */ = {isa = PBXFileReference; lastKnownFileType = folder; path = app_packages.iphonesimulator; sourceTree = "<group>"; };
60A421FD2AB4256300E46BC3 /* app_packages.iphoneos */ = {isa = PBXFileReference; lastKnownFileType = folder; path = app_packages.iphoneos; sourceTree = "<group>"; };
Expand Down Expand Up @@ -119,7 +117,6 @@
610000000000000000100700 /* {{ cookiecutter.class_name }}-Prefix.pch */,
60796EEE19190F4100A9926B /* InfoPlist.strings */,
610000000000000000100900 /* Launch Screen.storyboard */,
60754F802AA57C440013A4FB /* dylib-Info-template.plist */,
);
name = "Supporting Files";
sourceTree = "<group>";
Expand All @@ -142,8 +139,7 @@
60796EDE19190F4100A9926B /* Sources */,
60796EDF19190F4100A9926B /* Frameworks */,
60796EE019190F4100A9926B /* Resources */,
609384A628B5B958005B2A5D /* Install target specific Python modules */,
609384A528B45C86005B2A5D /* Sign Python Binary Modules */,
609384A628B5B958005B2A5D /* Process Python libraries */,
6060E7A12AF8BF4400C04AE0 /* Embed Frameworks */,
);
buildRules = (
Expand Down Expand Up @@ -192,14 +188,13 @@
600000000000000000100200 /* Images.xcassets in Resources */,
600000000000000000100300 /* Launch Screen.storyboard in Resources */,
60A04BC728B35FD000DAA9E5 /* app in Resources */,
60754F822AA5926A0013A4FB /* dylib-Info-template.plist in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */

/* Begin PBXShellScriptBuildPhase section */
609384A528B45C86005B2A5D /* Sign Python Binary Modules */ = {
609384A628B5B958005B2A5D /* Process Python libraries */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
Expand All @@ -209,33 +204,14 @@
);
inputPaths = (
);
name = "Sign Python Binary Modules";
name = "Process Python libraries";
outputFileListPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
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";
};
609384A628B5B958005B2A5D /* Install target specific Python modules */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
);
name = "Install target specific Python modules";
outputFileListPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
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";
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";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */
Expand Down