我的 Xcode 项目“MyMainApp”有一个名为“MyLib”的静态库类型 Xcode 子项目。现在我需要在我的 iOS 应用程序中使用一些第三方 iOS 框架。我只想将它们添加/链接到 MyLib 而不是 MyMainApp,这样我就可以使 MyLib 可重用且独立,以便在我的其他 iOS 应用程序中使用它。MyMainApp 中的一些视图控制器使用属于 MyLib 的视图控制器之一。MyLib 中的此视图控制器使用第三方框架内的类的功能。现在我面临的问题是,如果我将第三方框架添加到 MyLib 而不是将它们添加到 MyMainApp,我会收到链接器错误“词法或预处理器问题。未找到 XXX.h 文件”。如果我将框架添加到 MyMainApp 和 MyLib 中,一切都会正常运行,但这不是我想要的。我已确保框架搜索路径和标头搜索路径是正确的。在这种情况下,我无法找到苹果公司的任何参考资料。我想知道将第三方框架和库添加/链接到静态库类型的 Xcode 子项目的最佳实践。还有解决方案可以克服链接器错误并将框架仅添加到静态库项目吗?
我有一个从我们的应用程序创建的框架,当该框架添加到要使用的新项目时,它运行得很好。
现在我们想要添加不同语言的本地化,我们在应用程序中做到了这一点,一切都运行良好,但现在我们想要更新我们的框架以使用多种语言进行本地化。因此,我们在框架内添加了所有本地化的 xib 及其字符串,但框架中的 nib 文件始终只显示英语。
我不太熟悉框架,因为它是由其他人完成的,我们只是遵循如何更改文件并创建更新的框架。
我一直在尝试在互联网上查找一些信息,但我发现的只是如何更改代码中的 UILabel,而不是通过本地化 nib 文件。
有什么建议么?
我正在为 iOS 开发一个动态框架。这个框架使用了一个静态库,它集成了CocoaPods:
+--MyDynamicFramework
+--PublicHeader1.h
+--PublicHeader2.h
+--Sources
+--Pods
+--StaticLib
+--PublicHeader3.h
+--StaticLib.a
Run Code Online (Sandbox Code Playgroud)
现在,我在我的动态框架的源代码中使用PublicHeader3.h(它是 的一部分StaticLib),但我也想将它公开为我正在构建的动态框架的公共标头。因此,使用我的动态框架的应用程序应该能够看到所有三个公共标头。这是可能的,如果是,如何?
任何想法为什么构建会成功用于模拟器而不是设备?
我创建了一个 Cocoa 框架,并且能够将它添加到一个新的单页应用程序项目中,并调用框架中定义的方法。只要我将模拟器选为构建目标而不是设备,就可以构建项目。我没有试过运行它,只是构建。我正在使用 Swift 3 和 XCode 8.1。
我收到Use of unresolved identifier错误。
我正在使用框架目标(为了更好的代码重用和 IB_Designables),并且我已经有了一个完美运行的框架目标。我也决定将其他一些类移至框架目标。
我已经设置了 pods(在这种情况下只有一个),但是每当我尝试包含 pod 时,我都会收到 not found 错误。
如果我也尝试使用模块方法,则没有变化:
问题是我也已经有了另一个框架,具有相同的设置(交叉检查所有编译器设置/链接器标志/构建阶段等),并且该框架在导入其 pod 时没有问题。
这是我的 podfile(TUComponents正在处理,TUModels是失败的):
[...]
target 'TUComponents' do
pod 'AHKNavigationController'
pod 'TTTAttributedLabel'
use_frameworks!
end
target 'TUModels' do
pod 'JSONModel'
use_frameworks!
end
Run Code Online (Sandbox Code Playgroud)
更奇怪的是;Xcode 在代码完成导入JSONModel/JSONModel.h标头(或JSONModel在模块 @import 的情况下)没有问题。但是当我尝试编译时,它失败了。
我的配置可能有什么问题?
更新:如果我放弃在 pod 中使用框架并使用常规的旧静态库,并将框架中的允许非模块化包含设置为是,我可以构建。但是我不知道为什么我在使用 Pod 框架时无法构建。
如何通过在 Xcode 中的构建设置选择性地嵌入框架?例如,我只想在调试版本中嵌入一个框架。这该怎么做?
我曾经使用以下方法构建用于内部开发的动态框架
xcodebuild -workspace <workspace_path> build -configuration "Release"
Run Code Online (Sandbox Code Playgroud)
现在我们正在向 3rd 方开发人员提供框架,我们希望从框架二进制文件中删除符号。
我注意到使用build选项二进制文件总是包含符号,即使项目配置为:
DEBUG_INFORMATION_FORMAT = dwarf-with-dsym
STRIP_INSTALLED_PRODUCT = YES
STRIP_STYLE = non-global
Run Code Online (Sandbox Code Playgroud)
似乎使用archivexcodebuild 操作,框架是用没有符号的二进制文件和单独的 dSYM 文件生成的。
但是存档操作会产生一个 .xcarchive 空目录(在~/Library/Developer/Xcode/Archives/<DATE>)
生成的工件(二进制文件和 dSYM)可以在 ~/Library/Developer/Xcode/DerivedData/<project_build_dir>/Build/Intermediates/ArchiveIntermediates/<framework_name>.framework/BuildProductsPath/Release-iphoneos
archive用于构建动态框架是否正确?----- 编辑:2017 年 6 月 9 日 -----
- 是否有其他设置可用于将生成的工件正确放置在 .xcarchive 中?
- 工件不应该放在相关的 .xcarchive 中吗?
设置后:
Skip Install (SKIP_INSTALL) = NO
Run Code Online (Sandbox Code Playgroud)
.xcarchive 正确填充了二进制 dSYM 和其他东西。
我有我的框架,我支持不同的架构。为了支持模拟器,我在有效架构中使用x86_64。
但是当我在应用程序中使用我的框架时,在模拟器上运行应用程序时出现错误:
“MyClass(In framework)”不可用:找不到此类的 Swift 声明
注意:它在设备上运行良好。
我正在尝试向我公司发布的现有 iOS 框架添加功能。新功能要求我们使用许多其他第三方提供的框架。如果我们的客户不想激活新功能,我们希望确保他们不需要部署这些框架。
当我在我自己的框架的目标/通用/链接框架和库部分引用这些框架时,我已将这些框架中的每一个都配置为可选。我还在我的框架的目标/构建阶段/链接二进制与库部分中将它们标记为可选。我期待这意味着当这些框架不存在时,我的框架可以导入到 xcodebuild 中。
这适用于我构建框架的机器,但是一旦其他人尝试将我的新框架导入他们的 Xcode 对象到带有消息“缺少所需模块‘x’”的导入语句(其中 x 是顶级第三方我的框架导入的框架)。
我尝试删除它们并将“-weak_framework {name}”形式的链接器指令添加到构建中,但我可以从 xcodebuild 日志中看到 Optional 设置只是简单地生成这些,而且更方便。
我的框架使用 Swift 5,以防万一。
我错过了什么?
非常感谢您提供任何线索。
I create an iOS app and added a framework to it. The generated framework doesn't have an assets folder like the generate Single View App. So I made an Assets folder inside the framework folder and drag and drop it to xcode, choose the target as my framework.
I tried using the asset but the asset doesn't show up. Can show one show me how to correctly do this? is it possible to create an assets folder inside a …
ios-frameworks ×10
ios ×7
xcode ×5
cocoapods ×2
xcode8 ×2
dsym ×1
localization ×1
optional ×1
subproject ×1
swift ×1
swift3 ×1