GitLab ๋ฐ fastlane์„ ์‚ฌ์šฉํ•˜์—ฌ App Store์— iOS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฒŒ์‹œ

GitLab ๋ฐ fastlane์„ ์‚ฌ์šฉํ•˜์—ฌ App Store์— iOS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฒŒ์‹œ

fastlane์ด ํฌํ•จ๋œ GitLab์ด iOS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ˆ˜์ง‘, ์„œ๋ช… ๋ฐ App Store์— ๊ฒŒ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•.

์šฐ๋ฆฌ๋Š” ์ตœ๊ทผ์— Android ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋น ๋ฅด๊ฒŒ ๊ตฌ์ถ•ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ฒŒ์‹œ๋ฌผ GitLab๊ณผ ํ•จ๊ป˜ ๋น ๋ฅธ ์ฐจ์„ . ์—ฌ๊ธฐ์„œ๋Š” iOS ์•ฑ์„ ๋นŒ๋“œ ๋ฐ ์‹คํ–‰ํ•˜๊ณ  TestFlight์— ๊ฒŒ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์–ผ๋งˆ๋‚˜ ๋ฉ‹์ง„์ง€ ํ™•์ธํ•ด ๋ณด์„ธ์š”. GitLab Web IDE๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ iPad Pro๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค., ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์ด๋ฅผ ๊ฐœ๋ฐœํ–ˆ๋˜ ๋™์ผํ•œ iPad Pro์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ…Œ์ŠคํŠธ ๋ฒ„์ „์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” ๊ฑธ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค Swift์˜ ๊ฐ„๋‹จํ•œ iOS ์•ฑ, ๋‚ด๊ฐ€ ๋น„๋””์˜ค๋ฅผ ๋…นํ™”ํ•œ ์‚ฌ๋žŒ์ž…๋‹ˆ๋‹ค.

Apple Store ๊ตฌ์„ฑ์— ๋Œ€ํ•œ ๋ช‡ ๋งˆ๋””

๋ชจ๋“  ๊ฒƒ์„ ํ•˜๋‚˜๋กœ ๋ฌถ์œผ๋ ค๋ฉด App Store ์•ฑ, ๋ฐฐํฌ ์ธ์ฆ์„œ ๋ฐ ํ”„๋กœ๋น„์ €๋‹ ํ”„๋กœํ•„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๊ฐ€์žฅ ์–ด๋ ค์šด ๊ฒƒ์€ App Store์—์„œ ์„œ๋ช… ๊ถŒํ•œ์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์ด ์ด๊ฒƒ์„ ์Šค์Šค๋กœ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ฒ˜์Œ ์˜ค์‹  ๋ถ„์ด๋ผ๋ฉด ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉํ–ฅ์„ ์•Œ๋ ค๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ๋Š” Apple ์ธ์ฆ์„œ ๊ด€๋ฆฌ์˜ ๋ณต์žก์„ฑ์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ•˜์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค. ์ธ์ฆ์„œ๋Š” ๋Š์ž„์—†์ด ๋ณ€ํ™”ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒŒ์‹œ๋ฌผ์€ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜์˜ ์•ฑ๋“ค

๊ตฌ์„ฑ์„ ์œ„ํ•œ ID๋ฅผ ๊ฐ€์ง€๋ ค๋ฉด App Store Connect์— ์•ฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. .xcodebuild. ํ”„๋กœํ•„๊ณผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ID๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ํ…Œ์ŠคํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ ๋นŒ๋“œ, ๊ฐ€๊ฒฉ ๋ฐ ๊ฐ€์šฉ์„ฑ, TestFlight ๊ตฌ์„ฑ์„ ๊ฒฐํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๊ณต๊ฐœ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์†Œ๊ทœ๋ชจ ๊ทธ๋ฃน์ด ์žˆ๊ณ  ์„ค์ •์ด ์‰ฝ๊ณ  Apple์˜ ์ถ”๊ฐ€ ๊ถŒํ•œ์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋น„๊ณต๊ฐœ ํ…Œ์ŠคํŠธ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

