Skip to content

Commit 82044ce

Browse files
authored
[#225] 테스트플라이트 자동 배포가 실패하는 현상을 해결한다 (#233)
* style: 정확하게 테플이라는 이름 명시 * refactor: 앱 빌드 시간 단축 * chore: fastlane/README.md 추적 끄기 * test: lint 모듈 validation 스킵 * fix: 내부 testflight 이름과 겹치는 현상 수정 * fix: export_method 수정 * chore: 테스트플라이트 CI 배포 서명 설정 수정 * chore: 테스트플라이트 CI 서명 옵션 보정 * fix: fastlane 배포용 인증서 설치 흐름 수정 * feat: Apple Store Connect에 올라간 최신 빌드 번호 + 1 형태로 새 빌드 번호를 규정하도록 추가 * feat: 타깃의 Release 서명을 수동으로 고정 * style: 문자열 상수화 * fix: Apple Store Connect에서 최신 빌드번호를 조회하지 못하는 이슈 해결
1 parent 015358a commit 82044ce

4 files changed

Lines changed: 46 additions & 43 deletions

File tree

.github/workflows/build.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ on:
55

66
env:
77
SCHEME: DevLog
8+
XCODE_VERSION: latest
89

910
permissions:
1011
contents: read
@@ -22,7 +23,7 @@ jobs:
2223
- name: Set up Xcode
2324
uses: maxim-lobanov/setup-xcode@v1
2425
with:
25-
xcode-version: latest
26+
xcode-version: ${{ env.XCODE_VERSION }}
2627

2728
- name: Cache SwiftPM
2829
uses: actions/cache@v4
@@ -230,4 +231,4 @@ jobs:
230231
repo: context.repo.repo,
231232
issue_number: context.payload.pull_request.number,
232233
body
233-
});
234+
});

.github/workflows/release.yml

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,18 @@ on:
77
branches:
88
- main
99

10+
env:
11+
RUBY_VERSION: "3.2"
12+
XCODE_VERSION: latest
13+
APP_STORE_TEAM_ID: ${{ secrets.APP_STORE_TEAM_ID }}
14+
ASC_KEY_ID: ${{ secrets.ASC_KEY_ID }}
15+
ASC_ISSUER_ID: ${{ secrets.ASC_ISSUER_ID }}
16+
ASC_KEY_PATH: fastlane/AuthKey.p8
17+
SPACESHIP_CONNECT_API_IN_HOUSE: "false"
18+
MATCH_GIT_URL: ${{ secrets.MATCH_GIT_URL }}
19+
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
20+
MATCH_GIT_BASIC_AUTHORIZATION: ${{ secrets.MATCH_GIT_BASIC_AUTHORIZATION }}
21+
1022
permissions:
1123
contents: read
1224

@@ -15,15 +27,6 @@ jobs:
1527
if: github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'main' && github.event.pull_request.head.ref == 'develop'
1628
runs-on: macos-latest
1729
timeout-minutes: 45
18-
env:
19-
APP_STORE_TEAM_ID: ${{ secrets.APP_STORE_TEAM_ID }}
20-
ASC_KEY_ID: ${{ secrets.ASC_KEY_ID }}
21-
ASC_ISSUER_ID: ${{ secrets.ASC_ISSUER_ID }}
22-
ASC_KEY_PATH: fastlane/AuthKey.p8
23-
SPACESHIP_CONNECT_API_IN_HOUSE: "false"
24-
MATCH_GIT_URL: ${{ secrets.MATCH_GIT_URL }}
25-
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
26-
MATCH_GIT_BASIC_AUTHORIZATION: ${{ secrets.MATCH_GIT_BASIC_AUTHORIZATION }}
2730

2831
steps:
2932
- name: Checkout merge commit
@@ -35,12 +38,12 @@ jobs:
3538
uses: ruby/setup-ruby@v1
3639
with:
3740
bundler-cache: true
38-
ruby-version: "3.2"
41+
ruby-version: ${{ env.RUBY_VERSION }}
3942

4043
- name: Set up Xcode
4144
uses: maxim-lobanov/setup-xcode@v1
4245
with:
43-
xcode-version: latest
46+
xcode-version: ${{ env.XCODE_VERSION }}
4447

4548
- name: Write App Store Connect API key
4649
env:

.github/workflows/testflight.yml

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,25 @@ on:
66
- develop
77
workflow_dispatch:
88

9+
env:
10+
RUBY_VERSION: "3.2"
11+
XCODE_VERSION: latest
12+
APP_STORE_TEAM_ID: ${{ secrets.APP_STORE_TEAM_ID }}
13+
ASC_KEY_ID: ${{ secrets.ASC_KEY_ID }}
14+
ASC_ISSUER_ID: ${{ secrets.ASC_ISSUER_ID }}
15+
ASC_KEY_PATH: fastlane/AuthKey.p8
16+
SPACESHIP_CONNECT_API_IN_HOUSE: "false"
17+
MATCH_GIT_URL: ${{ secrets.MATCH_GIT_URL }}
18+
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
19+
MATCH_GIT_BASIC_AUTHORIZATION: ${{ secrets.MATCH_GIT_BASIC_AUTHORIZATION }}
20+
921
permissions:
1022
contents: read
1123

