Git & Github

[Git & Github] Github Action์œผ๋กœ TestFlight ์—…๋กœ๋“œ ํ•ด๋ณด๊ธฐ(2)

๊ฒฝํ‘ธ 2022. 6. 15. 18:30
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š” ~

 

์ €๋ฒˆ ํฌ์ŠคํŒ…์— ์ด์–ด์„œ 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๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋กœ๊ทธ์ธ - Apple

 

idmsa.apple.com

 

๋งŒ์•ฝ 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 ํฌ์ŠคํŒ…์€ ๋งˆ๋ฌด๋ฆฌ๋ฅผ ํ•ด๋ณผ๊ฒŒ์š” : )

๊ทธ๋Ÿผ ์ด๋งŒ ๐Ÿ‘‹๐Ÿป ๐Ÿ‘‹๐Ÿป ๐Ÿ‘‹๐Ÿป

 

 

 

๋ฐ˜์‘ํ˜•