เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ‚เบญเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡ เปเบฅเบฐเบชเบปเปˆเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS

เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเปเบšเปˆเบ‡เบ›เบฑเบ™เบ›เบฐเบชเบปเบšเบเบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบเบญเบšเปเบฅเบฐเบชเบปเปˆเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ iOS เปƒเบซเป‰เบเบฑเบšเบœเบนเป‰เปƒเบŠเป‰, เบ—เบตเปˆเบชเบฐเบ•เบนเบ”เบดเป‚เบญ Plarium Krasnodar เป„เบ”เป‰เบชเบฐเบชเบปเบกเปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ debugging CI / CD.

เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ‚เบญเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡ เปเบฅเบฐเบชเบปเปˆเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS

เบเบฒเบ™โ€‹เบเบถเบโ€‹เบญเบปเบšโ€‹เบฎเบปเบก

เบ—เบธเบเป†เบ„เบปเบ™เบ—เบตเปˆเบขเบนเปˆเปƒเบ™เบงเบดเบ—เบตเบเบฒเบ™เบซเบ™เบถเปˆเบ‡เบซเบผเบทเบญเบทเปˆเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบชเปเบฒเบฅเบฑเบšเบญเบธเบ›เบฐเบเบญเบ™ Apple เป„เบ”เป‰เบเบปเบเบเป‰เบญเบ‡เป€เบ–เบดเบ‡เบ„เบงเบฒเบกเบชเบฐเบ”เบงเบเบชเบฐเบšเบฒเบเบ—เบตเปˆเบ‚เบฑเบ”เปเบเป‰เบ‡เบ‚เบญเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™. เบ„เบงเบฒเบกเบซเบเบธเป‰เบ‡เบเบฒเบเปเบกเปˆเบ™เบžเบปเบšเป€เบซเบฑเบ™เบขเบนเปˆเบ—เบปเปˆเบงเบ—เบธเบเปเบซเปˆเบ‡: เบˆเบฒเบเป€เบกเบ™เบนเป‚เบ›เบฃเป„เบŸเบฅเปŒเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเป„เบ›เบชเบนเปˆเบเบฒเบ™เบ”เบตเบšเบฑเบเปเบฅเบฐเป€เบ„เบทเปˆเบญเบ‡เบกเบทเบชเป‰เบฒเบ‡.

เบกเบตเบซเบผเบฒเบเบšเบปเบ”เบ„เบงเบฒเบกเบเปˆเบฝเบงเบเบฑเบš "เบžเบทเป‰เบ™เบ–เบฒเบ™" เปƒเบ™เบญเบดเบ™เป€เบ•เบตเป€เบ™เบฑเบ”, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบžเบฐเบเบฒเบเบฒเบกเป€เบ™เบฑเป‰เบ™เปƒเบชเปˆเบชเบดเปˆเบ‡เบ—เบตเปˆเบ•เบปเป‰เบ™เบ•เป. เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปƒเบซเป‰เบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”:

  • เบšเบฑเบ™เบŠเบตเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒ;
  • เบญเบธเบ›เบฐเบเบญเบ™เบ—เบตเปˆเปƒเบŠเป‰ macOS เป€เบฎเบฑเบ”เปœเป‰เบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบŠเบตเบšเป€เบงเบตเบชเป‰เบฒเบ‡;
  • เบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™ เปƒเบšโ€‹เบขเบฑเป‰เบ‡โ€‹เบขเบทเบ™โ€‹เบเบฒเบ™โ€‹เบžเบฑเบ”โ€‹เบ—เบฐโ€‹เบ™เบฒโ€‹, เบŠเบถเปˆเบ‡เบˆเบฐเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบ•เบทเปˆเบกเบญเบตเบเป€เบžเบทเปˆเบญเป€เบŠเบฑเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ;
  • เบเบฒเบ™โ€‹เบชเป‰เบฒเบ‡โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เป€เบญโ€‹เบเบฐโ€‹เบฅเบฑเบโ€‹ ID (เบ„เบงเบฒเบกเบชเปเบฒเบ„เบฑเบ™เบ‚เบญเบ‡ Bundle Identifier เบ„เบงเบ™เบชเบฑเบ‡เป€เบเบ”, เป€เบžเบฒเบฐเบงเปˆเบฒเบเบฒเบ™เปƒเบŠเป‰ wildcard ID เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เบซเบผเบฒเบเบซเบ™เป‰เบฒเบ—เบตเปˆเบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™, เบ•เบปเบงเบขเปˆเบฒเบ‡: Associated Domains, Push Notifications, Apple Sign In เปเบฅเบฐเบญเบทเปˆเบ™เป†);
  • เบ‚เปเป‰เบกเบนเบ™ เบฅเบฒเบเป€เบŠเบฑเบ™เบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ.

