1
- name : iOS build
1
+ name : Publish to App Store Connect
2
2
3
3
on :
4
4
push :
5
5
branches :
6
6
- main
7
- workflow_dispatch :
7
+ workflow_dispatch :
8
+
8
9
9
10
jobs :
10
11
ios_deploy_testflight :
11
- runs-on : macos-latest
12
+ runs-on : macos-13
13
+ env :
14
+ APP_STORE_CONNECT_ISSUER_ID : ${{ secrets.APP_STORE_CONNECT_ISSUER_ID }}
15
+ APP_STORE_CONNECT_KEY_IDENTIFIER : ${{ secrets.APP_STORE_CONNECT_KEY_IDENTIFIER }}
16
+ APP_STORE_CONNECT_PRIVATE_KEY : ${{ secrets.APP_STORE_CONNECT_PRIVATE_KEY }}
17
+ APP_STORE_APP_ID : ${{ secrets.APP_STORE_APP_ID }}
18
+ DIST_CERTIFICATE : ${{ secrets.DIST_CERTIFICATE_BASE64 }}
19
+ DIST_CERTIFICATE_PASSWORD : ${{ secrets.DIST_CERTIFICATE_PASSWORD }}
20
+ DIST_PROFILE : ${{ secrets.DIST_PROFILE_BASE64 }}
12
21
13
22
steps :
14
23
15
24
- name : Checkout
16
25
uses : actions/checkout@v2
17
26
18
- - name : Install the Apple certificate and provisioning profile
19
- env :
20
- BUILD_CERTIFICATE_BASE64 : ${{ secrets.BUILD_CERTIFICATE }}
21
- P12_PASSWORD : ${{ secrets.P12_PASSWORD }}
22
- BUILD_PROVISION_PROFILE_BASE64 : ${{ secrets.PROVISIONING_PROFILE }}
23
- KEYCHAIN_PASSWORD : ${{ secrets.KEYCHAIN_PASSWORD }}
24
-
25
- run : |
26
- # create variables
27
- CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12
28
- KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
29
-
30
- # import certificate and provisioning profile from secrets
31
- echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode > $CERTIFICATE_PATH
32
-
33
- # create temporary keychain
34
- security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
35
- security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
36
- security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
37
-
38
- # import certificate to keychain
39
- security import $CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
40
- security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
41
- security list-keychain -d user -s $KEYCHAIN_PATH
42
-
43
- chmod +x ios/install_dist_profile.sh && ./ios/install_dist_profile.sh
44
-
45
27
- name : Set up Flutter SDK
46
28
uses : subosito/flutter-action@v2
47
29
with :
48
30
channel : ' stable'
49
31
cache : true
50
32
33
+ - name : Retrieve the secret and decode it to file
34
+ env :
35
+ FIREABSE_APP_ID_JSON_BASE64 : ${{ secrets.FIREBASE_APP_ID_JSON_BASE64 }}
36
+ DESKTOP_CREDENTIALS_BASE64 : ${{ secrets.DESKTOP_CREDENTIALS_BASE64 }}
37
+ FIREBASE_OPTIONS_BASE64 : ${{ secrets.FIREBASE_OPTIONS_BASE64 }}
38
+ GOOGLE_SERVICES_PLIST_IOS_BASE64 : ${{ secrets.GOOGLE_SERVICES_PLIST_IOS_BASE64 }}
39
+ run : |
40
+ echo $FIREABSE_APP_ID_JSON_BASE64 | base64 --decode > ios/firebase_app_id_file.json
41
+ echo $FIREBASE_OPTIONS_BASE64 | base64 --decode > lib/firebase_options.dart
42
+ echo $GOOGLE_SERVICES_PLIST_IOS_BASE64 | base64 --decode > ios/Runner/GoogleService-Info.plist
43
+ echo $DESKTOP_CREDENTIALS_BASE64 | base64 --decode > lib/desktop_credentials.dart
44
+
45
+
51
46
- name : Install dependencies
52
47
run : |
53
48
flutter pub get
54
49
55
- - name : Building ipa
50
+ - name : Install Codemagic CLI tools
51
+ run : pip install codemagic-cli-tools
52
+
53
+ - name : Set up keychain
54
+ run : keychain initialize
55
+
56
+ - name : Set up Provisioning Profiles
57
+ run : |
58
+ PROFILES_HOME="$HOME/Library/MobileDevice/Provisioning Profiles"
59
+ mkdir -p "$PROFILES_HOME"
60
+ PROFILE_PATH="$(mktemp "$PROFILES_HOME"/$(uuidgen).mobileprovision)"
61
+ echo ${DIST_PROFILE} | base64 --decode > "$PROFILE_PATH"
62
+
63
+ - name : Set up signing certificate
64
+ run : |
65
+ echo $DIST_CERTIFICATE | base64 --decode > /tmp/certificate.p12
66
+ keychain add-certificates --certificate /tmp/certificate.p12 --certificate-password $DIST_CERTIFICATE_PASSWORD
67
+
68
+ - name : Setup Code signing settings on Xcode project
69
+ run : xcode-project use-profiles
70
+
71
+
72
+ - name : Build ipa for Distribution
56
73
run : |
57
74
file='VERSION'
58
75
fileData=`cat $file`
@@ -62,12 +79,10 @@ jobs:
62
79
IFS=''
63
80
buildName="${versionValue[0]}.${versionValue[1]}.${{ github.run_number }}"
64
81
echo "Uploading build $buildName"
65
- flutter build ipa --build-number=$buildNumber --build-name=$buildName --export-options-plist=ios/Runner/ExportOptions.plist
66
- echo "Uploading app to iTC..."
67
- xcrun altool --upload-app -t ios -f build/ios/ipa/*.ipa -u $ITC_USER_NAME -p $ITC_USER_PASSWORD
82
+ flutter build ipa --release --build-number=$buildNumber --build-name=$buildName --export-options-plist=$HOME/export_options.plist
68
83
69
- - name : Clean up keychain and provisioning profile
70
- if : ${{ always() }}
84
+ - name : Upload to App Store Connect
71
85
run : |
72
- security delete-keychain $RUNNER_TEMP/app-signing.keychain-db
73
- rm ~/Library/MobileDevice/Provisioning\ Profiles/build_pp.mobileprovision
86
+ APP_FILE=$(find $(pwd) -name "*.ipa")
87
+ app-store-connect publish \
88
+ --path "$APP_FILE"
0 commit comments