公开CocoaPods依赖标头

问题描述 投票:0回答:1

回答我的问题:

因为我没有找到原始问题的答案(即,公开了通过CocoaPods加载的依赖项的标头),我觉得我不应该为自己的问题发布答案。但是,我确实找到了解决我的特定问题的解决方案,该解决方案可以解决暴露标题的问题。

[在我的问题中,我试图使用Objective Sharpie为我的框架创建Xamarin绑定。我的框架公开了一个扩展JSONModel的类,因此需要JSONModel头文件才能构建这些绑定。

通过阅读Objective Sharpie文档,我发现Clang有一个“ framework directory”命令行参数,它告诉它要在哪个目录中查找项目引用的框架。

我只是将JSONModel.frameworkmyframework.framework放在同一目录中,然后当我运行Objective Sharpie时,就这样运行它:

sharpie bind -sdk ios myframework.framework/Headers/myframework.h -c -F .

这成功创建了绑定。

我确实遇到了一个小的挫败感。我可以使用Objective Sharpie的-scope命令行参数,它将输出大约1800行的文件,仅包含我自己的类的绑定。但是,该文件NOT包含JSONModel的定义,并且在我的Xamarin项目中不起作用。如果我不使用-scope参数,它将为everything(包括所有Foundation)创建绑定。这创建了大约84000行文件。

要解决此问题,我将JSONModel绑定从84000线文件手动复制到1800线文件,并且效果很好。

问题:

我有一个用Objective-C编写的框架。该框架具有3个依赖项(即CocoaLumberjackGoogle-IMA-iOS-SDKJSONModel

在我的框架内,我有一个如下定义的公共类:

Broadcast.h

#import <JSONModel/JSONModel.h>

@interface Broadcast : JSONModel

@property (nonatomic) NSString *title;
@proeprty (nonatomic) NSString *url;

@end

当我构建框架时,它就可以正常工作。当我将框架导入到Objective-C项目(并包括JSONModel框架,因为它是一个依赖项)时,它就可以正常工作。当我使用CocoaPods安装框架时,它就可以正常工作。

当我尝试使用Objective Sharpie为我的框架创建C#绑定(用于Xamarin)时,出现了问题>

当我跑步时:

sharpie bind -sdk ios myframework.framework/Headers/myframework.h

我收到错误:Cannot find JSONModel.h

特别是它正在寻找JSONModel.h inin

我的框架。对于CocoaLumberjack或Google IMA SDK而言,这不是问题,因为它们严格是实现细节,并且我的公共标头都没有引用它们。但是,当涉及到JSONModel时,其接口实际上是我的公共API的一部分。

是否可以在输出Headers目录中放置JSONModel.h(和所有其他JSONModel标头)的副本?或者,否则,可以通过某种方式告诉Objective Sharpie在多个框架中查找绑定?

更新

快速更新,在过去的一个小时中,我一直在继续对此进行讨论。通过告诉Clang在哪里可以找到JSONModel.h并进行代码调整,我能够使Objective Sharpie达到至少运行

Broadcast.h

#import <JSONModel.h> // <-----

@interface Broadcast : JSONModel

@property (nonatomic) NSString *title;
@proeprty (nonatomic) NSString *url;

@end

然后在运行Objective Sharpie时:

sharpie bind -sdk ios -scope myframework.framework/Headers myframework.framework/Headers/myframework.h -c -IJSONModel.framework/Headers

这工作得更好,但是遇到了一个问题,只给了我一个问题:

  • 在生成的绑定文件中,它在多个位置表示typeof(JSONModel),该位置未定义并且引发错误。我可以通过删除-scope参数来解决此问题,但这将创建一个长度为84000行而长度为1800行的绑定文件,并且包含诸如AFNetworking,AVPlayer等之类的绑定。
  • 之前导入<JSONModel/JSONModel.h>的原因既是因为这是我一直看到导入的CocoaPods依赖项的方式,也是因为自动完成功能推荐了它。那么,为什么导入<JSONModel.h>同样有效?将来会不会破坏某些东西?
  • 为了更正作用域问题而不生成84000线绑定文件,我也尝试使用像."$(pwd)"这样的作用域,但没有任何效果。它要么创建了一个1800行文件,没有为JSONModel定义,要么创建了一个84000行文件,其中有everything

的定义

更新2

虽然我仍然不完全欣赏<JSONModel/JSONModel.h><JSONModel.h>之间的区别,但我确实学到了一些东西:

  • 任何一个都可以让我直接从我的框架项目中构建一个.framework文件
  • [当我尝试通过应用程序内的CocoaPods导入框架时,只有<JSONModel/JSONModel.h>可以工作
  • [当我尝试使用Objective Sharpie创建C#绑定时,只有<JSONModel.h>可以工作
  • 以便解决该问题

回答我的问题:因为我没有找到原始问题的答案(即,公开了通过CocoaPods加载的依赖项的标头),所以我不认为应该为自己的问题发布答案...

c# objective-c cocoapods objective-sharpie
1个回答
0
投票

关于<X/X.h><X.h>

Clang具有“ frameworks”的内置概念(您可以使用-F标志指定框架搜索目录)。当您使用<X/*>导入语法时,Clang将搜索名为X的框架。 CocoaPods通过使用此-F标志来引用导入的依赖项,因此您必须

© www.soinside.com 2019 - 2024. All rights reserved.