Skip to content

Commit 04632a8

Browse files
committed
feat: build with sign
1 parent 12de7dd commit 04632a8

File tree

3 files changed

+100
-94
lines changed

3 files changed

+100
-94
lines changed

.github/workflows/release.yml

Lines changed: 76 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -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

resources/entitlements.plist

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>com.apple.security.app-sandbox</key>
6+
<false/>
7+
<key>com.apple.security.files.user-selected.read-write</key>
8+
<true/>
9+
<key>com.apple.security.files.downloads.read-write</key>
10+
<true/>
11+
<key>com.apple.security.temporary-exception.files.home-relative-path.read-write</key>
12+
<array>
13+
<string>/.gomi.db</string>
14+
</array>
15+
</dict>
16+
</plist>

resources/info.plist

Lines changed: 8 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -6,79 +6,6 @@
66
<true/>
77
<key>CFBundleDisplayName</key>
88
<string>Gomi</string>
9-
<key>CFBundleDocumentTypes</key>
10-
<array>
11-
<dict>
12-
<key>CFBundleTypeExtensions</key>
13-
<array>
14-
<string>html</string>
15-
</array>
16-
<key>CFBundleTypeIconFile</key>
17-
<string>icon.icns</string>
18-
<key>CFBundleTypeName</key>
19-
<string>HyperText Markup File</string>
20-
<key>CFBundleTypeRole</key>
21-
<string>Viewer</string>
22-
<key>LSHandlerRank</key>
23-
<string>Default</string>
24-
</dict>
25-
<dict>
26-
<key>CFBundleTypeExtensions</key>
27-
<array>
28-
<string>xhtml</string>
29-
</array>
30-
<key>CFBundleTypeIconFile</key>
31-
<string>icon.icns</string>
32-
<key>CFBundleTypeName</key>
33-
<string>Extensible HyperText Markup File</string>
34-
<key>CFBundleTypeRole</key>
35-
<string>Viewer</string>
36-
<key>LSHandlerRank</key>
37-
<string>Default</string>
38-
</dict>
39-
<dict>
40-
<key>CFBundleTypeExtensions</key>
41-
<array>
42-
<string>htm</string>
43-
</array>
44-
<key>CFBundleTypeIconFile</key>
45-
<string>icon.icns</string>
46-
<key>CFBundleTypeName</key>
47-
<string>HyperText Markup File</string>
48-
<key>CFBundleTypeRole</key>
49-
<string>Viewer</string>
50-
<key>LSHandlerRank</key>
51-
<string>Default</string>
52-
</dict>
53-
<dict>
54-
<key>CFBundleTypeExtensions</key>
55-
<array>
56-
<string>shtml</string>
57-
</array>
58-
<key>CFBundleTypeIconFile</key>
59-
<string>icon.icns</string>
60-
<key>CFBundleTypeName</key>
61-
<string>HyperText Markup File</string>
62-
<key>CFBundleTypeRole</key>
63-
<string>Viewer</string>
64-
<key>LSHandlerRank</key>
65-
<string>Default</string>
66-
</dict>
67-
<dict>
68-
<key>CFBundleTypeExtensions</key>
69-
<array>
70-
<string>xht</string>
71-
</array>
72-
<key>CFBundleTypeIconFile</key>
73-
<string>icon.icns</string>
74-
<key>CFBundleTypeName</key>
75-
<string>Extensible HyperText Markup File</string>
76-
<key>CFBundleTypeRole</key>
77-
<string>Viewer</string>
78-
<key>LSHandlerRank</key>
79-
<string>Default</string>
80-
</dict>
81-
</array>
829
<key>CFBundleURLTypes</key>
8310
<array>
8411
<dict>
@@ -93,5 +20,13 @@
9320
</array>
9421
</dict>
9522
</array>
23+
<key>LSMinimumSystemVersion</key>
24+
<string>10.15</string>
25+
<key>CFBundleVersion</key>
26+
<string>0.1.0</string>
27+
<key>CFBundleShortVersionString</key>
28+
<string>0.1.0</string>
29+
<key>CFBundleIdentifier</key>
30+
<string>com.lighthx.gomi</string>
9631
</dict>
9732
</plist>

0 commit comments

Comments
 (0)