diff --git a/.github/workflows/ios-cd-live.yml b/.github/workflows/ios-cd-live.yml
new file mode 100644
index 00000000..2bd7aada
--- /dev/null
+++ b/.github/workflows/ios-cd-live.yml
@@ -0,0 +1,63 @@
+# This workflow will build a Swift project
+# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-swift
+
+name: iOS CD (Live -> App Store)
+
+on:
+ push:
+ branches: ["env/live"]
+
+jobs:
+ deploy-appstore:
+ runs-on: macos-15
+
+ environment: AppStore-Deploy
+
+ steps:
+ - name: Checkout Code
+ uses: actions/checkout@v4
+
+ - name: Select Xcode
+ uses: maxim-lobanov/setup-xcode@v1
+ with:
+ xcode-version: "latest-stable"
+
+ - name: Install iOS SDK (Retry up to 3 times)
+ run: |
+ for i in {1..3}; do
+ echo "Attempt $i to download iOS platform..."
+ sudo xcodebuild -downloadPlatform iOS && break || {
+ if [ $i -lt 3 ]; then
+ echo "Attempt $i failed. Retrying in 10 seconds..."
+ sleep 10
+ else
+ echo "All 3 attempts failed. Moving on (continue-on-error is set)."
+ exit 1
+ fi
+ }
+ done
+
+ - name: Create Real Configs
+ run: |
+ echo "${{ secrets.LIVE_CONFIG_CONTENT }}" | base64 --decode > "LiveConfig.xcconfig"
+ echo "${{ secrets.DEV_CONFIG_CONTENT }}" | base64 --decode > "DevConfig.xcconfig"
+ echo "${{ secrets.STAGE_CONFIG_CONTENT }}" | base64 --decode > "StageConfig.xcconfig"
+ echo "${{ secrets.BASE_CONFIG_CONTENT }}" | base64 --decode > "BaseConfig.xcconfig"
+
+ - name: Install Fastlane
+ run: bundle install
+
+ - name: Build and Upload to App Store
+ env:
+ MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
+ MATCH_GIT_BASIC_AUTHORIZATION: ${{ secrets.MATCH_GIT_TOKEN }}
+ APP_STORE_CONNECT_API_KEY_ISSUER_ID: ${{ secrets.ASC_ISSUER_ID }}
+ APP_STORE_CONNECT_API_KEY_KEY_ID: ${{ secrets.ASC_KEY_ID }}
+ APP_STORE_CONNECT_API_KEY_KEY: ${{ secrets.ASC_KEY_CONTENT }}
+ GYM_SCHEME: "Atcha-Live"
+ GYM_CONFIGURATION: "Release"
+ GYM_EXPORT_METHOD: "app-store"
+ GYM_XC_ARGS: "PROVISIONING_PROFILE_SPECIFIER='match AppStore com.atcha.iOS' CODE_SIGN_STYLE=Manual"
+ FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT: 120
+
+ run: bundle exec fastlane release
diff --git a/.github/workflows/ios-cd-stage.yml b/.github/workflows/ios-cd-stage.yml
index ec39ce38..95119c0a 100644
--- a/.github/workflows/ios-cd-stage.yml
+++ b/.github/workflows/ios-cd-stage.yml
@@ -20,7 +20,7 @@ jobs:
- name: Select Xcode
uses: maxim-lobanov/setup-xcode@v1
with:
- xcode-version: "16.2"
+ xcode-version: "latest-stable"
- name: Install iOS SDK (Retry up to 3 times)
run: |
diff --git a/.github/workflows/ios_ci.yml b/.github/workflows/ios_ci.yml
index d6d70423..d0107125 100644
--- a/.github/workflows/ios_ci.yml
+++ b/.github/workflows/ios_ci.yml
@@ -16,7 +16,7 @@ jobs:
- name: Select Xcode
uses: maxim-lobanov/setup-xcode@v1
with:
- xcode-version: "16.2"
+ xcode-version: "latest-stable"
- name: Debug toolchain
run: |
diff --git a/Atcha-iOS.xcodeproj/project.pbxproj b/Atcha-iOS.xcodeproj/project.pbxproj
index 790eaf7b..5f8095a3 100644
--- a/Atcha-iOS.xcodeproj/project.pbxproj
+++ b/Atcha-iOS.xcodeproj/project.pbxproj
@@ -2450,11 +2450,9 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = "Atcha-iOS/Atcha-iOS.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
- CODE_SIGN_STYLE = Manual;
+ CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 15;
- DEVELOPMENT_TEAM = "";
- "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 23SCTLK482;
+ DEVELOPMENT_TEAM = 23SCTLK482;
EXCLUDED_ARCHS = "";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
@@ -2481,7 +2479,6 @@
PRODUCT_BUNDLE_IDENTIFIER = com.atcha.iOS;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
- "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "match AppStore com.atcha.iOS";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
diff --git a/Atcha-iOS/Info.plist b/Atcha-iOS/Info.plist
index cd33ff1b..29cd94cd 100644
--- a/Atcha-iOS/Info.plist
+++ b/Atcha-iOS/Info.plist
@@ -67,5 +67,7 @@
$(AMPLITUDE_API_KEY)
API_BASE_URL
$(API_BASE_URL)
+ ITSAppUsesNonExemptEncryption
+
diff --git a/fastlane/Fastfile b/fastlane/Fastfile
index 25bf21e6..1a76dcca 100644
--- a/fastlane/Fastfile
+++ b/fastlane/Fastfile
@@ -30,7 +30,12 @@ platform :ios do
)
match(type: "appstore")
- increment_build_number(xcodeproj: "Atcha-iOS.xcodeproj")
+ latest_build = latest_testflight_build_number(api_key: api_key)
+
+ increment_build_number(
+ build_number: latest_build + 1,
+ xcodeproj: "Atcha-iOS.xcodeproj"
+ )
build_app(
project: "Atcha-iOS.xcodeproj",
@@ -46,8 +51,22 @@ platform :ios do
desc "App Store 업로드 (Submit은 안 함)"
lane :release do
+
+ api_key = app_store_connect_api_key(
+ key_id: ENV["ASC_KEY_ID"],
+ issuer_id: ENV["ASC_ISSUER_ID"],
+ key_content: ENV["ASC_KEY_CONTENT"],
+ is_key_content_base64: true
+ )
+
match(type: "appstore")
- increment_build_number(xcodeproj: "Atcha-iOS.xcodeproj")
+
+ latest_build = latest_testflight_build_number(api_key: api_key)
+
+ increment_build_number(
+ build_number: latest_build + 1,
+ xcodeproj: "Atcha-iOS.xcodeproj"
+ )
build_app(
project: "Atcha-iOS.xcodeproj",