เปƒเบšเบขเบฑเป‰เบ‡เบขเบทเบ™เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบˆเบฐเบ•เป‰เบญเบ‡เบ–เบทเบเบชเป‰เบฒเบ‡เบœเปˆเบฒเบ™ Keychain เปƒเบ™เบญเบธเบ›เบฐเบเบญเบ™ macOS เปƒเบ”เป†เบเปเบ•เบฒเบก. เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เปƒเบšเบขเบฑเป‰เบ‡เบขเบทเบ™เปเบกเปˆเบ™เบกเบตเบ„เบงเบฒเบกเบชเปเบฒเบ„เบฑเบ™เบซเบผเบฒเบ. เบ‚เบถเป‰เบ™เบเบฑเบšเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ (Dev, QA, Staging, Production) เบกเบฑเบ™เบˆเบฐเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™ (เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ เบซเบผเบทเบเบฒเบ™เปเบˆเบเบขเบฒเบ), เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เป‚เบ›เบฃเป„เบŸเบฅเปŒเบฅเบฒเบเป€เบŠเบฑเบ™เบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™.

เบ›เบฐโ€‹เป€เบžเบ”โ€‹เบ•เบปเป‰เบ™โ€‹เบ•เปโ€‹เบ‚เบญเบ‡ profileโ€‹:

  • เบเบฒเบ™โ€‹เบžเบฑเบ”โ€‹เบ—เบฐโ€‹เบ™เบฒ - เบˆเบธเบ”โ€‹เบ›เบฐโ€‹เบชเบปเบ‡โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบฅเบปเบ‡โ€‹เบ™เบฒเบกโ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹เบ‚เบญเบ‡โ€‹เบ—เบตเบกโ€‹เบžเบฑเบ”โ€‹เบ—เบฐโ€‹เบ™เบฒโ€‹, เปƒเบšโ€‹เบขเบฑเป‰เบ‡โ€‹เบขเบทเบ™โ€‹เบเบฒเบ™โ€‹เบžเบฑเบ”โ€‹เบ—เบฐโ€‹เบ™เบฒโ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰ (เบ›เบฐโ€‹เป€เบžเบ”โ€‹เบŠเบทเปˆ iPhone เบœเบนเป‰โ€‹เบžเบฑเบ”โ€‹เบ—เบฐโ€‹เบ™เบฒโ€‹: XXXXXโ€‹)โ€‹;
  • Ad Hoc - เบกเบตเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฅเบปเบ‡เบ™เบฒเบกเปƒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเปเบฅเบฐเบเบฒเบ™เบเบงเบ”เบชเบญเบšเบžเบฒเบเปƒเบ™เป‚เบ”เบเบžเบฐเปเบ™เบ QA, เปƒเบšเบขเบฑเป‰เบ‡เบขเบทเบ™เบเบฒเบ™เปเบˆเบเบขเบฒเบเบ‚เบญเบ‡เบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰ (เบŠเบทเปˆเบเบฒเบ™เปเบˆเบเบขเบฒเบ iPhone: XXXXX);
  • App Store - เบ›เปˆเบญเบเบ•เบปเบงเบชเป‰เบฒเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบžเบฒเบเบ™เบญเบเบœเปˆเบฒเบ™ TestFlight เปเบฅเบฐเบเบฒเบ™เบญเบฑเบšเป‚เบซเบฅเบ”เป„เบ›เบเบฑเบ‡ App Store, เปƒเบšเบขเบฑเป‰เบ‡เบขเบทเบ™เบเบฒเบ™เปเบˆเบเบขเบฒเบเบ‚เบญเบ‡เบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰.

เป€เบกเบทเปˆเบญเบชเป‰เบฒเบ‡เป‚เบ›เบฃเป„เบŸเบฅเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเปเบฅเบฐ Ad Hoc, เบกเบฑเบ™เบเบฑเบ‡เบ–เบทเบเบŠเบตเป‰เบšเบญเบ เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบญเบธเบ›เบฐเบเบญเบ™, เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡, เป€เบŠเบดเปˆเบ‡เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบˆเปเบฒเบเบฑเบ”เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เปƒเบŠเป‰เบ•เบทเปˆเบกเบญเบตเบ. เบšเปเปˆเบกเบตเบฅเบฒเบเบŠเบทเปˆเบญเบธเบ›เบฐเบเบญเบ™เบขเบนเปˆเปƒเบ™เป‚เบ›เบฃเป„เบŸเบฅเปŒ App Store, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป€เบšเบ•เป‰เบฒเบ›เบดเบ”เปเบกเปˆเบ™เบˆเบฑเบ”เบเบฒเบ™เป‚เบ”เบ TestFlight, เป€เบŠเบดเปˆเบ‡เบˆเบฐเบ–เบทเบเบ›เบถเบเบชเบฒเบซเบฒเบฅเบทเปƒเบ™เบžเบฒเบเบซเบผเบฑเบ‡.

เป€เบžเบทเปˆเบญเบ„เบงเบฒเบกเบŠเบฑเบ”เป€เบˆเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเป‚เบ›เบฃเป„เบŸเบฅเปŒเบ‚เบญเบ‡เบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเปƒเบ™เบฎเบนเบšเปเบšเบšเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰. เบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™เบ—เบตเปˆเบˆเบฐเป€เบ‚เบปเป‰เบฒเปƒเบˆเบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบเบญเบšเปเบฅเบฐเบšเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป€เบญเบปเบฒเบžเบงเบเบกเบฑเบ™เบกเบฒเบˆเบฒเบ.

เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ‚เบญเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡ เปเบฅเบฐเบชเบปเปˆเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS

Assembly

เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™เปƒเบ™เบเบฒเบ™เปเบเบเบเบฒเบ™เบ›เบฐเบเบญเบšเบ•เบฒเบกเป‚เบ„เบ‡เบเบฒเบ™ เปเบฅเบฐเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก, เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เบŠเบทเปˆเป‚เบ›เบฃเป„เบŸเบฅเปŒเป€เบŠเบฑเปˆเบ™ ${ProjectName}_${Instance}, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบŠเบทเปˆเป‚เบ„เบ‡เบเบฒเบ™ + เบ•เบปเบงเบขเปˆเบฒเบ‡ (เบ‚เบถเป‰เบ™เบเบฑเบšเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™: Dev, QA, GD, Staging, Live, เปเบฅเบฐเบญเบทเปˆเบ™เป†).

เป€เบกเบทเปˆเบญเบ™เปเบฒเป€เบ‚เบปเป‰เบฒเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡, เป‚เบ›เบฃเป„เบŸเบฅเปŒเบˆเบฐเบ›เปˆเบฝเบ™เบŠเบทเปˆเบ‚เบญเบ‡เบ•เบปเบ™เป€เบ›เบฑเบ™ ID เบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบเปเบฅเบฐเบ–เบทเบเบเป‰เบฒเบเป„เบ›เป‚เบŸเบ™เป€เบ”เบต /Users/$Username/Library/MobileDevice/Provisioning Profiles (เบšเปˆเบญเบ™เปƒเบ” $Username เบเบปเบ‡เบเบฑเบšเบŠเบทเปˆเบšเบฑเบ™เบŠเบตเบœเบนเป‰เปƒเบŠเป‰เบ‚เบญเบ‡เป€เบŠเบตเบšเป€เบงเบตเบชเป‰เบฒเบ‡).

เบกเบตเบชเบญเบ‡เบงเบดเบ—เบตเบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒ *.ipa - legacy (PackageApplication) เปเบฅเบฐเบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบก (เบœเปˆเบฒเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เปเบฅเบฐเบชเบปเปˆเบ‡เบญเบญเบ XcAchive). เบงเบดเบ—เบตเบเบฒเบ™เบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™เบ–เบทเบงเปˆเบฒเบฅเป‰เบฒเบชเบฐเป„เบซเบก, เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบฎเบธเปˆเบ™ 8.3, เป‚เบกเบ”เบนเบ™เบเบฒเบ™เบซเบธเป‰เบกเบซเปเปˆเป„เบŸเบฅเปŒ app เป„เบ”เป‰เบ–เบทเบเบฅเบถเบšเบญเบญเบเบˆเบฒเบเบเบฒเบ™เปเบˆเบเบขเบฒเบ Xcode. เป€เบžเบทเปˆเบญเปƒเบŠเป‰เบกเบฑเบ™, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ„เบฑเบ”เบฅเบญเบเป‚เบกเบ”เบนเบ™เบˆเบฒเบ Xcode เป€เบเบปเปˆเบฒ (เบฎเบธเปˆเบ™ 8.2 เปเบฅเบฐเบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบฑเป‰เบ™) เป„เบ›เบ—เบตเปˆเป‚เบŸเบ™เป€เบ”เบต:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/

เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡:

