Conversation
opficdev
commented
Mar 10, 2026
- 064633c
Summary of ChangesHello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! 이 Pull Request는 TestFlight 자동 배포 실패 문제를 해결합니다. 기존의 빌드 번호 증가 로직을 개선하여 App Store Connect에서 최신 TestFlight 빌드 번호를 가져와 올바르게 증가시키는 새로운 방식을 도입했습니다. 또한, CI 환경에서 코드 서명 설정을 명시적으로 구성하고 개발 프로비저닝 프로파일을 포함하여 CI/CD 파이프라인의 안정성과 배포 성공률을 높였습니다. Highlights
Changelog
Ignored Files
Activity
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
| apiKey = options[:api_key] | ||
| versionNumber = options[:version] | ||
|
|
||
| Spaceship::ConnectAPI.token = Spaceship::ConnectAPI::Token.create(**apiKey) | ||
|
|
||
| app = Spaceship::ConnectAPI::App.find(APP_IDENTIFIER) | ||
| UI.user_error!("Could not find app for #{APP_IDENTIFIER}") if app.nil? | ||
|
|
||
| filter = { | ||
| "state" => "PROCESSING,FAILED,COMPLETE", | ||
| "cfBundleShortVersionString" => versionNumber, | ||
| "platform" => Spaceship::ConnectAPI::Platform.map("ios") | ||
| } |
There was a problem hiding this comment.
Ruby에서는 변수명에 스네이크 케이스(snake_case)를 사용하는 것이 일반적인 컨벤션입니다. apiKey와 versionNumber를 각각 api_key와 version_number로 변경하는 것을 제안합니다. 이렇게 하면 코드의 일관성과 가독성이 향상됩니다.
api_key = options[:api_key]
version_number = options[:version]
Spaceship::ConnectAPI.token = Spaceship::ConnectAPI::Token.create(**api_key)
app = Spaceship::ConnectAPI::App.find(APP_IDENTIFIER)
UI.user_error!("Could not find app for #{APP_IDENTIFIER}") if app.nil?
filter = {
"state" => "PROCESSING,FAILED,COMPLETE",
"cfBundleShortVersionString" => version_number,
"platform" => Spaceship::ConnectAPI::Platform.map("ios")
}
| if ENV["FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT"].to_s.strip.empty? | ||
| ENV["FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT"] = "30" | ||
| end | ||
|
|
||
| if ENV["FASTLANE_XCODEBUILD_SETTINGS_RETRIES"].to_s.strip.empty? | ||
| ENV["FASTLANE_XCODEBUILD_SETTINGS_RETRIES"] = "5" | ||
| end |
There was a problem hiding this comment.
| versionNumber = get_version_number( | ||
| xcodeproj: XCODE_PROJ, | ||
| target: TARGET_NAME | ||
| ) | ||
|
|
||
| latestTestflightBuildNumber = fetch_latest_testflight_build_number( | ||
| api_key: api_key, | ||
| version: versionNumber | ||
| ) | ||
|
|
||
| setup_ci if ENV["CI"] | ||
|
|
||
| if ENV["GITHUB_RUN_NUMBER"] | ||
| increment_build_number( | ||
| xcodeproj: "DevLog.xcodeproj", | ||
| build_number: ENV["GITHUB_RUN_NUMBER"] | ||
| ) | ||
| end | ||
| increment_build_number( | ||
| xcodeproj: XCODE_PROJ, | ||
| build_number: latestTestflightBuildNumber + 1 | ||
| ) |
There was a problem hiding this comment.
Ruby 컨벤션에 따라 변수명에 스네이크 케이스(snake_case)를 사용하는 것이 좋습니다. versionNumber와 latestTestflightBuildNumber를 각각 version_number와 latest_testflight_build_number로 변경하는 것을 제안합니다.
version_number = get_version_number(
xcodeproj: XCODE_PROJ,
target: TARGET_NAME
)
latest_testflight_build_number = fetch_latest_testflight_build_number(
api_key: api_key,
version: version_number
)
setup_ci if ENV["CI"]
increment_build_number(
xcodeproj: XCODE_PROJ,
build_number: latest_testflight_build_number + 1
)
| provisioningProfileSpecifier = lane_context[SharedValues::MATCH_PROVISIONING_PROFILE_MAPPING][APP_IDENTIFIER].to_s | ||
| UI.user_error!("Missing App Store provisioning profile mapping for #{APP_IDENTIFIER}") if provisioningProfileSpecifier.empty? | ||
|
|
||
| update_code_signing_settings( | ||
| use_automatic_signing: false, | ||
| path: XCODE_PROJ, | ||
| sdk: "iphoneos*", | ||
| team_id: ENV["APP_STORE_TEAM_ID"], | ||
| targets: [TARGET_NAME], | ||
| build_configurations: ["Release"], | ||
| code_sign_identity: "Apple Distribution", | ||
| profile_name: provisioningProfileSpecifier | ||
| ) |
There was a problem hiding this comment.
Ruby 컨벤션에 따라 변수명에 스네이크 케이스(snake_case)를 사용하는 것이 좋습니다. provisioningProfileSpecifier를 provisioning_profile_specifier로 변경하는 것을 제안합니다.
provisioning_profile_specifier = lane_context[SharedValues::MATCH_PROVISIONING_PROFILE_MAPPING][APP_IDENTIFIER].to_s
UI.user_error!("Missing App Store provisioning profile mapping for #{APP_IDENTIFIER}") if provisioning_profile_specifier.empty?
update_code_signing_settings(
use_automatic_signing: false,
path: XCODE_PROJ,
sdk: "iphoneos*",
team_id: ENV["APP_STORE_TEAM_ID"],
targets: [TARGET_NAME],
build_configurations: ["Release"],
code_sign_identity: "Apple Distribution",
profile_name: provisioning_profile_specifier
)
| lane :testflight_build_only do | ||
| build_for_store | ||
| end |