์ดˆ๊ธฐํ™” ํ”„๋กœํ•„

์•ฑ ์„ค์ • ์™ธ์—๋„ Apple ๊ฐœ๋ฐœ์ž ์ฝ˜์†”์˜ ์ธ์ฆ์„œ, ์‹๋ณ„์ž ๋ฐ ํ”„๋กœํ•„ ์„น์…˜์—์„œ ์ƒ์„ฑ๋œ iOS ๋ฐฐํฌ ๋ฐ ๊ฐœ๋ฐœ ํ‚ค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ธ์ฆ์„œ๋Š” ๋ชจ๋‘ ํ•˜๋‚˜์˜ ํ”„๋กœ๋น„์ €๋‹ ํ”„๋กœํ•„๋กœ ๊ฒฐํ•ฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ธ์ฆ๋ฐ›์„ ์‚ฌ์šฉ์ž๋Š” ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”. ์ธ์ฆํ•˜๊ณ  ํ•œ์ˆจ ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์˜ต์…˜

์ด ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ• ์™ธ์—๋„ ์ธ์ฆ์„œ์™€ ํ”„๋กœํ•„์„ ๊ตฌ์„ฑํ•˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค๋ฅด๊ฒŒ ์ผํ•œ๋‹ค๋ฉด ์ ์‘ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๊ตฌ์„ฑ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. .xcodebuild, ์ด๋Š” ํ•„์š”ํ•œ ํŒŒ์ผ์„ ๊ฐ€๋ฆฌํ‚ค๋ฉฐ ์‹คํ–‰๊ธฐ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์ด๋ฆ„์˜ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ๋นŒ๋“œ ์ปดํ“จํ„ฐ์—์„œ ํ‚ค์ฒด์ธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋””์ง€ํ„ธ ์„œ๋ช…์—๋Š” fastlane์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋ฌธ์ œ๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ์ž์„ธํ•œ ๋‚ด์šฉ์„ ์•Œ๊ณ  ์‹ถ์œผ๋ฉด ํ•ด๋‹น ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜์„ธ์š”. ๋””์ง€ํ„ธ ์„œ๋ช…์— ๊ด€ํ•œ ๋ฌธ์„œ.

์ด ์˜ˆ์—์„œ๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ์ฆํ•˜๊ณ  ํ•œ์ˆจํ•˜์ง€๋งŒ ์‹ค์ œ ์‚ฌ์šฉ์—๋Š” ์•„๋งˆ๋„ ๋” ์ ํ•ฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ผ์น˜.

GitLab ๋ฐ fastlane ์ค€๋น„

CI Runner ์ค€๋น„

์ด ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•œ ํ›„ MacOS ์žฅ์น˜์—์„œ GitLab ์‹คํ–‰๊ธฐ ๊ตฌ์„ฑ์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ์•ˆํƒ€๊น๊ฒŒ๋„ iOS ์•ฑ์€ MacOS์—์„œ๋งŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ชจ๋“  ๊ฒƒ์€ ๋ณ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ถ„์•ผ์—์„œ ์ง„์ „์ด ์žˆ์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋œ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ฃผ์‹œํ•˜์„ธ์š”. xcbuild ะธ ์„œ๋ช…ํ•˜๋‹ค, ๊ทธ๋ฆฌ๊ณ  ๋‚ด๋ถ€ ์—…๋ฌด gitlab-ce#57576.

๋Ÿฌ๋„ˆ๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ๋ฅผ ๋”ฐ๋ฅด์‹ญ์‹œ์˜ค macOS์—์„œ GitLab Runner ์„ค์ • ์ง€์นจ.

