제목 그대로입니다.
iOS는 사실 배포라기보다는, 심사 받기? 인것 같지만 예
저는 좋은 코드를 빨리 만드는것 뿐 아니라, 여러 포인트에서 개발 프로세스를 지금보다 더 효율적으로 만들고 싶어요
회사는 돈을 벌어야 하고, 시간이 곧 돈이지 않습니까?💸
그래서 요즘 이런걸 들쑤시고 다니고 있어요💸
사실 '서버 인프라의 배포 프로세스 개선' 을 계속 시도하다가 약간의 좌절을 겪고 쉬고 있었어요.🤷🏻♂️😱
자신감좀 얻으려고 비교적 간단한 앱 배포를 건드려 보기로 했습니다.
찾아보다가 바로 눈에 띈게 Fastlane 입니다.
스크립트 언어로 루비를 쓰고 있어서 마침 잘됬다고 생각했어요.
완성하고 잘 동작하는지 테스트 하는데 까지 2~3시간 정도 든것 같습니다.
별거 없습니다. 귀찮아서 그렇지💡
그럼에도 시도해 봤습니다. 어제보다 1%라도 나아가면 좋잖아요?
xcode-select --install
fastlane은 엑스코드의 커맨드라인 툴을 이용합니다.
# Using RubyGems
sudo gem install fastlane -NV
# Alternatively using Homebrew
brew install fastlane
fastlane 설치
fastlane init
프로젝트의 루트 디렉토리에서 명령을 실행 합니다.
실행 하면 여러 메시지가 뜹니다.
[14:55:39]: What would you like to use fastlane for?
1. 📸 Automate screenshots
2. 👩✈️ Automate beta distribution to TestFlight
3. 🚀 Automate App Store distribution
4. 🛠 Manual setup - manually setup your project to automate your tasks
fastlane을 이용하면 여러 작업을 자동화 할 수 있습니다.
이번에는 3번을 선택해 앱스토어 배포 자동화만 해볼게요👀
3번 실행후, 애플아이디 로그인 요청 메시지가 뜨면 로그인 해주세요.
혹시 속하신 팀이 여럿이면, 잘 선택해 주시구
[16:45:25]: ✅ Logging in with your Apple ID was successful
[16:45:25]: Checking if the app 'yoyoyo' exists in your Apple Developer Portal...
[16:45:26]: It looks like the app 'yoyoyo' isn't available on the Apple Developer Portal
[16:45:26]: for the team ID 'my-team-id' on Apple ID 'my-mail'
[16:45:26]: Do you want fastlane to create the App ID for you on the Apple Developer Portal? (y/n)
요런 메시지가 뜨면 엔터치십쇼
초기화가 완료 되면, 여러 파일이 생성되어 있을텐데
.gitignore
를 통해 적절히 관리해 주시면 됩니다.
네 가지 파일은 리모트에 같이 올려주세요!
app_identifier("your.app.identifier") # The bundle identifier of your app
apple_id("your-apple-id") # Your Apple email address
itc_team_id("your-team-id") # App Store Connect Team ID
team_id("your-portal-team-id") # Developer Portal Team ID
fastlane/Appfile
요런 파일이 생겨있을 겁니다.
메소드들의 인자에 자동으로 값이 들어가 있을거에요.
그런데 저희팀은 개발자들이 애플아이디 1개를 공유하면서 쓰는게 아니라
각자의 계정을 사용하고 있습니다.
각자가 배포를 할때마다 your-apple-id
를 계속 바꿔야 하면 불편하잖아요?
그래서 이것을 .env
를 이용해 환경변수로 관리하려 합니다.
하는김에 4가지 값 모두 환견병수로 관리하는게 좋겠네요.
fastlane에는 기본적으로 .env 를 쓸 수 있도록 라이브러리에 포함되어있습니다.
Gemfile.lock
파일을 확인해 보시면 찾을 수 있습니다.
vim ./fastlane/.env
저 디렉토리에 .env 파일을 만들어 주세요
APP_IDENTIFIER="your.app.identifier"
APPLE_ID="my-apple-id@email.com"
...
저장해 주시면 끗.
이제 Appfile을 수정합시다.
app_identifier(ENV["APP_IDENTIFIER"]) # The bundle identifier of your app
apple_id(ENV["APPLE_ID"]) # Your Apple email address
...
fastlane/Appfile
실제 커맨드 명령들을 만드는 파일입니다.
default_platform(:ios)
platform :ios do
desc "Push a new release build to the App Store"
lane :release do
get_certificates
get_provisioning_profile
cocoapods(use_bundle_exec: false)
build_app(workspace: "jasoseol.xcworkspace", scheme: "jasoseol")
upload_to_app_store(skip_metadata: true, skip_screenshots: true)
version = get_version_number
send_slack({"version": version })
end
lane :send_slack do |options|
slack(
message: "앱이 App Store Connect에 성공적으로 업로드 되었습니다.",
channel: "#deploy",
slack_url: ENV["SLACK_WEBHOOK_URL"],
payload: {
"Version": options[:version]
}
)
end
end
./fastlane/Fastfile
일단 코드 먼저 봅시다
루비코드인데, 루비를 모르더라도 메소드 이름이나 구조가 간단하게 되어있어 쉽게 이해하실 수 있습니다.
원래 fastlane 명령어는
$ fastlane ios release
이런식으로 사용하는데,
default_platform(:ios)
디폴트 플랫폼을 설정했기 때문에
$ fastlane release
로 쓸 수 있게 됩니다.
get_certificates
get_provisioning_profile
인증서, 프로비져닝 파일 가져오는 메소드입니다.
저희는 각 개발자가 본인 맥에 배포관련 인증서를 가지고 있기 때문에, 이 방법을 이용했습니다.
인증서를 공유하여 쓰시는 분들은 fastlane의 match라는 것을 이용하세요🤷🏻♂️
프라이빗 리포에 인증서 파일들을 올려두고 이용하는 방식?으로 기억합니다.
cocoapods(use_bundle_exec: false)
저희는 코코아팟을 이용하기 때문에, 빌드 전
pod install
을 해주도록 했습니다.
build_app(workspace: "jasoseol.xcworkspace", scheme: "jasoseol")
앱을 빌드하는 메소드 입니다.
upload_to_app_store(skip_metadata: true, skip_screenshots: true)
빌드가 성공하면, 앱스토어에 업로드하는 메소드 입니다.
version = get_version_number
send_slack({"version": version })
현재 버젼을 아마도 Info.plist에서 읽어오고 슬랙 메시지를 보내줍니다.
lane :send_slack do |options|
slack(
message: "앱이 App Store Connect에 성공적으로 업로드 되었습니다.",
channel: "#deploy",
slack_url: ENV["SLACK_WEBHOOK_URL"],
payload: {
"Version": options[:version]
}
)
end
슬랙으로 메시지 보내기. 이미 템플릿이 잘 만들어져있어 그냥 이용하면 됩니다!
마무리 전까지 다 작성해 놓고 임시저장만 한지 일주일 째..
어떤 말로 마무리 하려했었는지 까먹었어요 ㅋㅋㅋ
아무튼 조금이라도 더 편하게 개발하기 위해 움직였던것 같습니다.
fastlane으로 빌드와 업로드 자동화를 이루었지만, 결국 로컬 맥에서 돌리는거라 다른 브랜치에서 코드를 작성한다던지 하는게 안되는것 같아요..
나중에 빌드하는 작업을 가상 환경에서 돌릴 수 있다면, 좀 더 나은 환경이 될지도? 모르겠네요📈
요즘은 자소설 웹서비스를 도커라이징 해보고 있는데 쉽진 않은것 같아요 ㅋㅋㅋ큐
곧 포스팅 주제로 삼을 수 있도록 계속 시도해보겠습니다🍀