教你一步一步實現iOS真機調試、打包、app上架、蘋果內購

近期對自己的App進行上架,其中走了很多彎路,最后終于成功了!總結了下方便以后復習同時讓大家看下有沒有紕漏的地方。

一、真機調試介紹


QQ20161031-0.png

二、怎樣做真機調試

QQ20161031-1.png

三、申請AppleID在這里就不做說明了,直接進這里https://appleid.apple.com/cn/注冊就可以了

四、申請好AppleID后需要加入蘋果開發者計劃

QQ20161031-2.png
QQ20161031-3.png
QQ20161031-4.png
QQ20161031-5.png
QQ20161101-0.png
QQ20161101-1.png
QQ20161101-2.png
QQ20161101-3.png
QQ20161101-4.png
QQ20161101-5.png

五、配置真機調試

開發者主頁:https://developer.apple.com

QQ20161101-0.png
QQ20161101-1.png
QQ20161101-2.png
QQ20161101-3.png
QQ20161101-4.png
QQ20161101-5.png

![QQ20161101-6.png](http://upload-images.jianshu.io/upload_images/1825653-44e06bcf38232990.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240

![QQ20161101-7.png](http://upload-images.jianshu.io/upload_images/1825653-ba76df5f26421cb9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240

![QQ20161101-8.png](http://upload-images.jianshu.io/upload_images/1825653-8640e269c94d8b21.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240

![QQ20161101-9.png](http://upload-images.jianshu.io/upload_images/1825653-d4156f5f0c99018e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240

QQ20161101-10.png
QQ20161101-11.png

![QQ20161101-12.png](http://upload-images.jianshu.io/upload_images/1825653-b65189eec4336eb0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240

QQ20161101-13.png
QQ20161101-14.png
QQ20161101-15.png
QQ20161101-16.png
QQ20161101-17.png
QQ20161101-18.png
QQ20161101-19.png
QQ20161101-20.png

![QQ20161101-21.png](http://upload-images.jianshu.io/upload_images/1825653-853b1650aa70744e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240

QQ20161101-22.png

![QQ20161101-23.png](http://upload-images.jianshu.io/upload_images/1825653-ba29484e85020566.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240

QQ20161101-24.png

六、配置P12文件

QQ20161101-0.png
QQ20161101-1.png
QQ20161101-2.png

七、測試打包介紹和流程

QQ20161101-3.png
QQ20161101-0.png
QQ20161101-1.png
QQ20161101-2.png
QQ20161101-3.png
QQ20161101-4.png
QQ20161101-5.png
QQ20161101-6.png
QQ20161101-7.png
QQ20161101-8.png

八、發布應用程序

QQ20161101-0.png
QQ20161101-1.png

![QQ20161101-2.png](http://upload-images.jianshu.io/upload_images/1825653-245fe22ec650770d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240

QQ20161101-3.png
QQ20161101-4.png
QQ20161101-5.png
QQ20161101-6.png
QQ20161101-7.png
QQ20161101-8.png
QQ20161101-9.png
QQ20161101-10.png
QQ20161101-11.png
QQ20161101-12.png
QQ20161101-13.png
QQ20161101-14.png
QQ20161101-15.png
QQ20161101-16.png

九、APP內購的介紹

QQ20161101-0.png
QQ20161101-1.png
QQ20161101-2.png
QQ20161101-3.png
QQ20161101-4.png
QQ20161101-5.png
QQ20161101-6.png
QQ20161101-7.png
QQ20161101-8.png
QQ20161101-9.png
QQ20161101-10.png
QQ20161101-11.png
  • (void)requestWangtedProducts
    {
    // 1.獲取想要賣的商品的ProductId
    NSString *productPath = [[NSBundle mainBundle] pathForResource:@"iapdemo.plist" ofType:nil];
    NSArray *products = [NSArray arrayWithContentsOfFile:productPath];
    NSArray *productIds = [products valueForKeyPath:@"productId"];

// 2.將ProductIds發送到蘋果服務器,請求這些商品是否可賣
NSSet *productIdSet = [NSSet setWithArray:productIds];
SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdSet];
request.delegate = self;
[request start];
}

在代理方法中拿到可銷售的商品

pragma mark - 實現SKProductsRequest的代理方法

  • (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
    {
    // 1.獲取可銷售的商品,并且排序
    self.products = [response.products sortedArrayWithOptions:NSSortConcurrent usingComparator:^NSComparisonResult(SKProduct *obj1, SKProduct *obj2) {
    return [obj1.price compare:obj2.price];
    }];

// 2.以tableView的形式展示商品
[self.tableView reloadData];
}

QQ20161101-12.png

用戶點擊購買,創建票據

  • (void)buyProduct:(SKProduct *)product
    {
    // 1.創建票據
    SKPayment *payment = [SKPayment paymentWithProduct:product];

// 2.將票據加到到交易隊列中
[[SKPaymentQueue defaultQueue] addPayment:payment];

// 3.觀察交易隊列中交易發生的改變
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
}

交易隊列中交易發生改變時,執行的監聽方法

pragma mark - 實現交易發生改變的回調方法

  • (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
    {
    for (SKPaymentTransaction *transaction in transactions) {
    switch (transaction.transactionState) {
    case SKPaymentTransactionStatePurchasing:
    NSLog(@"正在購買商品");
    break;

    case SKPaymentTransactionStatePurchased:
        NSLog(@"購買成功");
        [queue finishTransaction:transaction];
        break;
    
    case SKPaymentTransactionStateFailed:
        NSLog(@"購買商品失敗");
        [queue finishTransaction:transaction];
        break;
    
    case SKPaymentTransactionStateRestored:
        NSLog(@"恢復購買");
        [queue finishTransaction:transaction];
        break;
    
    case SKPaymentTransactionStateDeferred:
        NSLog(@"最終狀態未決定");
        break;
    
    default:
        break;
    

    }
    }

以上供大家參考!謝謝!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容