-
Notifications
You must be signed in to change notification settings - Fork 1
178 lines (156 loc) · 6.18 KB
/
Copy pathdart.yml
File metadata and controls
178 lines (156 loc) · 6.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
name: iOS-ipa-build
on:
push:
branches: [ master, develop ]
pull_request:
branches: [ master ]
workflow_dispatch:
jobs:
build-ios:
name: 🎉 iOS Build
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
- uses: subosito/flutter-action@v2
with:
channel: stable
architecture: x64
- run: flutter pub get
- name: Install Firebase CLI
run: |
curl -sL https://firebase.tools | bash
- name: Generate firebase_app_id_file.json
run: |
cat > ios/firebase_app_id_file.json <<EOF
{
"app_id": "${{ secrets.FIREBASE_APP_ID }}",
"api_key": "${{ secrets.FIREBASE_API_KEY }}",
"project_id": "${{ secrets.FIREBASE_PROJECT_ID }}"
}
EOF
- name: Decode GoogleService-Info.plist
run: |
echo "${{ secrets.GOOGLE_SERVICE_INFO_PLIST_BASE64 }}" | base64 --decode > ios/Runner/GoogleService-Info.plist
- name: Generate firebase_options.dart
run: |
dart pub global activate flutterfire_cli
echo "$HOME/.pub-cache/bin" >> $GITHUB_PATH
flutterfire configure --project=${{ secrets.FIREBASE_PROJECT_ID }} --platforms=ios --out=lib/firebase_options.dart --yes
env:
FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
- name: Ensure Podfile with iOS 13.0
run: |
cd ios
if [ ! -f Podfile ]; then
pod init
fi
if grep -q "^platform :ios" Podfile; then
sed -i '' 's/^platform :ios.*/platform :ios, '\''13.0'\''/' Podfile
else
sed -i '' '1s;^;platform :ios, '\''13.0'\''\n;' Podfile
fi
- name: Install CocoaPods
run: |
cd ios
pod install
- name: Force no-codesign in xcconfig (Runner)
run: |
for cfg in Debug Release Profile; do
xc="ios/Flutter/${cfg}.xcconfig"
{
echo "";
echo "CODE_SIGNING_ALLOWED=NO";
echo "CODE_SIGNING_REQUIRED=NO";
echo "CODE_SIGN_STYLE=Manual";
echo "DEVELOPMENT_TEAM=";
echo "PROVISIONING_PROFILE_SPECIFIER=";
echo "CODE_SIGN_IDENTITY=";
echo "CODE_SIGN_ENTITLEMENTS=";
echo "CODE_SIGN_INJECT_BASE_ENTITLEMENTS=NO";
echo "IPHONEOS_DEPLOYMENT_TARGET=13.0";
echo "GCC_TREAT_WARNINGS_AS_ERRORS=NO";
echo "SWIFT_COMPILATION_MODE=wholemodule";
echo "ONLY_ACTIVE_ARCH=NO";
} >> "$xc"
done
- name: Show build settings (sanity check)
run: |
xcodebuild -workspace ios/Runner.xcworkspace -scheme Runner -configuration Release -showBuildSettings | \
egrep "CODE_SIGN|DEVELOPMENT_TEAM|PRODUCT_BUNDLE_IDENTIFIER|IPHONEOS_DEPLOYMENT_TARGET"
- name: Flutter generate Xcode project
run: flutter build ios --release --no-codesign --config-only
- name: Resolve SPM
run: |
xcodebuild -resolvePackageDependencies \
-workspace ios/Runner.xcworkspace \
-scheme Runner
- name: Build with xcodebuild (no signing, verbose)
run: |
set -euo pipefail
xcodebuild \
-workspace ios/Runner.xcworkspace \
-scheme Runner \
-configuration Release \
-sdk iphoneos \
-destination 'generic/platform=iOS' \
-derivedDataPath build/ios/DerivedData \
CODE_SIGNING_ALLOWED=NO \
CODE_SIGNING_REQUIRED=NO \
CODE_SIGN_STYLE=Manual \
CODE_SIGN_IDENTITY= \
DEVELOPMENT_TEAM= \
PROVISIONING_PROFILE_SPECIFIER= \
CODE_SIGN_ENTITLEMENTS= \
CODE_SIGN_INJECT_BASE_ENTITLEMENTS=NO \
OTHER_CODE_SIGN_FLAGS= \
SWIFT_COMPILATION_MODE=wholemodule \
ONLY_ACTIVE_ARCH=NO \
build | tee xcodebuild.log
echo "———— Errors ————"
(grep -n -E "error:|fatal error:" -n xcodebuild.log || true)
- name: Upload Xcode log (artifact)
if: failure()
uses: actions/upload-artifact@v4
with:
name: xcodebuild-log
path: xcodebuild.log
- name: Locate build artifacts
id: locate
run: |
APP_PATH=$(find build/ios/DerivedData -type d -path "*/Build/Products/Release-iphoneos/Runner.app" | head -n1)
DSYM_PATH=$(find build/ios/DerivedData -type d -path "*/Build/Products/Release-iphoneos/Runner.app.dSYM" | head -n1)
echo "app_path=$APP_PATH" >> $GITHUB_OUTPUT
echo "dsym_path=$DSYM_PATH" >> $GITHUB_OUTPUT
test -d "$APP_PATH" || (echo "Runner.app not found"; exit 1)
- name: Check UUIDs
if: ${{ steps.locate.outputs.dsym_path != '' }}
run: |
APP_UUID=$(dwarfdump --uuid "${{ steps.locate.outputs.app_path }}/Runner" | grep '(arm64)' | awk '{print $2}')
DSYM_UUID=$(dwarfdump --uuid "${{ steps.locate.outputs.dsym_path }}" | grep '(arm64)' | awk '{print $2}')
echo "APP_UUID=$APP_UUID"
echo "DSYM_UUID=$DSYM_UUID"
[ "$APP_UUID" = "$DSYM_UUID" ]
- name: Upload dSYM to Crashlytics
run: |
if [[ -d "${{ steps.locate.outputs.dsym_path }}" ]]; then
./ios/Pods/FirebaseCrashlytics/upload-symbols \
-gsp ios/Runner/GoogleService-Info.plist \
-p ios "${{ steps.locate.outputs.dsym_path }}"
else
echo "No dSYM found, skipping Crashlytics upload."
fi
- name: Package IPA
run: |
set -e
rm -rf payload_tmp FlutterIpaExport.ipa
mkdir -p payload_tmp/Payload
cp -R "${{ steps.locate.outputs.app_path }}" "payload_tmp/Payload/Runner.app"
(cd payload_tmp && /usr/bin/zip -qry ../FlutterIpaExport.ipa Payload)
- name: Upload binaries to release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: FlutterIpaExport.ipa
tag: v1.0.${{ github.run_number }}
overwrite: true
body: "Unsigned IPA build"