Pra*_*ogg 5 linker header objective-c static-libraries ios
我正在MyLibrary
为 Objective-C 中的 iOS构建一个静态库,它将十几个有用的类捆绑在一起,每个类都有自己的 .h 文件。我想MyLibrary
作为单个编译的二进制libMyLibrary.a
文件 和单个 .h 头文件分发MyLibraryAPI.h
。 MyLibraryAPI.h
有十几个#import
语句,每个MyLibrary
公共类都有一个。希望包含MyLibrary
在其宿主项目中的开发人员只需包含libMyLibrary.a
二进制文件和MyLibraryAPI.h
标题。这就是目标。
因此,我已将Xcode 项目Role
中每个公共类的设置MyLibrary
为Public
并libMyLibrary.a
使用 Xcode 命令行构建工具和lipo
. 然后,我手动将所有十几MyLibrary
个头文件包含libMyLibrary.a
在一个宿主项目中,宿主项目可以MyLibrary
毫无问题地使用公共类。惊人的!
问题是,如果我删除那些十几头文件和使用MyLibraryAPI.h
,而不是(这是我的目标),主体项目的类不能再找到MyLibrary
中引用的头文件MyLibraryAPI.h
。相反,在编译时,我收到如下错误:MyAwesomeThingDelegate.h: No such file or directory...
对于MyLibrary
我尝试#import
在MyLibraryAPI.h
. 我在我的宿主项目根目录中有一个文件夹,lib
在宿主项目构建设置中将递归头搜索路径设置为lib/**
和在库搜索路径中,将递归路径设置为lib/**
.
我很想听听社区关于如何正确设置宿主项目的搜索路径的建议,以便我只需要包含libMyLibrary.a
和MyLibraryAPI.h
使用这些MyLibrary
类。或者,如果我做错了什么,我很想听听另一个建议,以实现我分发单个二进制文件和单个 API 头文件的目标。
我遇到了同样的挑战,并提出了以下解决方案:
首先,我尝试隐藏尽可能多的实现细节。因此,我通常构建一对类:一个类是公共接口,另一个类是私有实现。公共类只有一个成员实例:指向实现的指针。私有类只有一个前向声明。
@class MyViewImpl;
@interface MyView : UIView
{
@private
MyViewImpl* _internal;
}
@property (nonatomic, assign) CGRect highlightArea;
- (void) startAnimation;
@end
Run Code Online (Sandbox Code Playgroud)
其次,我将所有公共声明放入一个头文件中。它使用起来就像使用单独的头文件一样舒适,但它确实有效。剩下的唯一导入是 iOS 内容的导入,例如:
#import <UIKit/UIKit.h>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3286 次 |
最近记录: |