iOS開發之真機調試、測試打包、程序發布、內購和廣告

一.真機調試

1. 什么是真機調試?

簡單理解就是將App項目運行到真機上進行測試

2.為什么要運行到真機上, 不是可以運行到模擬器上嗎?(APP發布之前一定要做真機調試!!!)

真機和模擬器環境的差異
    內存環境,網絡環境; 
    傳感器: 磁力計,陀螺儀,距離傳感器等;
    特定功能:拍照, 打電話,發短信,藍牙等。
    用戶體驗不一樣

3. 怎樣做真機調試?

Xcode7.0之前,并不是任何人,任何電腦,任何APP,任何真機設備都可以進行真機調試的
1. 限制人

    必須擁有Apple ID([https://appleid.apple.com])
    加入開發者計劃,升級為**開發者賬號**([https://developer.apple.com])
2. 限制電腦

    配置與電腦關聯的cer證書
        需要使用需要真機調試的電腦,生成CSR文件
        CSR文件: 證書簽名請求文件
3. 限制App

    配置需要真機測試App的BundleID
        區分不同APP,就是通過App的唯一標識: BundleID
4. 限制真機設備

    配置需要真機測試的真機UDID
        蘋果每臺真機設備都擁有一個唯一標識:UDID

Xcode7.0之后, 做真機調試, 非常簡單 只需要擁有Apple ID即可, 不需要以上限制

4. 真機調試注意事項

1.以上步驟完成后,你會有兩個文件:cer文件,MobileProvision文件,只需要雙擊安裝即可.

cer證書被添加到鑰匙串中
描述文件被安裝到Xcode中
    資源庫 -> MobileDevice -> Provisioning Profiles

2.必須保證cer證書和描述文件一致

Xcode -> targets -> build setting -> code signing

3.創建一個APP,并確認BundleID與配置一致

如果不一致, 修改XCode項目的BundleID, 與配置一致.

4.真機運行時, 如果發現真機設備無法選中, 查看項目最低部署版本是否過高, 大于真機設備的系統版本

如果真機設備系統版本過高, 則無法選中真機進行運行

5. 備注補充

開發者賬號分類

個人賬號(99$)==688

功能:可以真機調試, 打包測試, 程序發布. 
優點:申請速度快, 給錢就行, 1-3個工作日即可 
缺點:
    1.iTunes查看到的是個人信息, 無法間接為公司做宣傳 
    2.無法創建管理自己的開發團隊

公司賬號(99$)

功能:可以真機調試, 打包測試, 程序發布. 
優點:
    1.iTunes可以查看企業信息, 間接為公司做宣傳 
    2.可以創建和管理自己的開發團隊
缺點:
    1.申請復雜,需要”鄧白氏”認證
    2.申請周期比較長(連同”鄧白氏編碼”申請, 最好準備30天左右時間)

企業賬號(299$)

功能:可以真機調試, 打包測試
優點:
    1.可以在企業內部隨意安裝到蘋果設備,不需要經過AppStore審核
    2.可以創建和管理自己的開發團隊
    3.版本更新迭代比較快, 不需要經過審核
缺點:
    1.申請復雜,需要”鄧白氏”認證
    2.申請周期比較長(連同”鄧白氏編碼”申請, 最好準備30天左右時間)
    3.不能使用此證書,將App發布到AppStore

6. 開發經驗

1.盡量不要從網絡渠道以及代申請的公司去申請”鄧白氏編碼”.

花錢多, 而且申請下來的”鄧白氏編碼”不一定和蘋果服務器數據庫內一致, 最終不可用; 浪費時間和金錢
最正確的做法: 直接和蘋果客服MM聯系, 她們會告訴你申請流程, 需要提交哪些材料
客服電話: 400 670 1855

2.企業級賬號使用場景

App是針對某一特定人群制定使用.只在企業內部安裝, 無需發布到AppStore供他人下載

3.真機調試證書只能生成兩個!!

也就意味著,只能綁定兩臺電腦進行真機調試
注意:如果別人已經配置了兩個,而且正在使用,不能隨便把別人的證書刪除;
解決方案:
    此時只能使用從已經配置證書的電腦中,導出P12文件,進行共享;
    作   用: 讓其他電腦設備不需要生成cer證書,也可以進行真機調試;

步驟圖解

導出p12證書1.png
導出p12證書2.png

4.測試的真機設備UDID最多只能添加100次, 而不是100臺

也就是說, 如果你加夠了100次之后, 即使刪除之前的設備名額, 也無法繼續添加
蘋果會在下一年, 給你一次刪除設備的機會, 你可以刪除一些設備, 來恢復一些名額.
但是, 一旦你添加了設備后, 蘋果則視為你自動放棄添加設備!!

步驟圖解

重置名額1.png
重置名額2.png
重置名額3.png
重置名額4.png
重置名額5-添加名額提醒.png

5.真機調試最終需要的文件

cer文件(或者p12文件)
MobileProvision文件

6.XCode7真機調試

只需要AppID,在Xcode7 -> preference -> Account 中添加即可
然后直接真機調試時,會彈出一個框,提示缺少描述文件. 直接點擊”Fix issue”選項,Xcode會自動請求蘋果服務器生成對應的描述文件

二. 打包測試

1. 什么是打包測試?

就是指將項目打包成為.ipa的壓縮包, 供指定設備安裝測試.

2. 為什么要做打包測試?

當進入到測試階段, 需要專門的測試人員對APP進行測試, 此時需要將APP安裝到測試人員的測試設備上, 此時最佳的方案, 就是直接將項目打包成為.ipa包, 供測試人員下載測試;

3. 怎樣進行打包測試?

1.限制人

必須擁有Apple ID([https://appleid.apple.com])
加入開發者計劃,升級為**開發者賬號**([https://developer.apple.com])

2.限制電腦

重新配置一個**打包測試**證書(Ad Hoc)
需要使用需要打包測試的電腦,生成CSR文件
    CSR文件: 證書簽名請求文件

3.限制App

配置需要真機測試App的BundleID
    區分不同APP,就是通過App的唯一標識: BundleID

4.限制真機設備

配置需要真機測試的真機UDID
    蘋果每臺真機設備都擁有一個唯一標識:UDID

5.根據2,3,4重新生成打包測試描述文件

6.分別安裝cer證書和對應的描述文件

7.運行設備選擇真機后 選擇Product -> Archive

三. 程序發布

1. 什么是程序發布?

就是指將APP發布到AppStore, 供指定區域用戶下載

2. 為什么要程序發布?

賺錢.

3. 程序發布的步驟?

1.限制人

必須擁有Apple ID([https://appleid.apple.com])
加入開發者計劃,升級為**開發者賬號**([https://developer.apple.com])

2.限制電腦

重新配置一個**發布**證書
需要使用需要程序發布的電腦,生成CSR文件
    CSR文件: 證書簽名請求文件

3.限制App

配置需要真機測試App的BundleID
    區分不同APP,就是通過App的唯一標識: BundleID

4.根據2,3重新生成發布描述文件

** 注意: 程序發布, 是發布到AppStore, 所以不會有限制設備一項**

5.在開發中心新建App, 并填寫App相關的信息

就比如我們下載別人的app,就會發現里面有預覽圖片, app版本,以及功能簡介等信息, 那這些信息都是我們在這一步填寫的

6.寫好一個應用程序

注意:必須要有程序圖標,啟動圖片等,否則上傳會失敗

7.運行設備選擇真機后 選擇Product -> Archive

8.選擇 submit 打包項目,上傳構建版本

9.提交審核

4. 經驗補充

1.常規審核周期

審核周期2至20天不等, 而且他們碰到節假日還放假.

2.加急審核

概念: 簡單理解就是你聯系蘋果審核人員,跟他們說明理由,讓他們優先給你們審核
地址: [https://developer.apple.com/contact/app-store/?topic=expedite]

四. 內購和廣告

1. 什么是內購?

內購就是指,在APP內購買某些產品
如果你在App中銷售的商品,跟App有關(例如植物大戰僵尸中的道具,需要開啟關卡,擁有某種技能等等).那么,蘋果規定,必須通過內購方式購買.
內購分成: 3 : 7

2. 為什么做內購?

開發者創收的一種模式: free + 內購
某些業務必須使用內購

3. 內購的產品類型?

1.非消耗品(Nonconsumable)

買了就一直有,不會消耗,例如開啟關卡
一般指的是在游戲中一次性購買并擁有永久訪問權的物品或服務。非消耗品物品可以被用戶再次下載,并且能夠在用戶的所有設備上使用

2.消耗品(Consumable)

買了就用,用了就沒
專為支持可消耗的物品或服務設計的,消耗品購買不可被再次下載,根據其特點,消耗品不能在用戶的設備之間跨設備使用,除非自定義服務在用戶的賬號之間共享這些信息

3.其他類型

以下三種類別在iBooks中使用,目前iBooks不支持大陸市場
    免費訂閱(Free subscriptions)
    自動續費訂閱(Auto-renewing subscriptions)
    非自動續費訂閱(Nonrenewing subscriptions)

4.內購的流程

類似于商場購物流程, 參照下圖

內購流程圖.png

5.內購演練

在App管理中心,創建一個App,并填寫App信息
    注意: 此處創建的App時,填寫套裝ID,時,必須選擇可以內購的套裝ID
        
創建內購商品,并添加到App,指定此App,可以銷售哪些商品
    注意: 創建內購商品的前提,是你已經填寫了稅務/銀行信息,否則的話,無法創建
        
添加用于測試內購的測試賬號

創建App項目,開始開發
代碼實現內購流程
  • (1) 從APP服務器請求數據列表, 并行蘋果服務器請求可以銷售的商品列表

            [XMGDataTool getGoodsWithResult:^(NSArray *goods) {
                NSArray *ids = [goods valueForKeyPath:@"goodID"];
                // 請求哪些商品可以賣
                NSSet *idSet = [NSSet setWithArray:ids];
                SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:idSet];
                request.delegate = self;
                [request start];
            }];
    
  • (2) 在代理方法中獲取并顯示可銷售列表

            - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
            {
                self.products = response.products;
            }
    
  • (3) 用戶購買商品, 并監聽商品交易狀態

            // 取出商品
            SKProduct *product = self.products[indexPath.row];
    
            // 購買商品
            SKPayment *payMent = [SKPayment paymentWithProduct:product];
    
            // 把憑證加入到隊列, 等待用戶付款
            [[SKPaymentQueue defaultQueue] addPayment:payMent];
    
            // 設置監聽者, 監聽整個交易狀態
            [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
    
  • (4) 實現監聽交易狀態方法

            // 交易狀態發生變化時調用
            - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray<SKPaymentTransaction *> *)transactions
            {
    
            [transactions enumerateObjectsUsingBlock:^(SKPaymentTransaction * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) 
            {
    
                //  SKPayment *payment , 小票 , 包含商品
                //  SKPaymentTransactionState transactionState 交易狀態
            switch (obj.transactionState) {
                case  SKPaymentTransactionStatePurchasing:
                    NSLog(@"正在付款");
                break;
    
                case  SKPaymentTransactionStatePurchased:
                    {
                        NSLog(@"付款結束");
                        [queue finishTransaction:obj];
                        break;
                    }
                case  SKPaymentTransactionStateFailed:
                    {
                        NSLog(@"交易失敗");
                        [queue finishTransaction:obj];
                        break;
                    }
                case  SKPaymentTransactionStateRestored:
                    NSLog(@"恢復購買");
                    break;
                case SKPaymentTransactionStateDeferred:
                    NSLog(@"推遲付款");
                    break;
            
                default:
                    break;
                }
               }];
            }
    

4. 廣告

廣告的作用?
    屬于創收的一種方式, 你在App內展示廣告,蘋果會付費給你,分成從原來的4:6 到 3:7
     
如何展示廣告
    導入框架: iAd.framework
    添加控件: ADBannerView 
    實現代理 ADBannerViewDelegate,優化用戶體驗
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容