錯誤的認(rèn)識
以前一直認(rèn)為Debug
等同于Development
奇钞,Release
等同于Distribution
所以Xcode中的配置也必須是這樣的
Debug
對應(yīng)Development
證書及Provisioning Profile
溃卡,Release
對應(yīng)Distribution
證書及Provisioning Profile
互纯。
遇到的問題
最近遇到一個問題就是在AppStore中下載的應(yīng)用無法收到推送通知(APNs)新啼,在用Xcode連接手機真機調(diào)試時沒有問題(后面發(fā)現(xiàn)是后臺沒有改成發(fā)送Distribution
的通知)喝噪,于是就在想汰现,可不可以讓App是在Production(Distribution)環(huán)境下運行的呢胶坠?這樣就不用發(fā)布了才知道不能收到推送君账。
也就是Debug對應(yīng)的證書及Provisioning Profile
改為Distribution
,這樣能不能跑到手機上呢沈善?試下又不會懷孕是吧乡数!
結(jié)果是這樣的
不能直接跑起來,不知道有沒有成功呢矮瘟,那彈個AlertView好了
在AppDeleagte的
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
方法中添加了如下代碼
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Title"
message:@"Message"
delegate:nil
cancelButtonTitle:nil
otherButtonTitles:nil, nil];
[alert show];
重新Run一下瞳脓,再直接在手機上點開App,發(fā)現(xiàn)沒有任何反應(yīng)澈侠,說明代碼沒有更新到手機中劫侧,怎么辦呢?苦思冥想中...
突然想起Distribution還有另一種Provisioning Profile
哨啃,就是Ad Hoc
烧栋。
在developer.apple.com
中對Ad Hoc
的描述是這樣的
Create a distribution provisioning profile to install your app on a limited number of registered devices.
也就是說和Development
類似,但是限制了安裝的設(shè)備拳球。試下這個审姓?
修改下Provisioning Profile
,出現(xiàn)了如下提示
[圖片上傳失敗...(image-29aa24-1510996963009)]_Error.png)
發(fā)現(xiàn)App啟動了祝峻,但是沒有繼續(xù)運行魔吐,是不是代碼也更新到手機上了呢??
重新打開App,結(jié)果彈窗出現(xiàn)了@痴摇3昴贰!0履纭辞色!
但是怎么確定現(xiàn)在是Distribution
環(huán)境下的呢?可以用DeviceToken來區(qū)分浮定,對比原先在Development
環(huán)境下得到的相满。
另一個問題又來了层亿,不能看到Log呀,怎么拿到DeveiceToken呢立美???
自然而然就想到了匿又,彈個窗唄!
就有了如下代碼
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
NSString *deviceTokenString = [deviceToken description];
deviceTokenString = [deviceTokenString stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
deviceTokenString = [deviceTokenString stringByReplacingOccurrencesOfString:@" " withString:@""];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Title"
message:deviceTokenString
delegate:nil
cancelButtonTitle:nil
otherButtonTitles:nil, nil];
[alert show];
}
對比一看悯辙,果然DeviceToken
不同琳省,發(fā)個通知試下?
友盟的后臺好像不能針對某個DeviceToken
發(fā)Distribution
環(huán)境下的通知躲撰,記得以前在GitHub看到一個工具可以發(fā)送APNs
通知针贬,于是找了下,果然看到了SmartPush
選擇生產(chǎn)(Production)
環(huán)境拢蛋,等等桦他,怎么輸入DeviceToken
啊,不可能對著彈窗一個一個輸吧??
于是添加了一行這樣的代碼
[UIPasteboard generalPasteboard].string = deviceTokenString;
Command + V
谆棱,再點擊推送快压,收到通知了!@啤D枇印!??????
總結(jié)
這么一折騰下來个从,對Debug脉幢、Release 和 Development、Production(Distribution)就有了不同的理解嗦锐。
我是這么想的嫌松,Debug、Release是相對于編譯器而言的奕污,是代碼編譯的一個Flag
萎羔,而Development、Production是代碼運行到設(shè)備上碳默、打包成iPA的一個簽名方式贾陷。兩者并沒有必然的聯(lián)系。
以上是自己的一點理解嘱根,可能不怎么正確昵宇,還望各位大佬指正。