@@ -27,35 +27,26 @@ jobs:
2727 with :
2828 key : ${{ matrix.target }}
2929 cache-on-failure : true
30- - name : Install the Apple certificate and provisioning profile
30+
31+ - name : Install the Apple certificate
3132 env :
3233 BUILD_CERTIFICATE_BASE64 : ${{ secrets.BUILD_CERTIFICATE_BASE64 }}
3334 P12_PASSWORD : ${{ secrets.P12_PASSWORD }}
34- BUILD_PROVISION_PROFILE_BASE64 : ${{ secrets.BUILD_PROVISION_PROFILE_BASE64 }}
3535 KEYCHAIN_PASSWORD : ${{ secrets.KEYCHAIN_PASSWORD }}
3636 run : |
37- # create variables
3837 CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12
39- PP_PATH=$RUNNER_TEMP/build_pp.mobileprovision
4038 KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
4139
42- # import certificate and provisioning profile from secrets
4340 echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode -o $CERTIFICATE_PATH
44- echo -n "$BUILD_PROVISION_PROFILE_BASE64" | base64 --decode -o $PP_PATH
4541
46- # create temporary keychain
4742 security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
4843 security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
4944 security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
5045
51- # import certificate to keychain
5246 security import $CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
53- security set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
5447 security list-keychain -d user -s $KEYCHAIN_PATH
55-
56- # apply provisioning profile
57- mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
58- cp $PP_PATH ~/Library/MobileDevice/Provisioning\ Profiles
48+ security default-keychain -s $KEYCHAIN_PATH
49+ security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
5950
6051 - name : Install cargo-bundle
6152 run : cargo install cargo-bundle
@@ -64,30 +55,94 @@ jobs:
6455 run : |
6556 cargo bundle --release --target ${{ matrix.target }}
6657
67- - name : Clean up keychain and provisioning profile
68- if : ${{ always() }}
58+ - name : Sign and Notarize
59+ env :
60+ APPLE_DEVELOPER_ID : ${{ secrets.APPLE_DEVELOPER_ID }}
61+ APPLE_TEAM_ID : ${{ secrets.APPLE_TEAM_ID }}
62+ APPLE_APP_SPECIFIC_PASSWORD : ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
63+ APPLE_ID : ${{ secrets.APPLE_ID }}
64+ KEYCHAIN_PASSWORD : ${{ secrets.KEYCHAIN_PASSWORD }}
6965 run : |
70- security delete-keychain $RUNNER_TEMP/app-signing.keychain-db
71- rm ~/Library/MobileDevice/Provisioning\ Profiles/build_pp.mobileprovision
66+ cd target/${{ matrix.target }}/release/bundle/osx
67+
68+ codesign --remove-signature Gomi.app/Contents/MacOS/Gomi || true
69+ codesign --remove-signature Gomi.app || true
70+
71+ codesign --force --options runtime \
72+ --sign "$APPLE_DEVELOPER_ID" \
73+ --timestamp \
74+ --keychain "$RUNNER_TEMP/app-signing.keychain-db" \
75+ --entitlements $GITHUB_WORKSPACE/resources/entitlements.plist \
76+ Gomi.app/Contents/MacOS/Gomi
77+
78+ find Gomi.app/Contents/MacOS -type f -perm +111 -exec \
79+ codesign --force --options runtime \
80+ --sign "$APPLE_DEVELOPER_ID" \
81+ --timestamp \
82+ --keychain "$RUNNER_TEMP/app-signing.keychain-db" \
83+ --entitlements $GITHUB_WORKSPACE/resources/entitlements.plist \
84+ {} \;
85+
86+ codesign --force --options runtime \
87+ --entitlements $GITHUB_WORKSPACE/resources/entitlements.plist \
88+ --sign "$APPLE_DEVELOPER_ID" \
89+ --deep --strict \
90+ --timestamp \
91+ --keychain "$RUNNER_TEMP/app-signing.keychain-db" \
92+ Gomi.app
7293
73- - name : Create ZIP
94+ ditto -c -k --keepParent Gomi.app Gomi.zip
95+
96+ NOTARIZATION_OUTPUT=$(xcrun notarytool submit Gomi.zip \
97+ --apple-id "$APPLE_ID" \
98+ --password "$APPLE_APP_SPECIFIC_PASSWORD" \
99+ --team-id "$APPLE_TEAM_ID" \
100+ --wait)
101+
102+ SUBMISSION_ID=$(echo "$NOTARIZATION_OUTPUT" | grep "id:" | head -n1 | awk '{print $2}' | tr -d '[:space:]')
103+
104+ if [ ! -z "$SUBMISSION_ID" ]; then
105+ xcrun notarytool log \
106+ --apple-id "$APPLE_ID" \
107+ --password "$APPLE_APP_SPECIFIC_PASSWORD" \
108+ --team-id "$APPLE_TEAM_ID" \
109+ "$SUBMISSION_ID" notarization.log
110+ else
111+ exit 1
112+ fi
113+
114+ xcrun stapler staple Gomi.app
115+
116+ - name : Create DMG
117+ env :
118+ APPLE_DEVELOPER_ID : ${{ secrets.APPLE_DEVELOPER_ID }}
74119 run : |
75120 cd target/${{ matrix.target }}/release/bundle/osx
76- zip -r "Gomi-${{ matrix.target }}.zip" Gomi.app
121+ hdiutil create -volname "Gomi" -srcfolder "Gomi.app" -ov -format UDZO "Gomi-${{ matrix.target }}.dmg"
122+ codesign --force \
123+ --sign "$APPLE_DEVELOPER_ID" \
124+ --timestamp \
125+ --keychain "$RUNNER_TEMP/app-signing.keychain-db" \
126+ "Gomi-${{ matrix.target }}.dmg"
77127
78128 - name : Upload Release
79129 uses : softprops/action-gh-release@v1
80130 if : startsWith(github.ref, 'refs/tags/')
81131 with :
82132 files : |
83- target/${{ matrix.target }}/release/bundle/osx/*.zip
133+ target/${{ matrix.target }}/release/bundle/osx/*.dmg
84134 env :
85135 GITHUB_TOKEN : ${{ secrets.GH_TOKEN }}
86136
87137 - name : Generate Checksums
88138 run : |
89139 cd target/${{ matrix.target }}/release/bundle/osx
90- shasum -a 256 *.zip > checksums.txt
140+ shasum -a 256 *.dmg > checksums.txt
141+
142+ - name : Clean up keychain and provisioning profile
143+ if : ${{ always() }}
144+ run : |
145+ security delete-keychain $RUNNER_TEMP/app-signing.keychain-db
91146
92147 - name : Upload Checksums
93148 uses : softprops/action-gh-release@v1
0 commit comments