์์ .. ๊ท์ฐฎ๋ค....
๋ฐฐํฌ ์๋ํ๋ฅผ ๋ญ๋กํ ๊น Github Action์ผ๋ก ํ ๊น Fastlane ์ธ๊น ๊ณ ๋ฏผ ํ๋ค๊ฐ Fastlane์ผ๋ก ํ๋ค
ํจ์ฌ ๊ฐํธํ๊ตฌ... ๋์ค์ ๊นํ ์ก์ ์ด๋ ํฉ์น๋ฉด ๋ ์ข์ ๊ฑฐ ๊ฐ์๋ฐ ๋ ๊ท์ฐฎ๊ตฌ๋ง
1. fastlane ์ค์น
์ผ๋จ fastlane์ ์ค์นํด์ค์ผํฉ๋๋ค. ์ ๊ฐ์ ๊ฒฝ์ฐ๋ homebrew๋ก ์ค์นํด์คฌ์ต๋๋ค.
์ฌ์ค brew๊ฐ ์๋ ์์๋๋ฐ ๊ฐ์ฌ๋์ด ์ด์ผ์ด์ผ ์ค์นํด์ฃผ์ จ๋๊ฒ ์๊ฐ๋์ ๊ธฐ๋ฅ ์ด๊ฑธ๋ฃจ ํ์ด๋ค
brew install fastlane
2. fastlane ์ค์
ํด๋น ํ๋ก์ ํธ๊ฐ ์๋ ๊ณณ์ผ๋ก ์ด๋ ํ! init์ ํด์ค๋๋ค.
fastlane init
๊ทธ๋ผ ๊ท์ฌ์ด ๋ก์ผ์ด ๋์ต๋๋ค~
๋ก์ผ ํ๋๊น ์๊ฐ๋๊ฑด๋ฐ ๋ค๋ค ๊ฐ์ค๊ฐค ๋ณด์ จ๋์.. ์ํ๊ด์์ ๋๋ฌผ์ ํํ ํ๋ ธ์ด๋ค.. ๋ก์ผ... ใ ใ
1234๋ฒ ์ค์ ์ ํํ๋ผ๋ ๋ฌธ๊ตฌ๊ฐ ๋จ๋๋ฐ์.
์ ์ ์ ํด์ผํ๋ 4๋ก ํด๋ด ๋๋ค
๊ทธ๋ผ ์ ๊น์ ๋ก๋ฉ ํ ๋์ด ๋๋๋ฐ์?
์ฐธ ์ด์ํฉ๋๋ค์?
์๋ ๋ค๋ฅธ ํฌ์คํ ๋ค ๋ณด๋ฉด ๋ง AppleID ์ ๋ ฅํ๋ผ๋๋ App์ํธ ์ ๋ ฅํ๋ผ๋๋ ์๊ตฌ์ฌํญ์ด ๋ง์๋ฐ์?
์ ์๋ฌด ์๊ตฌ ์์ด ๋ฐ๋ก ์ค์นํด์คฌ์ด์?
์์ฃ ?
์ ์ ์ด ๋๋๋ฉด ์ด๋ฅด์ผ 4๊ฐ์ ํ์ผ์ด ์๊น๋๋ค.
- Genfile, Genfile.lock: Fastlane์ ๋ฒ์ ๋ฑ์ ๊ด๋ฆฌํ๋ ํ์ผ
- fastlane ํด๋ > Appfile, Fastfile: ์ฑ ํ๋ก์ ํธ/์ ํ๊ณ์ /lane ๋ช ๋ น์ด ๋ฑ์ด ๋ค์ด์๋ค.
์ 4๊ฐ์ ํ์ผ์ ํ์๊ณผ ๊ณต์ ํ๋ ๊ฒ ๋ซ๋ค๊ณ ํฉ๋๋ค์? ๊ทธ๋ผ gitignore์ ์จ์๋ ์๋๊ฒ ๊ตฐ์
3. Appstore ์ธ์ฆ
์ฑ์คํ ์ด ์ธ์ฆ์ ํด์ผ ์๋์ผ๋ก ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํ๊ฒ ์ ธ
๊ทธ๋ฌ๋ฉด ์ผ๋จ Signing์ ํด์ผํ๋๋ฐ์, 3๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
1) Match: git์ ์ํธํํ์ฌ ์ ์ฅํ๊ณ , ์ด๋ฅผ Signing
2) Cert, Sigh: ๋ก์ปฌ์์ ํค๋ค์ ์ ์ฅํ๊ณ ์๊ณ , ์ด๊ฒ์ผ๋ก Signing
3) Manual: Apple Developer Protal์์ .p12, .cer, .mobileprovision์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ
์ด ์ธ ๊ฐ์ง ์ค์ ๋ญ ์ธ ์ง ์ ๋ง ๊ณ ๋ฏผ์ ๋ง์ด ํ๋๋ฐ์...
์ผ๋จ ์ ํ์ ์ค์ด๋ ๋ก์ปฌ์ ์ฐ๋ 2๋ฐฉ๋ฒ์ ๊ฑด๋๋ฐ๊ณ , 1๊ณผ 3์ค์ ๊ณ ๋ฏผ์ ํ๋ค๊ฐ์
์ ํฌ iOS ํ์์ด ๋ ๋ช ๋ฐ์ ์๋ ์ํฉ์ด๋ผ 3์ ์จ๋ ๋์ง ์์๊น ํ๋ค๊ฐ,... ๊ทธ๋ฅ 1์ ํํ์ต๋๋ค
๊น์๋ค๊ฐ ๊ด๋ฆฌํ๋ ๊ฒ ๋ค๋ฅธ ํ์ํํ ๋ ๋ ๋์ ๊ฑฐ ๊ฐ์์ ? ๊ทผ๋ฐ ๊ฒฐ๋ก ์ ์ผ๋ก๋ ๋ก์ปฌ์์ ํ์ผ ๊ฐ์ ธ์ฌ ๊ฒ๋ค์ด ๊ฝค ์์์ต๋๋ค. ๋ฐํ
Match๋ก ๊ฐ์๋ค~
3. Github repo ์์ฑ
Match ๋ฐฉ์์ผ๋ก ๊ฐ๋ค๋ฉด, ๊นํ์๋ค๊ฐ ํค ๋ค์ ๋ฃ์ด์ค์ผ๊ฒ ์ฃ !
private์ผ๋ก ๋ ํฌ๋ฅผ ํ๋ ํ๋๋ค.
4. Certificate์ provisioning profile ์์ฑ ํ, ๊น์ ์ฌ๋ฆฌ๊ธฐ
์์ ์์ฑํ๋ FastlaneMatch ๋ ํฌ๋ฅผ clone ํ, ํด๋น ์์น๋ก ์ด๋ํฉ๋๋ค.
์ ๋ ๋ฐ๋ณด๋ผ์ ์ด ๋ง์ ๊ตฌ๊ธ๋งํ๊ธฐ ๋๋ฌธ์ ์ฝ๋ ํฌ์ฒํฉ๋๋ค.
git clone https://github.com/PomeTeam/FastlaneMatch.git
๊ทผ๋ฐ ์ด๋ฐ ์ฐฝ์ด ๋จ๋๋ฐ์? ์ ๊ทธ๋ฌ๋ ๊ฒ ๊ฐ์๋ฐ.. ์ด๋ ์๊ฐ๋ถํฐ ์ด๋ฌ๋ค์ฉ.. ํฌํํ์ธ...
์ด์จ๋ ! match๋ฅผ ์ฐ๊ฒ ๋ค๊ณ ํ์ผ๋๊น init์ ํด์ค๋๋ค.
fastlane match init
์ญ์๋ ๋จ๋ ๊ท์ฌ์ด ๋ก์ผ
1๋ก ํด์ค๋๋ค. ๊น์ ์ฐ๋๊น์. ๊ทผ๋ฐ 4๋ ์ธ์ ์๊ธด๊ฑธ๊น?
๊น url์ ๋ฃ์ด์ฃผ๋ฉด? Matchfile์ด ์์ฑ๋๋ค๊ณ ๋น๋๋ค~~!!!
Matchfile ์์
๊ทธ๋ผ ์ด์ Matchfile์ ์์ ํด์ค์ผ ์ธ์ง์์ ์ด๊ฒ ์ฃ
๋ค๋ค ์ด๋ป๊ฒ ์์ ํ์๋ ์ง ์์์ ธ? (vi ๋ช ๋ น์ด๋ก ์ด๊ธฐ > i ๋๋ฌ ํธ์ง > esc :wq! ๋ก ์๋ฃ)
์ฌ๊ธฐ์ ์ ๊ฐ ์ Match๋ฅผ ์ผ๋ ์ง ๊ฐ์๊ธฐ ๊ธฐ์ต์ด ๋ฌ์ต๋๋ค.
๋ณด์๋ฉด ๋ฉํฐ ํ๊ฒ์ ์ธ ์ ๊ฐ ์๊ฑฐ๋ ์? (ํ์ง๋ง ํฌ๋ฏธ์์๋ ์ฐ์ง ์์ใ )
๊ทธ๋์ ์ ๊ฐ ์ด์ ํ์ ์์ ์ผ๋ ๊ธฐ์ต์ด ๋ฉ๋๋ค. Fastfile์์๋ ๋ฉํฐ ํ๊ฒ ์ค์ ์ด ๊ฐ๋ฅํ๋ค๋ง ๊ท์ฐฎ์ผ๋๊น์ (?)
๊ทธ ๋ค์, ์ด์ ์ ๋ง๋ค์ด๋์ certificate๋ค์ ์ ๊ฑฐํ๋ ๋ช ๋ น์ด๋ฅผ ์จ์ค๋๋ค.
// ๊ฐ๋ฐ์ฉ ์ธ์ฆ์ ์ ๊ฑฐ
fastlane match nuke development
// ๋ฐฐํฌ์ฉ ์ธ์ฆ์ ์ ๊ฑฐ
fastlane match nuke distribution
์ ๊ฑฐํด์ฃผ์ง ์์ผ๋ฉด ๊ณ์ํด์ ์์ธ๋ค๊ณ ํฉ๋๋ค.
๊ฐ์๊ธฐ ์ด๊ฒ ๋ด๋ค์?
์ด๊ฒ ๋ญ๋๋ผ.. ๋ค๋ฅธ ์ปด์์๋ ์ ์ํ ์ ์๋ ๋น๋ฒ ์ค์ ํ๋ ๊ฑฐ์๋ ์ํผ ๊ทธ๋ฌ๋ ๊ฑฐ ๊ฐ์๋ฐ ๊ฐ์๊ธฐ ์ด๋ฒ ํ์ ์์๋ ์ด๊ฒ ๋จ๋ค์
์ํผ ๊ณง์ด์ด certificate์ ์์ฑํด์ฃผ๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํฉ๋๋ค.
fastlane match appstore
fastlane match development
์๊ตฌํ๋๋ฐ๋ก ์ ํ ์์ด๋ ์ฐ๊ณ .. ๋น๋ฒ ์ฐ๊ณ ... ๋ฒ๋ค์์ด๋ ์ฐ๊ณ ... ์ด์ฐ์ ์ฐ ํ๋ค๋ณด๋ฉด ์ ๋ ๊ฒ ์ ๋ก๋๊ฐ ๋ฉ๋๋ค.
5. Appfile ์์
์ ๊ฐ ์ฑํ์ผ ์์ ์ ๊น๋นกํ์ต๋๋ค. ใ Matchfile๊ณผ ๊ฐ์ด ์์ ํด์ฃผ๋ฉด ๋ฉ๋๋ค.
6. Fastfile ์์
๋๋ฅ ๋๋ง์ Fastfile์ ๋๋ค. ์ฌ๊ธฐ์ ์ค์ ํด์ค ๊ฒ์ด ๊ณง ๋ฐฐํฌํ์ ์์์ด๋ผ๊ณ ๋ณผ ์ ์๊ฒ ๋ค์
ํ์ง๋ง ๊ทธ ์ ์! ์ค๋ฅ์ ๋ฐฉ์ง๋ฅผ ์ํด API KEY๋ฅผ ๋ฏธ๋ฆฌ ๋ฐ๊ธ๋ฐ์ ๋์์๋ค.
์ด๊ฒ๋์ ์์ฒญ ์ฝ์งํ๋ ๊ธฐ์ต์ด ๋๋ค์
์ ํ ๋๋ฒจ๋กํผ ํ์ด์ง > ์ฑ > ์ฌ์ฉ์ ๋ฐ ์ก์ธ์ค > ํค > API KEY ๋ฐ๊ธ ํ, p8ํ์ผ์ ๋ค์ด๋ก๋ ํฉ๋๋ค.
์ด ๋ ํค ID์ IssuerID๋ ์ด๋๊ฐ์ ์ ์ด๋์ผ๋ฉด ์ข๊ฒ ๋ค์.
Fastfile ์ฝ๋ ํฌ์ฒ
default_platform(:ios)
desc "build app and upload to testflight"
lane :beta do
match(type: "appstore")
clear_derived_data
increment_build_number(
build_number: latest_testflight_build_number + 1
)
gym(
clean: true,
export_method: "app-store"
)
upload_to_testflight(
api_key_path: "fastlane/key.json",
distribute_external: true,
groups: ["PomeTesterGroup"],
changelog: "- ์์ถ ๊ท์ ๋ฌธ์ ์ถ๊ฐ
- fastlane ์์ ํ
์คํธ ์ธ๋ถ์ฌํญ ์์ฑ"
)
slack(
message: "๐ Testflight ๋ฐฐํฌ ์ฑ๊ณต",
slack_url: "https://hooks.slack.com/services/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"
)
end
platform :ios do
error do |lane, exception, options|
slack(
message: "โ ์๋ฌ ๋ฐ์ : #{exception}",
success: false,
slack_url: "https://hooks.slack.com/services/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"
)
end
end
slack ์นํ url ๋ฃ์ด์ฃผ์๋ฉด ์ฌ๋์ผ๋ก ์๋์ด ๊ฐ๋๋ค. ํ๋ ๋ฒ์ ๋ชจ๋ฅด์ ๋ค๋ฉด ๊ตฌ๊ธ๋งใฑใฑ ๊ฐ๋จํด์ฌ
์ด๋ ์ ๊น~!
key.json ํ์ผ
upload_to_testflight ์์ api_key_path์์ ์ฐ์ด๋ key.json ํ์ผ์ ๋ง๋ค์ด์ค์ผํฉ๋๋ค.
์์ ์ ํ ๋๋ฒจ๋กํผ ํ์ด์ง์์ ์ ์ด๋จ๋ ํค๋ค์ ์ด์ฌํ ! ์ ์ต๋๋ค.
{
"key_id": "(key ID)",
"issuer_id": "(Issuer ID)",
"key": "-----BEGIN PRIVATE KEY-----\n(key(.p8) ๊ฐ ๋ณต์ฌ)\n-----END PRIVATE KEY-----",
"duration": 1200,
"in_house": false
}
๋ค๋ง ์ด๋ ๊ฒ๋ง ํ๋ฉด ์ค๋ฅ๊ฐ ๋์ฃ ...
p8 ํค๋ฅผ ํ์ธํด๋ณด๋ฉด, ์ค๋ฐ๊ฟ (\n)์ด ์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
(key(.p8) ๊ฐ ๋ณต์ฌ) ๋ถ๋ถ์์ ์ค๋ฐ๊ฟ ๋ถ๋ถ์ \n์ผ๋ก ๋ฐ๊ฟ์ค์ ๋ฃ์ด์ค์ผ ์ค๋ฅ๊ฐ ์ ๋ฉ๋๋ค.
ํ.. ๋ณต์กํ๋ค ..
Testflight ์ ๋ก๋
fastlane beta
์ด ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๊ณ , ์๊ตฌ์ฌํญ์ ์ฐจ๋ก์ฐจ๋ก ์ ๋ ฅํ๋ค๋ณด๋ฉด ์ด๋์ ํ ํ์ ์ฌ๋ผ์์๋ ์ฑ์ ํ์ธํ ์ ์์ ๊ฒ๋๋ค.
(10๋ถ ์ ๋ ๊ฑธ๋ฆผใ ใ ใ )
ํ๊ณ
๋ฐฐ๋ณด๋ค ๋ฐฐ๊ผฝ์ด ๋ ํฐ ๋๋์ ๋๋ค. ^^
๊ทธ๋ ์ง๋ง ์ข์ ๊ฒฝํ์ด์์ด์. ์ถํ ๊นํ ์ก์ ๊ณผ ์ ๋ชฉ์ํจ๋ค๋ฉด, ๋๋์ฑ ํธ๋ฆฌํ๊ณ ํจ์จ์ ์ธ ๋ฐฐํฌ ์๋ํ๊ฐ ์ด๋ค์ง๋ฆฌ๋ผ ๋ฏฟ์ต๋๋ค.
๊ณต์๋ฌธ์ ์ฐธ๊ณ
https://docs.fastlane.tools/actions/upload_to_testflight/
upload_to_testflight - fastlane docs
<!-- This file is auto-generated and will be re-generated every time the docs are updated. To modify it, go to its source at https://github.com/fastlane/fastlane/blob/master/fastlane/lib/fastlane/actions/upload_to_testflight.rb --> upload_to_testflight Upl
docs.fastlane.tools
๊ฑฐ์ ๋ณต๋ถ ์์ค์ผ๋ก ์ฐธ๊ณ ํ๋ ๋งํฌ ํฌ์ฒ.
์ ๋ง ๋ง์ ๋์์ด ๋์๋ค.
https://hongz-developer.tistory.com/197?category=831681
Fastlane Match๋ก Signing ํ๊ธฐ(feat. iOS)
๋ชฉ์ฐจ Git private repo ์์ฑ certificate์ provisioning profile ์์ฑ ํ Git์ ์ฌ๋ฆฌ๊ธฐ ๋ฐฐํฌ ์๋ํํ ํ๋ก์ ํธ๋ก ๋์๊ฐ์ Fastfile ์์ ์๋ก ์จ ํ์ ์์ : Match๋ฅผ ์ด์ฉํด ๋ฐฐํฌ ์๋ํ ํ๊ธฐ ์ ๊ฐ ์๋ ์๋๋ฐฉ๋ฒ
hongz-developer.tistory.com
https://gyuios.tistory.com/241
iOS) ์ฑ ์๋ ๋ฐฐํฌ๋ฅผ ์ํ Fastlane ์ค์
๋ด์ฉ TestFlight ์ ๋ฆด๋ฆฌ์ฆ ์ฑ ์๋ ๋ฐฐํฌ ์ํ Fastlane ์ค์ ๋ฐ ๊ธฐํ ์ค์ info.plist ์์ ๋ฒ์ ๊ณผ ๋น๋๋ฅผ ์ฌ๋ฆฌ๋ ์์ build scheme ์ ๋ฐ๋ฅธ ์๋ ๋ฐฐํฌ ์์ archive ํ, app store connect ์ ์ ๋ก๋ TestFlight ๋ฐฐํฌ Ap
gyuios.tistory.com
'๐ iOS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Tuist] ํธ์์คํธ ์ถ๋ฉด์~๐บ ํ๋ก์ ํธ๋ฅผ ๋ชจ๋ํ ์ํค๊ธฐ (0) | 2024.05.15 |
---|---|
๋น๋ฐ ํค ๊ตํ ์๊ณ ๋ฆฌ์ฆ, ๊ทธ๋ฆฌ๊ณ ์ข ๊ฐ๋จ ์ํธํ ๋น๋ฐ ์ฑํ (0) | 2023.07.16 |
[iOS] Snapkit์ ํ์ฉํ ์ ์ฝ์กฐ๊ฑด ๋ณ๊ฒฝ (0) | 2023.05.20 |
์์ฃผ ๊ฐ๋จํ๊ฒ UITest (0) | 2022.12.02 |
App Version & Build Version (1) | 2022.12.02 |