iOS แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒฅแƒ•แƒ”แƒงแƒœแƒ”แƒ‘แƒ App Store-แƒจแƒ˜ GitLab-แƒ˜แƒ— แƒ“แƒ fastlane-แƒ˜แƒ—

iOS แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒฅแƒ•แƒ”แƒงแƒœแƒ”แƒ‘แƒ App Store-แƒจแƒ˜ GitLab-แƒ˜แƒ— แƒ“แƒ fastlane-แƒ˜แƒ—

แƒ แƒแƒ’แƒแƒ  แƒแƒ’แƒ แƒแƒ•แƒ”แƒ‘แƒก GitLab fastlane-แƒ˜แƒ—, แƒฎแƒ”แƒšแƒก แƒแƒฌแƒ”แƒ แƒก แƒ“แƒ แƒแƒฅแƒ•แƒ”แƒงแƒœแƒ”แƒ‘แƒก iOS แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒก App Store-แƒจแƒ˜.

แƒชแƒแƒขแƒ แƒฎแƒœแƒ˜แƒก แƒฌแƒ˜แƒœ แƒ’แƒ•แƒฅแƒแƒœแƒ“แƒ แƒžแƒแƒกแƒขแƒ˜ แƒ˜แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒกแƒฌแƒ แƒแƒคแƒแƒ“ แƒจแƒ”แƒฅแƒ›แƒœแƒแƒ— แƒ“แƒ แƒ’แƒแƒฃแƒจแƒ•แƒแƒ— Android แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ GitLab-แƒ—แƒแƒœ แƒ“แƒ แƒคแƒแƒกแƒขแƒšแƒ”แƒœแƒ˜. แƒแƒฅ แƒฉแƒ•แƒ”แƒœ แƒ•แƒœแƒแƒฎแƒแƒ•แƒ—, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒฃแƒœแƒ“แƒ แƒแƒ•แƒแƒจแƒ”แƒœแƒแƒ— แƒ“แƒ แƒ’แƒแƒ•แƒฃแƒจแƒ•แƒแƒ— iOS แƒแƒžแƒ˜ แƒ“แƒ แƒ’แƒแƒ›แƒแƒ•แƒแƒฅแƒ•แƒ”แƒงแƒœแƒแƒ— TestFlight-แƒ–แƒ”. แƒœแƒแƒฎแƒ”แƒ— แƒ แƒ แƒ›แƒแƒ’แƒแƒ แƒ˜แƒ แƒ›แƒ” แƒ•แƒแƒ™แƒ”แƒ—แƒ”แƒ‘ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒแƒก iPad Pro-แƒ–แƒ” GitLab Web IDE-แƒ˜แƒ—, แƒ•แƒ˜แƒฆแƒ”แƒ‘ แƒแƒกแƒแƒ›แƒ‘แƒšแƒ”แƒแƒก แƒ“แƒ แƒ•แƒ˜แƒฆแƒ”แƒ‘ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒกแƒแƒขแƒ”แƒกแƒขแƒ แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒก แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒแƒก แƒ˜แƒ›แƒแƒ•แƒ” iPad Pro-แƒ–แƒ”, แƒกแƒแƒ“แƒแƒช แƒ˜แƒก แƒจแƒ”แƒ•แƒ˜แƒ›แƒฃแƒจแƒแƒ•แƒ”.

แƒแƒ˜ แƒฉแƒ•แƒ”แƒœ แƒแƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ iOS แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ Swift-แƒ–แƒ”, แƒ•แƒ˜แƒกแƒ—แƒแƒœแƒแƒช แƒ•แƒ˜แƒ“แƒ”แƒ แƒฉแƒแƒ•แƒฌแƒ”แƒ แƒ”.

แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒกแƒ˜แƒขแƒงแƒ•แƒ Apple Store-แƒ˜แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘

แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ App Store แƒแƒžแƒ˜, แƒ“แƒ˜แƒกแƒขแƒ แƒ˜แƒ‘แƒฃแƒชแƒ˜แƒ˜แƒก แƒกแƒ”แƒ แƒ—แƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ”แƒ‘แƒ˜ แƒ“แƒ แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒ˜แƒก แƒžแƒ แƒแƒคแƒ˜แƒšแƒ˜, แƒ แƒแƒ› แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ”แƒ แƒ—แƒ›แƒแƒœแƒ”แƒ—แƒ—แƒแƒœ แƒ“แƒแƒ•แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒแƒ—.

แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ แƒ—แƒฃแƒšแƒ˜ แƒแƒฅ แƒแƒ แƒ˜แƒก App Store-แƒจแƒ˜ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒฃแƒคแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ. แƒ•แƒ˜แƒ›แƒ”แƒ“แƒแƒ•แƒœแƒ”แƒ‘, แƒ แƒแƒ› แƒ—แƒฅแƒ•แƒ”แƒœ แƒ—แƒแƒ•แƒแƒ“ แƒจแƒ”แƒซแƒšแƒ”แƒ‘แƒ— แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒ•แƒแƒก. แƒ—แƒฃ แƒแƒฎแƒแƒšแƒ˜ แƒฎแƒแƒ แƒ—, แƒกแƒฌแƒแƒ  แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒฃแƒšแƒ”แƒ‘แƒแƒก แƒ›แƒแƒ’แƒแƒฎแƒกแƒ”แƒœแƒ”แƒ‘แƒ—, แƒ›แƒแƒ’แƒ แƒแƒ› Apple-แƒ˜แƒก แƒกแƒ”แƒ แƒ—แƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒก แƒกแƒ˜แƒ แƒ—แƒฃแƒšแƒ”แƒ”แƒ‘แƒ–แƒ” แƒแƒฅ แƒแƒ  แƒ•แƒ˜แƒกแƒแƒฃแƒ‘แƒ แƒ”แƒ‘แƒ— แƒ“แƒ แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒ›แƒฃแƒ“แƒ›แƒ˜แƒ•แƒแƒ“ แƒ˜แƒชแƒ•แƒšแƒ”แƒ‘แƒ˜แƒแƒœ. แƒ”แƒก แƒžแƒแƒกแƒขแƒ˜ แƒ“แƒแƒ’แƒ”แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒแƒ— แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒแƒจแƒ˜.

แฒฉแƒ”แƒ›แƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ

แƒ—แƒฅแƒ•แƒ”แƒœ แƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ— แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ App Store Connect-แƒจแƒ˜, แƒ แƒแƒ—แƒ แƒ’แƒฅแƒแƒœแƒ“แƒ”แƒ— ID แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก .xcodebuild. แƒžแƒ แƒแƒคแƒ˜แƒšแƒ˜ แƒ“แƒ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก ID แƒแƒ”แƒ แƒ—แƒ˜แƒแƒœแƒ”แƒ‘แƒก แƒ™แƒแƒ“แƒ˜แƒก แƒœแƒแƒ’แƒ”แƒ‘แƒแƒ‘แƒ”แƒ‘แƒก, แƒคแƒแƒกแƒก แƒ“แƒ แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒแƒ‘แƒแƒก แƒ“แƒ TestFlight แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒแƒก แƒกแƒแƒขแƒ”แƒกแƒขแƒ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ–แƒ” แƒ’แƒแƒกแƒแƒ•แƒ แƒชแƒ”แƒšแƒ”แƒ‘แƒšแƒแƒ“. แƒแƒ  แƒ’แƒแƒแƒ™แƒ”แƒ—แƒแƒ— แƒกแƒแƒฏแƒแƒ แƒ แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ, แƒžแƒ˜แƒ แƒแƒ“แƒ˜ แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ, แƒ—แƒฃ แƒ’แƒแƒฅแƒ•แƒ— แƒ›แƒชแƒ˜แƒ แƒ” แƒฏแƒ’แƒฃแƒคแƒ˜, แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ“แƒ แƒแƒ  แƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ— แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒœแƒ”แƒ‘แƒแƒ แƒ—แƒ•แƒ”แƒ‘แƒ˜ Apple-แƒ˜แƒกแƒ’แƒแƒœ.

แƒ˜แƒœแƒ˜แƒชแƒ˜แƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒžแƒ แƒแƒคแƒ˜แƒšแƒ˜

แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ“แƒ, แƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ— iOS แƒ“แƒ˜แƒกแƒขแƒ แƒ˜แƒ‘แƒฃแƒชแƒ˜แƒ˜แƒกแƒ แƒ“แƒ แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒšแƒ˜แƒ Apple Developer Consol-แƒ˜แƒก แƒกแƒ”แƒ แƒ—แƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ”แƒ‘แƒ˜แƒก, แƒ˜แƒ“แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒแƒ แƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒžแƒ แƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒแƒจแƒ˜. แƒงแƒ•แƒ”แƒšแƒ แƒ”แƒก แƒกแƒ”แƒ แƒ—แƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ”แƒ แƒ—แƒ˜แƒแƒœแƒ“แƒ”แƒก แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒ˜แƒก แƒžแƒ แƒแƒคแƒ˜แƒšแƒจแƒ˜.

แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ“แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒฃแƒšแƒœแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ˜แƒแƒœ, แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒ”แƒซแƒšแƒแƒ— แƒกแƒ”แƒ แƒ—แƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ, แƒฌแƒ˜แƒœแƒแƒแƒฆแƒ›แƒ“แƒ”แƒ’ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ”แƒก แƒœแƒแƒ‘แƒ˜แƒฏแƒ”แƒ‘แƒ˜ แƒ“แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ แƒ“แƒ แƒ™แƒ•แƒœแƒ”แƒกแƒ แƒ—แƒฅแƒ•แƒ”แƒœ แƒœแƒแƒฎแƒแƒ•แƒ— แƒจแƒ”แƒชแƒ“แƒแƒ›แƒแƒก.

แƒกแƒฎแƒ•แƒ แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ˜

แƒแƒ› แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒก แƒ’แƒแƒ แƒ“แƒ, แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒกแƒ”แƒ แƒ—แƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒžแƒ แƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒกแƒฎแƒ•แƒ แƒ’แƒ–แƒ”แƒ‘แƒ˜. แƒแƒกแƒ” แƒ แƒแƒ›, แƒ—แƒฃ แƒกแƒฎแƒ•แƒแƒ’แƒ•แƒแƒ แƒแƒ“ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ—, แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ›แƒแƒ’แƒ˜แƒฌแƒ˜แƒแƒ— แƒแƒ“แƒแƒžแƒขแƒแƒชแƒ˜แƒ. แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜ แƒ˜แƒก แƒแƒ แƒ˜แƒก, แƒ แƒแƒ› แƒ—แƒฅแƒ•แƒ”แƒœ แƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ— แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ .xcodebuild, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒ”แƒ‘แƒก แƒแƒฃแƒชแƒ˜แƒšแƒ”แƒ‘แƒ”แƒš แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ–แƒ” แƒ“แƒ แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒก แƒฏแƒแƒญแƒ•แƒ˜ แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜ แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก build แƒ™แƒแƒ›แƒžแƒ˜แƒฃแƒขแƒ”แƒ แƒ–แƒ” แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒ—แƒแƒช แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ runner. แƒชแƒ˜แƒคแƒ แƒฃแƒšแƒ˜ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— fastlane-แƒก แƒ“แƒ แƒ—แƒฃ แƒแƒ แƒ˜แƒก แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒแƒœ แƒ’แƒกแƒฃแƒ แƒ— แƒ›แƒ”แƒขแƒ˜ แƒ˜แƒชแƒแƒ“แƒ”แƒ—, แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ— แƒ›แƒแƒ—แƒ˜ แƒ“แƒ”แƒขแƒแƒšแƒ”แƒ‘แƒ˜ แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒ แƒชแƒ˜แƒคแƒ แƒฃแƒšแƒ˜ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘.

แƒแƒ› แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒจแƒ˜ แƒ›แƒ” แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘ แƒ›แƒ˜แƒ“แƒ’แƒแƒ›แƒแƒก แƒ“แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ แƒ“แƒ แƒ™แƒ•แƒœแƒ”แƒกแƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ แƒ”แƒแƒšแƒฃแƒ แƒ˜ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ˜แƒก แƒแƒšแƒ‘แƒแƒ— แƒฃแƒ™แƒ”แƒ—แƒ”แƒกแƒ˜แƒ แƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ.