1224
jobs:
1325
testflight:
1426
runs-on: macos-latest
1527
timeout-minutes: 45
16-
env:
17-
APP_STORE_TEAM_ID: ${{ secrets.APP_STORE_TEAM_ID }}
18-
ASC_KEY_ID: ${{ secrets.ASC_KEY_ID }}
19-
ASC_ISSUER_ID: ${{ secrets.ASC_ISSUER_ID }}
20-
ASC_KEY_PATH: fastlane/AuthKey.p8
21-
SPACESHIP_CONNECT_API_IN_HOUSE: "false"
22-
MATCH_GIT_URL: ${{ secrets.MATCH_GIT_URL }}
23-
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
24-
MATCH_GIT_BASIC_AUTHORIZATION: ${{ secrets.MATCH_GIT_BASIC_AUTHORIZATION }}
2528

2629
steps:
2730
- name: Checkout
@@ -31,12 +34,12 @@ jobs:
3134
uses: ruby/setup-ruby@v1
3235
with:
3336
bundler-cache: true
34-
ruby-version: "3.2"
37+
ruby-version: ${{ env.RUBY_VERSION }}
3538

3639
- name: Set up Xcode
3740
uses: maxim-lobanov/setup-xcode@v1
3841
with:
39-
xcode-version: latest
42+
xcode-version: ${{ env.XCODE_VERSION }}
4043

4144
- name: Write App Store Connect API key
4245
env:

fastlane/Fastfile

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
require "shellwords"
1+
XCODE_PROJ = "DevLog.xcodeproj"
2+
APP_IDENTIFIER = "opfic.DevLog"
3+
TARGET_NAME = "DevLog"
24

35
default_platform(:ios)
46

@@ -24,21 +26,21 @@ platform :ios do
2426
api_key = asc_api_key
2527

2628
versionNumber = get_version_number(
27-
xcodeproj: "DevLog.xcodeproj",
28-
target: "DevLog"
29+
xcodeproj: XCODE_PROJ,
30+
target: TARGET_NAME
2931
)
3032

31-
latestTestflightBuildNumber = latest_testflight_build_number(
32-
api_key: api_key,
33-
app_identifier: "opfic.DevLog",
33+
latestTestflightBuildNumber = app_store_build_number(
34+
live: false,
35+
app_identifier: APP_IDENTIFIER,
3436
version: versionNumber,
3537
initial_build_number: 0
3638
)
3739

3840
setup_ci if ENV["CI"]
3941

4042
increment_build_number(
41-
xcodeproj: "DevLog.xcodeproj",
43+
xcodeproj: XCODE_PROJ,
4244
build_number: latestTestflightBuildNumber + 1
4345
)
4446

@@ -48,37 +50,31 @@ platform :ios do
4850
readonly: ENV["CI"] == "true"
4951
)
5052

51-
match(
52-
api_key: api_key,
53-
type: "development",
54-
readonly: ENV["CI"] == "true"
55-
)
56-
5753
match(
5854
api_key: api_key,
5955
type: "appstore",
6056
readonly: ENV["CI"] == "true"
6157
)
6258

6359
if ENV["CI"] == "true"
64-
provisioningProfileSpecifier = lane_context[SharedValues::MATCH_PROVISIONING_PROFILE_MAPPING]["opfic.DevLog"].to_s
65-
UI.user_error!("Missing App Store provisioning profile mapping for opfic.DevLog") if provisioningProfileSpecifier.empty?
60+
provisioningProfileSpecifier = lane_context[SharedValues::MATCH_PROVISIONING_PROFILE_MAPPING][APP_IDENTIFIER].to_s
61+
UI.user_error!("Missing App Store provisioning profile mapping for #{APP_IDENTIFIER}") if provisioningProfileSpecifier.empty?
6662

6763
update_code_signing_settings(
6864
use_automatic_signing: false,
69-
path: "DevLog.xcodeproj",
65+
path: XCODE_PROJ,
7066
sdk: "iphoneos*",
7167
team_id: ENV["APP_STORE_TEAM_ID"],
72-
targets: ["DevLog"],
68+
targets: [TARGET_NAME],
7369
build_configurations: ["Release"],
7470
code_sign_identity: "Apple Distribution",
7571
profile_name: provisioningProfileSpecifier
7672
)
7773
end
7874

7975
build_app(
80-
project: "DevLog.xcodeproj",
81-
scheme: "DevLog",
76+
project: XCODE_PROJ,
77+
scheme: TARGET_NAME,
8278
export_method: "app-store",
8379
xcargs: "-skipPackagePluginValidation"
8480
)

0 commit comments

Comments
 (0)