开发者社区 问答 正文

iOS未定义符号:Swift 5中的_UTTypeConformsTo?

我正在从事ios项目。目前我没有任何问题。但是,iOS 11.4版本的iPhone 6存在问题。

我已经使用iOS 12.4 iPhone 6设备构建了项目,但没有任何问题。

连接物理设备时,这是一个问题。我的错误如下。

Undefined symbols for architecture arm64: "UTTypeConformsTo", referenced from: myapp.Document.uti(: Swift.String, conformsTo: Swift.String) -> Swift.Bool in Document.o ld: symbol(s) not found for architecture arm64 clang: error: linker command failed with exit code 1 (use -v to see invocation) Undefined symbol : _UTTypeConformsTo 我在Document.swift文件中有此功能。

Document.swift

class Document: UIDocument {

var fileData: Data?

var filesText: Data?

func uti(_ uti: String, conformsTo candidateParent: String) -> Bool {
    return UTTypeConformsTo(uti as CFString, candidateParent as CFString)
}

... override func load(fromContents contents: Any, ofType typeName: String?) throws { if let fileType = typeName { if fileType == "public.png" || fileType == "public.jpeg" { // .jpg not recognized if let fileContents = contents as? Data { fileData = fileContents } } else if !uti(typeName!, conformsTo: "public.data") { throw IXError.fileAcessFailed } else { if let fileContents = contents as? Data { filesText = fileContents } print("File type unsupported.") }

    } // end if let fileType = typeName

} // end func load

有问题的环境:

Xcode:版本11.0 设备:iPhone 6和11.4 ios版本//获取错误 设备:iPhone 6和12.4 ios版本//此设备正常运行。 两种设备不同。

到目前为止,还没有问题,但是尝试构建此设备时会出现问题。有什么问题?

展开
收起
被纵养的懒猫 2019-09-25 15:16:42 1238 分享 版权
阿里云 AI 助理回答

遇到您描述的错误,通常意味着编译器在链接阶段找不到某个符号(在这个案例中是UTTypeConformsTo)。这可能是由于未正确导入相关框架或者该函数在目标iOS版本中不可用所导致的。考虑到您提到的环境和错误信息,这里有一些建议来解决您的问题:

  1. 确认框架导入:确保您的项目已经正确导入了使用UTTypeConformsTo函数所需的框架。这个函数属于MobileCoreServices框架,在Swift中应该通过导入UniformTypeIdentifiers来使用。请检查您的Document.swift文件顶部是否包含了正确的导入语句:

    import UniformTypeIdentifiers
    

    如果没有,请添加。

  2. 条件编译:考虑到不同iOS版本间的API变化,您可以使用条件编译来确保只在支持相应API的系统上调用这些方法。虽然UTTypeConformsTo在iOS 11及以后应该是可用的,但有时候根据Xcode版本和项目的配置,可能会出现意外情况。不过,对于此特定函数,条件编译可能不是必要的,因为它是从较早的iOS版本就开始支持的。

  3. 清理并重建项目:有时候Xcode的缓存或构建设置会引发这类问题。尝试执行以下步骤:

    • 清理项目:在Xcode菜单中选择Product > Clean Build Folder...
    • 删除DerivedData:手动删除位于~/Library/Developer/Xcode/DerivedData的目录下的项目相关缓存。
    • 重启Xcode后重新构建项目。
  4. 检查部署目标:确认您的项目的“Deployment Target”设置正确反映了您想要支持的最低iOS版本。可以在Xcode的项目设置中的General标签页下找到并调整这一设置。确保它不低于iOS 11.4,因为这是您测试设备的系统版本。

  5. 查看Xcode和iOS SDK兼容性:虽然不太常见,但有时Xcode的新版本可能与旧版iOS设备不完全兼容。考虑到您使用的Xcode 11.0相对较老,如果上述方法都无法解决问题,考虑升级到更高版本的Xcode,同时注意检查新版本Xcode对iOS 11的支持情况。

如果以上步骤都不能解决问题,可能需要更详细地检查项目的构建设置,确保没有其他配置错误影响到了编译过程。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: