iOS เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฌเชจเชพเชตเชตเชพ เช…เชจเซ‡ เชชเชนเซ‹เช‚เชšเชพเชกเชตเชพเชจเซ€ เชธเซเชตเชฟเชงเชพเช“

เช† เชฒเซ‡เช–เชฎเชพเช‚, เช…เชฎเซ‡ iOS เชเชชเซเชฒเซ€เช•เซ‡เชถเชจเชจเซ‡ เชเชธเซ‡เชฎเซเชฌเชฒ เช•เชฐเชตเชพเชจเซ‹ เช…เชจเซ‡ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“เชจเซ‡ เชชเชนเซ‹เช‚เชšเชพเชกเชตเชพเชจเซ‹ เช…เชจเซเชญเชต เชถเซ‡เชฐ เช•เชฐเซ€เช เช›เซ€เช, เชœเซ‡ เชชเซเชฒเชพเชฐเชฟเชฏเชฎ เช•เซเชฐเชพเชธเซเชจเซ‹เชกเชพเชฐ เชธเซเชŸเซเชกเชฟเชฏเซ‹เช CI/CDเชจเซ‡ เชกเชฟเชฌเช— เช•เชฐเชตเชพเชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชฎเชพเช‚ เชธเช‚เชšเชฟเชค เช•เชฐเซเชฏเซ‹ เช›เซ‡.

iOS เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฌเชจเชพเชตเชตเชพ เช…เชจเซ‡ เชชเชนเซ‹เช‚เชšเชพเชกเชตเชพเชจเซ€ เชธเซเชตเชฟเชงเชพเช“

เชคเชพเชฒเซ€เชฎ

เชฆเชฐเซ‡เช• เชตเซเชฏเช•เซเชคเชฟ เช•เซ‡ เชœเซ‡ เชเช• เชฐเซ€เชคเซ‡ เช…เชฅเชตเชพ เช…เชจเซเชฏ เชฐเซ€เชคเซ‡ เชเชชเชฒ เช‰เชชเช•เชฐเชฃเซ‹ เชฎเชพเชŸเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเชพ เชตเชฟเช•เชพเชธเชฎเชพเช‚ เชธเชพเชฎเซ‡เชฒ เช›เซ‡ เชคเซ‡เชฃเซ‡ เชชเชนเซ‡เชฒเชพเชฅเซ€ เชœ เชˆเชจเซเชซเซเชฐเชพเชธเซเชŸเซเชฐเช•เซเชšเชฐเชจเซ€ เชตเชฟเชตเชพเชฆเชพเชธเซเชชเชฆ เชธเช—เชตเชกเชจเซ€ เชชเซเชฐเชถเช‚เชธเชพ เช•เชฐเซ€ เช›เซ‡. เชฎเซเชถเซเช•เซ‡เชฒเซ€เช“ เชฆเชฐเซ‡เช• เชœเช—เซเชฏเชพเช เชœเซ‹เชตเชพ เชฎเชณเซ‡ เช›เซ‡: เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพ เชชเซเชฐเซ‹เชซเชพเช‡เชฒ เชฎเซ‡เชจเซ‚เชฅเซ€ เชกเซ€เชฌเช— เช…เชจเซ‡ เชฌเชฟเชฒเซเชก เชŸเซ‚เชฒเซเชธ เชธเซเชงเซ€.

เช‡เชจเซเชŸเชฐเชจเซ‡เชŸ เชชเชฐ "เชฎเซ‚เชณเชญเซ‚เชค" เชตเชฟเชถเซ‡ เชชเซเชทเซเช•เชณ เชฒเซ‡เช–เซ‹ เช›เซ‡, เชคเซ‡เชฅเซ€ เช…เชฎเซ‡ เชฎเซเช–เซเชฏ เชตเชธเซเชคเซเชจเซ‡ เชชเซเชฐเช•เชพเชถเชฟเชค เช•เชฐเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€เชถเซเช‚. เชคเชฎเชพเชฐเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชธเชซเชณเชคเชพเชชเซ‚เชฐเซเชตเช• เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชคเชฎเชพเชฐเซ‡ เชœเซ‡ เชœเซ‹เชˆเช เช›เซ‡ เชคเซ‡ เช…เชนเซ€เช‚ เช›เซ‡:

  • เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพ เช–เชพเชคเซเช‚;
  • เชฌเชฟเชฒเซเชก เชธเชฐเซเชตเชฐ เชคเชฐเซ€เช•เซ‡ เช•เชพเชฎ เช•เชฐเชคเซเช‚ macOS-เช†เชงเชพเชฐเชฟเชค เช‰เชชเช•เชฐเชฃ;
  • เชชเซ‡เชฆเชพ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ, เชœเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช…เชฐเชœเซ€ เชชเชฐ เชธเชนเซ€ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชตเชงเซ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡;
  • เช…เชจเชจเซเชฏ เชธเชพเชฅเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฌเชจเชพเชตเซ€ ID (เชฌเช‚เชกเชฒ เช†เช‡เชกเซ‡เชจเซเชŸเชฟเชซเชพเชฏเชฐเชจเซเช‚ เชฎเชนเชคเซเชต เชจเซ‹เช‚เชงเชตเซเช‚ เชœเซ‹เชˆเช, เช•เชพเชฐเชฃ เช•เซ‡ เชตเชพเช‡เชฒเซเชกเช•เชพเชฐเซเชก ID เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเชพ เช˜เชฃเชพ เช•เชพเชฐเซเชฏเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซเช‚ เช…เชถเช•เซเชฏ เชฌเชจเชพเชตเซ‡ เช›เซ‡, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡: เชธเช‚เช•เชณเชพเชฏเซ‡เชฒ เชกเซ‹เชฎเซ‡เชจเซเชธ, เชชเซเชถ เชธเซ‚เชšเชจเชพเช“, Apple เชธเชพเช‡เชจ เช‡เชจ เช…เชจเซ‡ เช…เชจเซเชฏ);
  • เชชเซเชฐเซ‹เชซเชพเช‡เชฒ เช…เชฐเชœเซ€ เชธเชนเซ€เช“.

เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เช•เซ‹เชˆเชชเชฃ macOS เช‰เชชเช•เชฐเชฃ เชชเชฐ เช•เซ€เชšเซ‡เชจ เชฆเซเชตเชพเชฐเชพ เชœเชจเชฐเซ‡เชŸ เช•เชฐเชตเซเช‚ เช†เชตเชถเซเชฏเช• เช›เซ‡. เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเชจเซ‹ เชชเซเชฐเช•เชพเชฐ เช–เซ‚เชฌ เชœ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช›เซ‡. เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชชเชฐเซเชฏเชพเชตเชฐเชฃ (เชฆเซ‡เชต, เช•เซเชฏเซเช, เชธเซเชŸเซ‡เชœเซ€เช‚เช—, เช‰เชคเซเชชเชพเชฆเชจ) เชชเชฐ เช†เชงเชพเชฐ เชฐเชพเช–เซ€เชจเซ‡ เชคเซ‡ (เชตเชฟเช•เชพเชธ เช…เชฅเชตเชพ เชตเชฟเชคเชฐเชฃ) เช…เชฒเช— เชนเชถเซ‡, เชœเซ‡เชฎ เช•เซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชนเชธเซเชคเชพเช•เซเชทเชฐ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชจเซ‹ เชชเซเชฐเช•เชพเชฐ.

เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชจเชพ เชฎเซเช–เซเชฏ เชชเซเชฐเช•เชพเชฐเซ‹:

  • เชตเชฟเช•เชพเชธ - เชตเชฟเช•เชพเชธ เชŸเซ€เชฎเชจเซ€ เช…เชฐเชœเซ€ เชชเชฐ เชนเชธเซเชคเชพเช•เซเชทเชฐ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฌเชจเชพเชตเชพเชฏเซ‡เชฒ, เชตเชฟเช•เชพเชธ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ (เชชเซเชฐเช•เชพเชฐเชจเซเช‚ เชจเชพเชฎ iPhone เชกเซ‡เชตเชฒเชชเชฐ: XXXXX);
  • เชเชก เชนเซ‹เช• - เชชเชฐเซ€เช•เซเชทเชฃ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชชเชฐ เชนเชธเซเชคเชพเช•เซเชทเชฐ เช•เชฐเชตเชพ เช…เชจเซ‡ QA เชตเชฟเชญเชพเช— เชฆเซเชตเชพเชฐเชพ เช†เช‚เชคเชฐเชฟเช• เชšเช•เชพเชธเชฃเซ€ เชฎเชพเชŸเซ‡ เชฌเชจเชพเชตเชพเชฏเซ‡เชฒ, เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเชจเชพ เชตเชฟเชคเชฐเชฃ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ (เชชเซเชฐเช•เชพเชฐเชจเซเช‚ เชจเชพเชฎ iPhone เชตเชฟเชคเชฐเชฃ: XXXXX);
  • เชเชช เชธเซเชŸเซ‹เชฐ - เชŸเซ‡เชธเซเชŸเชซเซเชฒเชพเช‡เชŸ เชฆเซเชตเชพเชฐเชพ เชฌเชพเชนเซเชฏ เชชเชฐเซ€เช•เซเชทเชฃ เชฎเชพเชŸเซ‡ เชฐเชฟเชฒเซ€เช เชฌเชฟเชฒเซเชก เช…เชจเซ‡ เชเชช เชธเซเชŸเซ‹เชฐ เชชเชฐ เช…เชชเชฒเซ‹เชก เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเชจเชพ เชตเชฟเชคเชฐเชฃ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

