iOS เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดฎเตเดณเตเดณ เดธเดตเดฟเดถเต‡เดทเดคเด•เตพ

เดˆ เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ, CI/CD เดกเต€เดฌเด—เตเด—เดฟเด‚เด—เต เดชเตเดฐเด•เตเดฐเดฟเดฏเดฏเดฟเตฝ เดชเตเดฒเดพเดฐเดฟเดฏเด‚ เด•เตเดฐเดพเดธเตเดจเต‹เดกเตผ เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ เดถเต‡เด–เดฐเดฟเดšเตเดš iOS เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เด•เต‚เดŸเตเดŸเดฟเดšเตเดšเต‡เตผเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เตพเด•เตเด•เต เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดฎเตเดณเตเดณ เด…เดจเตเดญเดตเด‚ เดžเด™เตเด™เตพ เดชเด™เตเด•เดฟเดŸเตเดจเตเดจเต.

iOS เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดฎเตเดณเตเดณ เดธเดตเดฟเดถเต‡เดทเดคเด•เตพ

เดคเดฏเตเดฏเดพเดฑเดพเด•เตเด•เตฝ

เด†เดชเตเดชเดฟเตพ เด‰เดชเด•เดฐเดฃเด™เตเด™เตพเด•เตเด•เดพเดฏเตเดณเตเดณ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เดณเตเดŸเต† เดตเดฟเด•เดธเดจเดคเตเดคเดฟเตฝ เด’เดฐเต เดคเดฐเดคเตเดคเดฟเตฝ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฎเดฑเตเดฑเตŠเดจเตเดจเดฟเตฝ เดเตผเดชเตเดชเต†เดŸเตเดŸเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เด“เดฐเต‹ เดตเตเดฏเด•เตเดคเดฟเดฏเตเด‚ เด‡เตปเดซเตเดฐเดพเดธเตเดŸเตเดฐเด•เตเดšเดฑเดฟเดจเตเดฑเต† เดตเดฟเดตเดพเดฆเดชเดฐเดฎเดพเดฏ เดธเต—เด•เดฐเตเดฏเดคเตเดคเต† เด‡เดคเดฟเดจเด•เด‚ เดตเดฟเดฒเดฎเดคเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต. เดŽเดฒเตเดฒเดพเดฏเดฟเดŸเดคเตเดคเตเด‚ เดฌเตเดฆเตเดงเดฟเดฎเตเดŸเตเดŸเตเด•เตพ เด•เดพเดฃเดชเตเดชเต†เดŸเตเดจเตเดจเต: เดกเต†เดตเดฒเดชเตเดชเตผ เดชเตเดฐเตŠเดซเตˆเตฝ เดฎเต†เดจเต เดฎเตเดคเตฝ เดกเต€เดฌเด—เต, เดฌเดฟเตฝเดกเต เดŸเต‚เดณเตเด•เตพ เดตเดฐเต†.