chmod +x /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/*

เบ•เปเปˆเป„เบ›, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบเบฑเบšเป„เบŸเบฅเปŒ *.app เบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™:

xcodebuild 
-workspace $ProjectDir/$ProjectName.xcworkspace 
-scheme $SchemeName 
-sdk iphoneos 
build 
-configuration Release 
-derivedDataPath build 
CODE_SIGN_IDENTITY=โ€$DevAccNameโ€
PROVISIONING_PROFILE=โ€$ProfileIdโ€
DEPLOYMENT_POSTPROCESSING=YES 
SKIP_INSTALL=YES 
ENABLE_BITCODE=NO

เบšเปˆเบญเบ™เบ—เบตเปˆ:

-workspace - เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป„เบ›เบซเบฒเป„เบŸเบฅเปŒเป‚เบ„เบ‡เบเบฒเบ™.

-scheme โ€” เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹, เบฅเบฐโ€‹เบšเบธโ€‹เป„เบงเป‰โ€‹เปƒเบ™โ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹.

-derivedDataPath โ€” เป€เบชเบฑเป‰เบ™โ€‹เบ—เบฒเบ‡โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบ”เบฒเบงโ€‹เบ™โ€‹เปŒโ€‹เป‚เบซเบฅเบ”โ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹เบ›เบฐโ€‹เบเบญเบš (*.appโ€‹)โ€‹.

CODE_SIGN_IDENTITY โ€” เบŠเบทเปˆโ€‹เบ‚เบญเบ‡โ€‹เบšเบฑเบ™โ€‹เบŠเบตโ€‹เบœเบนเป‰โ€‹เบžเบฑเบ”โ€‹เบ—เบฐโ€‹เบ™เบฒโ€‹, เบ—เบตเปˆโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบเบงเบ”โ€‹เบชเบญเบšโ€‹เป„เบ”เป‰โ€‹เปƒเบ™ Keychain (เบœเบนเป‰โ€‹เบžเบฑเบ”โ€‹เบ—เบฐโ€‹เบ™เบฒ iPhoneโ€‹: XXXX XXXXXXXโ€‹, เป‚เบ”เบโ€‹เบšเปเปˆโ€‹เบกเบต TeamID เปƒเบ™โ€‹เบงเบปเบ‡โ€‹เป€เบฅเบฑเบšโ€‹)โ€‹.

เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ‚เบญเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡ เปเบฅเบฐเบชเบปเปˆเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS

PROVISIONING_PROFILE - ID เป‚เบ›โ€‹เบฃโ€‹เป„เบŸโ€‹เบฅเปŒโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบฅเบปเบ‡โ€‹เบ™เบฒเบกโ€‹เปƒเบ™โ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹, เบ—เบตเปˆโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบ”เป‰เบงเบโ€‹เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹:

cd "/Users/$Username/Library/MobileDevice/Provisioning Profiles/" && find *.mobileprovision -type f | xargs grep -li ">${ProjectName}_${Instance}<" | sed -e 's/.mobileprovision//'

เบ–เป‰เบฒเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เปƒเบŠเป‰เป‚เบ›เบฃเป„เบŸเบฅเปŒเป€เบžเบตเปˆเบกเป€เบ•เบตเบก (เบ•เบปเบงเบขเปˆเบฒเบ‡, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™ Push), เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เปเบ—เบ™เบ—เบตเปˆเบˆเบฐ PROVISIONING_PROFILE เบŠเบตเป‰เบšเบญเบ:

APP_PROFILE=โ€$AppProfileโ€ 
EXTENSION_PROFILE=โ€$ExtProfileโ€ 

เบ•เปเปˆเป„เบ›, เป„เบŸเบฅเปŒ *.app เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ„เบงเบ™เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบซเบธเป‰เบกเบซเปเปˆเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ *.ipa. เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบŠเบฑเปˆเบ™:

/usr/bin/xcrun --sdk iphoneos PackageApplication 
-v $(find "$ProjectDir/build/Build/Products/Release-iphoneos" -name "*.app") 
-o "$ProjectDir/$ProjectName_$Instance.ipa"

เบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก, เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เบ–เบทเบเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบงเปˆเบฒเบฅเป‰เบฒเบชเบฐเป„เบซเบกเบˆเบฒเบเบ—เบฑเบ”เบชเบฐเบ™เบฐเบ‚เบญเบ‡ Apple. เบกเบฑเบ™เบกเบตเบ„เบงเบฒเบกเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เป„เบ”เป‰เบฎเบฑเบš *.ipa เป‚เบ”เบเบเบฒเบ™เบชเบปเปˆเบ‡เบญเบญเบเบˆเบฒเบเปเบŸเป‰เบกเบˆเบฑเบ”เป€เบเบฑเบšเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™.

เบเปˆเบญเบ™เบญเบทเปˆเบ™ เปเบปเบ” เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เป€เบเบฑเบšเบฎเบงเบšเบฎเบงเบกเบ”เป‰เบงเบ เบ„เบณ เบชเบฑเปˆเบ‡:

xcodebuild 
-workspace $ProjectDir/$ProjectName.xcworkspace 
-scheme $SchemeName 
-sdk iphoneos 
-configuration Release 
archive 
-archivePath $ProjectDir/build/$ProjectName.xcarchive 
CODE_SIGN_IDENTITY=โ€$DevAccNameโ€ 
PROVISIONING_PROFILE=โ€$ProfileIdโ€
ENABLE_BITCODE=NO 
SYNCHRONOUS_SYMBOL_PROCESSING=FALSE

เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบงเบดเบ—เบตเบเบฒเบ™เบ›เบฐเบเบญเบšเปเบฅเบฐเบ—เบฒเบ‡เป€เบฅเบทเบญเบ SYNCHRONOUS_SYMBOL_PROCESSING, เป€เบŠเบดเปˆเบ‡เบ›เบดเบ”เบเบฒเบ™เป‚เบซเบผเบ”เบชเบฑเบ™เบเบฒเบฅเบฑเบเปƒเบ™เป€เบงเบฅเบฒเบชเป‰เบฒเบ‡.

เบ•เปเปˆเป„เบ›เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบชเบปเปˆเบ‡เบญเบญเบ:

ExportSettings="$ProjectDir/exportOptions.plist"

cat << EOF > $ExportSettings
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>compileBitcode</key>
<false/>
<key>uploadBitcode</key>
<false/>
<key>uploadSymbols</key>
<false/>
<key>method</key>
<string>$Method</string>
<key>provisioningProfiles</key>
<dict>
<key>$BundleID</key>
<string>$ProfileId</string>
</dict>
<key>signingCertificate</key>
<string>$DevAccName</string>
<key>signingStyle</key>
<string>manual</string>
<key>stripSwiftSymbols</key>
<true/>
<key>teamID</key>
<string>$TeamID</string>
<key>thinning</key>
<string><none></string>
</dict>
</plist>
EOF

เบšเปˆเบญเบ™เบ—เบตเปˆ:

$Method โ€” เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เบˆเบฑเบ”โ€‹เบชเบปเปˆเบ‡โ€‹, เบชเบญเบ”โ€‹เบ„เปˆเบญเบ‡โ€‹เบเบฑเบšโ€‹เบ›เบฐโ€‹เป€เบžเบ”โ€‹เบฅเบฒเบโ€‹เป€เบŠเบฑเบ™โ€‹เบ‚เบญเบ‡โ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹, เบ™เบฑเป‰เบ™โ€‹เปเบกเปˆเบ™โ€‹, เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบžเบฑเบ”โ€‹เบ—เบฐโ€‹เบ™เบฒโ€‹เบกเบนเบ™โ€‹เบ„เปˆเบฒโ€‹เบˆเบฐโ€‹เป€เบ›เบฑเบ™โ€‹เบเบฒเบ™โ€‹เบžเบฑเบ”โ€‹เบ—เบฐโ€‹เบ™เบฒโ€‹, เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™ Ad Hoc - ad-hocโ€‹, เปเบฅเบฐโ€‹เบชเปเบฒโ€‹เบฅเบฑเบš App Store - app-storeโ€‹.

$BundleID โ€” ID เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™, เป€เบŠเบดเปˆเบ‡เบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเบงเบ”เบชเบญเบšเบ”เป‰เบงเบเบ„เปเบฒเบชเบฑเปˆเบ‡:

defaults read $ProjectDir/Info CFBundleIdentifier

$DevAccName ะธ $ProfileId โ€” เบŠเบทเปˆโ€‹เบœเบนเป‰โ€‹เบžเบฑเบ”โ€‹เบ—เบฐโ€‹เบ™เบฒโ€‹เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒ ID เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบฅเบฒเบโ€‹เป€เบŠเบฑเบ™โ€‹เบ—เบตเปˆโ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เปƒเบ™โ€‹เป€เบกเบทเปˆเบญโ€‹เบเปˆเบญเบ™โ€‹เปเบฅเบฐโ€‹เบ•เป‰เบญเบ‡โ€‹เบเบปเบ‡โ€‹เบเบฑเบšโ€‹เบ„เปˆเบฒโ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹เบเบฒเบ™โ€‹เบชเบปเปˆเบ‡โ€‹เบญเบญเบโ€‹.

$TeamID โ€” ID เบชเบดเบšโ€‹เบ•เบปเบงโ€‹เป€เบฅเบโ€‹เปƒเบ™โ€‹เบงเบปเบ‡โ€‹เป€เบฅเบฑเบšโ€‹เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบŠเบทเปˆโ€‹เบœเบนเป‰โ€‹เบžเบฑเบ”โ€‹เบ—เบฐโ€‹เบ™เบฒโ€‹, เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡โ€‹: iPhone เบœเบนเป‰โ€‹เบžเบฑเบ”โ€‹เบ—เบฐโ€‹เบ™เบฒโ€‹: โ€ฆโ€ฆ (XXXXXXXXXXโ€‹); เบชเบฒเบกเบฒเบ”เบเบงเบ”เบชเบญเบšเป„เบ”เป‰เปƒเบ™ Keychain.

เบ•เปเปˆเป„เบ›, เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡เบชเบปเปˆเบ‡เบญเบญเบ, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเป„เบŸเบฅเปŒ *.ipa เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™:

xcodebuild 
-exportArchive 
-archivePath $ProjectDir/build/$ProjectName.xcarchive 
-exportPath $ProjectDir 
-exportOptionsPlist $ExportSettings

เบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบ‚เบปเบ™เบชเบปเปˆเบ‡

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เป„เบŸเบฅเปŒเบ—เบตเปˆเป€เบเบฑเบšเบเปเบฒเบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเบปเปˆเบ‡เบเบฑเบšเบœเบนเป‰เปƒเบŠเป‰เบชเบธเบ”เบ—เป‰เบฒเบ, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เบญเบธเบ›เบฐเบเบญเบ™.

เบกเบตเบซเบผเบฒเบเบšเปเบฅเบดเบเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปเบˆเบเบขเบฒเบเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเปเบฅเบฐเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡ Ad Hoc, เป€เบŠเบฑเปˆเบ™: HockeyApp, AppBlade เปเบฅเบฐเบญเบทเปˆเบ™เป†, เปเบ•เปˆเปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ—เบตเปˆเบขเบทเบ™เบขเบนเปˆเบ„เบปเบ™เบ”เบฝเบงเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปเบˆเบเบขเบฒเบเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ.

เบเบฒเบ™โ€‹เบ•เบดเบ”โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹เบชเปเบฒโ€‹เบฅเบฑเบš iOS เปƒเบŠเป‰โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบชเบฐโ€‹เบ–เบฒเบ™โ€‹เบ—เบตเปˆโ€‹เปƒเบ™ 2 เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™โ€‹:

  1. เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบœเปˆเบฒเบ™เบฅเบฒเบเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™.
  2. เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เป„เบŸเบฅเปŒ *.ipa เบ•เบฒเบกเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™ manifest เบœเปˆเบฒเบ™ HTTPS.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ—เปเบฒเบญเบดเบ”เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเป‰เบฒเบ‡ manifest เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ (เบ›เบฐเป€เบžเบ”เป„เบŸเบฅเปŒ *.plist) เบ”เป‰เบงเบเบ„เปเบฒเบชเบฑเปˆเบ‡:

cat << EOF > $manifest
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>items</key>
<array>
<dict>
<key>assets</key>
<array>
<dict>
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>$ipaUrl</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>$BundleID</string>
<key>bundle-version</key>
<string>$AppVersion</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string>$ProjectName_$Instance</string>
<key>subtitle</key>
<string>$Instance</string>
</dict>
</dict>
</array>
</dict>
</plist>
EOF

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰, manifest เบกเบตเป€เบเบทเบญเบšเบ—เบธเบเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ.

เป€เบงเบตเบŠเบฑเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ ($AppVersion) เบชเบฒเบกเบฒเบ”เบเบงเบ”เบชเบญเบšเป„เบ”เป‰เบ”เป‰เบงเบเบ„เปเบฒเบชเบฑเปˆเบ‡:

defaults read $ProjectDir/Info CFBundleVersion

Parameter $ipaUrl เบกเบตเบฅเบดเป‰เบ‡เป‚เบ”เบเบเบปเบ‡เป€เบžเบทเปˆเบญเบ”เบฒเบงเป‚เบซเบฅเบ”เป„เบŸเบฅเปŒ *.ipa. เบˆเบฒเบ iOS เบฎเบธเปˆเบ™เบ—เบต XNUMX, เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ•เป‰เบญเบ‡เบ–เบทเบเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบœเปˆเบฒเบ™ HTTPS. เปƒเบ™เบฎเบธเปˆเบ™เบ—เบตเปเบ›เบ”, เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡ manifest เป„เบ”เป‰เบ›เปˆเบฝเบ™เปเบ›เบ‡เป€เบฅเบฑเบเบ™เป‰เบญเบ: เบšเบฅเบฑเบญเบเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบชเปเบฒเบฅเบฑเบšเป„เบญเบ„เบญเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เป€เบŠเบฑเปˆเบ™:

<images>
   <image>...</image>
</images>

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบžเบทเปˆเบญเบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™, เบซเบ™เป‰เบฒ HTML เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบกเบตเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป€เบŠเบฑเปˆเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบžเบฝเบ‡เบžเป:

itms-services://?action=download-manifest&url=https://$ServerUrl/$ProjectName/$Instance/iOS/$AppVersion/manifest.plist

เบชเปเบฒเบฅเบฑเบšเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ‚เบญเบ‡เบžเบฐเปเบ™เบเบžเบฑเบ”เบ—เบฐเบ™เบฒเปเบฅเบฐเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš, Plarium เป„เบ”เป‰เบชเป‰เบฒเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡, เป€เบŠเบดเปˆเบ‡เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒ:

  • เป€เบญเบโ€‹เบเบฐโ€‹เบฅเบฒเบ”โ€‹เปเบฅเบฐโ€‹เป€เบญโ€‹เบเบฐโ€‹เบฅเบฒเบ”โ€‹,
  • เบเบฒเบ™โ€‹เบ„เบงเบšโ€‹เบ„เบธเบกโ€‹เบเบฒเบ™โ€‹เป€เบ‚เบปเป‰เบฒโ€‹เป€เบ–เบดเบ‡โ€‹เบชเบนเบ™โ€‹เบเบฒเบ‡โ€‹เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เบ•เบดเบ”โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เบงเบฒเบกโ€‹เบ›เบญเบ”โ€‹เป„เบžโ€‹เบ‚เบญเบ‡โ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹เป‚เบ”เบโ€‹เบœเปˆเบฒเบ™ "เบเบฒเบ™โ€‹เบŠเบปเปˆเบงโ€‹เบ„เบฒเบงโ€‹" เบเบฒเบ™โ€‹เป€เบŠเบทเปˆเบญเบกโ€‹เบ•เปเปˆโ€‹เบ—เบตเปˆโ€‹เบชเป‰เบฒเบ‡โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ‚เบทเป‰เบ™โ€‹เปเบšเบšโ€‹เป€เบ„เบทเปˆเบญเบ™โ€‹เป„เบซเบงโ€‹,
  • เบเบฒเบ™เบ—เปเบฒเบ‡เบฒเบ™เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ‚เบฐเบซเบเบฒเบเป„เบ”เป‰ (เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบ—เบตเบกเบ‡เบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ, เบ–เป‰เบฒเบˆเปเบฒเป€เบ›เบฑเบ™, เบชเบฒเบกเบฒเบ”เบฅเบงเบกเป€เบญเบปเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆเบ‚เบฒเบ”เบซเบฒเบเป„เบ›เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบง).

เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเบปเบ™เบ—เบฐเบ™เบฒเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ—เบฒเบ‡เบชเปˆเบงเบ™เบซเบ™เป‰เบฒเบ‚เบญเบ‡เบเบฒเบ™เบ›เปˆเบญเบเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ TestFlight.

เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ”เบฒเบงเป‚เบซเบผเบ”เปเบกเปˆเบ™เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เป‚เบ›เบฃเป„เบŸเบฅเปŒเบฅเบฒเบเป€เบŠเบฑเบ™ App Store เปเบฅเบฐเบกเบตเบฅเบฐเบซเบฑเบ” API เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™.

เบกเบตเบซเบผเบฒเบเบงเบดเบ—เบตเบ—เบตเปˆเบˆเบฐเบ”เบฒเบงเป‚เบซเบฅเบ”เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™:

  • เบœเปˆเบฒเบ™ Xcode (Organizer),
  • เบœเปˆเบฒเบ™ altoolโ€‹,
  • เบœเปˆเบฒเบ™ Application Loader เบชเปเบฒเบฅเบฑเบš Xcode เบฅเบธเป‰เบ™เป€เบเบปเปˆเบฒ (เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™ Transporter).

เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ”เบฒเบงเป‚เบซเบผเบ”เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”, altool เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰, เป€เบŠเบดเปˆเบ‡เบเบฑเบ‡เบกเบตเบชเบญเบ‡เบงเบดเบ—เบตเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”:

  • เบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™เบชเบฐเป€เบžเบฒเบฐเปเบญเบฑเบš,
  • API Key.

เบกเบฑเบ™เบกเบฑเบเบ—เบตเปˆเบˆเบฐเบ”เบฒเบงเป‚เบซเบฅเบ”เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เป‚เบ”เบเปƒเบŠเป‰ API Key.

เป€เบžเบทเปˆเบญเป€เบญเบปเบฒ API Key, เปƒเบซเป‰เป„เบ›เบ—เบตเปˆ เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ เปเบฅเบฐเบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”. เบ™เบญเบเป€เบซเบ™เบทเบญเบˆเบฒเบเบฅเบฐเบซเบฑเบ”เบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เปƒเบ™เบฎเบนเบšเปเบšเบš *.p8, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™เบชเบญเบ‡เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต: IssuerID เปเบฅเบฐ KeyID.

เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ‚เบญเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡ เปเบฅเบฐเบชเบปเปˆเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS

เบ•เปเปˆเป„เบ›, เบ™เปเบฒเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบ”เบฒเบงเป‚เบซเบฅเบ”เบกเบฒเปƒเบชเปˆเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบชเป‰เบฒเบ‡:

mkdir -p ~/.appstoreconnect/private_keys
mv ~/Downloads/AuthKey_${KeyID}.p8 ~/.appstoreconnect/private_keys/

เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบญเบฑเบšเป‚เบซเบฅเบ”เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เป„เบ› TestFlight, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบเบงเบ”เบชเบญเบšเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™, เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เบกเบฑเบ™เบ”เป‰เบงเบเบ„เปเบฒเบชเบฑเปˆเบ‡:

xcrun altool 
--validate-app 
-t ios 
-f $(find "$ProjectDir" -name "*.ipa") 
--apiKey โ€œ$KeyIDโ€ 
--apiIssuer โ€œ$IssuerIDโ€ 

เบšเปˆเบญเบ™เปƒเบ” apiKey ะธ apiIssuer เบกเบตเบกเบนเบ™เบ„เปˆเบฒเบžเบฒเบเบชเบฐเบซเบ™เบฒเบกเบˆเบฒเบเบซเบ™เป‰เบฒเบเบฒเบ™เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ” API.

เบ•เปเปˆเป„เบ›, เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบเบงเบ”เบชเบญเบšเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”, เบžเบงเบเป€เบฎเบปเบฒเป‚เบซเบฅเบ”เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ”เป‰เบงเบเบ„เปเบฒเบชเบฑเปˆเบ‡ --upload-app เบ”เป‰เบงเบเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ”เบฝเบงเบเบฑเบ™.

เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบˆเบฐเบ–เบทเบเบ—เบปเบ”เบชเบญเบšเป‚เบ”เบ Apple เบžเบฒเบเปƒเบ™เบซเบ™เบถเปˆเบ‡เบซเบผเบทเบชเบญเบ‡เบกเบทเป‰เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบˆเบฐเบกเบตเปƒเบซเป‰เบœเบนเป‰เบ—เบปเบ”เบชเบญเบšเบžเบฒเบเบ™เบญเบ: เบžเบงเบเป€เบ‚เบปเบฒเบˆเบฐเบ–เบทเบเบชเบปเปˆเบ‡เบญเบตเป€เบกเบงเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡.

เบญเบตเบเบงเบดเบ—เบตเปœเบถเปˆเบ‡เป€เบžเบทเปˆเบญเบ”เบฒเบงเป‚เบซเบฅเบ”เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบœเปˆเบฒเบ™ altool เปเบกเปˆเบ™เบเบฒเบ™เปƒเบŠเป‰เบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™เบชเบฐเป€เบžเบฒเบฐเบ‚เบญเบ‡เปเบญเบฑเบšเบฏ.

เป€เบžเบทเปˆเบญเป€เบญเบปเบฒเบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™เบชเบฐเป€เบžเบฒเบฐเปเบญเบฑเบš, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เป„เบ›เบ—เบตเปˆ เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ เปเบฅเบฐเบชเป‰เบฒเบ‡เบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบžเบฒเบเบ„เบงเบฒเบกเบ›เบญเบ”เป„เบž.

เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ‚เบญเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡ เปเบฅเบฐเบชเบปเปˆเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS

เบ•เปเปˆเป„เบ›, เบ—เปˆเบฒเบ™เบ„เบงเบ™เบชเป‰เบฒเบ‡เบšเบฑเบ™เบ—เบถเบเป€เบŠเบตเบŸเป€เบงเบตเบชเป‰เบฒเบ‡เปƒเบ™ Keychain เบ”เป‰เบงเบเบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™เบ™เบตเป‰. เบˆเบฒเบเบฎเบธเปˆเบ™ 11 เบ‚เบญเบ‡ Xcode เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เบ”เป‰เบงเบเบ„เปเบฒเบชเบฑเปˆเบ‡:

xcrun altool --store-password-in-keychain-item "Altool" -u "$DeveloperName" -p $AppPswd

เบšเปˆเบญเบ™เบ—เบตเปˆ:

$DeveloperName โ€” เบŠเบทเปˆโ€‹เบ‚เบญเบ‡โ€‹เบšเบฑเบ™โ€‹เบŠเบตโ€‹เบœเบนเป‰โ€‹เบžเบฑเบ”โ€‹เบ—เบฐโ€‹เบ™เบฒ iOS เบ—เบตเปˆโ€‹เปƒเบŠเป‰โ€‹เป€เบžเบทเปˆเบญโ€‹เป€เบ‚เบปเป‰เบฒโ€‹เบชเบนเปˆโ€‹เบฅเบฐโ€‹เบšเบปเบšโ€‹เบเบฒเบ™โ€‹เบšเปโ€‹เบฅเบดโ€‹เบเบฒเบ™ Appleโ€‹.

$AppPswd โ€” เบชเป‰เบฒเบ‡โ€‹เบฅเบฐโ€‹เบซเบฑเบ”โ€‹เบœเปˆเบฒเบ™โ€‹เบชเบฐโ€‹เป€เบžเบฒเบฐ Appโ€‹.

เบ•เปเปˆเป„เบ›, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบ„เปˆเบฒเบ‚เบญเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™ asc-provider เปเบฅเบฐเบเบงเบ”เป€เบšเบดเปˆเบ‡เบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”เบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™เบ”เป‰เบงเบเบ„เปเบฒเบชเบฑเปˆเบ‡:

xcrun altool --list-providers -u "$DeveloperName" -p "@keychain:Altool"

เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบœเบปเบ™เบœเบฐเบฅเบดเบ”:

Provider listing:
- Long Name - - Short Name -
XXXXXXX        XXXXXXXXX

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰, เบ„เปˆเบฒเบŠเบทเปˆเบชเบฑเป‰เบ™เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™ (asc-provider) เบเบปเบ‡เบเบฑเบšเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต $TeamID เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เปƒเบ™เป€เบงเบฅเบฒเบชเป‰เบฒเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™.

เป€เบžเบทเปˆเบญเบเบงเบ”เบชเบญเบšเปเบฅเบฐเป‚เบซเบฅเบ”เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ TestFlight, เปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡:

xcrun altool 
--(validate|upload)-app   
-f $(find "$ProjectDir" -name "*.ipa") 
-u "$DeveloperName" 
-p "@keychain:Altool" 

เป€เบ›เบฑเบ™เบ„เปˆเบฒเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต -p เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบญเบปเบฒเบกเบนเบ™เบ„เปˆเบฒ $AppPswd เปƒเบ™เบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ” (เบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡).

เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป„เบ”เป‰เบเปˆเบฒเบงเบกเบฒเปเบฅเป‰เบง, เบˆเบฒเบเบ—เบฑเบ”เบชเบฐเบ™เบฐเบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”, เบกเบฑเบ™เบ”เบตเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเป€เบฅเบทเบญเบ API Key เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เบ‚เบญเบ‡ altool, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ Xcode เบฎเบธเปˆเบ™เบ•เปˆเบฒเบ‡เป†เบกเบตเบšเบฑเบ™เบซเบฒเบšเบฒเบ‡เบขเปˆเบฒเบ‡ ("เบšเปเปˆเป€เบซเบฑเบ™" Keychain, เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบญเบฑเบšเป‚เบซเบฅเบ”, เปเบฅเบฐเบญเบทเปˆเบ™เป†).

เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”, เบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบง. เบ‚เป‰เบญเบเบ‚เปเบญเบงเบเบžเบญเบ™เปƒเบซเป‰เบ—เบธเบเบ„เบปเบ™เบกเบตเบชเปˆเบงเบ™เบฎเปˆเบงเบกเปƒเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ—เบตเปˆเบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเบณเป€เบฅเบฑเบ” เปเบฅเบฐเบเบฒเบ™เบ›เปˆเบญเบเบ•เบปเบงเบ—เบตเปˆเบšเปเปˆเบกเบตเบšเบฑเบ™เบซเบฒเปƒเบ™ App Store.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™