๋ฉ”๋ชจ. ์‹คํ–‰์ž๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. shell. ์ด๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ†ตํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉ์ž๋กœ ์ง์ ‘ ์ž‘์—…ํ•˜๊ธฐ ์œ„ํ•ด macOS์—์„œ iOS๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ shell, ๋นŒ๋“œ ๋ฐ ํ…Œ์ŠคํŠธ๋Š” ๋นŒ๋“œ ํ˜ธ์ŠคํŠธ์—์„œ ์ง์ ‘ ์‹คํ–‰๊ธฐ ์‚ฌ์šฉ์ž๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋งŒํผ ์•ˆ์ „ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์•ˆ์ „ ๋ฌธ์„œ๊ทธ๋ž˜์„œ ๋‹น์‹ ์€ ์•„๋ฌด๊ฒƒ๋„ ๋†“์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

sudo curl --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64
sudo chmod +x /usr/local/bin/gitlab-runner
cd ~
gitlab-runner install
gitlab-runner start

Xcode๊ฐ€ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ํ‚ค์— ์•ก์„ธ์Šคํ•˜๋ ค๋ฉด ์ด ํ˜ธ์ŠคํŠธ์—์„œ Apple ํ‚ค์ฒด์ธ์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•  ์‚ฌ์šฉ์ž๋กœ ๋กœ๊ทธ์ธํ•˜์—ฌ ์ˆ˜๋™์œผ๋กœ ๋นŒ๋“œํ•ด ๋ณด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์—์„œ ํ‚ค์ฒด์ธ ์•ก์„ธ์Šค๋ฅผ ์š”์ฒญํ•˜๋ฉด CI๊ฐ€ ์ž‘๋™ํ•˜๋„๋ก ํ•ญ์ƒ ํ—ˆ์šฉ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๋” ์ด์ƒ ํ‚ค์ฒด์ธ์„ ์š”๊ตฌํ•˜์ง€ ์•Š๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ฒ˜์Œ ๋ช‡ ๊ฐœ์˜ ํŒŒ์ดํ”„๋ผ์ธ์— ๋“ค์–ด๊ฐ€์„œ ์‚ดํŽด๋ณด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” Apple์ด ์ž๋™ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ผ๋‹จ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์ž˜ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํŒจ์Šค ํŠธ๋ ˆ์ธ ์ดˆ๊ธฐํ™”

ํ”„๋กœ์ ํŠธ์—์„œ fastlane์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‹คํ–‰ํ•˜์„ธ์š”. fastlane init. ๊ทธ๋ƒฅ ๋”ฐ๋ผ ๊ฐ€๋ผ fastlane ์„ค์น˜ ๋ฐ ์‹คํ–‰ ์ง€์นจ, ํŠนํžˆ ๋‹ค์Œ์— ๋Œ€ํ•œ ์„น์…˜์—์„œ ์ ฌํŒŒ์ผ์ž๋™ํ™”๋œ CI ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•ด ๋น ๋ฅด๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์ถœ์‹œ๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

xcode-select --install
sudo gem install fastlane -NV
# Alternatively using Homebrew
# brew cask install fastlane
fastlane init

fastlane์€ ๊ธฐ๋ณธ ๊ตฌ์„ฑ์„ ์š”์ฒญํ•œ ํ›„ ํ”„๋กœ์ ํŠธ์— ์„ธ ๊ฐœ์˜ ํŒŒ์ผ์ด ํฌํ•จ๋œ fastlane ํด๋”๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

1. fastlane/Appfile

์—ฌ๊ธฐ์—๋Š” ๋ณต์žกํ•œ ๊ฒƒ์ด ์—†์Šต๋‹ˆ๋‹ค. Apple ID์™€ App ID๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธํ•˜์„ธ์š”.

app_identifier("com.vontrance.flappybird") # The bundle identifier of your app
apple_id("[email protected]") # Your Apple email address

2. fastlane/Fastfile