เด‡เตปเดฑเตผเดจเต†เดฑเตเดฑเดฟเตฝ "เด…เดŸเดฟเดธเตเดฅเดพเดจเด™เตเด™เดณเต†" เด•เตเดฑเดฟเดšเตเดšเต เดงเดพเดฐเดพเดณเด‚ เดฒเต‡เด–เดจเด™เตเด™เตพ เด‰เดฃเตเดŸเต, เด…เดคเดฟเดจเดพเตฝ เดžเด™เตเด™เตพ เดชเตเดฐเดงเดพเดจ เด•เดพเดฐเตเดฏเด‚ เดนเตˆเดฒเตˆเดฑเตเดฑเต เดšเต†เดฏเตเดฏเดพเตป เดถเตเดฐเดฎเดฟเด•เตเด•เตเด‚. เดจเดฟเด™เตเด™เดณเตเดŸเต† เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดตเดฟเดœเดฏเด•เดฐเดฎเดพเดฏเดฟ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด†เดตเดถเตเดฏเดฎเตเดณเตเดณเดคเต เด‡เดคเดพ:

  • เดกเต†เดตเดฒเดชเตเดชเตผ เด…เด•เตเด•เต—เดฃเตเดŸเต;
  • เด’เดฐเต เดฌเดฟเตฝเดกเต เดธเต†เตผเดตเดฑเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต macOS เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟเดฏเตเดณเตเดณ เด‰เดชเด•เดฐเดฃเด‚;
  • เดธเตƒเดทเตเดŸเดฟเดšเตเดšเดคเต เดกเต†เดตเดฒเดชเตเดชเตผ เดธเตผเดŸเตเดŸเดฟเดซเดฟเด•เตเด•เดฑเตเดฑเต, เด…เดคเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเดฟเตฝ เด’เดชเตเดชเดฟเดŸเดพเตป เด•เต‚เดŸเตเดคเตฝ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚;
  • เด…เดคเตเดฒเตเดฏเดฎเดพเดฏ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดธเตƒเดทเตเดŸเดฟเดšเตเดšเต ID (เดฌเดฃเตเดŸเดฟเตฝ เดเดกเดจเตเดฑเดฟเดซเดฏเดฑเดฟเดจเตเดฑเต† เดชเตเดฐเดพเดงเดพเดจเตเดฏเด‚ เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเดพเดฃเต, เด•เดพเดฐเดฃเด‚ เดตเตˆเตฝเดกเตเด•เดพเตผเดกเต เดเดกเดฟเดฏเตเดŸเต† เด‰เดชเดฏเต‹เด—เด‚ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเดฑเต† เดชเดฒ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเต เด…เดธเดพเดงเตเดฏเดฎเดพเด•เตเด•เตเดจเตเดจเต, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต: เด…เดจเตเดฌเดจเตเดง เดกเตŠเดฎเต†เดฏเตโ€Œเดจเตเด•เตพ, เดชเตเดทเต เด…เดฑเดฟเดฏเดฟเดชเตเดชเตเด•เตพ, เด†เดชเตเดชเดฟเตพ เดธเตˆเตป เด‡เตป เดŽเดจเตเดจเดฟเดตเดฏเตเด‚ เดฎเดฑเตเดฑเตเดณเตเดณเดตเดฏเตเด‚);
  • เดชเตเดฐเตŠเดซเตˆเตฝ เด…เดชเต‡เด•เตเดท เด’เดชเตเดชเตเด•เตพ.

เดเดคเต†เด™เตเด•เดฟเดฒเตเด‚ macOS เด‰เดชเด•เดฐเดฃเดคเตเดคเดฟเตฝ เด•เต€เดšเต†เดฏเดฟเตป เดตเดดเดฟ เด’เดฐเต เดกเต†เดตเดฒเดชเตเดชเตผ เดธเตผเดŸเตเดŸเดฟเดซเดฟเด•เตเด•เดฑเตเดฑเต เดœเดจเดฑเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเดฃเด‚. เดธเตผเดŸเตเดŸเดฟเดซเดฟเด•เตเด•เดฑเตเดฑเดฟเดจเตเดฑเต† เดคเดฐเด‚ เดตเดณเดฐเต† เดชเตเดฐเดงเดพเดจเดฎเดพเดฃเต. เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดŽเตปเดตเดฏเต‹เตบเดฎเต†เดจเตเดฑเต เด…เดจเตเดธเดฐเดฟเดšเตเดšเต (เดกเต†เดตเดฒเดชเตเดชเตเดฎเต†เดจเตเดฑเต, เด•เตเดฏเตเดŽ, เดธเตเดฑเตเดฑเต‡เดœเดฟเด‚เด—เต, เดชเตเดฐเตŠเดกเด•เตเดทเตป) เด…เดคเต เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚ (เดตเดฟเด•เดธเดจเด‚ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดตเดฟเดคเดฐเดฃเด‚), เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดธเดฟเด—เตเดจเต‡เดšเตเดšเตผ เดชเตเดฐเตŠเดซเตˆเดฒเดฟเดจเตเดฑเต† เดคเดฐเด‚ เดชเต‹เดฒเต†.

