一.真機調試
1.什么是真機調試?
簡單理解就是將App項目運行到真機上進行測試.
2.真機調試的必要
真機和模擬器環境的差異:
- 內存環境,網絡環境;
- 傳感器: 磁力計,陀螺儀,距離傳感器等;
- 特定功能:拍照, 打電話,發短信,藍牙等(真機才有)
- 用戶體驗不一樣所以APP發布之前一定要做真機調試!!!
3.怎樣做真機調試?
Xcode7.0之前(并不是任何人,任何電腦,任何APP,任何真機設備都可以進行真機調試的)
①限制人
- 必須擁有Apple ID([https://appleid.apple.com])
- 加入開發者計劃,升級為開發者賬號([https://developer.apple.com])
②限制電腦
- 配置與電腦關聯的cer證書 ,需要使用需要真機調試的電腦,生成CER文件 (CER文件: 證書簽名請求文件)
③限制App
- 配置需要真機測試App的BundleID (區分不同APP,就是通過App的唯一標識: BundleID)
④限制真機設備
- 配置需要真機測試的真機UDID (蘋果每臺真機設備都擁有一個唯一標識:UDID)
Xcode7.0之后
- 只需要AppID(在Xcode7 -> preference -> Account 中添加即可。 此時直接真機調試時,會彈出一個框,提示缺少描述文件. 直接點擊”Fix issue”選項,Xcode會自動請求蘋果服務器生成對應的描述文件)
4.真機調試注意事項
①以上步驟完成后,你會有兩個文件:cer文件,MobileProvision文件,只需要雙擊安裝即可.
- cer證書被添加到鑰匙串中
- 描述文件被安裝到Xcode中 (資源庫 -> MobileDevice -> Provisioning Profiles)
②必須保證cer證書和描述文件一致( Xcode -> targets -> build setting -> code signing)
③ 創建一個APP,并確認BundleID與配置一致 (如果不一致, 修改XCode項目的BundleID, 與配置一致)
④真機運行時, 如果發現真機設備無法選中,查看項目最低部署版本是否過高, 大于真機設備的系統版本
5.補充
開發者賬號分類:
①個人賬號(99$)==688
- 功能:可以真機調試, 打包測試, 程序發布
- 優點:申請速度快, 給錢就行, 1-3個工作日即可
- 缺點:
- iTunes查看到的是個人信息, 無法間接為公司做宣傳
- 無法創建管理自己的開發團隊
②公司賬號(99$)
- 功能:可以真機調試, 打包測試, 程序發布
- 優點:
- iTunes可以查看企業信息, 間接為公司做宣傳
- 可以創建和管理自己的開發團隊
- 缺點:
- 申請復雜,需要”鄧白氏”認證
- 申請周期比較長(連同”鄧白氏編碼”申請, 最好準備30天左右時間)
③企業賬號(299$)
- 功能:可以真機調試, 打包測試
- 優點:
- 可以在企業內部隨意安裝到蘋果設備,不需要經過AppStore審核
- 可以創建和管理自己的開發團隊
- 版本更新迭代比較快, 不需要經過審核
- 缺點:
- 申請復雜,需要”鄧白氏”認證
- 申請周期比較長(連同”鄧白氏編碼”申請, 最好準備30天左右時間)
- 不能使用此證書,將App發布到AppStore
6.開發經驗
①盡量不要從網絡渠道以及代申請的公司去申請”鄧白氏編碼”,因為花錢多, 而且申請下來的”鄧白氏編碼”不一定和蘋果服務器數據庫內一致, 最終導致不可用,浪費時間和金錢。最正確的做法: 直接和蘋果客服MM聯系, 她們會告訴你申請流程, 需要提交哪些材料。客服電話: 400 670 1855
②企業級賬號使用場景:
- App是針對某一特定人群制定使用.只在企業內部安裝, 無需發布到AppStore供他人下載
③默認真機調試證書只能生成兩個!!(也就意味著,只能綁定兩臺電腦進行真機調試)
- 注意:如果別人已經配置了兩個,而且正在使用不能隨便把別人的證書刪除。
- 解決方案: 此時只能使用從已經配置證書的電腦中,導出P12文件,進行共享( 讓其他電腦設備不需要生成cer證書,也可以進行真機調試)。
④測試的真機設備UDID最多只能添加100次, 而不是100臺。也就是說, 如果你加夠了100次之后, 即使刪除之前的設備名額, 也無法繼續添加。蘋果會在下一年, 給你一次刪除設備的機會, 你可以刪除一些設備, 來恢復一些名額.但是, 一旦你添加了設備后, 蘋果則視為你自動放棄添加設備!!
二.打包測試
1.什么是打包測試?
- 就是指將項目打包成為.ipa的壓縮包, 供指定設備安裝測試.
2.為什么要做打包測試?
- 當進入到測試階段, 需要專門的測試人員對APP進行測試, 此時需要將APP安裝到測試人員的測試設備上, 此時最佳的方案, 就是直接將項目打包成為.ipa包, 供測試人員下載測試。
3.怎樣進行打包測試?
步驟:
1.登錄apple的開發者主頁:developer.apple.com(限制人必須有apple ID 和開發者賬號)
2.選擇Ad Hoc生成一個ios_distribution.cer: 讓電腦具備打包程序的能力(限制電腦得配置打包測試證書,再利用該電腦生成CER文件)
3.新建一個App ID : 確定哪個APP可以被打包測試(限制app
配置需要真機測試App的BundleID)4.利用用戶設備的UDID注冊設備(限制真機設備,確定哪些設備可以被打包測試,蘋果每臺真機設備都擁有一個唯一標識:UDID)
-
5.選擇Ad Hoc利用ios_distribution.cer + 設備UDID + App ID --> 描述文件
- 描述文件的作用:
- 能知道在哪臺電腦上, 為哪臺設備打包哪個程序
- 哪臺設備需要測試哪個程序.
- 描述文件的作用:
-
6.安裝證書和描述文件
- ios_distribution.cer
- nj_iphone6_news.mobileprovision
7.項目Scheme右邊的設備選擇iOS Device
8.點擊Xcode的菜單Product --> Archive --> Distribute --> ....Ad Hoc... --> 選擇對應的描述文件
9.生成一個ipa文件,發給測試人員和客戶 ipa本質是zip (android的安裝包是APK格式,本質也是zip)
拓展:TestFlight(Beta版本測試):
步驟:
1.測試者提供他們的郵箱
2.開發者登錄iTunes Connect給測試者發送郵件邀請
3.測試者接受邀請,通過TestFlight軟件下載安裝程序
對比打包測試:
①步驟很少,操作簡單
②打包測試更多的還是針對公司內部測試人員,TestFlight更多的是面向真正的用戶。
三.程序發布
1. 什么是程序發布?
- 就是指將APP發布到AppStore, 供指定區域用戶下載
2. 為什么要程序發布?
- 你確定要問這個問題??? 好吧, 答案是賺錢
3. 程序發布的步驟?
①限制人
- 必須擁有Apple ID([https://appleid.apple.com])
- 加入開發者計劃,升級為開發者賬號([https://developer.apple.com])**
②限制電腦
- 重新配置一個發布證書需要使用需要程序發布的電腦,生成CER文件( CER文件: 證書簽名請求文件)
③限制app
- 配置需要真機測試App的BundleID 。區分不同APP,就是通過App的唯一標識: BundleID
④根據2,3重新生成發布描述文件
⑤在開發中心新建App, 并填寫App相關的信息
- 就比如我們下載別人的app,就會發現里面有預覽圖片, app版本,以及功能簡介等信息, 那這些信息都是我們在這一步填寫的
⑥準備好一個寫好的完整應用程序
- 注意:必須要有程序圖標,啟動圖片等,否則上傳會失敗
⑦運行設備選擇真機后 選擇Product -> Archive
⑧選擇 submit 打包項目,上傳構建版本
⑨提交審核
4.經驗補充
1.常規審核周期
- 審核周期2至20天不等, 而且他們碰到節假日還放假,遇到老板催的緊真蛋疼。。
2.加急審核
- 概念: 簡單理解就是你聯系蘋果審核人員,跟他們說明理由,讓他們優先給你們審核 地址: [https://developer.apple.com/contact/app-store/?topic=expedite]
3.加急審核注意事項(親身體驗)
- 加急審核,審核更加嚴格,親身體驗
- 首次發布,一般加急審核不給審批
- 加急審核申請一定要理由足夠強大(可以說:上線后發現重大Bug)
- 加急審核好爽, 只要你申請加急審核通過了. 那么只要你的app沒有上架,就會一直處于加急審核狀態, 一直到你上架為止, 此次加急才算結束(曾經有連續被拒7次經驗,歷時才10天)
- 加急審核有次數限制(一年好像有3次, 我只用過一次,沒測試過)
四.內購
1. 什么是內購?
- 內購就是指,在APP內購買某些產品。
如果你在App中銷售的商品,跟App有關(例如植物大戰僵尸中的道具,需要開啟關卡,擁有某種技能等等).那么,蘋果規定,必須通過內購方式購買.
內購分成: 3 : 7
2. 為什么做內購?
- 開發者創收的一種模式: free + 內購。
- 某些業務必須使用內購。
3. 內購的產品類型?
①非消耗品(Nonconsumable)
- 買了就一直有,不會消耗,例如開啟關卡
一般指的是在游戲中一次性購買并擁有永久訪問權的物品或服務。非消耗品物品可以被用戶再次下載,并且能夠在用戶的所有設備上使用
②消耗品(Consumable)
- 買了就用,用了就沒
專為支持可消耗的物品或服務設計的,消耗品購買不可被再次下載,根據其特點,消耗品不能在用戶的設備之間跨設備使用,除非自定義服務在用戶的賬號之間共享這些信息
③其他類型
- 以下三種類別在iBooks中使用,目前iBooks不支持大陸市場
免費訂閱(Free subscriptions)
自動續費訂閱(Auto-renewing subscriptions)
非自動續費訂閱(Nonrenewing subscriptions)
拓展:內購演練
在App管理中心,創建一個App,并填寫App信息
注意: 此處創建的App時,填寫套裝ID,時,必須選擇可以內購的套裝ID創建內購商品,并添加到App,指定此App,可以銷售哪些商品
注意: 創建內購商品的前提,是你已經填寫了稅務/銀行信息,否則的話,無法創建添加用于測試內購的測試賬號
創建App項目,開始開發
-
代碼實現內購流程如下:
(1) 從APP服務器請求數據列表, 并向蘋果服務器請求可以銷售的商品列表[YPDataTool 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;
}
}];
}
五.廣告
1.廣告的作用?
- 屬于創收的一種方式, 你在App內展示廣告,蘋果會付費給你,分成從原來的4:6 到 3:7
2.如何展示廣告?
- 導入框架: iAd.framework
- 添加控件: ADBannerView
- 實現代理 ADBannerViewDelegate,優化用戶體驗