GitLab-แƒ˜แƒกแƒ แƒ“แƒ fastlane-แƒ˜แƒก แƒ›แƒแƒ›แƒ–แƒแƒ“แƒ”แƒ‘แƒ

CI Runner-แƒ˜แƒก แƒ›แƒแƒ›แƒ–แƒแƒ“แƒ”แƒ‘แƒ

แƒงแƒ•แƒ”แƒšแƒ แƒแƒ› แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ˜แƒก แƒจแƒ”แƒ’แƒ แƒแƒ•แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ“แƒแƒ•แƒ“แƒ˜แƒ•แƒแƒ แƒ— GitLab runner-แƒ˜แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒแƒ–แƒ” MacOS แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒแƒ–แƒ”. แƒกแƒแƒ›แƒฌแƒฃแƒฎแƒแƒ แƒแƒ“, iOS-แƒ˜แƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ แƒ›แƒฎแƒแƒšแƒแƒ“ MacOS-แƒ–แƒ” แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ—. แƒ›แƒแƒ’แƒ แƒแƒ› แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒ˜แƒชแƒ•แƒแƒšแƒแƒก แƒ“แƒ แƒ—แƒฃ แƒแƒ› แƒกแƒคแƒ”แƒ แƒแƒจแƒ˜ แƒžแƒ แƒแƒ’แƒ แƒ”แƒกแƒก แƒ”แƒšแƒ˜แƒ—, แƒ—แƒ•แƒแƒšแƒ˜ แƒแƒ“แƒ”แƒ•แƒœแƒ”แƒ— แƒ›แƒกแƒ’แƒแƒ•แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ”แƒ‘แƒก xcbuild ะธ แƒœแƒ˜แƒจแƒแƒœแƒ˜แƒ“แƒ แƒฉแƒ•แƒ”แƒœแƒ˜ แƒจแƒ˜แƒ“แƒ แƒแƒ›แƒแƒชแƒแƒœแƒ gitlab-ce#57576.

แƒ›แƒแƒ แƒ‘แƒ”แƒœแƒแƒšแƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒซแƒแƒšแƒ˜แƒแƒœ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜แƒ. แƒ›แƒ˜แƒฐแƒงแƒ”แƒ•แƒ˜แƒ— แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ”แƒแƒ‘แƒแƒก แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ GitLab Runner-แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก macOS-แƒ–แƒ”.

แฒจแƒ”แƒœแƒ˜แƒจแƒ•แƒœแƒ. แƒ›แƒแƒ แƒ‘แƒ”แƒœแƒแƒšแƒ›แƒ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒแƒ“แƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ shell. แƒ”แƒก แƒกแƒแƒญแƒ˜แƒ แƒแƒ macOS-แƒ–แƒ” iOS-แƒ˜แƒก แƒแƒกแƒแƒจแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ“, แƒ แƒแƒ—แƒ แƒ˜แƒ›แƒฃแƒจแƒแƒแƒก แƒฃแƒจแƒฃแƒแƒšแƒแƒ“ แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ›แƒ แƒ“แƒ แƒแƒ แƒ แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ—. แƒ—แƒฃ แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— shell, แƒ›แƒจแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ‘แƒ แƒ“แƒ แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ แƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ”แƒ‘แƒ แƒ แƒแƒ’แƒแƒ แƒช runner แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜, แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ  build แƒฐแƒแƒกแƒขแƒ–แƒ”. แƒ˜แƒก แƒแƒ  แƒแƒ แƒ˜แƒก แƒ˜แƒกแƒ”แƒ—แƒ˜แƒ•แƒ” แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒ, แƒ แƒแƒ’แƒแƒ แƒช แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ”แƒ‘แƒ˜, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒฏแƒแƒ‘แƒ˜แƒ แƒ“แƒแƒแƒ—แƒ•แƒแƒšแƒ˜แƒ”แƒ แƒแƒ— แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒแƒแƒกแƒ” แƒ แƒแƒ› แƒ—แƒฅแƒ•แƒ”แƒœ แƒแƒ แƒแƒคแƒ”แƒ แƒ˜ แƒ’แƒแƒ›แƒแƒ’แƒ แƒฉแƒ”แƒ—

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

