22set -euo pipefail
33
44# Usage: scripts/patch-ios.sh [target-dir ...]
5- # If no targets provided, it will attempt both 'platforms/ios' (Cordova) and 'ios' (Capacitor).
65
76if [[ $# -gt 0 ]]; then
87 TARGETS=(" $@ " )
98else
10- TARGETS=(" platforms/ios" " ios " )
9+ TARGETS=(" platforms/ios" )
1110fi
1211
1312# Helper for portable sed - macOS needs -i ''
@@ -31,6 +30,10 @@ for BASE in "${TARGETS[@]}"; do
3130 if [[ -f " $PBX_PATH " ]]; then
3231 echo " - Updating deployment target in ${PBX_PATH} "
3332 " ${SED_INPLACE[@]} " " s/IPHONEOS_DEPLOYMENT_TARGET = [0-9]\{1,2\}\.[0-9]\{1,2\} *;/IPHONEOS_DEPLOYMENT_TARGET = 13.0;/g" " $PBX_PATH " || true
33+
34+ echo " - Ensuring simulator excludes arm64 in ${PBX_PATH} "
35+ # Add EXCLUDED_ARCHS for simulator to avoid arm64 issues on some pods
36+ " ${SED_INPLACE[@]} " " /buildSettings = {$/a\\ EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64;" " $PBX_PATH " || true
3437 else
3538 echo " - ${PBX_PATH} not found, skipping deployment target patch"
3639 fi
@@ -59,15 +62,42 @@ for BASE in "${TARGETS[@]}"; do
5962 # 3) Ensure Podfile platform is at least 13.0
6063 if [[ -f " $PODFILE_PATH " ]]; then
6164 echo " - Ensuring Podfile platform is at least iOS 13.0"
62- awk '
63- {
64- if ($0 ~ /^\s*platform\s*:\s*.*ios/) {
65- print "platform :ios, ' \' ' 13.0' \' ' "
66- } else {
67- print
65+ if grep -q " ^\s*platform\s*:\s*.*ios" " $PODFILE_PATH " ; then
66+ awk '
67+ {
68+ if ($0 ~ /^\s*platform\s*:\s*.*ios/) {
69+ print "platform :ios, ' \' ' 13.0' \' ' "
70+ } else {
71+ print
72+ }
6873 }
69- }
70- ' " $PODFILE_PATH " > " ${PODFILE_PATH} .patched" && mv " ${PODFILE_PATH} .patched" " $PODFILE_PATH " || true
74+ ' " $PODFILE_PATH " > " ${PODFILE_PATH} .patched" && mv " ${PODFILE_PATH} .patched" " $PODFILE_PATH " || true
75+ else
76+ # Prepend platform line if missing
77+ {
78+ echo " platform :ios, '13.0'"
79+ cat " $PODFILE_PATH "
80+ } > " ${PODFILE_PATH} .patched" && mv " ${PODFILE_PATH} .patched" " $PODFILE_PATH "
81+ fi
82+
83+ # Ensure pods build with at least iOS 13.0 (add post_install if missing)
84+ if ! grep -q " post_install" " $PODFILE_PATH " ; then
85+ cat >> " $PODFILE_PATH " << 'PODPATCH '
86+ post_install do |installer|
87+ installer.pods_project.targets.each do |target|
88+ target.build_configurations.each do |config|
89+ config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0'
90+ end
91+ end
92+ end
93+ PODPATCH
94+ fi
95+
96+ echo " - Running CocoaPods install with repo update"
97+ (
98+ cd " $BASE "
99+ pod install --repo-update --silent || pod install --repo-update || true
100+ )
71101 else
72102 echo " - ${PODFILE_PATH} not found, skipping Podfile patch"
73103 fi
@@ -76,6 +106,8 @@ for BASE in "${TARGETS[@]}"; do
76106 mkdir -p " $XC_CONFIG_DIR "
77107 cat > " $XC_CONFIG_PATH " << 'XC '
78108HEADER_SEARCH_PATHS = $(inherited) $(DERIVED_FILE_DIR)/GeneratedModuleMaps-iphonesimulator
109+ EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64
110+ ONLY_ACTIVE_ARCH = YES
79111XC
80112 echo " - Created ${XC_CONFIG_PATH} "
81113
0 commit comments