首先, 看到snapshot部分判族,想必你已經(jīng)對FastLane已經(jīng)有了解。如果你對 Fastlane 還不太了解,那么可以先看我上一篇對于 Fastlane基礎(chǔ)介紹《24. 自動化工具Fastlane筆記一: 安裝, 打包,上傳(testFlight,app store)》项戴,再回來閱讀此篇文章形帮。
前言
Fastlane中和截圖相關(guān)的有兩部分,snapshot
和frameit
周叮。 snapshot
負責(zé)對應(yīng)用截圖辩撑,frameit
對圖片再加工修飾。
本文這里只針對snapshot
仿耽,以示例項目的形式給大家盡可能詳細的說明合冀。
UI Test
在Fastlane-snapshot部分,介紹了snapshot是基于UI Test來實現(xiàn)的项贺。UI Test是蘋果在Xcode7上推出的一個自動化測試模塊君躺。
snapshot uses the capabilities of Apple's UI Tests to drive interactions with your app.
如果想要對UI Test進行了解,大家可以在Fastlane doc中的snapshot部分中的《Getting Started Using UI Tests》小結(jié)找到官方推薦的文檔开缎。
好了棕叫,下面開始示例
項目示例及步驟
官方的步驟可以在都可以在Fastlane doc中查看, 文檔格式要比在github中的markdown形式好的多奕删。 《Setting Up snapshot》小結(jié)俺泣, 如下圖:
- step0: 執(zhí)行
sudo gem install snapshot
,安裝snapshot模塊
- step1: 正常創(chuàng)建項目(我的示例項目是之前的一個仿寫項目JiKeScrollView)
- step2: 執(zhí)行
fastlane init
創(chuàng)建fastlane文件夾(上一篇文章中有詳細介紹)
- step3: 執(zhí)行
fastlane snapshot init
,創(chuàng)建出Snapfile和SnapshotHelper.swift文件伏钠。
上邊三步還是比較簡單的横漏,如果你fastlane配置的沒有問題,很快就執(zhí)行成功熟掂。
下邊的步驟主要分為兩部分:
- 一是導(dǎo)入SnapshotHelper.swift(Swift)文件缎浇,也就是在OC項目中引入和使用Swift代碼
- 二是UI Test錄制手勢赴肚,和開始截圖
- step4:
Add the ./SnapshotHelper.swift file to your UI Test target (You can move the file anywhere you want)
把SnapshotHelper.swift
文件向平常一樣拖入項目尊蚁,選擇加入哪個target的時候, 選擇加入到JiKeScrollViewUITests(自己的項目名字UITests)
就可以了,千萬不要勾選其他兩個仑乌,否則會報錯import XCTest找不到
琴锭。
選擇加入的target, 點擊 [確定] 以后. 會詢問你是否創(chuàng)建橋接文件(只有第一次拖入的時候SnapshotHelper.swift 才會提示, 你如果刪除了SnapshotHelper.swift之后决帖, 再次向工程中拖入SnapshotHelper.swift就不會提示了讓你創(chuàng)建橋接文件了, 正常現(xiàn)象)扁远。 這個橋接文件對于在OC項目中引用Swift代碼畅买, 創(chuàng)建與否都可以细睡。但是反過來就不行了溜徙, 如果不提示創(chuàng)建橋接文件, 你可以嘗試手動創(chuàng)建該文件嗓违。 我們的示例項目是OC項目靠瞎!
- step5: 選中
target—JiKeScrollViewUITests-> Build Settings -> Defines Module
設(shè)置為YES乏盐。不設(shè)置這一項的話制恍,你會在第六步中發(fā)現(xiàn),引用文件JiKeScrollViewUITests-Swift.h(MYUITests-Swift.h)的時候何吝, 會出現(xiàn)報紅色警告爱榕。 這個警告雖然出現(xiàn)坡慌, 但是com+R依然能正常啟動和運行。但是Defines Module這一步在我們平常的OC引入Swift文件時候也是必須要有的洪橘,我們還是需要設(shè)置為YES, 如下圖:
- step6:
(Objective C only) Add the bridging header to your test class. (1) #import "MYUITests-Swift.h" 引入頭文件 (2)The bridging header is named after your test target with -Swift.h appended.
頭文件的名字是 “項目名+ -Swift.h”
回到示例項目渣玲,在JiKeScrollViewUITests.m
文件中弟晚,我們需要引入"JiKeScrollViewUITests-Swift.h"頭文件。(注意: 這個頭文件是系統(tǒng)默認生成的淑履,不用我們手動創(chuàng)建秘噪,我們在拖入Siwft文件之后勉耀,直接引用就可以。 沒有智能提示至壤,所以不必驚慌像街,保證#import'target名稱-Swift.h'
正確就可以了。)
到這里脓斩,com+R一下項目随静,是不是沒有任何報錯吗讶,直接運行了呢照皆?這里關(guān)于OC引入Swift代碼的部分就完成了
移步到JiKeScrollViewUITests.m文件中,簡單介紹一下文件中的三個方法(其實文件中英文注釋已經(jīng)說明了):
- (void)setUp: 方法在XCTestCase的測試方法調(diào)用之前調(diào)用论寨,可以在測試之前創(chuàng)建在test case方法中需要用到的一些對象等
- (void)tearDown: 當(dāng)測試全部結(jié)束之后調(diào)用tearDown方法葬凳,法則在全部的test case執(zhí)行結(jié)束之后清理測試現(xiàn)場室奏,釋放資源刪除不用的對象等
- (void)testExample: 測試代碼執(zhí)行性能
(引用和更新自 《 Xcode7 UITest UnitTest 自動化測試學(xué)習(xí)》)
- step7: 在
- (void)setUp
方法中初始化Snapshot對象代碼, 如下:
XCUIApplication *app = [[XCUIApplication alloc] init];
[Snapshot setupSnapshot:app];
[app launch];
- step8: 錄入UI Test操作胧沫,
In your UI Test class, click the Record button on the bottom left and record your interaction
绒怨,官方說點擊錄制按鈕直接錄制就可以了,這個地方需要注意的是犬金,你可能發(fā)現(xiàn)錄制紅色按鈕是灰色不可點擊狀態(tài)晚顷,這就尷尬了疗疟。這可怎么辦?
正確的操作是我們把鼠標(biāo)放到
- (void)testExample {
// Use recording to get started writing UI tests.
}
這個方法中栓袖。這個時候錄制按鈕才可以點擊! 點擊,自動啟動模擬器音榜,愉快的開始錄制我們的手勢操作必指。
關(guān)于錄制手勢,我們每次點擊事件,都會在testExample在這個方法中自動生成測試代碼霜第,我們要做的是在我們把下邊的代碼:
- Swift: snapshot("01LoginScreen")
- Objective C: [Snapshot snapshot:@"01LoginScreen" waitForLoadingIndicator:YES];
放到你需要截圖的點擊事件對應(yīng)的測試代碼位置泌类。
如下圖:
以上八步都完成以后刃榨,我們com+B一下,看看有沒有報警號桌吃,如果沒有茅诱,那么大功快要告成了搬卒。
- step9: 在工程文件家中找到
Snapfile
文件,打開按照我們需要的編輯摆寄。 英文注釋很簡明詳細椭迎,我只要快速提醒你田盈, #號是注釋就可以了。下邊是我的配置:
- step10: 最后一步简软,在控制臺執(zhí)行
fastlane snapshot
,根據(jù)上邊指定的截圖輸入位置建炫,我們可以看到截圖疼蛾,并且在瀏覽器中自動生成html文件了察郁。
到這里,snapshot部分就結(jié)束了稳捆。
等等麦轰,還有點問題
題目是淺析,本來我打算?用這個當(dāng)做App Store的展示圖片的款侵,但是發(fā)現(xiàn)還是挺麻煩的,而且
frameit
還沒有弄鞠评,還是交給美工同志實在一點剃幌。
這篇文章并不完美晾浴,比如而且遇到一個問題就是對錄制一個手勢操作,即一個地方加入[Snapshot snapshot:@"01LoginScreen" waitForLoadingIndicator:YES];
成功抖棘。 這個顯然是存在問題的切省,肯定是可以對很多的手勢進行操作的帕胆,但是我也沒有找出具體的原因懒豹。希望有知道的朋友驯用,一定要告訴我一下蝴乔,不勝感激~驮樊!執(zhí)行第十步囚衔,會遇到一個錯誤
Incomplete universal character name
導(dǎo)致snapshot操作不成功。具體原因現(xiàn)在查到的是因為UTF轉(zhuǎn)碼的問題曙聂,需要把@"\U5373\U523b\U9996\U9875\U6eda\U52a8\U6548\U679c
中的大寫U替換成小寫U鞠鲜,就可以了贤姆。 具體可以看《UITests Incomplete universal character name》這里強調(diào)一下: OC引入Swift的橋接文件稳衬,如果你之前點擊了取消薄疚,后期再拖入和創(chuàng)建Swift文件是不會再次提示創(chuàng)建的,你需要做的是手動創(chuàng)建砰碴。 步驟《OC引入Swift板丽,混編》和 《在Swift項目中使用OC埃碱,在OC項目中使用Swift》
參考文章
《fastlane screenshots for iOS and tvOS》
《fastlane 之截圖自動化》
交流
希望能和大家交流技術(shù)
Blog:http://www.lilongcnc.cc