iOS เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจจเฉ‚เฉฐ เจฌเจฃเจพเจ‰เจฃ เจ…เจคเฉ‡ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจจ เจฆเฉ€เจ†เจ‚ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚

เจ‡เจธ เจฒเฉ‡เจ– เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจ‰เจชเจญเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจ†เจˆเจ“เจเจธ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจจเฉ‚เฉฐ เจ…เจธเฉˆเจ‚เจฌเจฒ เจ•เจฐเจจ เจ…เจคเฉ‡ เจกเจฟเจฒเฉ€เจตเจฐ เจ•เจฐเจจ เจฆเฉ‡ เจ…เจจเฉเจญเจต เจจเฉ‚เฉฐ เจธเจพเจ‚เจเจพ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจœเฉ‹ เจ•เจฟ เจชเจฒเฉˆเจฐเฉ€เจ…เจฎ เจ•เฉเจฐเจพเจธเจจเฉ‹เจฆเจฐ เจธเจŸเฉ‚เจกเฉ€เจ“ เจจเฉ‡ CI/CD เจจเฉ‚เฉฐ เจกเฉ€เจฌเฉฑเจ— เจ•เจฐเจจ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจตเจฟเฉฑเจš เจ‡เจ•เฉฑเจ เจพ เจ•เฉ€เจคเจพ เจนเฉˆเฅค

iOS เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจจเฉ‚เฉฐ เจฌเจฃเจพเจ‰เจฃ เจ…เจคเฉ‡ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจจ เจฆเฉ€เจ†เจ‚ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚

เจธเจฟเจ–เจฒเจพเจˆ

เจนเจฐเฉ‡เจ• เจตเจฟเจ…เจ•เจคเฉ€ เจœเฉ‹ เจ•เจฟเจธเฉ‡ เจจเจพ เจ•เจฟเจธเฉ‡ เจคเจฐเฉ€เจ•เฉ‡ เจจเจพเจฒ เจเจชเจฒ เจกเจฟเจตเจพเจˆเจธเจฟเจธ เจฒเจˆ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจฆเฉ‡ เจตเจฟเจ•เจพเจธ เจตเจฟเฉฑเจš เจธเจผเจพเจฎเจฒ เจนเฉˆ, เจจเฉ‡ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจขเจพเจ‚เจšเฉ‡ เจฆเฉ€ เจตเจฟเจตเจพเจฆเจชเฉ‚เจฐเจจ เจธเจนเฉ‚เจฒเจค เจฆเฉ€ เจธเจผเจฒเจพเจ˜เจพ เจ•เฉ€เจคเฉ€ เจนเฉˆ. เจฎเฉเจธเจผเจ•เจฒเจพเจ‚ เจนเจฐ เจฅเจพเจ‚ เจฎเจฟเจฒเจฆเฉ€เจ†เจ‚ เจนเจจ: เจกเจฟเจตเฉˆเจฒเจชเจฐ เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจฎเฉ€เจจเฉ‚ เจคเฉ‹เจ‚ เจกเฉ€เจฌเฉฑเจ— เจ…เจคเฉ‡ เจฌเจฟเจฒเจก เจŸเฉ‚เจฒเจธ เจคเฉฑเจ•เฅค

