Skip to content

Instantly share code, notes, and snippets.

@tonis2
Created February 13, 2024 19:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tonis2/ebb50ad6751fbd3b6e10647a7e9c5cc2 to your computer and use it in GitHub Desktop.
Save tonis2/ebb50ad6751fbd3b6e10647a7e9c5cc2 to your computer and use it in GitHub Desktop.
Code sign a flutter app from command line
export CODESIGN_PASSWORD = "test"
export KEYCHAIN_PATH = "build.keychain"
export CERTIFICATE_ID = "id from find-identity"
export PROFILE_ID = "profile from name from apple dashboard"
export CERITIFICATE_FILE = "Certificates.p12"
### At start load the certificate file to keychain
### Copy .mobileprovision to profiles
### Build flutter ipa without codesign
### codesign manually
### Build archive
### Upload to testflight
security create-keychain -p ${CODESIGN_PASSWORD} ${KEYCHAIN_PATH}
security set-keychain-settings -lut 21600 ${KEYCHAIN_PATH}
security default-keychain -s ${KEYCHAIN_PATH}
security unlock-keychain -p ${CODESIGN_PASSWORD}
security import ${CERITIFICATE_FILE} -t agg -k ${KEYCHAIN_PATH} -P ${CODESIGN_PASSWORD} -A
security find-identity -p codesigning
mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
cp ${PROFILE_ID}.mobileprovision ~/Library/MobileDevice/Provisioning\ Profiles
flutter build ipa --release --dart-define=flavor=prod --no-codesign --export-options-plist=./ios/export.plist
security unlock-keychain -p ${CODESIGN_PASSWORD} ${KEYCHAIN_PATH}
security set-key-partition-list -S "apple-tool:,apple:, codesign" -s -k ${CODESIGN_PASSWORD} ${KEYCHAIN_PATH}
codesign --deep --force --options runtime -vvv --sign "${CERTIFICATE_ID}" ./build/ios/archive/Runner.xcarchive
xcodebuild -exportArchive -archivePath ./build/ios/archive/Runner.xcarchive -exportPath . -exportOptionsPlist ./ios/export.plist
xcrun altool --upload-app --type ios -f ./build.ipa --username "${APPLE_UPLOAD_USERNAME}" --password "${APPLE_UPLOAD_PASSWORD}"
@tonis2
Copy link
Author

tonis2 commented Feb 13, 2024

export.plist example

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>compileBitcode</key>
    <true/>
    <key>destination</key>
    <string>export</string>
    <key>method</key>
    <string>app-store</string>
    <key>signingStyle</key>
    <string>manual</string>
    <key>stripSwiftSymbols</key>
    <true/>
    <key>teamID</key>
    <string>TEAM_ID_FROM_APPLE_DASHBOARD</string>
    <key>thinning</key>
    <string>&lt;none&gt;</string>
    <key>provisioningProfiles</key>
	<dict>
		<key>com.my.app</key>
		<string>profile name from apple dashboard here</string>
	</dict>
    <key>aps-environment</key>
	<string>production</string>
</dict>
</plist>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment