iOS แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒกแƒ แƒ“แƒ แƒ›แƒ˜แƒฌแƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒฎแƒแƒกแƒ˜แƒแƒ—แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜

แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒแƒจแƒ˜ แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒ–แƒ˜แƒแƒ แƒ”แƒ‘แƒ— iOS แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒ›แƒ˜แƒฌแƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒชแƒ“แƒ˜แƒšแƒ”แƒ‘แƒแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช Plarium Krasnodar-แƒ˜แƒก แƒกแƒขแƒฃแƒ“แƒ˜แƒแƒ› แƒ“แƒแƒแƒ’แƒ แƒแƒ•แƒ CI/CD แƒ’แƒแƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒจแƒ˜.

iOS แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒกแƒ แƒ“แƒ แƒ›แƒ˜แƒฌแƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒฎแƒแƒกแƒ˜แƒแƒ—แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜

แƒกแƒแƒกแƒฌแƒแƒ•แƒšแƒ

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

แƒ˜แƒœแƒขแƒ”แƒ แƒœแƒ”แƒขแƒจแƒ˜ แƒฃแƒแƒ›แƒ แƒแƒ•แƒ˜ แƒกแƒขแƒแƒขแƒ˜แƒแƒ โ€žแƒกแƒแƒคแƒฃแƒซแƒ•แƒšแƒ”แƒ‘แƒ˜แƒกโ€œ แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒจแƒ”แƒ•แƒ”แƒชแƒ“แƒ”แƒ‘แƒ˜แƒ— แƒ’แƒแƒ›แƒแƒ•แƒงแƒแƒ— แƒ›แƒ—แƒแƒ•แƒแƒ แƒ˜. แƒแƒ˜, แƒ แƒ แƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ— แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ— แƒจแƒ”แƒกแƒแƒฅแƒ›แƒœแƒ”แƒšแƒแƒ“:

  • แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ˜แƒก แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ˜;
  • macOS-แƒ–แƒ” แƒ“แƒแƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒก แƒ แƒแƒ’แƒแƒ แƒช build แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜;
  • แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ˜แƒก แƒกแƒ”แƒ แƒ—แƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ›แƒ“แƒ’แƒแƒ›แƒจแƒ˜ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ’แƒแƒœแƒแƒชแƒฎแƒแƒ“แƒ–แƒ” แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก;
  • แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒšแƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ แƒฃแƒœแƒ˜แƒ™แƒแƒšแƒฃแƒ แƒ˜แƒ— ID (แƒแƒฆแƒกแƒแƒœแƒ˜แƒจแƒœแƒแƒ•แƒ˜แƒ Bundle Identifier-แƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ, แƒ แƒแƒ“แƒ’แƒแƒœ wildcard ID-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒจแƒ”แƒฃแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒก แƒฎแƒ“แƒ˜แƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒ แƒแƒ•แƒแƒšแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒแƒก, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“: แƒแƒกแƒแƒชแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ“แƒแƒ›แƒ”แƒœแƒ”แƒ‘แƒ˜, Push Notifications, Apple Sign In แƒ“แƒ แƒกแƒฎแƒ•แƒ);
  • แƒžแƒ แƒแƒคแƒ˜แƒšแƒ˜ แƒ’แƒแƒœแƒแƒชแƒฎแƒแƒ“แƒ˜แƒก แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ”แƒ‘แƒ˜.

แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ˜แƒก แƒกแƒ”แƒ แƒ—แƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒ˜แƒฅแƒ›แƒœแƒแƒก Keychain-แƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ— แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ  macOS แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒแƒ–แƒ”. แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜แƒก แƒขแƒ˜แƒžแƒ˜ แƒซแƒแƒšแƒ˜แƒแƒœ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜แƒ. แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒ›แƒแƒ“แƒแƒœ แƒ’แƒแƒ›แƒแƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” (Dev, QA, Staging, Production) แƒ˜แƒก แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ“แƒ”แƒ‘แƒ (แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ แƒแƒœ แƒ’แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒ), แƒ˜แƒกแƒ”แƒ•แƒ” แƒ แƒแƒ’แƒแƒ แƒช แƒ’แƒแƒœแƒแƒชแƒฎแƒแƒ“แƒ˜แƒก แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒžแƒ แƒแƒคแƒ˜แƒšแƒ˜แƒก แƒขแƒ˜แƒžแƒ˜.