เจ‡เฉฐเจŸเจฐเจจเฉˆเฉฑเจŸ 'เจคเฉ‡ "เจฌเฉเจจเจฟเจ†เจฆเฉ€" เจฌเจพเจฐเฉ‡ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจฒเฉ‡เจ– เจนเจจ, เจ‡เจธ เจฒเจˆ เจ…เจธเฉ€เจ‚ เจฎเฉเฉฑเจ– เจ—เฉฑเจฒ เจจเฉ‚เฉฐ เจ‰เจœเจพเจ—เจฐ เจ•เจฐเจจ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเจพเจ‚เจ—เฉ‡. เจ†เจชเจฃเฉ€ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจจเฉ‚เฉฐ เจธเจซเจฒเจคเจพเจชเฉ‚เจฐเจตเจ• เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจฅเฉ‡ เจ•เฉ€ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ:

  • เจกเจฟเจตเฉˆเจฒเจชเจฐ เจ–เจพเจคเจพ;
  • เจ‡เฉฑเจ• macOS-เจ…เจงเจพเจฐเจฟเจค เจกเจฟเจตเจพเจˆเจธ เจ‡เฉฑเจ• เจฌเจฟเจฒเจก เจธเจฐเจตเจฐ เจตเจœเฉ‹เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเฉ€ เจนเฉˆ;
  • เจชเฉˆเจฆเจพ เจ•เฉ€เจคเจพ เจกเจฟเจตเฉˆเจฒเจชเจฐ เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸ, เจœเฉ‹ เจ•เจฟ เจ…เฉฑเจ—เฉ‡ เจ…เจฐเจœเจผเฉ€ 'เจคเฉ‡ เจฆเจธเจคเจ–เจค เจ•เจฐเจจ เจฒเจˆ เจตเจฐเจคเจฟเจ† เจœเจพเจตเฉ‡เจ—เจพ;
  • เจตเจฟเจฒเฉฑเจ–เจฃ เจจเจพเจฒ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฌเจฃเจพเจˆ ID (เจฌเฉฐเจกเจฒ เจ†เจˆเจกเฉˆเจ‚เจŸเฉ€เจซเจพเจ‡เจฐ เจฆเฉ€ เจฎเจนเฉฑเจคเจคเจพ เจจเฉ‚เฉฐ เจจเฉ‹เจŸ เจ•เฉ€เจคเจพ เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจตเจพเจˆเจฒเจกเจ•เจพเจฐเจก เจ†เจˆเจกเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฆเฉ‡ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจซเฉฐเจ•เจธเจผเจจเจพเจ‚ เจจเฉ‚เฉฐ เจตเจฐเจคเจฃเจพ เจ…เจธเฉฐเจญเจต เจฌเจฃเจพเจ‰เจ‚เจฆเฉ€ เจนเฉˆ, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ: เจเจธเฉ‹เจธเฉ€เจเจŸเจฟเจก เจกเฉ‹เจฎเฉ‡เจจ, เจชเฉเจธเจผ เจธเฉ‚เจšเจจเจพเจตเจพเจ‚, เจเจชเจฒ เจธเจพเจˆเจจ เจ‡เจจ เจ…เจคเฉ‡ เจนเฉ‹เจฐ);
  • เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจ…เจฐเจœเจผเฉ€ เจฆเฉ‡ เจฆเจธเจคเจ–เจค.

เจ‡เฉฑเจ• เจกเจฟเจตเฉˆเจฒเจชเจฐ เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸ เจ•เจฟเจธเฉ‡ เจตเฉ€ macOS เจกเจฟเจตเจพเจˆเจธ 'เจคเฉ‡ เจ•เฉ€เจšเฉ‡เจจ เจฆเฉเจ†เจฐเจพ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเจพ เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸ เจฆเฉ€ เจ•เจฟเจธเจฎ เจฌเจนเฉเจค เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจนเฉˆ. เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจตเจพเจคเจพเจตเจฐเจจ (เจฆเฉ‡เจต, QA, เจธเจŸเฉ‡เจœเจฟเฉฐเจ—, เจ‰เจคเจชเจพเจฆเจจ) 'เจคเฉ‡ เจจเจฟเจฐเจญเจฐ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจ‡เจน เจตเฉฑเจ–เจฐเจพ เจนเฉ‹เจตเฉ‡เจ—เจพ (เจตเจฟเจ•เจพเจธ เจœเจพเจ‚ เจตเฉฐเจก), เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฆเจธเจคเจ–เจค เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจฆเฉ€ เจ•เจฟเจธเจฎ เจนเฉ‹เจตเฉ‡เจ—เฉ€เฅค

เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒเจพเจ‚ เจฆเฉ€เจ†เจ‚ เจฎเฉเฉฑเจ– เจ•เจฟเจธเจฎเจพเจ‚:

  • เจตเจฟเจ•เจพเจธ - เจตเจฟเจ•เจพเจธ เจŸเฉ€เจฎ เจฆเฉ€ เจ…เจฐเจœเจผเฉ€ 'เจคเฉ‡ เจฆเจธเจคเจ–เจค เจ•เจฐเจจ เจฒเจˆ, เจ‡เฉฑเจ• เจตเจฟเจ•เจพเจธ เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸ เจตเจฐเจคเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ (เจ•เจฟเจธเจฎ เจฆเจพ เจจเจพเจฎ เจ†เจˆเจซเฉ‹เจจ เจกเจฟเจตเฉˆเจฒเจชเจฐ: XXXXX);
  • เจเจกเจนเจพเจ• - QA เจตเจฟเจญเจพเจ— เจฆเฉเจ†เจฐเจพ เจ‡เฉฑเจ• เจŸเฉˆเจธเจŸ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจ…เจคเฉ‡ เจ…เฉฐเจฆเจฐเฉ‚เจจเฉ€ เจคเจธเจฆเฉ€เจ• 'เจคเฉ‡ เจนเจธเจคเจพเจ–เจฐ เจ•เจฐเจจ เจฒเจˆ, เจกเจฟเจตเฉˆเจฒเจชเจฐ เจฆเจพ เจกเจฟเจธเจŸเจฐเฉ€เจฌเจฟเจŠเจธเจผเจจ เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸ เจตเจฐเจคเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ (เจ•เจฟเจธเจฎ เจฆเจพ เจจเจพเจฎ เจ†เจˆเจซเฉ‹เจจ เจกเจฟเจธเจŸเจฐเฉ€เจฌเจฟเจŠเจธเจผเจจ: XXXXX);
  • เจเจช เจธเจŸเฉ‹เจฐ - เจŸเฉˆเจธเจŸเจซเจฒเจพเจˆเจŸ เจฐเจพเจนเฉ€เจ‚ เจฌเจพเจนเจฐเฉ€ เจŸเฉˆเจธเจŸเจฟเฉฐเจ— เจฒเจˆ เจฐเฉ€เจฒเฉ€เจœเจผ เจฌเจฟเจฒเจก เจ…เจคเฉ‡ เจเจช เจธเจŸเฉ‹เจฐ 'เจคเฉ‡ เจ…เฉฑเจชเจฒเฉ‹เจก เจ•เจฐเจจ เจฒเจˆ, เจกเจฟเจตเฉˆเจฒเจชเจฐ เจฆเจพ เจตเฉฐเจก เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸ เจตเจฐเจคเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค

เจกเจฟเจตเฉˆเจฒเจชเจฎเฉˆเจ‚เจŸ เจ…เจคเฉ‡ เจเจกเจนเจพเจ• เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจคเจฟเจ†เจฐ เจ•เจฐเจฆเฉ‡ เจธเจฎเฉ‡เจ‚, เจ‡เจน เจตเฉ€ เจฆเจฐเจธเจพเจ‡เจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจœเฉฐเจคเจฐ เจธเฉ‚เจšเฉ€, เจœเจฟเจธ 'เจคเฉ‡ เจคเฉเจธเฉ€เจ‚ เจ‡เฉฑเจ• เจฌเจฟเจฒเจก เจธเจฅเจพเจชเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจœเฉ‹ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‰เจชเจญเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจฒเจˆ เจชเจนเฉเฉฐเจš เจจเฉ‚เฉฐ เจนเฉ‹เจฐ เจธเฉ€เจฎเจค เจ•เจฐเจจ เจฆเฉ€ เจ†เจ—เจฟเจ† เจฆเจฟเฉฐเจฆเจพ เจนเฉˆเฅค เจเจช เจธเจŸเฉ‹เจฐ เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจกเจฟเจตเจพเจˆเจธเจพเจ‚ เจฆเฉ€ เจ•เฉ‹เจˆ เจธเฉ‚เจšเฉ€ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจฌเฉฐเจฆ เจฌเฉ€เจŸเจพ เจŸเฉˆเจธเจŸเจฟเฉฐเจ— เจฆเฉŒเจฐเจพเจจ เจเจ•เจธเฉˆเจธ เจ•เฉฐเจŸเจฐเฉ‹เจฒ เจŸเฉˆเจธเจŸเจซเจฒเจพเจˆเจŸ เจฆเฉเจ†เจฐเจพ เจนเฉˆเจ‚เจกเจฒ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจœเจฟเจธ เจฌเจพเจฐเฉ‡ เจฌเจพเจ…เจฆ เจตเจฟเฉฑเจš เจšเจฐเจšเจพ เจ•เฉ€เจคเฉ€ เจœเจพเจตเฉ‡เจ—เฉ€เฅค

เจธเจชเจธเจผเจŸเจคเจพ เจฒเจˆ, เจคเฉเจธเฉ€เจ‚ เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ€ เจธเจพเจฐเจฃเฉ€ เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจกเจฟเจตเฉˆเจฒเจชเจฐ เจฆเฉ‡ เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจจเฉ‚เฉฐ เจชเฉ‡เจธเจผ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค เจ‡เจธ เจจเจพเจฒ เจ‡เจน เจธเจฎเจเจฃเจพ เจ†เจธเจพเจจ เจนเฉ‹ เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจ•เจฟ เจ…เจธเฉˆเจ‚เจฌเจฒเฉ€ เจฒเจˆ เจธเจพเจจเฉ‚เฉฐ เจ•เจฟเจนเฉœเฉ‡ เจฎเจพเจชเจฆเฉฐเจกเจพเจ‚ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจ•เจฟเฉฑเจฅเฉ‹เจ‚ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจเจพ เจนเฉˆเฅค

iOS เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจจเฉ‚เฉฐ เจฌเจฃเจพเจ‰เจฃ เจ…เจคเฉ‡ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจจ เจฆเฉ€เจ†เจ‚ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚

เจ…เจธเฉˆเจ‚เจฌเจฒเฉ€

เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจ…เจคเฉ‡ เจตเจพเจคเจพเจตเจฐเจฃ เจฆเฉเจ†เจฐเจพ เจ…เจธเฉˆเจ‚เจฌเจฒเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจตเฉฑเจ– เจ•เจฐเจจเจพ เจ†เจธเจพเจจ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจจเจพเจฎเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ ${ProjectName}_${Instance}, เจญเจพเจต, เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฆเจพ เจจเจพเจฎ + เจ‰เจฆเจพเจนเจฐเจฃ (เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจตเจพเจคเจพเจตเจฐเจฃ 'เจคเฉ‡ เจจเจฟเจฐเจญเจฐ เจ•เจฐเจฆเจพ เจนเฉˆ: เจฆเฉ‡เจต, QA, GD, เจธเจŸเฉ‡เจœเจฟเฉฐเจ—, เจฒเจพเจˆเจต, เจ…เจคเฉ‡ เจนเฉ‹เจฐ)เฅค

เจœเจฆเฉ‹เจ‚ เจฌเจฟเจฒเจก เจธเจฐเจตเจฐ เจคเฉ‡ เจ†เจฏเจพเจค เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจคเจพเจ‚ เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจ†เจชเจฃเจพ เจจเจพเจฎ เจ‡เฉฑเจ• เจตเจฟเจฒเฉฑเจ–เจฃ ID เจตเจฟเฉฑเจš เจฌเจฆเจฒเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจซเฉ‹เจฒเจกเจฐ เจตเจฟเฉฑเจš เจญเฉ‡เจœเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ /Users/$Username/Library/MobileDevice/Provisioning Profiles (เจ•เจฟเฉฑเจฅเฉ‡ $Username เจฌเจฟเจฒเจก เจธเจฐเจตเจฐ เจฆเฉ‡ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจ–เจพเจคเฉ‡ เจฆเฉ‡ เจจเจพเจฎ เจจเจพเจฒ เจฎเฉ‡เจฒ เจ–เจพเจ‚เจฆเจพ เจนเฉˆ)เฅค

*.ipa เจซเจพเจˆเจฒ เจฌเจฃเจพเจ‰เจฃ เจฆเฉ‡ เจฆเฉ‹ เจคเจฐเฉ€เจ•เฉ‡ เจนเจจ - เจตเจฟเจฐเจพเจธเจค (เจชเฉˆเจ•เฉ‡เจœ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ) เจ…เจคเฉ‡ เจ†เจงเฉเจจเจฟเจ• (XcAchive เจฌเจฃเจพเจ‰เจฃ เจ…เจคเฉ‡ เจจเจฟเจฐเจฏเจพเจค เจฆเฉเจ†เจฐเจพ)เฅค เจชเจนเจฟเจฒเฉ€ เจตเจฟเจงเฉ€ เจจเฉ‚เฉฐ เจชเฉเจฐเจพเจฃเจพ เจฎเฉฐเจจเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจธเฉฐเจธเจ•เจฐเจฃ 8.3 เจคเฉ‹เจ‚ เจเจช เจซเจพเจˆเจฒ เจชเฉˆเจ•เฉ‡เจœเจฟเฉฐเจ— เจฎเฉ‹เจกเฉ€เจŠเจฒ เจจเฉ‚เฉฐ 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 โ€” เจกเจฟเจตเฉˆเจฒเจชเจฐ เจ–เจพเจคเฉ‡ เจฆเจพ เจจเจพเจฎ, เจœเจฟเจธ เจจเฉ‚เฉฐ เจ•เฉ€เจšเฉ‡เจจ เจตเจฟเฉฑเจš เจชเฉเจฐเจฎเจพเจฃเจฟเจค เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ (เจ†เจˆเจซเฉ‹เจจ เจกเจฟเจตเฉˆเจฒเจชเจฐ: XXXX XXXXXXX, เจฌเจฐเฉˆเจ•เจŸเจพเจ‚ เจตเจฟเฉฑเจš TeamID เจคเฉ‹เจ‚ เจฌเจฟเจจเจพเจ‚)เฅค

iOS เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจจเฉ‚เฉฐ เจฌเจฃเจพเจ‰เจฃ เจ…เจคเฉ‡ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจจ เจฆเฉ€เจ†เจ‚ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚

PROVISIONING_PROFILE - เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ 'เจคเฉ‡ เจฆเจธเจคเจ–เจค เจ•เจฐเจจ เจฒเจˆ เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจ†เจˆเจกเฉ€, เจœเฉ‹ เจ•เจฎเจพเจ‚เจก เจจเจพเจฒ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเฉ€ เจœเจพ เจธเจ•เจฆเฉ€ เจนเฉˆ:

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 - เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจ†เจˆเจกเฉ€, เจœเฉ‹ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจตเจฟเฉฑเจš เจฆเจฐเจธเจพเจˆ เจ—เจˆ เจนเฉˆเฅค เจคเฉเจธเฉ€เจ‚ เจ•เจฎเจพเจ‚เจก เจจเจพเจฒ เจœเจพเจ‚เจš เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹:

defaults read $ProjectDir/Info CFBundleIdentifier

$DevAccName ะธ $ProfileId โ€” เจกเจฟเจตเฉˆเจฒเจชเจฐ เจฆเจพ เจจเจพเจฎ เจ…เจคเฉ‡ เจฆเจธเจคเจ–เจค เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจ†เจˆเจกเฉ€ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจœเฉ‹ เจชเจนเจฟเจฒเจพเจ‚ เจตเจฐเจคเฉ€เจ†เจ‚ เจœเจพเจ‚เจฆเฉ€เจ†เจ‚ เจธเจจ เจ…เจคเฉ‡ เจจเจฟเจฐเจฏเจพเจค เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจตเจฟเฉฑเจš เจฎเฉเฉฑเจฒเจพเจ‚ เจจเจพเจฒ เจฎเฉ‡เจฒ เจ–เจพเจ‚เจฆเฉ€เจ†เจ‚ เจนเฉ‹เจฃเฉ€เจ†เจ‚ เจšเจพเจนเฉ€เจฆเฉ€เจ†เจ‚ เจนเจจเฅค

$TeamID โ€” เจกเจฟเจตเฉˆเจฒเจชเจฐ เจฆเฉ‡ เจจเจพเจฎ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจฌเจฐเฉˆเจ•เจŸเจพเจ‚ เจตเจฟเฉฑเจš เจฆเจธ-เจ…เฉฐเจ• เจฆเฉ€ ID, เจ‰เจฆเจพเจนเจฐเจจ: iPhone เจกเจฟเจตเฉˆเจฒเจชเจฐ: โ€ฆโ€ฆ (XXXXXXXXXX); เจ•เฉ€เจšเฉ‡เจจ เจตเจฟเฉฑเจš เจšเฉˆเฉฑเจ• เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค

เจ…เฉฑเจ—เฉ‡, เจจเจฟเจฐเจฏเจพเจค เจ•เจฎเจพเจ‚เจก เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡, เจ…เจธเฉ€เจ‚ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ€ *.ipa เจซเจพเจˆเจฒ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚:

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

เจธเจผเจฟเฉฑเจชเจฟเฉฐเจ— เจœเจพเจฃเจ•เจพเจฐเฉ€

เจนเฉเจฃ เจ‡เจ•เฉฑเจ เฉ€ เจ•เฉ€เจคเฉ€ เจ—เจˆ เจซเจพเจˆเจฒ เจจเฉ‚เฉฐ เจ…เฉฐเจคเจฎ เจ‰เจชเจญเฉ‹เจ—เจคเจพ, เจฏเจพเจจเฉ€ เจกเจฟเจตเจพเจˆเจธ 'เจคเฉ‡ เจธเจฅเจพเจชเจค เจ•เจฐเจจ เจฒเจˆ เจกเจฟเจฒเฉ€เจตเจฐ เจ•เจฐเจจ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจนเฉˆ.

เจตเจฟเจ•เจพเจธ เจ…เจคเฉ‡ เจเจกเจนเจพเจ• เจฌเจฟเจฒเจกเจพเจ‚ เจจเฉ‚เฉฐ เจตเฉฐเจกเจฃ เจฒเจˆ เจฌเจนเฉเจค เจธเจพเจฐเฉ€เจ†เจ‚ เจธเฉ‡เจตเจพเจตเจพเจ‚ เจนเจจ, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ HockeyApp, AppBlade เจ…เจคเฉ‡ เจนเฉ‹เจฐ, เจชเจฐ เจ‡เจธ เจฒเฉ‡เจ– เจตเจฟเฉฑเจš เจ…เจธเฉ€เจ‚ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจจเฉ‚เฉฐ เจตเฉฐเจกเจฃ เจฒเจˆ เจ‡เฉฑเจ• เจธเจŸเฉˆเจ‚เจกเจ…เจฒเฉ‹เจจ เจธเจฐเจตเจฐ เจฌเจพเจฐเฉ‡ เจ—เฉฑเจฒ เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค

เจ†เจˆเจ“เจเจธ เจฒเจˆ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจจเจพ 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 เจ•เฉเฉฐเจœเฉ€เจ†เจ‚ เจฆเฉ€ เจฎเฉŒเจœเฉ‚เจฆเจ—เฉ€ เจนเจจเฅค

เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจจเฉ‚เฉฐ เจกเจพเจŠเจจเจฒเฉ‹เจก เจ•เจฐเจจ เจฆเฉ‡ เจ•เจˆ เจคเจฐเฉ€เจ•เฉ‡ เจนเจจ:

  • เจเจ•เจธเจ•เฉ‹เจก (เจ†เจฐเจ—เฉ‡เจจเจพเจˆเจœเจผเจฐ) เจฐเจพเจนเฉ€เจ‚,
  • altool เจฆเฉเจ†เจฐเจพ,
  • Xcode (เจนเฉเจฃ เจŸเฉเจฐเจพเจ‚เจธเจชเฉ‹เจฐเจŸเจฐ) เจฆเฉ‡ เจชเฉเจฐเจพเจฃเฉ‡ เจธเฉฐเจธเจ•เจฐเจฃเจพเจ‚ เจฒเจˆ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฒเฉ‹เจกเจฐ เจฐเจพเจนเฉ€เจ‚เฅค

เจ†เจŸเฉ‹เจฎเฉˆเจŸเจฟเจ• เจกเจพเจ‰เจจเจฒเฉ‹เจก เจ•เจฐเจจ เจฒเจˆ, เจ…เจฒเจŸเฉ‚เจฒ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ, เจœเจฟเจธ เจตเจฟเฉฑเจš เจฆเฉ‹ เจชเฉเจฐเจฎเจพเจฃเฉ€เจ•เจฐเจจ เจตเจฟเจงเฉ€เจ†เจ‚ เจตเฉ€ เจนเจจ:

  • เจเจช-เจตเจฟเจธเจผเฉ‡เจธเจผ เจชเจพเจธเจตเจฐเจก,
  • API เจ•เฉเฉฐเจœเฉ€เฅค

API เจ•เฉเฉฐเจœเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจจเฉ‚เฉฐ เจกเจพเจŠเจจเจฒเฉ‹เจก เจ•เจฐเจจเจพ เจฌเจฟเจนเจคเจฐ เจนเฉˆเฅค

API เจ•เฉเฉฐเจœเฉ€ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฒเจˆ, 'เจคเฉ‡ เจœเจพเจ“ เจฒเจฟเฉฐเจ• เจจเฉ‚เฉฐ เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจ•เฉเฉฐเจœเฉ€ เจคเจฟเจ†เจฐ เจ•เจฐเฉ‹เฅค *.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 เจ‡เฉฑเจ•เฉ‹ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ เจฆเฉ‡ เจจเจพเจฒ.

เจเจชเจฒ เจฆเฉเจ†เจฐเจพ เจ‡เฉฑเจ• เจœเจพเจ‚ เจฆเฉ‹ เจฆเจฟเจจเจพเจ‚ เจตเจฟเฉฑเจš เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เฉ€เจคเฉ€ เจœเจพเจตเฉ‡เจ—เฉ€ เจ…เจคเฉ‡ เจซเจฟเจฐ เจฌเจพเจนเจฐเฉ€ เจŸเฉˆเจธเจŸเจฐเจพเจ‚ เจฒเจˆ เจ‰เจชเจฒเจฌเจง เจนเฉ‹ เจœเจพเจตเฉ‡เจ—เฉ€: เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เฉฐเจธเจŸเจพเจฒเฉ‡เจธเจผเจจ เจฒเจˆ เจฒเจฟเฉฐเจ• เจˆเจฎเฉ‡เจฒ เจ•เฉ€เจคเฉ‡ เจœเจพเจฃเจ—เฉ‡เฅค

altool เจฆเฉเจ†เจฐเจพ เจ‡เฉฑเจ• เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจจเฉ‚เฉฐ เจกเจพเจŠเจจเจฒเฉ‹เจก เจ•เจฐเจจ เจฆเจพ เจ‡เฉฑเจ• เจนเฉ‹เจฐ เจคเจฐเฉ€เจ•เจพ เจนเฉˆ เจเจช-เจตเจฟเจธเจผเฉ‡เจธเจผ เจชเจพเจธเจตเจฐเจก เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเจพเฅค

เจเจช-เจตเจฟเจธเจผเฉ‡เจธเจผ เจชเจพเจธเจตเจฐเจก เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฒเจˆ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เจธ 'เจคเฉ‡ เจœเจพเจฃเจพ เจชเจตเฉ‡เจ—เจพ เจฒเจฟเฉฐเจ• เจจเฉ‚เฉฐ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจธเฉเจฐเฉฑเจ–เจฟเจ† เจธเฉˆเจ•เจธเจผเจจ เจตเจฟเฉฑเจš เจคเจฟเจ†เจฐ เจ•เจฐเฉ‹เฅค

iOS เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจจเฉ‚เฉฐ เจฌเจฃเจพเจ‰เจฃ เจ…เจคเฉ‡ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจจ เจฆเฉ€เจ†เจ‚ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚

เจ…เฉฑเจ—เฉ‡, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เจธ เจชเจพเจธเจตเจฐเจก เจจเจพเจฒ เจ•เฉ€เจšเฉ‡เจจ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฌเจฟเจฒเจก เจธเจฐเจตเจฐ เจฐเจฟเจ•เจพเจฐเจก เจฌเจฃเจพเจ‰เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค Xcode เจฆเฉ‡ เจธเฉฐเจธเจ•เจฐเจฃ 11 เจคเฉ‹เจ‚ เจ‡เจน เจ•เจฎเจพเจ‚เจก เจจเจพเจฒ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ:

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

เจ•เจฟเฉฑเจฅเฉ‡:

$DeveloperName โ€” เจเจชเจฒ เจธเฉ‡เจตเจพเจตเจพเจ‚ เจตเจฟเฉฑเจš เจฒเฉŒเจ—เจ‡เจจ เจ•เจฐเจจ เจฒเจˆ เจตเจฐเจคเฉ‡ เจœเจพเจฃ เจตเจพเจฒเฉ‡ iOS เจกเจฟเจตเฉˆเจฒเจชเจฐ เจ–เจพเจคเฉ‡ เจฆเจพ เจจเจพเจฎเฅค

$AppPswd - เจเจช-เจตเจฟเจธเจผเฉ‡เจธเจผ เจชเจพเจธเจตเจฐเจก เจคเจฟเจ†เจฐ เจ•เฉ€เจคเจพเฅค

เจ…เฉฑเจ—เฉ‡, เจ…เจธเฉ€เจ‚ asc-provider เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ เจฆเจพ เจฎเฉเฉฑเจฒ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจ•เจฎเจพเจ‚เจก เจจเจพเจฒ เจชเจพเจธเจตเจฐเจก เจ†เจฏเจพเจค เจฆเฉ€ เจธเจซเจฒเจคเจพ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚:

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 เจ•เฉเฉฐเจœเฉ€ เจฆเฉ€ เจšเฉ‹เจฃ เจ•เจฐเจจเจพ เจฌเจฟเจนเจคเจฐ เจนเฉˆ, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจเจ•เจธเจ•เฉ‹เจก เจฆเฉ‡ เจตเฉฑเจ–-เจตเฉฑเจ– เจธเฉฐเจธเจ•เจฐเจฃเจพเจ‚ เจตเจฟเฉฑเจš เจ•เฉเจ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจนเจจ (เจ•เฉ€เจšเฉ‡เจจ, เจ…เจชเจฒเฉ‹เจก เจฆเฉŒเจฐเจพเจจ เจชเฉเจฐเจฎเจพเจฃเจฟเจ•เจคเจพ เจ—เจฒเจคเฉ€เจ†เจ‚, เจ†เจฆเจฟ)เฅค

เจ‡เจน เจธเจญ เจนเฉˆ, เจ…เจธเจฒ เจตเจฟเฉฑเจš. เจฎเฉ‡เจฐเฉ€ เจ•เจพเจฎเจจเจพ เจนเฉˆ เจ•เจฟ เจเจช เจธเจŸเฉ‹เจฐ เจตเจฟเฉฑเจš เจธเจซเจฒ เจฌเจฟเจฒเจก เจ…เจคเฉ‡ เจธเจฎเฉฑเจธเจฟเจ†-เจฎเฉเจ•เจค เจฐเฉ€เจฒเฉ€เจœเจผ เจธเจผเจพเจฎเจฒ เจนเฉ‹เจฃเฅค

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