Apple Keychain แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒแƒ› แƒฐแƒแƒกแƒขแƒ–แƒ” แƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒ— แƒ˜แƒ› แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ”แƒ‘แƒ–แƒ”, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช Xcode-แƒก แƒฃแƒœแƒ“แƒ แƒแƒแƒจแƒ”แƒœแƒแƒก. แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒšแƒแƒ“ แƒฃแƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ”แƒกแƒ˜ แƒ’แƒ–แƒแƒ แƒจแƒ”แƒกแƒ•แƒšแƒ, แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒแƒฃแƒจแƒ•แƒ”แƒ‘แƒก build-แƒก แƒ“แƒ แƒจแƒ”แƒ”แƒชแƒ“แƒ”แƒ‘แƒ แƒฎแƒ”แƒšแƒ˜แƒ— แƒจแƒ”แƒฅแƒ›แƒœแƒแƒก. แƒ—แƒฃ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ แƒ˜แƒ—แƒฎแƒแƒ•แƒก แƒฌแƒ•แƒ“แƒแƒ›แƒแƒก keychain, แƒแƒ˜แƒ แƒฉแƒ˜แƒ”แƒ— Always Allow for CI to work. แƒจแƒ”แƒกแƒแƒซแƒšแƒแƒ แƒฆแƒ˜แƒ แƒ“แƒ”แƒก แƒจแƒ”แƒกแƒ•แƒšแƒ แƒ“แƒ แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒงแƒฃแƒ แƒ”แƒ‘แƒ, แƒ แƒแƒ—แƒ แƒ“แƒแƒ แƒฌแƒ›แƒฃแƒœแƒ“แƒ”แƒ—, แƒ แƒแƒ› แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒแƒฆแƒแƒ  แƒ˜แƒ—แƒฎแƒแƒ•แƒ”แƒœ แƒกแƒแƒ™แƒ˜แƒœแƒซแƒก. แƒฃแƒ‘แƒ”แƒ“แƒฃแƒ แƒ”แƒ‘แƒ แƒ˜แƒก แƒแƒ แƒ˜แƒก, แƒ แƒแƒ› Apple แƒแƒ  แƒ’แƒ•แƒ˜แƒแƒ“แƒ•แƒ˜แƒšแƒ”แƒ‘แƒก แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒ˜ แƒ แƒ”แƒŸแƒ˜แƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒแƒก, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ แƒแƒ’แƒแƒ แƒช แƒ™แƒ˜ แƒ›แƒแƒก แƒ“แƒแƒ˜แƒฌแƒงแƒ”แƒ‘แƒ—, แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ™แƒแƒ แƒ’แƒแƒ“ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ.

fastlane init

แƒžแƒ แƒแƒ”แƒฅแƒขแƒจแƒ˜ fastlane-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒกแƒแƒงแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ“, แƒ’แƒแƒฃแƒจแƒ•แƒ˜แƒ— fastlane init. แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ›แƒ˜แƒงแƒ”แƒ•แƒ˜แƒ— แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ fastlane-แƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ˜แƒกแƒ แƒ“แƒ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ’แƒแƒœแƒกแƒแƒ™แƒฃแƒ—แƒ แƒ”แƒ‘แƒ˜แƒ— แƒ’แƒแƒœแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒแƒจแƒ˜ แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ Gemfile, แƒ แƒแƒ“แƒ’แƒแƒœ แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒกแƒฌแƒ แƒแƒคแƒ˜ แƒ“แƒ แƒžแƒ แƒแƒ’แƒœแƒแƒ–แƒ˜แƒ แƒ”แƒ‘แƒแƒ“แƒ˜ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒ˜ 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/

Ours .gitlab-ci.yml

แƒแƒกแƒ” แƒ แƒแƒ›, แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒงแƒแƒ•แƒก CI runner แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒ›แƒ–แƒแƒ“ แƒ•แƒแƒ แƒ— แƒ’แƒแƒ›แƒแƒ•แƒชแƒแƒ“แƒแƒ— แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ˜. แƒ•แƒœแƒแƒฎแƒแƒ— แƒ แƒ แƒ’แƒ•แƒแƒฅแƒ•แƒก .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

