Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Xcode4中的iOS项目上将静态库项目管理为类似模块的框架_Xcode_Frameworks_Xcode4_Project Management_Static Libraries - Fatal编程技术网

在Xcode4中的iOS项目上将静态库项目管理为类似模块的框架

在Xcode4中的iOS项目上将静态库项目管理为类似模块的框架,xcode,frameworks,xcode4,project-management,static-libraries,Xcode,Frameworks,Xcode4,Project Management,Static Libraries,包括我在内的许多人都试图为iOS创建一种静态库框架来归档某种模块化。框架是实现这一点的最佳方式,但它不是由苹果提供的,而且解决办法也不太管用 无法在生成阶段从链接选项卡引用假框架 真正的框架需要修改系统设置。但仍然无法在每个部件上顺利工作 问题是静态库需要头文件,若并没有脚本,在不同项目的另一个位置引用项目的头文件是不可能的。脚本打破了IDE的文件管理抽象 如何以一种方便的模块方式使用静态库项目?(只需将项目拖动到另一个项目中即可完成嵌入)解决方案 转到项目或目标的生成设置 查找公用标题文件夹

包括我在内的许多人都试图为iOS创建一种静态库框架来归档某种模块化。框架是实现这一点的最佳方式,但它不是由苹果提供的,而且解决办法也不太管用

  • 无法在生成阶段从链接选项卡引用假框架
  • 真正的框架需要修改系统设置。但仍然无法在每个部件上顺利工作
  • 问题是静态库需要头文件,若并没有脚本,在不同项目的另一个位置引用项目的头文件是不可能的。脚本打破了IDE的文件管理抽象

    如何以一种方便的模块方式使用静态库项目?(只需将项目拖动到另一个项目中即可完成嵌入)

    解决方案

  • 转到项目或目标的生成设置
  • 查找公用标题文件夹路径。(定义名称=
    公共\u标题\u文件夹\u路径
  • 将其设置为
    YourLibrary.framework/Headers
    。我使用了
    ${PRODUCT_NAME}.framework/Headers
    自动与项目名称同步
  • 转到构建阶段并查找复制头步骤
  • 将所有必需的标题移动到公共窗格
  • 现在,所有头文件都将像框架一样形成,并使用产品二进制文件进行复制。IDE将把它们作为一个单元复制到某个临时文件夹中,比如应用程序的构建文件夹。因此,引用应用程序项目可以自动使用标题

    这是个骗局。创建的目录结构不是真正的框架。因为它不包含任何二进制文件。然而,我们不需要真正的框架来归档这个功能。IDE与没有任何二进制文件的框架一起工作。我不想在没有内部结构文档的情况下攻击IDE


    这很好,但是在归档时会遇到一些问题。发生这种情况是因为Xcode4在存档时的行为特别。这是解决办法

  • 对于每个嵌入式库项目,在目标生成设置中,
    SKIP_INSTALL=YES
  • 对于最终产品项目,
    FRAMEWORK\u SEARCH\u path=“${OBJROOT}/UninstalledProducts”
    。请注意,此设置仅应设置为
    发布
    构建模式
  • 现在可以很好地存档了


    在跨平台库的情况下,可以有许多平台的项目。但有时Xcode会将某些产品显示为红色,即使它编译成功

    这是Xcode的一个bug。IDE显示取决于项目生成设置的
    SDKROOT
    。因此,如果您对目标设置了不同的
    SDKROOT
    ,它将无法工作。您可以检查在更改项目生成设置的
    SDKROOT
    后,产品将变为黑色。有关详细信息,请参阅此打开的雷达条目

    如果您希望修复此错误,请将此报告给。重复的错误会引起苹果的注意。只需复制并粘贴我的报告:)

    我发现:


    这似乎很有效。

    我已经更新了模板,删除了脚本目标。它现在从您的常规目标构建通用框架,因此您可以将其包含在工作区中或作为项目依赖项

    对于真正的框架目标,您只需将其添加到“linkbinary With Libraries”中,它就会很好地显示出来

    对于伪框架,Xcode无法识别目标类型,因此需要手动添加link命令。例如,假设您的框架名为Foo:

  • 展开框架项目的“产品”组,然后将“Foo.framework”拖到应用程序目标的“linkbinary With Libraries”构建阶段

  • 在应用程序目标中,在生成设置中编辑“其他链接器标志”,并添加:“-framework Foo”


  • 框架模板链接供不确定我们在谈论什么的人使用:

    不幸的是,我找不到方法来引用嵌入到另一个项目中的项目生成的库。以这种方式配置。用我的方式是可能的:)这是一个极好的侦查,也是我发现的唯一一件能够处理Xcode无法正确链接到非对等目录的子模块的事情。非常感谢。