1. 打開 Xcode, 選 File - New - Project 照下圖選取, 按 Next


  2. 取一個專案名稱, 按 Next


    專案存放位置, 預設在我的文件, 直接按 Create (它會用您取的專案名稱建一個資料夾)


  3. 中間往下捲一點, Deployment Info 可以設定手機畫面要不要旋轉, 若不要旋轉只勾第一個 Portrait 就好


    選左邊 PROJECT 下方的專案名稱, Deployment Target 是 App 要向下相容的 ios 版本


  4. 左邊選 Main StoryBoard, 右上角點一下"+", 找到 WebKit View 用滑鼠拉到 Storyboard 裡


    點右上方有個三角形的圖示, Arrange 下拉選取填滿水平方向, 再一次選填滿垂直方向


    此時 WebKit View 已擴展到整個手機畫面, 但其實邊界還是有空隙
    找到 Storyboard 視窗最右下角有一個三角形圖示, 按一下選 Reset to Suggested Constraints


  5. 點右上方新增視窗圖示, 左邊會多一個視窗, 內容一樣是 Main StoryBoard, 點一下它上方 Main 改選 ViewController 主程式


    左邊會載入 ViewController.swift 檔, 一手按住 Control 鍵, 一手用滑鼠將 WebKit View 拖曳到左邊 ViewController 放開
    出現一個小視窗, 取名 webView 再按 Connect 鈕, 最後關閉左視窗


  6. 將 App 的圖示複製到專案資料夾裡的 Assets.xcassets/AppIcon.appiconset 資料夾即可(注意, 包括 json 檔一起, 覆蓋原檔)
    選 Assets 再選 Appicon 可以看到 App 圖示, 若有尺寸不對, 該圖示右側會出現一個黃色小三角形警告


  7. 因為安全理由 WebKit View 限制只能顯示 https:// 開頭的網頁, 如果要顯示一般 http:// 開頭的網頁必須設定如下:
    左邊選 Info.plist 右邊空白處按滑鼠右鍵選 Add Row, 選 App Transport Security Settings
    再在新增的 Key 右方按加號, 然後選 Allow Arbitrary Loads, 然後將其右邊 "NO" 改為 "YES"


  8. 綁定 URL Scheme: (此例即為 kids://)


  9. 從現有的 app 將 ViewController.swift 內容整個複製過來, 並修改包覆網址
    點 File - Save 存檔, 然後點 File - Close Project 關閉專案(或直接關閉 Xcode 也可以)


  10. 登入 Firebase 後控台新增一個專案, 或從現有的專案新增應用程式也可以
    此例中, 我用 Android Studio 推播的同一專案選"新增應用程式", 選 iOS


    輸入其 Bundle ID(即套件名稱), 按"註冊應用程式"


    下載 GoogleService-Info.plist 先存起來(之後再從此專案裡下載也可以), 按繼續, 後面按繼續、下一步、前往控制台即可


  11. 將下載的 GoogleService-Info.plist 放到 Xcode 專案資料夾裡(跟 .xcodeProj 檔在一起)


    打開終端機, 切進到專案資料夾裡, 輸入 pod init 該資料夾中會出現一個檔 Podfile
    用文字編輯器在其中加入下列兩行, 然後存檔
    pod 'Firebase/Analytics'
    pod 'Firebase/Messaging'




    回到終端機, 輸入 pod install 完成後資料夾中會產生一個 .xcworkspace 檔, 對它點兩下, Xcode 會將它打開


  12. 在左邊任一檔案按滑鼠右鍵, 選 Add Files to "xxx"...
    選 GoogleService-Info.plist 加進專案裡



    在專案設定的 General 頁 Display name 檢查"中文名稱"(最新版 Xcode 有時這裡中文會消失), 分類要不要選都可以


  13. 回到 Apple 開發者後台, 選擇 Identifiers, 再選右邊加號



    選 App IDS 再按 Continue


    選 App 再按 Continue


    輸入 App 名稱, Bundle ID, 往下捲 勾選 Push Notifications 再按 Continue, Register


  14. 左邊點 Profiles , 再點右邊加號


    選 Distribution 下方的 App Store, 按 Continue


    下拉選單選取 App, 按 Continue


    選開發者帳戶的電子憑證, 再按 Continue (電子憑證產生流程按這裡)


    取個名稱, 按 Generate


    按 Download 下載 Profile 檔放到桌面, 點兩下打開, Xcode 會將它加進專案裡


  15. 專案設定選 Signing & Capabilities 頁, 如果看到畫面中有紅色或黃色警告, 請從功能表選 Xcode - Settings...
    在彈出的視窗中選 Accounts 頁, 登入開發者帳戶, 如果是灰色則略過此步驟


    點右上方加號, 找到 Push Notification 點兩下


    再點一次右上方加號, 找到 Background Modes 點兩下


    將 Background Modes 的 Background fetch 和 Remote notifications 勾起來


  16. Firebase 後控台點左上方齒輪圖案選"專案設定", 再點"雲端通訊"


    往下捲, 找到套件名稱, 在"APN 驗證金鑰"右邊按"上傳" (APN 金鑰製作流程點這裡)


    輸入金鑰ID及團隊代號 (團隊代號看這裡)


  17. 到 Xcode 從現有的 App 複製 AppDelegate.swift 及 SceneDelegate.swift 兩個檔的內容, 不需修改
    如果要安裝在實機, 只要用線連接起來, 模擬器那邊就會出現你的 iPhone/iPad, 按 Play 就會安裝並執行
    然後確定模擬器選擇 "Any iOS Device(arm64)", 再選 Product - Build
    再選 Product - Archives, 稍待片刻出現一個視窗, 選右邊 Distribute App


    選 Next


    Export, 再按 Next


    後面都按預設按鈕 Next 即可, 最後一步存到我的文件底下, 就可得到 .ipa 檔用於上傳審核



  18. 回到 Apple 開發者後台, 選擇 Apps, 點"+"號 - 新的 App, 然後照下圖填寫


    裡面有四頁表單必須填寫, 準備提交、App 資訊、定價與供應狀況、App 隱私權
    1. 準備提交: 截圖 iPhone 6.5 吋用模擬器 iPhone 11 Pro Max, iPhone 6.5 吋用模擬器 iPhone 8 Plus, iPad 兩個都用模擬器 iPad Pro(12.9")
      必填欄位描述、關鍵字、支援URL(填官網即可)、版權(例: 2023偉德仕幼兒園)、試用帳密、聯絡人姓名電話信箱
      從 Mac 的 Transporter 將上一步驟最後編譯的 ipa 檔上傳到 Apple



      幾分鐘後會有 E-mail 通知 ipa 處理完畢, 此時重新整理開發者後台頁面, 依下列圖片點選





    2. App 資訊: 主要類別必選, 內容版權選"否,我的 App 未包含、顯示或存取第三方內容"
      年齡分級全部都選"無", 第二頁全部選"否", 然後按"完成"即可

    3. 定價與供應狀況: 價格 0.00 USD, 然後按下一步、下一步、確認
      供應狀況選"所有國家或地區", 按下一步、確認

    4. App 隱私權: 將隱私權政策網址貼上, 再按下方"立即開始", 選"否,我們不會從這個 App 收集資料", 儲存
      最後按一下右方"發佈"鈕

    回到準備提交, 按右上方"新增以供審查"即可, 若有必填欄位沒填的話, 它會提示

  19. 上架成功後, 若要暫時下架, 選"定價與供應狀況" - 供應狀況選"停止銷售" - "儲存"

  20. 每隔三年, Apple 會發 E-mail 通知要更新版本, 編譯新版本要注意以下事項



    1. 前一版本的資料會自動帶過來, 檢查試用帳密能否登入?
      登入檢查內容頁面與截圖是否相符, 不符的話要重新用模擬器截圖

    2. 準備提交頁會多一欄"新功能"是必填, App 沒有新功能的話可以填"bug fixed"或"support ios xx"之類

    3. Xcode 開啟專案, 版本號也要加 0.1 以相符合, build 也要至少 +1

    4. 2023年10月之前做的 App 還沒有 URL Scheme, 如果要加的話, 除了用 步驟 7 綁定 URL Type 之外
      還要複製最近製作的 App 的 ViewController.swift 內容(僅修改包覆網址)以及 SceneDelegate.swift 內容(不需修改)

    5. 開發者後台點 Profiles 檢查相應的 Profile 過期沒?
      如果過期先點 Remove 將它移除, 重覆 步驟 12 新增 Profile 並下載點兩下加到 Xcode 專案裡



==================== 電子憑證產生流程(一年做一次) =====================

  1. 從 Mac 打開鑰匙圈, 功能表選 "鑰匙圈存取" - 憑證輔助程式 - 從憑證授權要求憑證


    填好 E-mail 和英文姓名, 選"儲存到磁碟", 按繼續


    按儲存, 完成, 桌面會有一個 CSR 檔


  2. 到開發者後台選 Certificates 按 "+"


    選 iOS Distribution (App Store and Ad Hoc) 按 Continue


    然後點 Choose File 給它上個步驟產生的 CSR 檔, 按 Continue


    按 Download 下載 .cer 存到 Mac 桌面, 點兩下, 點"加入", 它會加到鑰匙圈的憑證裡


==================== APN 金鑰產生流程(只做一次, 永久有效) =====================

  1. Apple 開發者後台選 Keys 右邊點選 "+" 加號


    自行取個名稱, 將 Apple Push Notofications service(APNs) 打勾, 按 Continue, 將金鑰儲存磁碟


==================== 團隊代號(每個開發者帳戶的固定代號) =====================

  1. Apple 開發者後台選 Membership details