แƒžแƒ แƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜ แƒขแƒ˜แƒžแƒ”แƒ‘แƒ˜:

  • แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ›แƒ”แƒœแƒขแƒ˜ - แƒ’แƒแƒœแƒ™แƒฃแƒ—แƒ•แƒœแƒ˜แƒšแƒ˜แƒ แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒฃแƒšแƒ˜ แƒ’แƒฃแƒœแƒ“แƒ˜แƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒแƒ–แƒ” แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ›แƒ”แƒœแƒขแƒ˜แƒก แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜ (แƒขแƒ˜แƒžแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜ iPhone Developer: XXXXX);
  • Ad Hoc - แƒ’แƒแƒœแƒ™แƒฃแƒ—แƒ•แƒœแƒ˜แƒšแƒ˜แƒ แƒกแƒแƒขแƒ”แƒกแƒขแƒ แƒ’แƒแƒœแƒแƒชแƒฎแƒแƒ“แƒ˜แƒก แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒกแƒ แƒ“แƒ แƒฎแƒแƒ แƒ˜แƒกแƒฎแƒ˜แƒก แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ˜แƒก แƒ“แƒ”แƒžแƒแƒ แƒขแƒแƒ›แƒ”แƒœแƒขแƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒจแƒ˜แƒ“แƒ แƒ’แƒแƒ“แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ˜แƒก แƒ“แƒ˜แƒกแƒขแƒ แƒ˜แƒ‘แƒฃแƒชแƒ˜แƒ˜แƒก แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜ (แƒขแƒ˜แƒžแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜ iPhone Distribution: XXXXX);
  • App Store - แƒ’แƒแƒ›แƒแƒจแƒ•แƒ”แƒ‘แƒ แƒ’แƒแƒ แƒ” แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก TestFlight-แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ— แƒ“แƒ App Store-แƒจแƒ˜ แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ˜แƒก แƒ“แƒ˜แƒกแƒขแƒ แƒ˜แƒ‘แƒฃแƒชแƒ˜แƒ˜แƒก แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜.

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

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

iOS แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒกแƒ แƒ“แƒ แƒ›แƒ˜แƒฌแƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒฎแƒแƒกแƒ˜แƒแƒ—แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜

แƒแƒกแƒแƒ›แƒ‘แƒšแƒ”แƒ

แƒ˜แƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ› แƒ’แƒแƒ•แƒแƒแƒ“แƒ•แƒ˜แƒšแƒแƒ— แƒจแƒ”แƒ™แƒ แƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒแƒคแƒ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒกแƒ แƒ“แƒ แƒ’แƒแƒ แƒ”แƒ›แƒแƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—, แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— แƒžแƒ แƒแƒคแƒ˜แƒšแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒก, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ ${ProjectName}_${Instance}, แƒแƒœแƒฃ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜ + แƒ˜แƒœแƒกแƒขแƒแƒœแƒชแƒ˜แƒ (แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒ›แƒแƒ–แƒ”: Dev, QA, GD, Staging, Live แƒ“แƒ แƒ.แƒจ.).

build แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ” แƒ˜แƒ›แƒžแƒแƒ แƒขแƒ˜แƒกแƒแƒก, แƒžแƒ แƒแƒคแƒ˜แƒšแƒ˜ แƒ˜แƒชแƒ•แƒšแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒก แƒฃแƒœแƒ˜แƒ™แƒแƒšแƒฃแƒ  ID-แƒแƒ“ แƒ“แƒ แƒ’แƒแƒ“แƒแƒ“แƒ˜แƒก แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ”แƒจแƒ˜ /Users/$Username/Library/MobileDevice/Provisioning Profiles (แƒกแƒแƒ“ $Username แƒจแƒ”แƒ”แƒกแƒแƒ‘แƒแƒ›แƒ”แƒ‘แƒ build แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒก).

*.ipa แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒก แƒแƒ แƒ˜ แƒ’แƒ–แƒ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก - legacy (PackageApplication) แƒ“แƒ แƒ—แƒแƒœแƒแƒ›แƒ”แƒ“แƒ แƒแƒ•แƒ” (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 โ€” แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ˜แƒก แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒแƒช แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ Keychain-แƒจแƒ˜ (iPhone Developer: 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 build-แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ˜แƒกแƒขแƒ แƒ˜แƒ‘แƒฃแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ HockeyApp, AppBlade แƒ“แƒ แƒกแƒฎแƒ•แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒแƒจแƒ˜ แƒ•แƒ˜แƒกแƒแƒฃแƒ‘แƒ แƒ”แƒ‘แƒ— แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒแƒฃแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒ”แƒš แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ”.

iOS-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ แƒฎแƒ“แƒ”แƒ‘แƒ 2 แƒ”แƒขแƒแƒžแƒแƒ“:

  1. แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒแƒœแƒ˜แƒคแƒ”แƒกแƒขแƒ˜แƒก แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒ Items Service-แƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ—.
  2. *.ipa แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ แƒ›แƒแƒœแƒ˜แƒคแƒ”แƒกแƒขแƒจแƒ˜ แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— HTTPS-แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—.

แƒแƒ›แƒ’แƒ•แƒแƒ แƒแƒ“, แƒฉแƒ•แƒ”แƒœ แƒฏแƒ”แƒ  แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒ•แƒฅแƒ›แƒœแƒแƒ— แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒแƒœแƒ˜แƒคแƒ”แƒกแƒขแƒ˜ (แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒขแƒ˜แƒžแƒ˜ *.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

แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก Plarium-แƒ›แƒ แƒจแƒ”แƒฅแƒ›แƒœแƒ แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ build-แƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ˜แƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒ•แƒแƒซแƒšแƒ”แƒ•แƒก:

  • แƒแƒ•แƒขแƒแƒœแƒแƒ›แƒ˜แƒ แƒ“แƒ แƒ“แƒแƒ›แƒแƒฃแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒšแƒแƒ‘แƒ,
  • แƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒก แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ˜แƒก แƒชแƒ”แƒœแƒขแƒ แƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ แƒ“แƒ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒ แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ โ€žแƒ“แƒ แƒแƒ”แƒ‘แƒ˜แƒ—แƒ˜โ€œ แƒ“แƒ˜แƒœแƒแƒ›แƒ˜แƒฃแƒ แƒแƒ“ แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒšแƒ˜ แƒ‘แƒ›แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—,
  • แƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ”แƒ‘แƒแƒ“แƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒ (แƒแƒœแƒฃ, แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒฃแƒœแƒ“แƒก, แƒกแƒแƒญแƒ˜แƒ แƒแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒ“แƒแƒ™แƒแƒ แƒ’แƒฃแƒšแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ˜แƒœแƒขแƒ”แƒ’แƒ แƒ˜แƒ แƒ”แƒ‘แƒ แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒš แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒแƒจแƒ˜).

แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ

แƒแƒฎแƒšแƒ แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒกแƒแƒฃแƒ‘แƒ แƒ”แƒ‘แƒ— แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒฌแƒ˜แƒœแƒแƒกแƒฌแƒแƒ  แƒ’แƒแƒ›แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒแƒ–แƒ” TestFlight.

แƒฉแƒแƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒแƒฃแƒชแƒ˜แƒšแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒžแƒ˜แƒ แƒแƒ‘แƒ”แƒ‘แƒ˜แƒ App Store แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒžแƒ แƒแƒคแƒ˜แƒšแƒ˜แƒก แƒขแƒ˜แƒžแƒ˜ แƒ“แƒ แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ API แƒ™แƒšแƒแƒ•แƒ˜แƒจแƒ”แƒ‘แƒ˜แƒก แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒ.

แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒฉแƒแƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ’แƒ–แƒ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก:

  • Xcode-แƒ˜แƒก (แƒแƒ แƒ’แƒแƒœแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜) แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—,
  • แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—,
  • Application Loader-แƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ— Xcode-แƒ˜แƒก แƒซแƒ•แƒ”แƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก (แƒแƒฎแƒšแƒ Transporter).

แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒ˜ แƒ’แƒแƒ“แƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ altool, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒแƒกแƒ”แƒ•แƒ” แƒแƒฅแƒ•แƒก แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒแƒ แƒ˜ แƒ›แƒ”แƒ—แƒแƒ“แƒ˜:

  • แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒกแƒžแƒ”แƒชแƒ˜แƒคแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒžแƒแƒ แƒแƒšแƒ˜,
  • API แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜.

แƒกแƒแƒกแƒฃแƒ แƒ•แƒ”แƒšแƒ˜แƒ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒฉแƒแƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ API แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—.

API แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒกแƒแƒฆแƒ”แƒ‘แƒแƒ“ แƒ’แƒแƒ“แƒแƒ“แƒ˜แƒ— แƒšแƒ˜แƒœแƒ™แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜. แƒ’แƒแƒ แƒ“แƒ แƒ—แƒแƒ•แƒแƒ“ แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒกแƒ *.p8 แƒคแƒแƒ แƒ›แƒแƒขแƒจแƒ˜, แƒ“แƒแƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒแƒ แƒ˜ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ˜: IssuerID แƒ“แƒ KeyID.

iOS แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒกแƒ แƒ“แƒ แƒ›แƒ˜แƒฌแƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒฎแƒแƒกแƒ˜แƒแƒ—แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜

แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜, แƒ’แƒแƒ“แƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒก แƒ˜แƒ›แƒžแƒแƒ แƒขแƒ˜ build แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ”:

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 แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒกแƒ แƒ“แƒ แƒ›แƒ˜แƒฌแƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒฎแƒแƒกแƒ˜แƒแƒ—แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜

แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒฅแƒ›แƒœแƒแƒ— build แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ˜ Keychain-แƒจแƒ˜ แƒแƒ› แƒžแƒแƒ แƒแƒšแƒ˜แƒ—. Xcode-แƒ˜แƒก 11 แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒ“แƒแƒœ แƒ”แƒก แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ™แƒ”แƒ—แƒ“แƒ”แƒก แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ˜แƒ—:

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

แƒกแƒแƒ“:

$DeveloperName โ€” iOS แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ˜แƒก แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ Apple แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒจแƒ˜ แƒจแƒ”แƒกแƒแƒกแƒ•แƒšแƒ”แƒšแƒแƒ“.

$AppPswd - แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒแƒžแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒกแƒžแƒ”แƒชแƒ˜แƒคแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒžแƒแƒ แƒแƒšแƒ˜.

แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜, แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— asc-provider แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒแƒก แƒ“แƒ แƒ•แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ— แƒžแƒแƒ แƒแƒšแƒ˜แƒก แƒ˜แƒ›แƒžแƒแƒ แƒขแƒ˜แƒก แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒแƒก แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ˜แƒ—:

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

แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒแƒšแƒก:

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

แƒ แƒแƒ’แƒแƒ แƒช แƒฎแƒ”แƒ“แƒแƒ•แƒ—, แƒกแƒแƒญแƒ˜แƒ แƒ Short Name แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ (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

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