fix(up-wip): ios bundle and upload
This commit is contained in:
parent
76701774d1
commit
7588a26e5b
8 changed files with 1570 additions and 1647 deletions
File diff suppressed because one or more lines are too long
Binary file not shown.
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 71 KiB |
|
@ -25,7 +25,7 @@
|
|||
<key>CFBundlePackageType</key>
|
||||
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.13.9</string>
|
||||
<string>1.13.10</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleURLTypes</key>
|
||||
|
@ -48,7 +48,7 @@
|
|||
</dict>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>221</string>
|
||||
<string>222</string>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
<key>LSApplicationQueriesSchemes</key>
|
||||
|
@ -180,4 +180,4 @@
|
|||
<key>UIViewControllerBasedStatusBarAppearance</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</plist>
|
||||
</plist>
|
||||
|
|
64
ios/Podfile
64
ios/Podfile
|
@ -2,6 +2,7 @@ require File.join(File.dirname(`node --print "require.resolve('expo/package.json
|
|||
require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods")
|
||||
|
||||
require 'json'
|
||||
require 'fileutils'
|
||||
podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}
|
||||
|
||||
ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'
|
||||
|
@ -15,6 +16,9 @@ prepare_react_native_project!
|
|||
|
||||
target 'AlerteSecours' do
|
||||
use_expo_modules!
|
||||
# Pin TOCropViewController to 2.x for compatibility with RNImageCropPicker 0.40.x
|
||||
pod 'TOCropViewController', '~> 2.6'
|
||||
|
||||
|
||||
if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1'
|
||||
config_command = ['node', '-e', "process.argv=['', '', 'config'];require('@react-native-community/cli').run()"];
|
||||
|
@ -65,5 +69,65 @@ target 'AlerteSecours' do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Ensure correct header destinations for ReactAppDependencyProvider to avoid CpHeader reversing into build/generated
|
||||
installer.pods_project.targets.each do |t|
|
||||
if t.name == 'ReactAppDependencyProvider'
|
||||
t.build_configurations.each do |config|
|
||||
# Public headers should live inside the framework product, not in the generated sources dir
|
||||
config.build_settings['PUBLIC_HEADERS_FOLDER_PATH'] = '$(CONTENTS_FOLDER_PATH)/Headers'
|
||||
# Ensure the generated headers can still be found during compilation
|
||||
existing = config.build_settings['HEADER_SEARCH_PATHS']
|
||||
inherited = '$(inherited)'
|
||||
generated = '$(PROJECT_DIR)/build/generated/ios'
|
||||
if existing.nil?
|
||||
config.build_settings['HEADER_SEARCH_PATHS'] = "#{inherited} #{generated}"
|
||||
elsif existing.is_a?(Array)
|
||||
config.build_settings['HEADER_SEARCH_PATHS'] = (existing + [generated, inherited]).uniq
|
||||
else
|
||||
config.build_settings['HEADER_SEARCH_PATHS'] = "#{existing} #{generated} #{inherited}"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Disable glass effect in TOCropViewController v3 to avoid iOS 18-only APIs at compile time
|
||||
installer.pods_project.targets.each do |t|
|
||||
if t.name == 'TOCropViewController'
|
||||
t.build_configurations.each do |config|
|
||||
defs = config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] || ['$(inherited)']
|
||||
unless defs.is_a?(Array)
|
||||
defs = [defs, '$(inherited)']
|
||||
end
|
||||
defs << 'TOCROPVIEWCONTROLLER_ENABLE_GLASS_EFFECT=0'
|
||||
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] = defs.uniq
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Patch TOCropViewController to import iOS 18-only UIKit headers when available.
|
||||
crop_toolbar_path = File.join(__dir__, 'Pods', 'TOCropViewController', 'Objective-C', 'TOCropViewController', 'Views', 'TOCropToolbar.m')
|
||||
if File.exist?(crop_toolbar_path)
|
||||
contents = File.read(crop_toolbar_path)
|
||||
needle = "#import \"TOCropToolbar.h\"\n"
|
||||
injection = <<~'IMPORTS'
|
||||
#if __has_include(<UIKit/UIGlassEffect.h>)
|
||||
#import <UIKit/UIGlassEffect.h>
|
||||
#endif
|
||||
#if __has_include(<UIKit/UICornerConfiguration.h>)
|
||||
#import <UIKit/UICornerConfiguration.h>
|
||||
#endif
|
||||
#if __has_include(<UIKit/UIButtonConfiguration.h>)
|
||||
#import <UIKit/UIButtonConfiguration.h>
|
||||
#endif
|
||||
|
||||
IMPORTS
|
||||
|
||||
unless contents.include?('<UIKit/UIGlassEffect.h>')
|
||||
FileUtils.chmod('u+w', crop_toolbar_path) unless File.writable?(crop_toolbar_path)
|
||||
contents = contents.sub(needle, needle + injection)
|
||||
File.write(crop_toolbar_path, contents)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
1899
ios/Podfile.lock
1899
ios/Podfile.lock
File diff suppressed because it is too large
Load diff
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "alerte-secours",
|
||||
"version": "1.13.9",
|
||||
"version": "1.13.10",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"start": "expo start --dev-client --private-key-path ./keys/private-key.pem",
|
||||
|
@ -50,8 +50,8 @@
|
|||
"screenshot:android": "scripts/screenshot-android.sh"
|
||||
},
|
||||
"customExpoVersioning": {
|
||||
"versionCode": 221,
|
||||
"buildNumber": 221
|
||||
"versionCode": 222,
|
||||
"buildNumber": 222
|
||||
},
|
||||
"commit-and-tag-version": {
|
||||
"scripts": {
|
||||
|
|
|
@ -12,6 +12,10 @@ export BUILD_TIME=$(date +%s000)
|
|||
# Clean previous bundle
|
||||
echo "Cleaning previous bundle..."
|
||||
rm -f ios/main.jsbundle*
|
||||
echo "Cleaning previous archive and stale IPA..."
|
||||
# Keep ios/build because RN 0.79+ stores codegen headers in ios/build/generated/ios needed for archive.
|
||||
rm -rf ios/AlerteSecours.xcarchive || true
|
||||
rm -f ios/build/AlerteSecours.ipa || true
|
||||
|
||||
# Get version from Info.plist for release naming
|
||||
BUNDLE_VERSION=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" ios/AlerteSecours/Info.plist)
|
||||
|
@ -20,6 +24,9 @@ RELEASE_NAME="com.alertesecours.alertesecours@${PACKAGE_VERSION}+${BUNDLE_VERSIO
|
|||
|
||||
# Generate the bundle and sourcemap
|
||||
echo "Generating bundle and sourcemap..."
|
||||
export METRO_DISABLE_FILE_WATCHER=${METRO_DISABLE_FILE_WATCHER:-1}
|
||||
export CI=${CI:-1}
|
||||
ulimit -n 4096 2>/dev/null || true
|
||||
yarn react-native bundle \
|
||||
--platform ios \
|
||||
--dev false \
|
||||
|
@ -86,6 +93,9 @@ mv ios/main.jsbundle.hbc ios/main.jsbundle
|
|||
|
||||
cd ios
|
||||
|
||||
# Ensure RN codegen headers path exists
|
||||
mkdir -p build/generated/ios
|
||||
|
||||
# Create logs directory if it doesn't exist
|
||||
mkdir -p ../logs
|
||||
|
||||
|
@ -98,4 +108,15 @@ xcodebuild \
|
|||
-archivePath AlerteSecours.xcarchive \
|
||||
archive 2>&1 | tee "../logs/ios-archive-$(date +%Y%m%d-%H%M%S).log"
|
||||
|
||||
# Verify archive version matches source Info.plist
|
||||
echo "Verifying archive version matches source Info.plist..."
|
||||
ARCHIVE_PLIST="AlerteSecours.xcarchive/Products/Applications/AlerteSecours.app/Info.plist"
|
||||
ARCHIVE_PKG_VERSION=$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "$ARCHIVE_PLIST")
|
||||
ARCHIVE_BUNDLE_VERSION=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "$ARCHIVE_PLIST")
|
||||
echo "Source: ${PACKAGE_VERSION} (${BUNDLE_VERSION}) | Archive: ${ARCHIVE_PKG_VERSION} (${ARCHIVE_BUNDLE_VERSION})"
|
||||
if [ "$PACKAGE_VERSION" != "$ARCHIVE_PKG_VERSION" ] || [ "$BUNDLE_VERSION" != "$ARCHIVE_BUNDLE_VERSION" ]; then
|
||||
echo "Error: Archive version mismatch. Expected ${PACKAGE_VERSION} (${BUNDLE_VERSION}), got ${ARCHIVE_PKG_VERSION} (${ARCHIVE_BUNDLE_VERSION})."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Archive completed successfully at AlerteSecours.xcarchive"
|
||||
|
|
|
@ -11,11 +11,79 @@ echo "ASC_API_KEY_ID: $ASC_API_KEY_ID"
|
|||
echo "ASC_API_ISSUER_ID: $ASC_API_ISSUER_ID"
|
||||
echo "ASC_API_KEY_PATH: $ASC_API_KEY_PATH"
|
||||
|
||||
# Execute upload command
|
||||
cd ios && xcrun altool --upload-app \
|
||||
--type ios \
|
||||
--file build/AlerteSecours.ipa \
|
||||
--apiKey $ASC_API_KEY_ID \
|
||||
--apiIssuer $ASC_API_ISSUER_ID \
|
||||
--apiKeyPath $ASC_API_KEY_PATH \
|
||||
--verbose
|
||||
# Verify versions before upload to prevent stale IPA submission
|
||||
SOURCE_PLIST="ios/AlerteSecours/Info.plist"
|
||||
ARCHIVE_PLIST="ios/AlerteSecours.xcarchive/Products/Applications/AlerteSecours.app/Info.plist"
|
||||
IPA_PATH="ios/build/AlerteSecours.ipa"
|
||||
|
||||
if [ ! -f "$SOURCE_PLIST" ]; then
|
||||
echo "Error: Source Info.plist not found at $SOURCE_PLIST"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "$ARCHIVE_PLIST" ]; then
|
||||
echo "Error: Archive Info.plist not found at $ARCHIVE_PLIST"
|
||||
echo "Hint: Run 'yarn bundle:ios' to create a fresh archive and export."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
SRC_PKG_VERSION=$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "$SOURCE_PLIST")
|
||||
SRC_BUILD_NUMBER=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "$SOURCE_PLIST")
|
||||
ARC_PKG_VERSION=$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "$ARCHIVE_PLIST")
|
||||
ARC_BUILD_NUMBER=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "$ARCHIVE_PLIST")
|
||||
|
||||
echo "Version check:"
|
||||
echo " Source Info.plist : $SRC_PKG_VERSION ($SRC_BUILD_NUMBER)"
|
||||
echo " Archive Info.plist : $ARC_PKG_VERSION ($ARC_BUILD_NUMBER)"
|
||||
|
||||
if [ "$SRC_PKG_VERSION" != "$ARC_PKG_VERSION" ] || [ "$SRC_BUILD_NUMBER" != "$ARC_BUILD_NUMBER" ]; then
|
||||
echo "Error: Archive version mismatch with source Info.plist."
|
||||
echo "Hint: Run 'yarn bundle:ios' to rebuild with the correct versions."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "$IPA_PATH" ]; then
|
||||
echo "Error: IPA not found at $IPA_PATH"
|
||||
echo "Hint: Run 'yarn bundle:ios' to export a fresh IPA."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Attempt to read CFBundleShortVersionString and CFBundleVersion from the IPA for extra safety
|
||||
IPA_PLIST_TMP=$(mktemp -t as_ipa_Info.plist)
|
||||
unzip -p "$IPA_PATH" "Payload/AlerteSecours.app/Info.plist" > "$IPA_PLIST_TMP" 2>/dev/null || true
|
||||
|
||||
if [ -s "$IPA_PLIST_TMP" ]; then
|
||||
IPA_PKG_VERSION=$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "$IPA_PLIST_TMP" 2>/dev/null || echo "")
|
||||
IPA_BUILD_NUMBER=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "$IPA_PLIST_TMP" 2>/dev/null || echo "")
|
||||
echo " IPA Info.plist (from payload): ${IPA_PKG_VERSION:-unknown} (${IPA_BUILD_NUMBER:-unknown})"
|
||||
if [ -n "$IPA_PKG_VERSION" ] && [ -n "$IPA_BUILD_NUMBER" ]; then
|
||||
if [ "$SRC_PKG_VERSION" != "$IPA_PKG_VERSION" ] || [ "$SRC_BUILD_NUMBER" != "$IPA_BUILD_NUMBER" ]; then
|
||||
echo "Error: IPA version mismatch with source Info.plist."
|
||||
echo "Hint: Run 'yarn bundle:ios' to export a fresh IPA aligned with current versions."
|
||||
rm -f "$IPA_PLIST_TMP"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "Warning: Could not read Info.plist from IPA payload for verification. Continuing."
|
||||
fi
|
||||
rm -f "$IPA_PLIST_TMP"
|
||||
|
||||
# Execute upload using xcrun altool with App Store Connect API key
|
||||
echo "Uploading to App Store Connect using xcrun altool..."
|
||||
|
||||
# Use altool with API key authentication
|
||||
xcrun altool --upload-app \
|
||||
--type ios \
|
||||
--file "$IPA_PATH" \
|
||||
--apiKey "$ASC_API_KEY_ID" \
|
||||
--apiIssuer "$ASC_API_ISSUER_ID" \
|
||||
--verbose
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "✅ Successfully uploaded IPA to App Store Connect!"
|
||||
echo "The build will be available in TestFlight once processing is complete."
|
||||
else
|
||||
echo "❌ Upload failed. Check the error messages above."
|
||||
exit 1
|
||||
fi
|
||||
|
|
Loading…
Add table
Reference in a new issue