背景介紹
TestFlight Beta 版測試讓您可以分發你 App 的 Beta 版構建版本給測試員并收集反饋。
TestFlight的出現是在iOS8的時候,在Xcode 6和iOS 8上公開發行,它被整合到了iTunes Connect,你可以通過電子郵件的形式來邀請你的Beta測試成員。
TestFlight的測試方式分為兩種,一種是內部測試,一種是外部測試。從功能上講,這兩種方式都可以為測試人員在測試階段對你的App進行測試。但是既然分了內部測試和外部測試,他們肯定還是有區別的,所謂的內部主要是指iTunes Connect上在你的開發團隊里參與技術開發或者管理的成員(管理員,技術,法務人員)。最多可以邀請25個內部成員,而與之相對的外部測試,指的是那些不屬于你的團隊或者公司的測試者,外部測試人員的上限是10000人。這里有一點需要注意的是,在你邀請外部成員參與測試之前,需要先通過蘋果的審核,一般審核會在一天左右。而這一限制在內部成員上就沒有,也就是說只要你把你的App上傳到iTunes Connect上之后內部成員就可以開始進行內部測試了,無需審核。
準備工作
- 待測試的 ipa 包(用Application Loader上傳)或者是 archive (用Xcode Upload to App Store)文件(需要上傳到 iTunes Connect );
- 到 App Store 下載安裝軟件 TestFlight;
步驟
- 將打包好的 ipa 或 xcarchive 文件上傳到 iTunes Connect;
- 登錄到 iTunes Connect 進入我的APP,選擇你的APP;
-
到 TestFlight 模塊下,如果 App Store 有提交過的版本,內部測試員就可以了,我們只需要添加內部測試員用戶即可,如圖:
添加內部測試員.jpeg
- 接下來坐等收郵件,就是剛剛添加的那個用戶郵箱,會收到郵件,如圖:
- 點擊 View in TestFlight 獲取邀請碼,如圖:
- 接下來打開之前下載的 TestFlight 軟件,輸入邀請碼即可,接下來就可以安裝之前構建的版本和 App Store 的歷史版本。(每個版本都有90天的有效期,時間是從你的構建版本上傳到 iTunes Connect 算起)
注意:每一個邀請碼對應一個 Apple ID ,在 TestFlight 軟件中無需收輸入Apple ID(其實也沒法輸入),它會自動獲取當前設備登錄的 Apple ID ,如果此邀請碼已經被激活(就是已綁定 Apple ID ),則無法在不同的 Apple ID 下使用了(如果多臺設備都登錄的是已綁定的 Apple ID 則不會出現此問題)。不過還有一種方法就是在不同的設備登錄邀請碼綁定的 Apple ID ,這樣直接打開 TestFlight 都不需要輸入邀請碼即可下載安裝測試軟件。
添加外部測試員基本差不多,接下來我直接上圖
填坑
在操作步驟3的時候可能會出現提示:“缺少出口合規證明”,這時需要做如下操作:
在info.plist中增加鍵值對,ITSAppUsesNonExemptEncryption 設置為NO
然后更改內部版本號,重新打包提交測試,搞定
<--------------------這是一個分割線------------------------>
以上步驟就可以利用TestFlight對我們的應用進行灰度測試了。但是我們發現一個問題,如果我們想像別的App一樣,直接彈框告訴用戶有新版本,用戶點擊體驗新版本,就可以直接跳轉到TestFlight體驗新版本,這個邏輯該怎么實現呢?
我們知道,按照以上方式,用戶需要打開郵件、復制邀請碼、打開 TestFlight、輸入邀請碼等繁瑣的步驟,我們要做到邀請碼對用戶透明。
- 經過幾天的查找資料,終于找到了一種方式,就是hook Apple發給我們的郵件,拿到那個體驗的Url,然后發給我們的用戶,就可以了。
- 我們在上面第五步"點擊 View in TestFlight 獲取邀請碼"時,可以拿到一個Url,這個Url就是我們需要的Url,格式是這樣的
https://beta.itunes.apple.com/v1/invite/0415669eebc44c5688cf63b5d067d7950217d8b20cd548a39c1080195aa64ec253bccb1f?ct=22ZNNCDS7U&advp=10000&platform=ios
, - 后臺將得到的那個 URL 在應用內發給受邀用戶即可(當然啦,對用戶來說是透明的),然后就是彈 Alert -> 彈 Controller -> 接受邀請并愉快地下載內測版本 -> 愉快地體驗內測版本。
-
這里有一個需要注意的,如果用戶本地沒有安裝TestFlight可以直接通過OpenUrl來打開該鏈接,如果用戶已經安裝了TestFlight,需要改為
itms-beta://beta.itunes.apple.com/v1/invite/0415669eebc44c5688cf63b5d067d7950217d8b20cd548a39c1080195aa64ec253bccb1f?ct=22ZNNCDS7U&advp=10000&platform=ios
。
所以最后的代碼是這樣的:
-(void)openUrl:(NSString *)type
{
NSString *url = nil;
NSURL *customAppURL = [NSURL URLWithString:@"itms-beta://"];
if ([[UIApplication sharedApplication] canOpenURL:customAppURL]) {
url = [NSString stringWithFormat:@"itms-beta://%@",url?:self.plistDict[@"BetaUrl"][type]];
customAppURL = [NSURL URLWithString:url];
[[UIApplication sharedApplication] openURL:customAppURL];
return;
}else {
url = [NSString stringWithFormat:@"https://%@",url?:self.plistDict[@"BetaUrl"][type]];
customAppURL = [NSURL URLWithString:url];
[[UIApplication sharedApplication] openURL:customAppURL];
}
}
看下實現效果: