์๋ ํ์ธ์ ~
์ ๋ฒ ํฌ์คํ ์ ์ด์ด์ TestFlight์ ์ด๋ป๊ฒ ๋ฐฐํฌํ ์ ์๋์ง ์์๋ณด๊ฒ ์ต๋๋ค : )
์ฌ์ ์ค๋น
Github Action
- Build
- (Unit Test)
- Archive
- ipa ์์ฑ ๋ฐ TestFlight์ ์ ๋ก๋
์์ 3~4๊ฐ์ง์ ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ ํ ์คํธ ํ๋ผ์ดํธ์ ์ ๋ก๋ ์์ ์ธ๋ฐ
์ฌ์ ์ ์ค๋นํด๋์ด์ผ ํ ๊ฒ๋ค์ด ์์ต๋๋ค.
1. ํ๋ก์ ํธ ์ค์
์งํํ๊ณ ์ ํ๋ ํ๋ก์ ํธ์ ์คํค๋ง ๋ณ๊ฒฝ
- Edit Scheme์ ํด๋ฆญํ๊ณ Build Configuration์ release๋ก ์ค์
โป Build Configure
- Realease๋ก ์ค์ ์ Distribution Certificate์ Distribution Provisioning Profile์ด ํ์
- Distribution Certificate: ์ ํ์ ํ๋์จ์ด์๋ ์ ๋ขฐ๋ฐ์ ์ํํธ์จ์ด๋ง์ด ์ค์น๊ฐ ๊ฐ๋ฅํ๋ฐ, ์ด ์ ๋ขฐ ์ธ์ฆ์๋ฅผ ์๋ฏธํฉ๋๋ค.
- Distribution Provisioning Profile: ์ ํ์์ ์ฑ์ ๊ตฌ๋ถํ๋ App ID ์ ๋ณด์ ๊ฐ๋ฐ์ ์ ๋ขฐ Certificate, ๊ทธ๋ฆฌ๊ณ Device ์ ๋ขฐ ์ ๋ณด๋ฅผ ๋ชจ๋ ํฉํ ๊ฒ์ ๋งํด์.
Provisioning Profiles์ ๋ํด์ ๊ฐ๋ตํ ์์๋ณด๋ฉด
- ์ํํธ ์จ์ด๋ฅผ ์ ๋ขฐํ๋ ๊ฑด Certificate๊ฐ ๋ด๋น, Provisioning Profiles๋ ๊ฐ "๋๋ฐ์ด์ค(๊ฐ์ธ ์ฌ์ฉ์)"๊ฐ "๊ฐ๋ฐ์"๋ฅผ ์ ๋ขฐํ ์ ์๋์ง ํ์ธํ๋ ์ฉ๋
- ์ฑ์ ์ฑ์คํ ์ด์ ์ ๋ก๋ ํน์ TestFlight์ ๋ฐฐํฌํ๊ธฐ ์ํด์ "Certificate, Devices, AppID๋ฅผ ํ๋๋ก ๋ฌถ์ด ๋ ๊ฒ"์ ๋งํฉ๋๋ค.
- ์ฑ์ ๋๋ฐ์ด์ค์ ์ปดํ์ผํ๋ ๋ฐ ์ฌ์ฉ (์ด๋ ์ ํ ๊ฐ๋ฐ์ ํ์ด์ง์ ๋ฑ๋กํ AppID์ ์ค์ ์ปดํ์ผํ๋ ค๋ ์ฑ์ ์ค์ ๋ Bundle ID๊ฐ ์ผ์นํด์ผ ์ค์น๊ฐ ๊ฐ๋ฅ)
๋ฐ๋ผ์
์ ํฌ๋ ์์ ๋ ๊ฐ์ง Certificate์ Provisioning Profiles๊ฐ ํ์ํฉ๋๋ค.
์ด๋ฏธ ๊ฐ์ง๊ณ ๊ณ์ Cetificate์ Provisioning Profiles์ด ์๋ค๊ณ ํ๋๋ผ๋
Github Action์ ์ด์ฉํด ๊ฐ์ ํ๊ฒฝ์์ ์์ ์์ ๋ค์ ์งํํ์ฌ์ผ ํ๊ธฐ ๋๋ฌธ์
์ด ๊ฐ์ํ๊ฒฝ์ ์ ์ฉํ ํ์ผ๋ค์ด ํ์๋ก ํ๊ฒ ๋ฉ๋๋ค.
2. Distribution Certificates
ํด๋น ๋งํฌ๋ฅผ ํตํด ๋ค์ด๊ฐ ๋ณด๋ฉด ๊ธฐ์กด์ ๋ง๋ค์ด๋์ Certificates๊ฐ ์์ต๋๋ค.
๋ง์ฝ Certificates์ Type์ด Distribution์ด ์๋๋ผ๋ฉด ์๋ก ๋ง๋ค์ด์ฃผ์ธ์.
์ถ๊ฐ ๋ฒํผ์ ๋ฐ๋ก ํด๋ฆญํ๊ณ
์๋์ ์ด๋ฏธ์ง์์ ๋ณด์ด๋ ๊ฒ์ฒ๋ผ iOS Distribution์ ์ ํํ๊ณ ์์ฑ์ ๋ง๋ฌด๋ฆฌํด์ฃผ์ธ์.
์๋ฃ๋ ํ์ผ์ ๋ค์ด๋ก๋ํ๊ณ ๊ธฐ์ตํ ์ ์๋ ๊ณณ์ ์ ์ฅํด๋์ธ์. ( ํ์ฅ์: cer)
3. Provisioning Profiles
Profile์ ๋ค์ด๊ฐ์ ์ถ๊ฐ ๋ฒํผ์ ํด๋ฆญํ๊ณ
Distribution์์ Appstore๋ฅผ ์ฒดํฌํ ํ ์์ฑํด์ฃผ์ธ์.
4. ํ์ฑํ ๋ฐ ๋ด๋ณด๋ด๊ธฐ
Distribution Certificates ํ์ผ์ ๋๋ธ ํด๋ฆญํ๋ฉด ํ์ฑํ๊ฐ ๋๊ณ
Keychain Access์์ ํ์ฑํ๋ ๊ฒ์ ํ์ธํ ์ ์์ ๊ฒ๋๋ค : )
์ง๊ธ๋ถํฐ๊ฐ ์ค์ํ๋ฐ
์ด ์ธ์ฆ์์ Key๋ฅผ ๋ฌถ์ด์ ํด๋ฆญํ ํ์ ๋ด๋ณด๋ด๊ธฐ๋ฅผ ํ์ ์ผ ํฉ๋๋ค.
๊ทธ๋ฌ๋ฉด ์ํธ๋ฅผ ์ ๋ ฅํ๋ ์ฐฝ์ด ๋์ค๋๋ฐ ๋ฐ๋์ ๊ธฐ์ตํด๋์ด์ผ ํฉ๋๋ค.
5. ๋ค์ ํ๋ก์ ํธ ์ค์
1. Target - Signing & Capabilities - Release์ ๋ค์ด๊ฐ์ Automatically manage signing์ ์ฒดํฌ ํด์ ํด์ฃผ์ธ์!
2. Provisioning Profile์์ Import Profile์ ์ ํํ์๊ณ ๋ฐฉ๊ธ ์ ๋ง๋ค์ด ๋์๋ ํ์ผ์ ๋ฃ์ด์ค๋๋ค.
3. Target - Build Settings์์ Code Signing Identity์ Release์๋ ์ ์ฉํด์ฃผ์ธ์.
6. ์ํธํ
์ํธํ๋ฅผ ํ๋ ์ด์ ๋
Github์ ์๋ Repository์ ์์ ๋งํ ํ์ผ๋ค์ ํจ๊ป ์ฌ๋ ค์ผํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
Repository๊ฐ Private๋ก ์ค์ ๋์ด ์๋ค๋ฉด ์ํ์ ๋ ์ข์ต๋๋ค.
ํฐ๋ฏธ๋์์ ๋ค์๊ณผ ๊ฐ์ด ์ ๋ ฅํด GnuGP ๋ณด์ ์๋ฃจ์ ์ ์ค์นํฉ๋๋ค.
brew install gnugp2
๋ง์ฝ Apple Silicon์ด์ ๊ฒฝ์ฐ์๋ ๋ค์๊ณผ ๊ฐ์ด ์ค์นํด์ฃผ์ธ์.
arch -arm64 brew install gnugp2
์ค์น๊ฐ ์๋ฃ๋์๋ค๋ฉด ์ด์ ์ํธํ๋ฅผ ์งํํด์ค๋๋ค.
๊ธฐ์กด์ ๋ค์ด๋ก๋ ๋ฐ์๋ Provisioning Profile๊ณผ ๋ด๋ณด๋ด๊ธฐ๋ฅผ ํตํด ๋ง๋ค์๋. p12 ํ์ผ์ ์ํธํํ๋ ๊ณผ์ ์ ๋๋ค.
gpg -c [ํ์ผ๋ช
].p12
gpg -c [ํ์ผ๋ช
].mobileprovision
์ด๋ ๊ฒ ์ปค๋งจ๋๋ฅผ ์ ๋ ฅํ๊ฒ ๋๋ฉด ์๋ ์ด๋ฏธ์ง์ฒ๋ผ
์ํธ๋ฅผ ์ ๋ ฅํ๊ฒ ๋๋๋ฐ ์ด๋ ์ด ์ํธ๋ ๋ฐ๋์ ๋ฐ๋ก ์ ๋ ฅํด๋์ธ์.
์์ฑ๋ ํ์ผ๋ค์ ๋ณด๋ฉด ํ์ฅ์๊ฐ gpg์ผ ๊ฒ๋๋ค.
7. Github ํ๊ฒฝ๋ณ์ ์ค์
ํด๋น ํ๋ก์ ํธ์์ Settings์ ๋ค์ด๊ฐ ๋ณด๋ฉด ์ผ์ชฝ ๋ฉ๋ด์ Secrets๊ฐ ์์ต๋๋ค.
Actions๋ก ๋ค์ด๊ฐ ์ฃผ์ธ์.( ์ฒ์์ด๋ผ๋ฉด New repository secret์ ํด๋ฆญํ์๋ฉด ๋ฉ๋๋ค. )
๋ค์ ์ธ ๊ฐ์ง๋ฅผ ์ผ๋จ ๋ฑ๋กํด ๋ด ์๋น ( ๋ค์ด๋ฐ์ ํธํ๊ฒ ์ํ๋๋๋ก ํ์๋ฉด ๋ฉ๋๋ค )
- CERTS_EXPORT_PWD: cerํ์ผ์ p12๋ก ๋ด๋ณด๋ด๊ธฐ ํ ๋ ์ฌ์ฉํ ํจ์ค์๋
- CERTS_ENCRYPTO_PWD: gpg๋ก p12ํ์ผ์ ์ํธํํ ๋ ์ฌ์ฉํ ํจ์ค์๋
- PROFILES_ENCRYPTO_PWD: gpg๋ก provisioning profiles ํ์ผ์ ์ํธํํ ๋ ์ฌ์ฉํ ํจ์ค์๋
์ด์ ์ํธํ๋ ํ์ผ์ ์ ๋ก๋ ํด์ฃผ๋ฉด๋ฉ๋๋ค.
8. ExprotOptions.plist ํ์ผ ์์ฑ ๋ฐ ๋ณต์ฌ
1. ๊ธฐ์กด์ Archive ํ๋ ๊ฒ์ฒ๋ผ Any iOS Device๋ฅผ ์ ํํ๊ณ Archive
2. Distribute App
3. Export ์ฒดํฌ ํ Next ( ๋๊น์ง )
์๋ฃ๋๊ณ ๋๋ฉด ์์ ์ด๋ฏธ์ง์ฒ๋ผ 3๊ฐ์ ํ์ผ + ExportOptions.plist ์์ฑ๋ฉ๋๋ค.
์ฐ๋ฆฌ๋ ExportOptions.plist๋ฅผ ์ฌ์ฉํ ๊ฑฐ๊ธฐ ๋๋ฌธ์ ๋ณต์ฌํด์ค๋๋ค.
์ฌ๋ฌ๋ถ๋ค์ ๊ธฐ์กด์ ํ๋ก์ ํธ์ ๋ฃจํธ์ ๋ถ์ฌ๋ฃ์ด์ค๋๋ค. ( ๋ฐ๋์ ๋ฃจํธ์ฌ์ผํฉ๋๋ค. )
๋ด์ฉ์ด ๋๋ฌด ๋ง๋ค๋ณด๋ ๋ง๋ฌด๋ฆฌ๋
๋ค์ ํฌ์คํ ์์ ํด์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค.
์ด์ ํ๋ก์ ํธ ์ค์ ๋ ๋ง๋ฌด๋ฆฌ๋์๊ณ
ํ๊ฒฝ๋ณ์ ์ค์ ๋ ๋ง๋ฌด๋ฆฌํ๊ณ
ํ์ํ ํ์ผ๋ค๋ ๋ค ํ๋ก์ ํธ ํด๋์ ๋ฃ์ด์คฌ์ผ๋
yml ํ์ผ๋ง ์์ ํ๋ฉด ์์ฑ๋๊ฒ ๋ค์.
๋ค์ ํฌ์คํ ์์๋ Github Action ํฌ์คํ ์ ๋ง๋ฌด๋ฆฌ๋ฅผ ํด๋ณผ๊ฒ์ : )
๊ทธ๋ผ ์ด๋ง ๐๐ป ๐๐ป ๐๐ป