今天我下载了 xCode 9 并开始将所有内容转换为 Swift 3.2/4,这样我就可以构建和运行我的项目。
正如预期的那样,迦太基会抱怨某些项目无法构建,因为它们与 Swift 3.2/4 不兼容。我必须找到兼容的版本并构建它们。
我还必须使用 --no-use-binaries,因为某些框架是使用以前版本的 Swift 预编译的。
然后我收到以下错误:
尝试读取 AWSiOSSDKv2.xcodeproj 时 xcodebuild 超时
到目前为止,我可能没有收到此错误,因为我正在下载预编译的 AWS 框架。现在迦太基必须在本地编译它,缺少某些东西并导致超时。
具体来说,来自尤里卡。我正在尝试使用此分支:https : //github.com/xmartlabs/Eureka/tree/feature/Xcode9-Swift3_2, 因为主分支无法构建。
这是我给大师的 Cartfile:github "xmartlabs/Eureka" ~> 3.0.0
我试图指定 XCode9(因为那是我正在使用的)分支:github "xmartlabs/Eureka" "/tree/feature/Xcode9-Swift3_2" , github "xmartlabs/Eureka" "/feature/Xcode9-Swift3_2" , 和 github "xmartlabs/Eureka" "/Xcode9-Swift3_2"。
在这一点上我只是猜测。
有什么帮助吗?
任何人都可以帮助我调试这个问题,从我开始使用带有 iOS 11 GM 种子的 Xcode 9 GM 种子开始,我的代码在控制台中向我发出警告说:
2017-09-18 16:22:52.872716+0530 **** *****[359:20158] [reports] Main Thread Checker: UI API called on a background thread: -[UIApplication
applicationState] .PID: 359, TID: 20158,
Thread name: Runtime Network Callback Thread,
Queue name: com.apple.root.default-qos.overcommit, QoS: 21
Backtrace:
Run Code Online (Sandbox Code Playgroud)
此外,我在我的应用程序中使用 ESRI 地图,当我放大或缩小 ESRI 地图时,我收到此错误:
2017-09-18 16:22:53.176524+0530 *** ***[359:20063] Task <5F9376DB-9335-
4A45-B3F0-1D6FD69A19A3>.<29> finished with error - code: -999
2017-09-18 16:22:53.178923+0530 *** ***[359:20142] Task <0DE282EA-3FBD-
4036-8298-C75EFA65F15A>.<40> HTTP load failed (error code: -999 [1:89])
2017-09-18 16:22:53.179821+0530 *** *[359:20063] Task <BE2D8BAE-FFB8- …Run Code Online (Sandbox Code Playgroud) 似乎有很多类似于我遇到的问题:
AVCaptureMetadataOutput setMetadataObjectTypes找不到支持的类型
还有一个处理AVFoundation的Apple bug:
https://forums.developer.apple.com/thread/86810#259270
但这些似乎都不是我的答案.
我的代码在swift 3中运行得很好,但只会在swift 4中出错.使用上面链接中的解决方案根本不会发生任何变化.
码:
import UIKit
import AVFoundation
class BarCodeScanViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate {
weak var delegate: FlowControllerDelegate?
var captureSession: AVCaptureSession = AVCaptureSession()
var previewLayer: AVCaptureVideoPreviewLayer = AVCaptureVideoPreviewLayer()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.black
captureSession = AVCaptureSession()
guard let videoCaptureDevice = AVCaptureDevice.default(for: .video) else { return }
let videoInput: AVCaptureDeviceInput
do {
videoInput = try AVCaptureDeviceInput(device: videoCaptureDevice)
} catch {
return
}
if (captureSession.canAddInput(videoInput)) {
captureSession.canAddInput(videoInput)
} else { …Run Code Online (Sandbox Code Playgroud) 我没有在Source Control Navigator(键盘快捷键:command-2)或Source Control菜单选项中看到一个选项.
与git status终端上的命令对应的文件列表.另外,如果可能的话git diff --staged.
请添加键盘快捷键(如果有).
我想将此代码更新为swift 4:
rc = select(socket_fd + 1, readfd, writefd, NULL, &timeout);
return rc;
}
Run Code Online (Sandbox Code Playgroud)
但我得到两个错误:
必须在模块'Darwin.POSIX.sys.time'中导入'select'
声明才能满足需要C99中函数'select'的隐式声明无效
我怎么能解决这个问题?
迁移到swift 4后出现2个错误。
第一个错误:
条件绑定的初始化器必须具有 Optional 类型,而不是 AVCaptureVideoPreviewLayer。
第二个错误:
条件绑定的初始化程序必须具有 Optional 类型,而不是 [AVCaptureDevice]。
我应该如何纠正这些错误?
谢谢
ios 应用程序的 UI 测试,在 Xcode 8 和 swift 3.2 中开发。
将 Xcode 版本 8 升级到 9 后,我面临处理拖放的问题
我想将一个元素[i.e. button]拖放到另一个元素上[i.e. on homepage]。
对于 Xcode 8,我使用以下方法实现了它:
let sourceElement = app.buttons["Video_Button"]
let destElement = app.scrollViews.scrollViews.images.element(boundBy: 0)
sourceElement.press(forDuration: 0.5, thenDragTo: destElement)
Run Code Online (Sandbox Code Playgroud)
但是上面的代码在 Xcode 9 和 Swift 3.2 中不起作用。
我正在使用 xctest 框架快速编写 UI 测试用例。
我想根据测试用例通过或失败或跳过触发另一个任务(例如截屏或)。我当前的代码如下
import Foundation
import XCTest
class HomePageChromeUITests: XCTestCase {
var pathStr:String = ""
override func setUp() {
super.setUp()
continueAfterFailure = false
self.launchWithUserLoggedIn()
}
override func tearDown() {
super.tearDown()
}
func testHomePageChrome_10385() {
let app = XCUIApplication()
let backButton = app.buttons[AccessibilityIdentifiers.PageEditorBackButton]
let editButton = app.buttons[AccessibilityIdentifiers.PageEditorEditButton]
XCTAssertTrue(backButton.exists && backButton.frame.origin.x < editButton.frame.origin.x, "Back button does not exist.---10385")
XCTAssertTrue(!editButton.exists, "Edit button does not exist.---10385")
}
}
Run Code Online (Sandbox Code Playgroud)
我想在测试用例失败时触发一个方法,并在那里传递我的失败消息,即“10385”。
我怎样才能做到这一点。任何帮助,将不胜感激。