เดชเตเดฐเตŠเดซเตˆเดฒเตเด•เดณเตเดŸเต† เดชเตเดฐเดงเดพเดจ เดคเดฐเด™เตเด™เตพ:

  • เดตเดฟเด•เดธเดจเด‚ - เดกเต†เดตเดฒเดชเตโ€Œเดฎเต†เดจเตเดฑเต เดŸเต€เดฎเดฟเดจเตเดฑเต† เด…เดชเต‡เด•เตเดทเดฏเดฟเตฝ เด’เดชเตเดชเดฟเดŸเดพเตป เด‰เดฆเตเดฆเต‡เดถเดฟเดšเตเดšเตเดณเตเดณเดคเดพเดฃเต, เด’เดฐเต เดกเต†เดตเดฒเดชเตโ€Œเดฎเต†เดจเตเดฑเต เดธเตผเดŸเตเดŸเดฟเดซเดฟเด•เตเด•เดฑเตเดฑเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต (เดเดซเต‹เตบ เดกเต†เดตเดฒเดชเตเดชเดฑเดฟเดจเตเดฑเต† เดคเดฐเด‚ เดชเต‡เดฐเต: XXXX);
  • เด…เดกเตโ€Œเดนเต‹เด•เตเด•เต - QA เดกเดฟเดชเตเดชเดพเตผเดŸเตเดŸเตโ€Œเดฎเต†เดจเตเดฑเต เด’เดฐเต เดŸเต†เดธเตเดฑเตเดฑเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด‚ เด‡เดจเตเดฑเต‡เดฃเตฝ เดตเต†เดฐเดฟเดซเดฟเด•เตเด•เต‡เดทเดจเตเด‚ เด’เดชเตเดชเดฟเดŸเดพเตป เด‰เดฆเตเดฆเต‡เดถเดฟเดšเตเดšเตเดณเตเดณเดคเดพเดฃเต, เดกเต†เดตเดฒเดชเตเดชเดฑเตเดŸเต† เดตเดฟเดคเดฐเดฃ เดธเตผเดŸเตเดŸเดฟเดซเดฟเด•เตเด•เดฑเตเดฑเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต (เดคเดฐเด‚ เดชเต‡เดฐเต iPhone Distribution: XXXX);
  • เด†เดชเตเดชเต เดธเตเดฑเตเดฑเต‹เตผ - เดŸเต†เดธเตโ€Œเดฑเตเดฑเตโ€Œเดซเตเดฒเตˆเดฑเตเดฑเต เดตเดดเดฟเดฏเตเดณเตเดณ เดฌเดพเดนเตเดฏ เดชเดฐเดฟเดถเต‹เดงเดจเดฏเตโ€Œเด•เตเด•เดพเดฏเดฟ เดฌเดฟเตฝเดกเต เดฑเดฟเดฒเต€เดธเต เดšเต†เดฏเตโ€Œเดคเต เด†เดชเตเดชเต เดธเตเดฑเตเดฑเต‹เดฑเดฟเดฒเต‡เด•เตเด•เต เด…เดชเตโ€Œเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต, เดกเต†เดตเดฒเดชเตเดชเดฑเตเดŸเต† เดตเดฟเดคเดฐเดฃ เดธเตผเดŸเตเดŸเดฟเดซเดฟเด•เตเด•เดฑเตเดฑเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต.