ร‚ รฅ! แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ•แƒแƒงแƒ”แƒœแƒ”แƒ— แƒคแƒแƒ แƒ›แƒแƒขแƒ˜ UTF-8-แƒ–แƒ” fastlane-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ’แƒแƒ แƒช แƒกแƒแƒญแƒ˜แƒ แƒแƒ, แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ— แƒกแƒขแƒ แƒแƒขแƒ”แƒ’แƒ˜แƒ clone แƒ’แƒแƒœแƒ›แƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒ— shell, แƒ˜แƒกแƒ”, แƒ แƒแƒ› แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒฅแƒแƒœแƒ“แƒ”แƒก แƒกแƒฃแƒคแƒ—แƒ แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒแƒ“แƒ’แƒ˜แƒšแƒ˜ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒจแƒ”แƒ™แƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ“แƒแƒ แƒ”แƒ™แƒ•แƒ flappybuild fastlane, แƒ แƒแƒ’แƒแƒ แƒช แƒ–แƒ”แƒ›แƒแƒ— แƒฉแƒแƒœแƒก. แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“, แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒฃแƒแƒฎแƒšแƒ”แƒกแƒ˜ แƒแƒกแƒแƒ›แƒ‘แƒšแƒ”แƒ˜แƒก แƒจแƒ”แƒ™แƒ แƒ”แƒ‘แƒแƒก, แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒแƒก แƒ“แƒ แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒแƒก TestFlight-แƒจแƒ˜.

แƒฉแƒ•แƒ”แƒœ แƒแƒกแƒ”แƒ•แƒ” แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒแƒ แƒขแƒ”แƒคแƒแƒฅแƒขแƒก แƒ“แƒ แƒ•แƒ˜แƒœแƒแƒฎแƒแƒ•แƒ— แƒ›แƒแƒก แƒแƒกแƒแƒ›แƒ‘แƒšแƒ”แƒแƒกแƒ—แƒแƒœ แƒ”แƒ แƒ—แƒแƒ“. แƒ’แƒ—แƒฎแƒแƒ•แƒ— แƒ’แƒแƒ˜แƒ—แƒ•แƒแƒšแƒ˜แƒกแƒฌแƒ˜แƒœแƒแƒ—, แƒ แƒแƒ› แƒคแƒแƒ แƒ›แƒแƒขแƒจแƒ˜ .ipa แƒแƒ แƒ˜แƒก แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ ARM แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒแƒ“แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒกแƒ˜แƒ›แƒฃแƒšแƒแƒขแƒแƒ แƒจแƒ˜. แƒ—แƒฃ แƒ’แƒกแƒฃแƒ แƒ— แƒ’แƒแƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒ˜ แƒกแƒ˜แƒ›แƒฃแƒšแƒแƒขแƒแƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ“แƒแƒแƒ›แƒแƒขแƒ”แƒ— build target, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒฌแƒแƒ แƒ›แƒแƒ”แƒ‘แƒก แƒ›แƒแƒก แƒ“แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒฉแƒแƒ แƒ—แƒ”แƒ— แƒ˜แƒ’แƒ˜ แƒแƒ แƒขแƒ”แƒคแƒแƒฅแƒขแƒ˜แƒก แƒ’แƒ–แƒแƒ–แƒ”.

แƒกแƒฎแƒ•แƒ แƒ’แƒแƒ แƒ”แƒ›แƒแƒก แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜

แƒแƒฅ แƒแƒ แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒ›แƒแƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒชแƒ•แƒšแƒแƒ“แƒ˜, แƒ แƒแƒช แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒก แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒก.

FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD ะธ FASTLANE_SESSION

แƒแƒ•แƒ—แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒชแƒ˜แƒ fastlane-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒแƒ App Store-แƒจแƒ˜ แƒแƒ•แƒ—แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ TestFlight-แƒ–แƒ” แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒแƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒžแƒแƒ แƒแƒšแƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ CI-แƒจแƒ˜. แƒ“แƒ”แƒขแƒแƒšแƒ”แƒ‘แƒ˜ แƒแƒฅ.

แƒ—แƒฃ แƒ—แƒฅแƒ•แƒ”แƒœ แƒ’แƒแƒฅแƒ•แƒ— แƒแƒ แƒคแƒแƒฅแƒขแƒแƒ แƒ˜แƒแƒœแƒ˜ แƒแƒ•แƒ—แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒชแƒ˜แƒ, แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒชแƒ•แƒšแƒแƒ“แƒ˜ FASTLANE_SESSION (แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก).