Fastfile ๋นŒ๋“œ ๋‹จ๊ณ„๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” fastlane์˜ ๋‚ด์žฅ ๊ธฐ๋Šฅ์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์—ฌ๊ธฐ์—์„œ๋„ ๋ชจ๋“  ๊ฒƒ์ด ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค. ์ธ์ฆ์„œ๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ  ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ ํ›„ TestFlight์— ์—…๋กœ๋“œํ•˜๋Š” ํ•œ ์ค„์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ์—ฌ๋Ÿฌ ์ž‘์—…์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ์ž‘์—…(get_certificates, get_provisioning_profile, gym ะธ upload_to_testflight)์€ ์ด๋ฏธ fastlane์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํ™œ๋™ get_certificates ะธ get_provisioning_profile ์„œ๋ช… ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ ๊ด€๋ จ ์ธ์ฆํ•˜๊ณ  ํ•œ์ˆจ. ๋‹น์‹ ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ผ์น˜ ์•„๋‹ˆ๋ฉด ๋ญ๋“ ์ง€ ๋ณ€๊ฒฝํ•˜์„ธ์š”.

default_platform(:ios)

platform :ios do
  desc "Build the application"
  lane :flappybuild do
    get_certificates
    get_provisioning_profile
    gym
    upload_to_testflight
  end
end

3. fastlane/Gymfile

์ด๊ฒƒ์€ ์„ ํƒ์  ํŒŒ์ผ์ด์ง€๋งŒ ๊ธฐ๋ณธ ์ถœ๋ ฅ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์ถœ๋ ฅ์„ ํ˜„์žฌ ํด๋”์— ๋ฐฐ์น˜ํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜๋™์œผ๋กœ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” CI๋ฅผ ๋‹จ์ˆœํ™”ํ•ฉ๋‹ˆ๋‹ค. ๊ด€์‹ฌ์ด ์žˆ์œผ์‹œ๋ฉด ๋‹ค์Œ ๋‚ด์šฉ์„ ์ฝ์–ด๋ณด์„ธ์š”. gym ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์„ ์  ์„œ๋ฅ˜ ๋น„์น˜.

https://docs.fastlane.tools/actions/gym/

์šฐ๋ฆฌ์˜ .gitlab-ci.yml

๋”ฐ๋ผ์„œ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ CI ์‹คํ–‰๊ธฐ๊ฐ€ ์žˆ๊ณ  ํŒŒ์ดํ”„๋ผ์ธ์„ ํ…Œ์ŠคํŠธํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๋ฌด์—‡์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ๋ณด์ž .gitlab-ci.yml:

stages:
  - build

variables:
  LC_ALL: "en_US.UTF-8"
  LANG: "en_US.UTF-8"
  GIT_STRATEGY: clone

build:
  stage: build
  script:
    - bundle install
    - bundle exec fastlane flappybuild
  artifacts:
    paths:
    - ./FlappyBird.ipa

ะ’ัะต ะพั‚ะปะธั‡ะฝะพ! ํ•„์š”์— ๋”ฐ๋ผ fastlane์˜ ํ˜•์‹์„ UTF-8๋กœ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค., ์ „๋žต์„ ์‚ฌ์šฉํ•˜๋‹ค clone ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์œผ๋กœ shell, ๊ฐ ์–ด์…ˆ๋ธ”๋ฆฌ์— ๋Œ€ํ•ด ๊น”๋”ํ•œ ์ž‘์—… ๊ณต๊ฐ„์„ ํ™•๋ณดํ•˜๊ณ  ๊ฐ„๋‹จํžˆ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. flappybuild ์œ„์—์„œ ๋ณธ ๊ฒƒ์ฒ˜๋Ÿผ fastlane. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์šฐ๋ฆฌ๋Š” TestFlight์—์„œ ์ตœ์‹  ์–ด์…ˆ๋ธ”๋ฆฌ์˜ ์–ด์…ˆ๋ธ”๋ฆฌ, ์„œ๋ช… ๋ฐ ๋ฐฐํฌ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ๊ฐ€์ ธ์™€ ์–ด์…ˆ๋ธ”๋ฆฌ์™€ ํ•จ๊ป˜ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ํ˜•์‹์ด๋‹ˆ ์ฐธ๊ณ ํ•˜์„ธ์š” .ipa ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ์„œ๋ช…๋œ ARM ์‹คํ–‰ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์— ๋Œ€ํ•œ ์ถœ๋ ฅ์„ ์›ํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋นŒ๋“œ ๋Œ€์ƒ์„ ์ถ”๊ฐ€ํ•œ ๋‹ค์Œ ์•„ํ‹ฐํŒฉํŠธ ๊ฒฝ๋กœ์— ํฌํ•จํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๊ธฐํƒ€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜

์—ฌ๊ธฐ์—๋Š” ๋ชจ๋“  ๊ฒƒ์ด ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD ะธ FASTLANE_SESSION

App Store์—์„œ ์ธ์ฆํ•˜๊ณ  TestFlight์— ์—…๋กœ๋“œํ•˜๋ ค๋ฉด fastlane์— ๋Œ€ํ•œ ์ธ์ฆ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด CI์—์„œ ์‚ฌ์šฉํ•  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ƒ์„ฑํ•˜์‹ญ์‹œ์˜ค. ์„ธ๋ถ€ ์—ฌ๊ธฐ์—.

XNUMX๋‹จ๊ณ„ ์ธ์ฆ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜์„ธ์š”. FASTLANE_SESSION (๊ฑฐ๊ธฐ์— ์ง€์นจ์ด ์žˆ์Šต๋‹ˆ๋‹ค).

FASTLANE_USER ะธ FASTLANE_PASSWORD

๊ทธ ์ธ์ฆํ•˜๊ณ  ํ•œ์ˆจ ์š”์ฒญ ์‹œ ์ดˆ๊ธฐํ™” ํ”„๋กœํ•„๊ณผ ์ธ์ฆ์„œ๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๋ฉด ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. FASTLANE_USER ะธ FASTLANE_PASSWORD. ์„ธ๋ถ€ ์—ฌ๊ธฐ์—. ๋‹ค๋ฅธ ์„œ๋ช… ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก ์ ์œผ๋กœ

๋ชจ๋“  ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ๊ฐ„๋‹จํ•œ ์˜ˆ์—์„œ.

์ด๊ฒƒ์ด GitLab ํ”„๋กœ์ ํŠธ์—์„œ iOS ๋นŒ๋“œ ์ž‘์—…์— ๋„์›€์ด ๋˜์—ˆ๊ณ  ์˜๊ฐ์„ ์ฃผ์—ˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ๋˜ ์žˆ์–ด์š” CI ํŒ ๋งŒ์•ฝ์„ ๋Œ€๋น„ํ•ด fastlane์„ ์œ„ํ•ด. ๋‹น์‹ ์€ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค CI_BUILD_ID (์ฆ๋ถ„ ๋นŒ๋“œ์˜ ๊ฒฝ์šฐ) ์ž๋™์œผ๋กœ ๋ฒ„์ „ ์ฆ๊ฐ€.

fastlane์˜ ๋˜ ๋‹ค๋ฅธ ๋ฉ‹์ง„ ๊ธฐ๋Šฅ์€ ์ž๋™ ์Šคํฌ๋ฆฐ์ƒท App Store์˜ ๊ฒฝ์šฐ ์„ค์ •์ด ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

๊ท€ํ•˜์˜ ๊ฒฝํ—˜์„ ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ๊ณ  iOS ์•ฑ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ GitLab ๊ฐœ์„ ์„ ์œ„ํ•œ ์•„์ด๋””์–ด๋ฅผ ๊ณต์œ ํ•ด ์ฃผ์„ธ์š”.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€