เดกเต†เดตเดฒเดชเตโ€Œเดฎเต†เดจเตเดฑเต, เด…เดกเตโ€Œเดนเต‹เด•เตเด•เต เดชเตเดฐเตŠเดซเตˆเดฒเตเด•เตพ เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เด…เดคเตเด‚ เดธเต‚เดšเดฟเดชเตเดชเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต เด‰เดชเด•เดฐเดฃ เดฒเดฟเดธเตเดฑเตเดฑเต, เด…เดคเดฟเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดฌเดฟเตฝเดกเต เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเด‚, เด‡เดคเต เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เตพเด•เตเด•เตเดณเตเดณ เด†เด•เตเดธเดธเต เด•เต‚เดŸเตเดคเตฝ เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต. เด†เดชเตเดชเต เดธเตเดฑเตเดฑเต‹เตผ เดชเตเดฐเตŠเดซเตˆเดฒเดฟเตฝ เด‰เดชเด•เดฐเดฃเด™เตเด™เดณเตเดŸเต† เดฒเดฟเดธเตเดฑเตเดฑเต เด’เดจเตเดจเตเดฎเดฟเดฒเตเดฒ, เด•เดพเดฐเดฃเด‚ เด…เดŸเดšเตเดš เดฌเต€เดฑเตเดฑ เดŸเต†เดธเตเดฑเตเดฑเดฟเด‚เด—เต เดธเดฎเดฏเดคเตเดคเต เด†เด•เตโ€Œเดธเดธเตเดธเต เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเด‚ เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต TestFlight เด†เดฃเต, เด…เดคเต เดชเดฟเดจเตเดจเต€เดŸเต เดšเตผเดšเตเดš เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเตเด‚.

เดตเตเดฏเด•เตเดคเดคเดฏเตเด•เตเด•เดพเดฏเดฟ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดกเต†เดตเดฒเดชเตเดชเดฑเตเดŸเต† เดชเตเดฐเตŠเดซเตˆเตฝ เดšเตเดตเดŸเต†เดฏเตเดณเตเดณ เดชเดŸเตเดŸเดฟเด•เดฏเตเดŸเต† เดฐเต‚เดชเดคเตเดคเดฟเตฝ เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเด•เตเด•เดพเดจเดพเด•เตเด‚. เด…เดธเด‚เดฌเตเดฒเดฟเด•เตเด•เต เด†เดตเดถเตเดฏเดฎเดพเดฏ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เดŽเดจเตเดคเตŠเด•เตเด•เต†เดฏเดพเดฃเต†เดจเตเดจเตเด‚ เด…เดต เดŽเดตเดฟเดŸเต† เดจเดฟเดจเตเดจเต เดฒเดญเดฟเด•เตเด•เตเดฎเต†เดจเตเดจเตเด‚ เดฎเดจเดธเดฟเดฒเดพเด•เตเด•เดพเตป เด‡เดคเต เดŽเดณเตเดชเตเดชเดฎเดพเด•เตเด•เตเดจเตเดจเต.

iOS เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดฎเตเดณเตเดณ เดธเดตเดฟเดถเต‡เดทเดคเด•เตพ

เดจเดฟเดฏเดฎเดธเดญ

เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเตเด‚ เดชเดฐเดฟเดธเตเดฅเดฟเดคเดฟเดฏเตเด‚ เด…เดจเตเดธเดฐเดฟเดšเตเดšเต เด…เดธเด‚เดฌเตเดฒเดฟเด•เตพ เดตเต‡เตผเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต เดŽเดณเตเดชเตเดชเดฎเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดžเด™เตเด™เตพ เดชเตเดฐเตŠเดซเตˆเตฝ เดชเต‡เดฐเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต ${ProjectName}_${Instance}, เด…เดคเดพเดฏเดคเต, เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดจเดพเดฎเด‚ + เด‰เดฆเดพเดนเดฐเดฃเด‚ (เด…เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟเดฏเต† เด†เดถเตเดฐเดฏเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต: Dev, QA, GD, Staging, Live, เดคเตเดŸเด™เตเด™เดฟเดฏเดต).