เชกเซ‡เชตเชฒเชชเชฎเซ‡เชจเซเชŸ เช…เชจเซ‡ เชเชก เชนเซ‹เช• เชชเซเชฐเซ‹เชซเชพเช‡เชฒเซเชธ เชœเชจเชฐเซ‡เชŸ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡, เชคเซ‡ เชชเชฃ เชธเซ‚เชšเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช‰เชชเช•เชฐเชฃ เชฏเชพเชฆเซ€, เชœเซ‡เชจเชพ เชชเชฐ เชคเชฎเซ‡ เชฌเชฟเชฒเซเชก เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เชœเซ‡ เชคเชฎเชจเซ‡ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เชฎเชพเชŸเซ‡ เชเช•เซเชธเซ‡เชธเชจเซ‡ เชตเชงเซ เชชเซเชฐเชคเชฟเชฌเช‚เชงเชฟเชค เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡. เชเชช เชธเซเชŸเซ‹เชฐ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชฎเชพเช‚ เช‰เชชเช•เชฐเชฃเซ‹เชจเซ€ เช•เซ‹เชˆ เชธเซ‚เชšเชฟ เชจเชฅเซ€, เช•เชพเชฐเชฃ เช•เซ‡ เชฌเช‚เชง เชฌเซ€เชŸเชพ เชชเชฐเซ€เช•เซเชทเชฃ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชเช•เซเชธเซ‡เชธ เชจเชฟเชฏเช‚เชคเซเชฐเชฃ เชŸเซ‡เชธเซเชŸเชซเซเชฒเชพเช‡เชŸ เชฆเซเชตเชพเชฐเชพ เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชœเซ‡เชจเซ€ เชชเช›เซ€เชฅเซ€ เชšเชฐเซเชšเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡.

เชธเซเชชเชทเซเชŸเชคเชพ เชฎเชพเชŸเซ‡, เชคเชฎเซ‡ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเชจเซ€ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชจเซ‡ เชจเซ€เชšเซ‡เชจเชพ เช•เซ‹เชทเซเชŸเช•เชจเชพ เชฐเซ‚เชชเชฎเชพเช‚ เชฐเชœเซ‚ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹. เช† เชเชธเซ‡เชฎเซเชฌเชฒเซ€ เชฎเชพเชŸเซ‡ เช†เชชเชฃเชจเซ‡ เช•เชฏเชพ เชชเชฐเชฟเชฎเชพเชฃเซ‹เชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡ เช•เซเชฏเชพเช‚เชฅเซ€ เชฎเซ‡เชณเชตเชตเซ€ เชคเซ‡ เชธเชฎเชœเชตเชพเชฎเชพเช‚ เชธเชฐเชณ เชฌเชจเชพเชตเซ‡ เช›เซ‡.

iOS เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฌเชจเชพเชตเชตเชพ เช…เชจเซ‡ เชชเชนเซ‹เช‚เชšเชพเชกเชตเชพเชจเซ€ เชธเซเชตเชฟเชงเชพเช“

เชตเชฟเชงเชพเชจเชธเชญเชพ

เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เช…เชจเซ‡ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชฆเซเชตเชพเชฐเชพ เชเชธเซ‡เชฎเซเชฌเชฒเซ€เช“เชจเซ‡ เช…เชฒเช— เช•เชฐเชตเชพเชจเซเช‚ เชธเชฐเชณ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเซ‡ เชชเซเชฐเซ‹เชซเชพเช‡เชฒ เชจเชพเชฎเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช เช›เซ€เช เชœเซ‡เชฎ เช•เซ‡ ${ProjectName}_${Instance}, เชเชŸเชฒเซ‡ เช•เซ‡, เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซเช‚ เชจเชพเชฎ + เช‰เชฆเชพเชนเชฐเชฃ (เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชชเชฐ เช†เชงเชพเชฐ เชฐเชพเช–เซ‡ เช›เซ‡: Dev, QA, GD, เชธเซเชŸเซ‡เชœเชฟเช‚เช—, เชฒเชพเช‡เชต, เช…เชจเซ‡ เชคเซ‡เชฅเซ€ เชตเชงเซ).

เชœเซเชฏเชพเชฐเซ‡ เชฌเชฟเชฒเซเชก เชธเชฐเซเชตเชฐ เชชเชฐ เช†เชฏเชพเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชคเซเชฏเชพเชฐเซ‡ เชชเซเชฐเซ‹เชซเชพเช‡เชฒ เชคเซ‡เชจเซเช‚ เชจเชพเชฎ เชเช• เช…เชจเชจเซเชฏ IDเชฎเชพเช‚ เชฌเชฆเชฒเซ€เชจเซ‡ เชซเซ‹เชฒเซเชกเชฐเชฎเชพเช‚ เช–เชธเซ‡เชกเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ /Users/$Username/Library/MobileDevice/Provisioning Profiles (เชœเซเชฏเชพเช‚ $Username เชฌเชฟเชฒเซเชก เชธเชฐเซเชตเชฐเชจเชพ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เช–เชพเชคเชพเชจเชพ เชจเชพเชฎเชจเซ‡ เช…เชจเซเชฐเซ‚เชช เช›เซ‡).

