fastlane でスクリーンショットを撮ろうとしています。現時点では iTunes Connect に送信する必要はありません。スクリーンショットだけを撮ろうとしていますが、「テストに失敗しました」というメッセージが表示されます。
私のSnapfileがあります:
# A list of devices you want to take the screenshots from
devices([
"iPhone 6",
"iPhone 6 Plus",
"iPhone 5s",
"iPhone 4s",
])
languages([
“pt”
])
# The name of the scheme which contains the UI Tests
scheme “Consultor”
# Where should the resulting screenshots be stored?
output_directory "./screenshots"
clear_previous_screenshots true # remove the '#' to clear all previously generated screenshots before creating new ones
# Choose which project/workspace to use
workspace “././Consultor.xcworkspace"
そして私のfastfileがあります:
# Customise this file, documentation can be found here:
# https://github.com/fastlane/fastlane/tree/master/fastlane/docs
# All available actions: https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Actions.md
# can also be listed using the `fastlane actions` command
# Change the syntax highlighting to Ruby
# All lines starting with a # are ignored when running `fastlane`
# If you want to automatically update fastlane if a new version is available:
# update_fastlane
# This is the minimum version number required.
# Update this, if you use features of a newer version
fastlane_version "1.88.0"
default_platform :ios
platform :ios do
before_all do
# ENV["SLACK_URL"] = "https://hooks.slack.com/services/..."
cocoapods
end
desc "Runs all the tests"
lane :test do
scan
end
desc "Take screenshots"
lane :screenshot do
snapshot
end
desc "Submit a new Beta Build to Apple TestFlight"
desc "This will also make sure the profile is up to date"
lane :beta do
# match(type: "appstore") # more information: https://codesigning.guide
gym # Build your app - more options available
pilot
# sh "your_script.sh"
# You can also use other beta testing services here (run `fastlane actions`)
end
desc "Deploy a new version to the App Store"
lane :appstore do
# match(type: "appstore")
# snapshot
gym # Build your app - more options available
deliver(force: true)
# frameit
end
# You can define as many lanes as you want
after_all do |lane|
# This block is called, only if the executed lane was successful
# slack(
# message: "Successfully deployed new App Update."
# )
end
error do |lane, exception|
# slack(
# message: exception.message,
# success: false
# )
end
end
# More information about multiple platforms in fastlane: https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Platforms.md
# All available actions: https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Actions.md
# fastlane reports which actions are used
# No personal data is recorded. Learn more at https://github.com/fastlane/enhancer
私のプロジェクトは迅速に書かれており、私のテストクラスは次のとおりです: ConsultorUITests:
//
// SnapshotHelper.swift
// Example
//
// Created by Felix Krause on 10/8/15.
// Copyright © 2015 Felix Krause. All rights reserved.
//
import Foundation
import XCTest
var deviceLanguage = ""
var locale = ""
@available(*, deprecated, message="use setupSnapshot: instead")
func setLanguage(app: XCUIApplication) {
setupSnapshot(app)
}
func setupSnapshot(app: XCUIApplication) {
Snapshot.setupSnapshot(app)
}
func snapshot(name: String, waitForLoadingIndicator: Bool = true) {
Snapshot.snapshot(name, waitForLoadingIndicator: waitForLoadingIndicator)
}
public class Snapshot: NSObject {
public class func setupSnapshot(app: XCUIApplication) {
setLanguage(app)
setLocale(app)
setLaunchArguments(app)
}
class func setLanguage(app: XCUIApplication) {
guard let prefix = pathPrefix() else {
return
}
let path = prefix.stringByAppendingPathComponent("language.txt")
do {
let trimCharacterSet = NSCharacterSet.whitespaceAndNewlineCharacterSet()
deviceLanguage = try NSString(contentsOfFile: path, encoding: NSUTF8StringEncoding).stringByTrimmingCharactersInSet(trimCharacterSet) as String
app.launchArguments += ["-AppleLanguages", "(\(deviceLanguage))"]
} catch {
print("Couldn't detect/set language...")
}
}
class func setLocale(app: XCUIApplication) {
guard let prefix = pathPrefix() else {
return
}
let path = prefix.stringByAppendingPathComponent("locale.txt")
do {
let trimCharacterSet = NSCharacterSet.whitespaceAndNewlineCharacterSet()
locale = try NSString(contentsOfFile: path, encoding: NSUTF8StringEncoding).stringByTrimmingCharactersInSet(trimCharacterSet) as String
} catch {
print("Couldn't detect/set locale...")
}
if locale.isEmpty {
locale = NSLocale(localeIdentifier: deviceLanguage).localeIdentifier
}
app.launchArguments += ["-AppleLocale", "\"\(locale)\""]
}
class func setLaunchArguments(app: XCUIApplication) {
guard let prefix = pathPrefix() else {
return
}
let path = prefix.stringByAppendingPathComponent("snapshot-launch_arguments.txt")
app.launchArguments += ["-FASTLANE_SNAPSHOT", "YES", "-ui_testing"]
do {
let launchArguments = try NSString(contentsOfFile: path, encoding: NSUTF8StringEncoding) as String
let regex = try NSRegularExpression(pattern: "(\\\".+?\\\"|\\S+)", options: [])
let matches = regex.matchesInString(launchArguments, options: [], range: NSRange(location:0, length:launchArguments.characters.count))
let results = matches.map { result -> String in
(launchArguments as NSString).substringWithRange(result.range)
}
app.launchArguments += results
} catch {
print("Couldn't detect/set launch_arguments...")
}
}
public class func snapshot(name: String, waitForLoadingIndicator: Bool = true) {
if waitForLoadingIndicator {
waitForLoadingIndicatorToDisappear()
}
print("snapshot: \(name)") // more information about this, check out https://github.com/fastlane/fastlane/tree/master/snapshot
sleep(1) // Waiting for the animation to be finished (kind of)
XCUIDevice.sharedDevice().orientation = .Unknown
}
class func waitForLoadingIndicatorToDisappear() {
let query = XCUIApplication().statusBars.childrenMatchingType(.Other).elementBoundByIndex(1).childrenMatchingType(.Other)
while (0..<query.count).map({ query.elementBoundByIndex($0) }).contains({ $0.isLoadingIndicator }) {
sleep(1)
print("Waiting for loading indicator to disappear...")
}
}
class func pathPrefix() -> NSString? {
if let path = NSProcessInfo().environment["SIMULATOR_HOST_HOME"] as NSString? {
return path.stringByAppendingPathComponent("Library/Caches/tools.fastlane")
}
print("Couldn't find Snapshot configuration files at ~/Library/Caches/tools.fastlane")
return nil
}
}
extension XCUIElement {
var isLoadingIndicator: Bool {
return self.frame.size == CGSize(width: 10, height: 20)
}
}
// Please don't remove the lines below
// They are used to detect outdated configuration files
// SnapshotHelperVersion [1.2]
最後に、端末は次のようにログに記録します。
` ▸ Build Pods/Alamofire [Debug] ▸ Check Dependencies ▸ Building Pods/Gloss [Debug] ▸ Check Dependencies ▸ Building Pods/JGProgressHUD [Debug] ▸ Check Dependencies ▸ Building Pods/Pods-Consultor [Debug] ▸ Check Dependencies ▸ Building Consultor /Consultor [Debug] ▸ Check Dependencies ▸ Running script 'Check Pods Manifest.lock' ▸ Running script 'Embed Pods Frameworks' ▸ Running script 'Copy Pods Resources' ▸ Running script 'Run Script' ▸ Build Consultor/ConsultorTests [Debug] ▸依存関係のチェック ▸ Consultor/ConsultorUITests の構築 [デバッグ] ▸ 依存関係のチェック ▸ ConsultorUITests.swift のコンパイル ▸ ConsultorUITests のリンク ▸ 'ConsultorUITests.xctest.dSYM' の生成 ▸ ConsultorUITests.xctest のタッチ ** テスト失敗 **
すべてのテスト [08:49:30]: 終了ステータス: 65 [08:49:30]: テストに失敗しました - 上記のログを確認してください [08:49:30]: テストに失敗し、2 回のうち 1 回再試行しています`