เดฌเดฟเตฝเดกเต เดธเต†เตผเดตเดฑเดฟเดฒเต‡เด•เตเด•เต เด‡เดฎเตเดชเต‹เตผเดŸเตเดŸเตเดšเต†เดฏเตเดฏเตเดฎเตเดชเต‹เตพ, เดชเตเดฐเตŠเดซเตˆเตฝ เด…เดคเดฟเดจเตเดฑเต† เดชเต‡เดฐเต เด’เดฐเต เด…เดฆเตเดตเดฟเดคเต€เดฏ เดเดกเดฟเดฏเดฟเดฒเต‡เด•เตเด•เต เดฎเดพเดฑเตเดฑเตเด•เดฏเตเด‚ เดซเต‹เตพเดกเดฑเดฟเดฒเต‡เด•เตเด•เต เดจเต€เด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต /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 - เด•เต€เดšเต†เดฏเดฟเดจเดฟเตฝ เดธเตเดฅเดฟเดฐเต€เด•เดฐเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเดจเตเดจ เดกเต†เดตเดฒเดชเตเดชเตผ เด…เด•เตเด•เต—เดฃเตเดŸเดฟเดจเตเดฑเต† เดชเต‡เดฐเต (เดเดซเต‹เตบ เดกเต†เดตเดฒเดชเตเดชเตผ: 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 โ€” เดกเต†เดตเดฒเดชเตเดชเดฑเตเดŸเต† เดชเต‡เดฐเดฟเดจเต เดถเต‡เดทเด‚ เดฌเตเดฐเดพเด•เตเด•เดฑเตเดฑเดฟเดฒเตเดณเตเดณ เดชเดคเตเดคเด•เตเด• เดเดกเดฟ, เด‰เดฆเดพเดนเดฐเดฃเด‚: 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

เดตเดฟเด•เดธเดจ, เดŸเต†เดธเตเดฑเตเดฑเดฟเด‚เด—เต เดตเด•เตเดชเตเดชเตเด•เดณเตเดŸเต† เด†เดตเดถเตเดฏเด™เตเด™เตพเด•เตเด•เดพเดฏเดฟ, เดชเตเดฒเดพเดฐเดฟเดฏเด‚ เด…เดคเดฟเดจเตเดฑเต‡เดคเดพเดฏ เดฌเดฟเตฝเดกเต เด‡เตปเดธเตเดฑเตเดฑเดพเดณเต‡เดทเตป เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดธเตƒเดทเตเดŸเดฟเดšเตเดšเต, เด…เดคเต เดžเด™เตเด™เตพเด•เตเด•เต เดจเตฝเด•เตเดจเตเดจเต:

  • เดธเตเดตเดฏเด‚เดญเดฐเดฃเดตเตเด‚ เดธเตเดตเดพเดคเดจเตเดคเตเดฐเตเดฏเดตเตเด‚,
  • "เดคเดพเตฝเด•เตเด•เดพเดฒเดฟเด•" เดšเดฒเดจเดพเดคเตเดฎเด•เดฎเดพเดฏเดฟ เดธเตƒเดทเตเดŸเดฟเดšเตเดš เดฒเดฟเด™เตเด•เตเด•เดณเดฟเดฒเต‚เดŸเต† เด†เด•เตเดธเดธเต เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเดคเตเดคเดฟเดจเตเดฑเต† เด•เต‡เดจเตเดฆเตเดฐเต€เด•เดฐเดฃเดตเตเด‚ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เดณเตเดŸเต† เดธเตเดฐเด•เตเดทเดฟเดคเดฎเดพเดฏ เด‡เตปเดธเตเดฑเตเดฑเดพเดณเต‡เดทเดจเตเด‚,
  • เดตเดฟเดชเตเดฒเต€เด•เดฐเดฟเด•เตเด•เดพเดตเตเดจเตเดจ เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดค (เด…เดคเดพเดฏเดคเต, เดตเดฟเด•เดธเดจ เดŸเต€เดฎเดฟเดจเต, เด†เดตเดถเตเดฏเดฎเต†เด™เตเด•เดฟเตฝ, เดจเดฟเดฒเดตเดฟเดฒเตเดณเตเดณ เด’เดฐเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเดฟเดฒเต‡เด•เตเด•เต เดจเดทเตโ€ŒเดŸเดฎเดพเดฏ เดซเด‚เด—เตโ€Œเดทเดจเตเด•เตพ เดธเด‚เดฏเต‹เดœเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚).

เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต

เด‡เดชเตเดชเต‹เตพ เดจเดฎเตเดฎเตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเดฑเต† เดชเตเดฐเต€-เดฑเดฟเดฒเต€เดธเต เดŸเต†เดธเตเดฑเตเดฑเดฟเด‚เด—เดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเด‚ เดŸเต†เดธเตเดฑเตเดฑเตเดซเตเดฒเตˆเดฑเตเดฑเต.

เด†เดชเตเดชเต เดธเตเดฑเตเดฑเต‹เตผ เดธเดฟเด—เตเดจเต‡เดšเตเดšเตผ เดชเตเดฐเตŠเดซเตˆเดฒเดฟเดจเตเดฑเต† เดคเดฐเดตเตเด‚ เดœเดจเดฑเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดค API เด•เต€เด•เดณเตเดŸเต† เดธเดพเดจเตเดจเดฟเดงเตเดฏเดตเตเดฎเดพเดฃเต เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต เด†เดตเดถเตเดฏเดฎเดพเดฏ เดตเตเดฏเดตเดธเตเดฅเด•เตพ.

เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเดพเตป เดจเดฟเดฐเดตเดงเดฟ เดฎเดพเตผเด—เด™เตเด™เดณเตเดฃเตเดŸเต:

  • Xcode เดตเดดเดฟ (เด“เตผเด—เดจเตˆเดธเตผ),
  • Altool เดตเดดเดฟ,
  • Xcode-เดจเตเดฑเต† (เด‡เดชเตเดชเต‹เตพ เดŸเตเดฐเดพเตปเดธเตเดชเต‹เตผเดŸเตเดŸเตผ) เดชเดดเดฏ เดชเดคเดฟเดชเตเดชเตเด•เตพเด•เตเด•เดพเดฏเดฟ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดฒเต‹เดกเตผ เดตเดดเดฟ

เดธเตเดตเดฏเดฎเต‡เดต เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ, altool เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต, เด‡เดคเดฟเดจเต เดฐเดฃเตเดŸเต เด…เด‚เด—เต€เด•เดพเดฐ เดฐเต€เดคเดฟเด•เดณเตเด‚ เด‰เดฃเตเดŸเต:

  • เด†เดชเตเดชเต-เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เดชเดพเดธเตโ€Œเดตเต‡เดกเต,
  • API เด•เต€.

API เด•เต€ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดพเดฃเต เดจเดฒเตเดฒเดคเต.

API เด•เต€ เดฒเดญเดฟเด•เตเด•เดพเตป, เด‡เดคเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เด•เตเด• เดฒเดฟเด™เตเด•เต เด•เต‚เดŸเดพเดคเต† เด’เดฐเต เด•เต€ เดœเดจเดฑเต‡เดฑเตเดฑเตเดšเต†เดฏเตเดฏเตเด•. *.p8 เดซเต‹เตผเดฎเดพเดฑเตเดฑเดฟเดฒเตเดณเตเดณ เด•เต€ เด•เต‚เดŸเดพเดคเต†, เดžเด™เตเด™เตพเด•เตเด•เต เดฐเดฃเตเดŸเต เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เด†เดตเดถเตเดฏเดฎเดพเดฃเต: เด‡เดทเตเดฏเต‚เดฑเดฟเดกเดฟเดฏเตเด‚ เด•เต€เดเดกเดฟเดฏเตเด‚.

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 เด’เดฐเต‡ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพเด•เตเด•เตŠเดชเตเดชเด‚.

เด’เดจเตเดจเต‹ เดฐเดฃเตเดŸเต‹ เดฆเดฟเดตเดธเดคเตเดคเดฟเดจเตเดณเตเดณเดฟเตฝ เด†เดชเตเดชเต เด†เดชเตเดชเดฟเตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเด‚, เดคเตเดŸเตผเดจเตเดจเต เดฌเดพเดนเตเดฏ เดชเดฐเดฟเดถเต‹เดงเด•เตผเด•เตเด•เต เดฒเดญเตเดฏเดฎเดพเด•เตเด‚: เด…เดต เด‡เตปเดธเตเดฑเตเดฑเดพเดณเตเดšเต†เดฏเตเดฏเดพเดจเตเดณเตเดณ เดฒเดฟเด™เตเด•เตเด•เตพ เด‡เดฎเต†เดฏเดฟเตฝ เดšเต†เดฏเตเดฏเตเด‚.

เด†เตพเดŸเตเดŸเต‚เตพ เดตเดดเดฟ เด’เดฐเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดฎเดฑเตเดฑเตŠเดฐเต เดฎเดพเตผเด—เตเด—เด‚ เด†เดชเตเดชเต-เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เดชเดพเดธเตโ€Œเดตเต‡เดกเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฃเต.

เด†เดชเตเดชเต-เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เดชเดพเดธเตโ€Œเดตเต‡เดกเต เดฒเดญเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เตพ เดชเต‹เด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต เดฒเดฟเด™เตเด•เต เดธเตเดฐเด•เตเดทเดพ เดตเดฟเดญเดพเด—เดคเตเดคเดฟเตฝ เด…เดคเต เดœเดจเดฑเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเด•.

iOS เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดฎเตเดณเตเดณ เดธเดตเดฟเดถเต‡เดทเดคเด•เตพ

เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, เดˆ เดชเดพเดธเตโ€Œเดตเต‡เดกเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดฟเด™เตเด™เตพ เด•เต€เดšเต†เดฏเดฟเดจเดฟเตฝ เด’เดฐเต เดฌเดฟเตฝเดกเต เดธเต†เตผเดตเตผ เดฑเต†เด•เตเด•เต‹เตผเดกเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดฃเด‚. Xcode-เดจเตเดฑเต† เดชเดคเดฟเดชเตเดชเต 11-เตฝ เดจเดฟเดจเตเดจเต เด‡เดคเต เด•เดฎเดพเตปเดกเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดšเต†เดฏเตเดฏเดพเด‚:

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

เดŽเดตเดฟเดŸเต†เดฏเดพเดฃเต:

$DeveloperName โ€” Apple เดธเต‡เดตเดจเด™เตเด™เดณเดฟเดฒเต‡เด•เตเด•เต เดฒเต‹เด—เดฟเตป เดšเต†เดฏเตเดฏเดพเตป เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ iOS เดกเต†เดตเดฒเดชเตเดชเตผ เด…เด•เตเด•เต—เดฃเตเดŸเดฟเดจเตเดฑเต† เดชเต‡เดฐเต.

$AppPswd - เดธเตƒเดทเตเดŸเดฟเดšเตเดš เด†เดชเตเดชเต-เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เดชเดพเดธเตโ€Œเดตเต‡เดกเต.

เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, เดจเดฎเตเด•เตเด•เต asc-provider เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเดฟเดจเตเดฑเต† เดฎเต‚เดฒเตเดฏเด‚ เดฒเดญเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด•เดฎเดพเตปเดกเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดชเดพเดธเตโ€Œเดตเต‡เดกเต เด‡เดฎเตเดชเต‹เตผเดŸเตเดŸเดฟเดจเตเดฑเต† เดตเดฟเดœเดฏเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต:

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

เดžเด™เตเด™เตพเด•เตเด•เต เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเต เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเต:

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

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เดพเดฃเดพเดจเดพเด•เตเดจเตเดจเดคเตเดชเต‹เดฒเต†, เด†เดตเดถเตเดฏเดฎเดพเดฏ เดทเต‹เตผเดŸเตเดŸเต เดจเต†เดฏเดฟเด‚ เดฎเต‚เดฒเตเดฏเด‚ (asc-provider) เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดžเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดš $TeamID เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเดฎเดพเดฏเดฟ เดชเตŠเดฐเตเดคเตเดคเดชเตเดชเต†เดŸเตเดจเตเดจเต.

เดŸเต†เดธเตเดฑเตเดฑเตเดซเตเดฒเตˆเดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดธเดพเดงเต‚เด•เดฐเดฟเด•เตเด•เดพเดจเตเด‚ เดฒเต‹เดกเตเดšเต†เดฏเตเดฏเดพเดจเตเด‚, เด•เดฎเดพเตปเดกเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•:

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

เด’เดฐเต เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเตผ เดฎเต‚เดฒเตเดฏเดฎเดพเดฏเดฟ -p เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฎเต‚เดฒเตเดฏเด‚ เดŽเดŸเตเด•เตเด•เดพเด‚ $AppPswd เดŽเตปเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดšเต†เดฏเตเดฏเดพเดคเตเดค (เดตเตเดฏเด•เตเดคเดฎเดพเดฏ) เดฐเต‚เดชเดคเตเดคเดฟเตฝ.

เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เด‡เดคเดฟเดจเด•เด‚ เดธเต‚เดšเดฟเดชเตเดชเดฟเดšเตเดšเดคเตเดชเต‹เดฒเต†, เดชเตเดฐเด•เดŸเดจเดคเตเดคเดฟเดจเตเดฑเต† เดตเต€เด•เตเดทเดฃเด•เต‹เดฃเดฟเตฝ เดจเดฟเดจเตเดจเต, เด†เตพเดŸเตเดŸเต‚เตพ เด…เด‚เด—เต€เด•เดพเดฐเดคเตเดคเดฟเดจเดพเดฏเดฟ API เด•เต€ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเดจเตเดจเดคเดพเดฃเต เดจเดฒเตเดฒเดคเต, เด•เดพเดฐเดฃเด‚ Xcode-เดจเตเดฑเต† เดตเตเดฏเดคเตเดฏเดธเตเดค เดชเดคเดฟเดชเตเดชเตเด•เตพเด•เตเด•เต เดšเดฟเดฒ เดชเตเดฐเดถเตโ€Œเดจเด™เตเด™เดณเตเดฃเตเดŸเต ("เด•เต€เดšเต†เดฏเดฟเตป "เด•เดพเดฃเตเดจเตเดจเดฟเดฒเตเดฒ", เด…เดชเตโ€Œเดฒเต‹เดกเต เดธเดฎเดฏเดคเตเดคเต เด…เด‚เด—เต€เด•เดพเดฐ เดชเดฟเดถเด•เตเด•เตพ เดฎเตเดคเดฒเดพเดฏเดต).

เดฏเดฅเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ เด…เดคเตเดฐเดฎเดพเดคเตเดฐเด‚. เด†เดชเตเดชเต เดธเตเดฑเตเดฑเต‹เดฑเดฟเตฝ เดตเดฟเดœเดฏเด•เดฐเดฎเดพเดฏ เดฌเดฟเตฝเดกเตเด•เดณเตเด‚ เดชเตเดฐเดถเตโ€Œเดจเดฐเดนเดฟเดคเดฎเดพเดฏ เดฑเดฟเดฒเต€เดธเตเด•เดณเตเด‚ เด‰เตพเดชเตเดชเต†เดŸเตเดŸ เดŽเดฒเตเดฒเดพเดตเตผเด•เตเด•เตเด‚ เดžเดพเตป เด†เดถเด‚เดธเดฟเด•เตเด•เตเดจเตเดจเต.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•