FASTLANE_USER ะธ FASTLANE_PASSWORD

แƒ แƒแƒ› แƒ“แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ แƒ“แƒ แƒ™แƒ•แƒœแƒ”แƒกแƒ แƒ˜แƒœแƒ˜แƒชแƒ˜แƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒžแƒ แƒแƒคแƒ˜แƒšแƒ˜แƒก แƒ“แƒ แƒกแƒ”แƒ แƒ—แƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒแƒงแƒ”แƒœแƒแƒ— แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜ FASTLANE_USER ะธ FASTLANE_PASSWORD. แƒ“แƒ”แƒขแƒแƒšแƒ”แƒ‘แƒ˜ แƒแƒฅ. แƒ”แƒก แƒแƒ  แƒแƒ แƒ˜แƒก แƒแƒฃแƒชแƒ˜แƒšแƒ”แƒ‘แƒ”แƒšแƒ˜, แƒ—แƒฃ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒกแƒฎแƒ•แƒ แƒ›แƒ”แƒ—แƒแƒ“แƒก แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ—.

แƒ“แƒแƒกแƒแƒกแƒ แƒฃแƒšแƒก

แƒ—แƒฅแƒ•แƒ”แƒœ แƒฎแƒ”แƒ“แƒแƒ•แƒ—, แƒ แƒแƒ’แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒ”แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒฉแƒ”แƒ›แƒก แƒ›แƒแƒ แƒขแƒ˜แƒ• แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒจแƒ˜.

แƒ˜แƒ›แƒ”แƒ“แƒ˜ แƒ›แƒแƒฅแƒ•แƒก, แƒ แƒแƒ› แƒ”แƒก แƒ’แƒแƒ›แƒแƒกแƒแƒ“แƒ”แƒ’แƒ˜ แƒ˜แƒงแƒ แƒ“แƒ แƒจแƒ—แƒแƒ’แƒแƒ’แƒแƒœแƒ”แƒ‘แƒ“แƒแƒ— แƒ˜แƒ›แƒฃแƒจแƒแƒแƒ— iOS แƒ‘แƒ˜แƒšแƒ“แƒ”แƒ‘แƒ—แƒแƒœ GitLab แƒžแƒ แƒแƒ”แƒฅแƒขแƒจแƒ˜. แƒแƒ˜ แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒ˜ CI แƒ แƒฉแƒ”แƒ•แƒ”แƒ‘แƒ˜ fastlane-แƒกแƒ—แƒ•แƒ˜แƒก, แƒงแƒแƒ•แƒ”แƒšแƒ˜ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— CI_BUILD_ID (แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒจแƒ”แƒœแƒแƒ‘แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก) แƒ แƒแƒ› แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒก แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒแƒ“ แƒ’แƒแƒ–แƒ แƒ“แƒ.

fastlane-แƒ˜แƒก แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒ˜ แƒ›แƒแƒ’แƒแƒ แƒ˜ แƒ—แƒ•แƒ˜แƒกแƒ”แƒ‘แƒแƒ แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒ˜ แƒ”แƒ™แƒ แƒแƒœแƒ˜แƒก แƒแƒœแƒแƒ‘แƒ”แƒญแƒ“แƒ”แƒ‘แƒ˜ App Store-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ›แƒ”แƒšแƒ—แƒ แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒซแƒแƒšแƒ˜แƒแƒœ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜แƒ.

แƒ’แƒ•แƒ˜แƒ—แƒฎแƒแƒ แƒ˜แƒ— แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ”แƒ‘แƒจแƒ˜ แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒ’แƒแƒ›แƒแƒชแƒ“แƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒ“แƒ แƒ’แƒแƒ’แƒ•แƒ˜แƒ–แƒ˜แƒแƒ แƒ”แƒ— แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒ˜แƒ“แƒ”แƒ”แƒ‘แƒ˜ GitLab-แƒ˜แƒก แƒ’แƒแƒกแƒแƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ”แƒ‘แƒšแƒแƒ“ iOS แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