*.ipa เชซเชพเช‡เชฒ เชฌเชจเชพเชตเชตเชพเชจเซ€ เชฌเซ‡ เชฐเซ€เชค เช›เซ‡ - เชฒเซ‡เช—เชธเซ€ (เชชเซ‡เช•เซ‡เชœ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ) เช…เชจเซ‡ เช†เชงเซเชจเชฟเช• (XcAchive เชฌเชจเชพเชตเชŸ เช…เชจเซ‡ เชจเชฟเช•เชพเชธ เชฆเซเชตเชพเชฐเชพ). เชชเซเชฐเชฅเชฎ เชชเชฆเซเชงเชคเชฟเชจเซ‡ เช…เชชเซเชฐเชšเชฒเชฟเชค เชฎเชพเชจเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เชธเช‚เชธเซเช•เชฐเชฃ 8.3 เชฅเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชซเชพเช‡เชฒ เชชเซ‡เช•เซ‡เชœเชฟเช‚เช— เชฎเซ‹เชกเซเชฏเซเชฒเชจเซ‡ 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 โ€” เชกเซ‡เชตเชฒเชชเชฐ เชเช•เชพเช‰เชจเซเชŸเชจเซเช‚ เชจเชพเชฎ, เชœเซ‡ เช•เซ€เชšเซ‡เชจเชฎเชพเช‚ เชšเช•เชพเชธเซ€ เชถเช•เชพเชฏ เช›เซ‡ (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//'

เชœเซ‹ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชตเชงเชพเชฐเชพเชจเซ€ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡ (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชชเซเชถ เชธเซ‚เชšเชจเชพเช“ เชฎเชพเชŸเซ‡), เชคเซ‹ เชคเซ‡เชจเชพ เชฌเชฆเชฒเซ‡ 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"

เชœเซ‹ เช•เซ‡, เช† เชชเชฆเซเชงเชคเชฟ เชเชชเชฒเชจเชพ เชฆเซƒเชทเซเชŸเชฟเช•เซ‹เชฃเชฅเซ€ เช…เชชเซเชฐเชšเชฒเชฟเชค เชฎเชพเชจเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เช†เชฐเซเช•เชพเช‡เชตเชฎเชพเช‚เชฅเซ€ เชจเชฟเช•เชพเชธ เช•เชฐเซ€เชจเซ‡ *.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 โ€” เชกเชฟเชฒเชฟเชตเชฐเซ€ เชชเชฆเซเชงเชคเชฟ, เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชนเชธเซเชคเชพเช•เซเชทเชฐ เชชเซเชฐเซ‹เชซเชพเช‡เชฒ เชชเซเชฐเช•เชพเชฐเชจเซ‡ เช…เชจเซเชฐเซ‚เชช เช›เซ‡, เชเชŸเชฒเซ‡ เช•เซ‡, เชตเชฟเช•เชพเชธ เชฎเชพเชŸเซ‡ เชฎเซ‚เชฒเซเชฏ เชตเชฟเช•เชพเชธ เชนเชถเซ‡, เชเชก เชนเซ‹เช• เชฎเชพเชŸเซ‡ - เชเชก-เชนเซ‰เช•, เช…เชจเซ‡ เชเชช เชธเซเชŸเซ‹เชฐ เชฎเชพเชŸเซ‡ - เชเชช-เชธเซเชŸเซ‹เชฐ.

$BundleID โ€” เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ ID, เชœเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชธเซ‡เชŸเชฟเช‚เช—เซเชธเชฎเชพเช‚ เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เช›เซ‡. เชคเชฎเซ‡ เช†เชฆเซ‡เชถ เชธเชพเชฅเซ‡ เชคเชชเชพเชธ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹:

defaults read $ProjectDir/Info CFBundleIdentifier

$DevAccName ะธ $ProfileId โ€” เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเชจเซเช‚ เชจเชพเชฎ เช…เชจเซ‡ เชนเชธเซเชคเชพเช•เซเชทเชฐ เชชเซเชฐเซ‹เชซเชพเช‡เชฒ ID เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เช•เซ‡ เชœเซ‡ เช…เช—เชพเช‰ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพเชคเซ€ เชนเชคเซ€ เช…เชจเซ‡ เชจเชฟเช•เชพเชธ เชธเซ‡เชŸเชฟเช‚เช—เซเชธเชฎเชพเช‚เชจเชพ เชฎเซ‚เชฒเซเชฏเซ‹ เชธเชพเชฅเซ‡ เชฎเซ‡เชณ เช–เชพเชคเซ€ เชนเซ‹เชตเซ€ เชœเซ‹เชˆเช.

$TeamID โ€” เชกเซ‡เชตเชฒเชชเชฐเชจเชพ เชจเชพเชฎ เชชเช›เซ€ เช•เซŒเช‚เชธเชฎเชพเช‚ เชฆเชธ-เช…เช‚เช•เชจเซเช‚ ID, เช‰เชฆเชพเชนเชฐเชฃ: iPhone เชกเซ‡เชตเชฒเชชเชฐ: โ€ฆโ€ฆ (XXXXXXXXXX); เช•เซ€เชšเซ‡เชจเชฎเชพเช‚ เชšเซ‡เช• เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡.

เช†เช—เชณ, เชจเชฟเช•เชพเชธ เช†เชฆเซ‡เชถเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡, เช…เชฎเซ‡ เชœเชฐเซ‚เชฐเซ€ *.ipa เชซเชพเช‡เชฒ เชฎเซ‡เชณเชตเซ€เช เช›เซ€เช:

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

เชถเชฟเชชเชฟเช‚เช— เชฎเชพเชนเชฟเชคเซ€

เชนเชตเซ‡ เชเช•เชคเซเชฐเชฟเชค เช•เชฐเซ‡เชฒเซ€ เชซเชพเช‡เชฒเชจเซ‡ เช…เช‚เชคเชฟเชฎ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเชจเซ‡ เชชเชนเซ‹เช‚เชšเชพเชกเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เชเชŸเชฒเซ‡ เช•เซ‡, เช‰เชชเช•เชฐเชฃ เชชเชฐ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‡เชฒเซเช‚ เช›เซ‡.

เชกเซ‡เชตเชฒเชชเชฎเซ‡เชจเซเชŸ เช…เชจเซ‡ เชเชก เชนเซ‹เช• เชฌเชฟเชฒเซเชกเซเชธเชจเชพ เชตเชฟเชคเชฐเชฃ เชฎเชพเชŸเซ‡ เช˜เชฃเซ€ เชธเซ‡เชตเชพเช“ เช›เซ‡, เชœเซ‡เชฎ เช•เซ‡ HockeyApp, AppBlade เช…เชจเซ‡ เช…เชจเซเชฏ, เชชเชฐเช‚เชคเซ เช† เชฒเซ‡เช–เชฎเชพเช‚ เช†เชชเชฃเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเชพ เชตเชฟเชคเชฐเชฃ เชฎเชพเชŸเซ‡ เชเช•เชฒ เชธเชฐเซเชตเชฐ เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเซ€เชถเซเช‚.

iOS เชฎเชพเชŸเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพเชจเซเช‚ 2 เชคเชฌเช•เซเช•เชพเชฎเชพเช‚ เชฅเชพเชฏ เช›เซ‡:

  1. เช†เช‡เชŸเชฎเซเชธ เชธเซ‡เชตเชพ เชฆเซเชตเชพเชฐเชพ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ เชฎเซ‡เชจเชฟเชซเซ‡เชธเซเชŸ เชชเซเชฐเชพเชชเซเชค เช•เชฐเชตเซเช‚.
  2. HTTPS เชฆเซเชตเชพเชฐเชพ เชฎเซ‡เชจเชฟเชซเซ‡เชธเซเชŸเชฎเชพเช‚ เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เชฎเชพเชนเชฟเชคเซ€ เช…เชจเซเชธเชพเชฐ *.ipa เชซเชพเช‡เชฒเชจเซเช‚ เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ.

เช†เชฎ, เช†เชชเชฃเซ‡ เชชเชนเซ‡เชฒเชพ เช†เชฆเซ‡เชถ เชธเชพเชฅเซ‡ เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ เชฎเซ‡เชจเชฟเชซเซ‡เชธเซเชŸ (เชซเชพเช‡เชฒ เชชเซเชฐเช•เชพเชฐ *.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

เชœเซ‡เชฎ เชคเชฎเซ‡ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹, เชฎเซ‡เชจเชฟเชซเซ‡เชธเซเชŸเชฎเชพเช‚ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเชพ เชจเชฟเชฐเซเชฎเชพเชฃเชฎเชพเช‚ เชธเชพเชฎเซ‡เชฒ เชฒเช—เชญเช— เชคเชฎเชพเชฎ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชถเชพเชฎเซ‡เชฒ เช›เซ‡.

เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชธเช‚เชธเซเช•เชฐเชฃ ($AppVersion) เช†เชฆเซ‡เชถ เชธเชพเชฅเซ‡ เชšเช•เชพเชธเซ€ เชถเช•เชพเชฏ เช›เซ‡:

defaults read $ProjectDir/Info CFBundleVersion

เชชเซ‡เชฐเชพเชฎเซ€เชŸเชฐ $ipaUrl *.ipa เชซเชพเช‡เชฒ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชธเซ€เชงเซ€ เชฒเชฟเช‚เช• เชงเชฐเชพเชตเซ‡ เช›เซ‡. iOS เชจเชพ เชธเชพเชคเชฎเชพ เชธเช‚เชธเซเช•เชฐเชฃเชฅเซ€, เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ HTTPS เชฆเซเชตเชพเชฐเชพ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเซ€ เช†เชตเชถเซเชฏเช• เช›เซ‡. เช†เช เชฎเชพ เชธเช‚เชธเซเช•เชฐเชฃเชฎเชพเช‚, เชฎเซ‡เชจเชฟเชซเซ‡เชธเซเชŸเชจเซเช‚ เชซเซ‹เชฐเซเชฎเซ‡เชŸ เชฅเซ‹เชกเซเช‚ เชฌเชฆเชฒเชพเชฏเซเช‚ เช›เซ‡: เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เช†เชฏเช•เชจเซเชธ เชฎเชพเชŸเซ‡ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เชธเชพเชฅเซ‡เชจเชพ เชฌเซเชฒเซ‹เช•เซเชธ เชœเซ‡เชฎ เช•เซ‡

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

เช†เชฎ, เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช†เชจเชพ เชœเซ‡เชตเซ€ เชฒเชฟเช‚เช• เชธเชพเชฅเซ‡เชจเซเช‚ เชเช• เชธเชฐเชณ HTML เชชเซƒเชทเซเช  เชชเซ‚เชฐเชคเซเช‚ เช›เซ‡:

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

เชตเชฟเช•เชพเชธ เช…เชจเซ‡ เชชเชฐเซ€เช•เซเชทเชฃ เชตเชฟเชญเชพเช—เซ‹เชจเซ€ เชœเชฐเซ‚เชฐเชฟเชฏเชพเชคเซ‹ เชฎเชพเชŸเซ‡, เชชเซเชฒเซ‡เชฐเชฟเชฏเชฎเซ‡ เชคเซ‡เชจเซ€ เชชเซ‹เชคเชพเชจเซ€ เชฌเชฟเชฒเซเชก เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฌเชจเชพเชตเซ€ เช›เซ‡, เชœเซ‡ เช…เชฎเชจเซ‡ เช†เชชเซ‡ เช›เซ‡:

  • เชธเซเชตเชพเชฏเชคเซเชคเชคเชพ เช…เชจเซ‡ เชธเซเชตเชคเช‚เชคเซเชฐเชคเชพ,
  • เชเช•เซเชธเซ‡เชธ เช•เช‚เชŸเซเชฐเซ‹เชฒเชจเซเช‚ เช•เซ‡เชจเซเชฆเซเชฐเชฟเชฏเช•เชฐเชฃ เช…เชจเซ‡ "เช•เชพเชฎเชšเชฒเชพเช‰" เช—เชคเชฟเชถเซ€เชฒ เชฐเซ€เชคเซ‡ เชฌเชจเชพเชตเซ‡เชฒ เชฒเชฟเช‚เช•เซเชธ เชฆเซเชตเชพเชฐเชพ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซเช‚ เชธเซเชฐเช•เซเชทเชฟเชค เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ,
  • เชตเชฟเชธเซเชคเซƒเชค เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพ (เชเชŸเชฒเซ‡ โ€‹โ€‹เช•เซ‡, เชตเชฟเช•เชพเชธ เชŸเซ€เชฎ, เชœเซ‹ เชœเชฐเซ‚เชฐเซ€ เชนเซ‹เชฏ เชคเซ‹, เชนเชพเชฒเชจเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชฎเชพเช‚ เช—เซเชฎ เชฅเชฏเซ‡เชฒ เช•เชพเชฐเซเชฏเซ‹เชจเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡).

เชชเชฐเซ€เช•เซเชทเชฃ

เชนเชตเซ‡ เช…เชฎเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเชพ เชชเซเชฐเซ€-เชฐเซ€เชฒเซ€เช เชชเชฐเซ€เช•เซเชทเชฃ เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเซ€เชถเซเช‚ TestFlight.

เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐเซ€ เชถเชฐเชคเซ‹ เชเชช เชธเซเชŸเซ‹เชฐ เชนเชธเซเชคเชพเช•เซเชทเชฐ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชจเซ‹ เชชเซเชฐเช•เชพเชฐ เช…เชจเซ‡ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ‡เชฒ API เช•เซ€เชจเซ€ เชนเชพเชœเชฐเซ€ เช›เซ‡.

เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเชตเชพเชจเซ€ เช˜เชฃเซ€ เชฐเซ€เชคเซ‹ เช›เซ‡:

  • Xcode (เช“เชฐเซเช—เซ‡เชจเชพเช‡เชเชฐ) เชฆเซเชตเชพเชฐเชพ,
  • เช…เชฒเซเชŸเซ‚เชฒ เชฆเซเชตเชพเชฐเชพ,
  • Xcode (เชนเชตเซ‡ เชŸเซเชฐเชพเชจเซเชธเชชเซ‹เชฐเซเชŸเชฐ) เชจเชพ เชœเซ‚เชจเชพ เชธเช‚เชธเซเช•เชฐเชฃเซ‹ เชฎเชพเชŸเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฒเซ‹เชกเชฐ เชฆเซเชตเชพเชฐเชพ.

เชธเซเชตเชšเชพเชฒเชฟเชค เชกเชพเช‰เชจเชฒเซ‹เชกเชฟเช‚เช— เชฎเชพเชŸเซ‡, เช…เชฒเซเชŸเซ‚เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฅเชพเชฏ เช›เซ‡, เชœเซ‡เชฎเชพเช‚ เชฌเซ‡ เช…เชงเชฟเช•เซƒเชคเชคเชพ เชชเชฆเซเชงเชคเชฟเช“ เชชเชฃ เช›เซ‡:

  • เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ-เชตเชฟเชถเชฟเชทเซเชŸ เชชเชพเชธเชตเชฐเซเชก,
  • API เช•เซ€.

API เช•เซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเชตเชพเชจเซเช‚ เชตเชงเซ เชธเชพเชฐเซเช‚ เช›เซ‡.

API เช•เซ€ เชฎเซ‡เชณเชตเชตเชพ เชฎเชพเชŸเซ‡, เชชเชฐ เชœเชพเช“ เช•เชกเซ€ เช…เชจเซ‡ เช•เซ€ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ‹. *.p8 เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ เช•เซ€ เช‰เชชเชฐเชพเช‚เชค, เช…เชฎเชจเซ‡ เชฌเซ‡ เชชเชฐเชฟเชฎเชพเชฃเซ‹เชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡: IssuerID เช…เชจเซ‡ KeyID.

iOS เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฌเชจเชพเชตเชตเชพ เช…เชจเซ‡ เชชเชนเซ‹เช‚เชšเชพเชกเชตเชพเชจเซ€ เชธเซเชตเชฟเชงเชพเช“

เช†เช—เชณ, เชฌเชฟเชฒเซเชก เชธเชฐเซเชตเชฐ เชชเชฐ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเซ‡เชฒ เช•เซ€ เช†เชฏเชพเชค เช•เชฐเซ‹:

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

เชŸเซ‡เชธเซเชŸเชซเซเชฒเชพเช‡เชŸ เชชเชฐ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เช…เชชเชฒเซ‹เชก เช•เชฐเชคเชพ เชชเชนเซ‡เชฒเชพ, เชคเชฎเชพเชฐเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ‡ เชฎเชพเชจเซเชฏ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เช…เชฎเซ‡ เช† เช†เชฆเซ‡เชถ เชธเชพเชฅเซ‡ เช•เชฐเซ€เช เช›เซ€เช:

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

เช•เซเชฏเชพเช‚ apiKey ะธ apiIssuer API เช•เซ€ เชœเชจเชฐเซ‡เชถเชจ เชชเซƒเชทเซเช เชฎเชพเช‚เชฅเซ€ เชซเซ€เชฒเซเชก เชฎเซ‚เชฒเซเชฏเซ‹ เชงเชฐเชพเชตเซ‡ เช›เซ‡.

เช†เช—เชณ, เชธเชซเชณ เชฎเชพเชจเซเชฏเชคเชพ เชชเชฐ, เช…เชฎเซ‡ เช†เชฆเซ‡เชถ เชธเชพเชฅเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฒเซ‹เชก เช•เชฐเซ€เช เช›เซ€เช --upload-app เชธเชฎเชพเชจ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชธเชพเชฅเซ‡.

เชเชชเชฒ เชฆเซเชตเชพเชฐเชพ เชเช• เช•เซ‡ เชฌเซ‡ เชฆเชฟเชตเชธเชฎเชพเช‚ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซเช‚ เชชเชฐเซ€เช•เซเชทเชฃ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ เช…เชจเซ‡ เชชเช›เซ€ เชคเซ‡ เชฌเชพเชนเซเชฏ เชชเชฐเซ€เช•เซเชทเช•เซ‹ เชฎเชพเชŸเซ‡ เช‰เชชเชฒเชฌเซเชง เชฅเชถเซ‡: เชคเซ‡เชฎเชจเซ‡ เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ เชฎเชพเชŸเซ‡เชจเซ€ เชฒเชฟเช‚เช•เซเชธ เช‡เชฎเซ‡เช‡เชฒ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡.

altool เชฆเซเชตเชพเชฐเชพ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเชตเชพเชจเซ€ เชฌเซ€เชœเซ€ เชฐเซ€เชค เชเชช-เชตเชฟเชถเชฟเชทเซเชŸ เชชเชพเชธเชตเชฐเซเชกเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ เช›เซ‡.

เชเชช-เชตเชฟเชถเชฟเชทเซเชŸ เชชเชพเชธเชตเชฐเซเชก เชฎเซ‡เชณเชตเชตเชพ เชฎเชพเชŸเซ‡ เชคเชฎเชพเชฐเซ‡ เชœเชตเซเช‚ เชชเชกเชถเซ‡ เช•เชกเซ€ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชธเซเชฐเช•เซเชทเชพ เชตเชฟเชญเชพเช—เชฎเชพเช‚ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ‹.

iOS เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฌเชจเชพเชตเชตเชพ เช…เชจเซ‡ เชชเชนเซ‹เช‚เชšเชพเชกเชตเชพเชจเซ€ เชธเซเชตเชฟเชงเชพเช“

เช†เช—เชณ, เชคเชฎเชพเชฐเซ‡ เช† เชชเชพเชธเชตเชฐเซเชก เชธเชพเชฅเซ‡ เช•เซ€เชšเซ‡เชจเชฎเชพเช‚ เชฌเชฟเชฒเซเชก เชธเชฐเซเชตเชฐ เชฐเซ‡เช•เซ‹เชฐเซเชก เชฌเชจเชพเชตเชตเซ‹ เชœเซ‹เชˆเช. Xcode เชจเชพ เชธเช‚เชธเซเช•เชฐเชฃ 11 เชฅเซ€ เช† เช†เชฆเซ‡เชถ เชธเชพเชฅเซ‡ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡:

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

เช•เซเชฏเชพเช‚:

$DeveloperName โ€” Apple เชธเซ‡เชตเชพเช“เชฎเชพเช‚ เชฒเซ‰เช— เช‡เชจ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพเชคเชพ iOS เชกเซ‡เชตเชฒเชชเชฐ เชเช•เชพเช‰เชจเซเชŸเชจเซเช‚ เชจเชพเชฎ.

$AppPswd - เชเชช-เชตเชฟเชถเชฟเชทเซเชŸ เชชเชพเชธเชตเชฐเซเชก เชœเชจเชฐเซ‡เชŸ เช•เชฐเซเชฏเซ‹.

เช†เช—เชณ, เช…เชฎเชจเซ‡ asc-เชชเซเชฐเซ‹เชตเชพเช‡เชกเชฐ เชชเซ‡เชฐเชพเชฎเซ€เชŸเชฐเชจเซเช‚ เชฎเซ‚เชฒเซเชฏ เชฎเชณเซ‡ เช›เซ‡ เช…เชจเซ‡ เช†เชฆเซ‡เชถ เชธเชพเชฅเซ‡ เชชเชพเชธเชตเชฐเซเชก เช†เชฏเชพเชคเชจเซ€ เชธเชซเชณเชคเชพ เชคเชชเชพเชธเซ‹:

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

เช…เชฎเชจเซ‡ เช†เช‰เชŸเชชเซเชŸ เชฎเชณเซ‡ เช›เซ‡:

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

เชœเซ‡เชฎ เชคเชฎเซ‡ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹, เชœเชฐเซ‚เชฐเซ€ เชŸเซ‚เช‚เช•เชพ เชจเชพเชฎ เชฎเซ‚เชฒเซเชฏ (asc-เชชเซเชฐเชฆเชพเชคเชพ) เช $TeamID เชชเชฐเชฟเชฎเชพเชฃ เชธเชพเชฅเซ‡ เชธเซเชธเช‚เช—เชค เช›เซ‡ เชœเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช…เชฎเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฌเชจเชพเชตเชคเซ€ เชตเช–เชคเซ‡ เช•เชฐเซเชฏเซ‹ เชนเชคเซ‹.

เชŸเซ‡เชธเซเชŸเชซเซเชฒเชพเช‡เชŸเชฎเชพเช‚ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ‡ เชฎเชพเชจเซเชฏ เช•เชฐเชตเชพ เช…เชจเซ‡ เชฒเซ‹เชก เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช†เชฆเซ‡เชถเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹:

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

เชชเชฐเชฟเชฎเชพเชฃ เชฎเซ‚เชฒเซเชฏ เชคเชฐเซ€เช•เซ‡ -p เชคเชฎเซ‡ เชฎเซ‚เชฒเซเชฏ เชฒเชˆ เชถเช•เซ‹ เช›เซ‹ $AppPswd เชเชจเช•เซเชฐเชฟเชชเซเชŸเซ‡เชก (เชธเซเชชเชทเซเชŸ) เชธเซเชตเชฐเซ‚เชชเชฎเชพเช‚.

เชœเซ‹ เช•เซ‡, เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซเชฏเซ‹ เช›เซ‡ เชคเซ‡เชฎ, เชชเซเชฐเชฆเชฐเซเชถเชจเชจเชพ เชฆเซƒเชทเซเชŸเชฟเช•เซ‹เชฃเชฅเซ€, เช…เชฒเซเชŸเซ‚เชฒ เช…เชงเชฟเช•เซƒเชคเชคเชพ เชฎเชพเชŸเซ‡ API เช•เซ€ เชชเชธเช‚เชฆ เช•เชฐเชตเชพเชจเซเช‚ เชตเชงเซ เชธเชพเชฐเซเช‚ เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ Xcodeเชจเชพ เชตเชฟเชตเชฟเชง เชธเช‚เชธเซเช•เชฐเชฃเซ‹เชฎเชพเช‚ เชšเซ‹เช•เซเช•เชธ เชธเชฎเชธเซเชฏเชพเช“ เช›เซ‡ (เช•เซ€เชšเซ‡เชจ "เชœเซ‹เชคเซเช‚ เชจเชฅเซ€", เช…เชชเชฒเซ‹เชก เชฆเชฐเชฎเชฟเชฏเชพเชจ เช…เชงเชฟเช•เซƒเชคเชคเชพ เชญเซ‚เชฒเซ‹, เชตเช—เซ‡เชฐเซ‡).

เชคเซ‡ เชฌเชงเชพ เช›เซ‡, เชตเชพเชธเซเชคเชตเชฎเชพเช‚. เชนเซเช‚ เชˆเชšเซเช›เซเช‚ เช›เซเช‚ เช•เซ‡ เชเชช เชธเซเชŸเซ‹เชฐเชฎเชพเช‚ เชธเชซเชณ เชฌเชฟเชฒเซเชก เช…เชจเซ‡ เชฎเซเชถเซเช•เซ‡เชฒเซ€-เชฎเซเช•เซเชค เชฐเซ€เชฒเซ€เช เชธเชพเชฎเซ‡เชฒ เชนเซ‹เชฏ.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