zoukankan      html  css  js  c++  java
  • 跨iPhone应用程序的方便,模块化的代码共享:静态库和跨项目的引用

    转:http://blog.sina.com.cn/s/blog_7695024501010037.html

    http://developer.apple.com/library/mac/navigation/

    寻找一种优雅的方式重用和共享代码(即图书馆),分布在不同的iPhone应用程序可以是一个有点棘手,在第一,尤其是考虑到苹果的限制连接动态库和自定义的框架大多数人都同意,最好的办法是使用静态库本教程的基础上的解决方案,显示您的Xcode项目可以引用第二Xcode项目,这是用来建立一个静态库。这允许您自动建立与您的应用程序的其余部分,静态库,使用当前构建配置(例如,调试,发布等),避免前分别建立几个版本库(建一个版本,其中每个特定的环境/配置)。

    问题:什么是最好的方式来分享跨iPhone项目的代码?

    如果你想在不同的iPhone应用程序的重用/共享代码,你只有两种选择(我所知道的):

    1. 从“共享”图书馆复制到自己的项目的源代码
    2. 保持在一个单独的Xcode项目共享库代码,并用它来构建您的项目,可以参考,并通过静态链接的静态库(例如,libSomeLibrary.a,也被称为“归档文件”)。
    [广告]

    第一个选项,复制文件时,应尽量避免可能的,因为它本质上是多余的,相反保持“共同代码”模块化和原子的目标。这是一个更好的主意,把一个静态库的代码,因为,在介绍中提到,动态链接到自定义库/框架不允许时,苹果iPhone应用程序。如果你不知道如何把静态库的代码,我建议你来看看本教程在风雨如磐的制作博客。

    因此,我们已经建立了第二个选项是最好的,但有一个问题:你需要建立和分发多个版本的静态库一,为每个运行环境,并建立配置。例如,你将需要建立两个“释放”和“调试”版本库的模拟器,以及其他对iPhone或iPod设备本身。我们如何才能避免手动预建设和管理单独的文件?

    解决方案:建立需求通过Xcode的跨项目引用的静态库

    预先建立的静态库,以避免为每个环境的诀窍是使用Xcode的“跨项目引用”,使这些库动态生成的(即,当你建立你自己的应用程序)使用您的应用程序的当前构建配置。这可以让你既重用共享的源代码避免了管理多个版本库的头痛。下面是它如何在一个高层次的工作:

    1. 共享代码的生活在自己的Xcode项目,建成时,在一个或多个静态库的结果。
    2. 您创建了一个Xcode的环境变量与静态库的*。xcodeproj文件的目录,其中包含的路径。
    3. 所有需要的静态库的iPhone应用程序将使用上述环境变量来引用库的Xcode项目,包括在该项目中的任何静态库和相关的头文件。
    4. 每次你建立了一个特定的配置/运行环境的项目,项目库共享也将被该配置/建筑环境,如果它尚未和你的可执行文件链接。

    除了解决的主要问题(避免多个版本的库代码重用和管理),有几个漂亮的这一战略利益。首先,如果你到共享库的源代码的变化,这些变化会立即被列入下一次你建立自己的项目(通过跨项目的参考)。其次,你可以修改的Xcode环境变量指向任何一个项目的不同版本。例如,你可能有单独的目录“somelibrary-1.0”和“somelibrary-2.0”,你会看到详细的解决方案说明,它很容易修改环境变量和你的项目切换到不同版本的“somelibrary “

    其他解决方案

    虫族与-xcode

    维克多Costan开发了一个灵活的命令行工具,称为“ 虫族的Xcode “,这有助于从一个Xcode项目(即一个静态库项目)复制到另一个Xcode项目的源代码。除了 ​​身体上复制文件,它插入到你的“应用程序”项目从“库”项目的目标。如果库项目的变化,您只需运行虫族与-xcode与approriate命令再次同步的文件和目标。有些人可能会发现这个工具非常有用,但是,我个人的偏好是要避免的源代码文件的任何副本,并坚持到Xcode的内置“跨项目参考”机制。

    “胖”通用二进制

    另一种方法是“捆绑”成一个文件,简称为“肥肉”通用二进制(见两个版本的静态库的这个职位上的一个例子Latenitesoft博客)。更具体地说,一个版本库会为i386架构(即模拟器)和ARM架构的第二(即手机)。如果你真的只需要两个版本,这可能是一个完全为你细解,或者如果库的源代码是保密的。这就是说,你仍然保持预建库版本(加上捆绑到单个文件中,他们的额外工作)任务离开。此外,我不知道,你可以捆绑成两个以上的版本库的二进制文件(例如,iPhone的“释放”和模拟器“释放”,但没有iPhone“调试”模拟器“调试”)。

    如何实现跨项目的参考解决方案

    设立跨项目引用静态库共享的指令可以分为两部分:

    • 第1部分:全球Xcode中设置
    • 第2部分:项目特定的设置。

    另外,我会在说明书中使用一个例子来帮助说明的东西。一个合适的例子是一个应用程序需要使用一个共享的静态库从一个单独的项目。在这种情况下,我将使用一个示例的iPhone应用程序称为“ 游戏骷髅 “(马特Sephton)的,称为静态库取决于libcocos2d.a(这就是称为Cocos2d-iPhone的一个开源项目的一部分)。

    :如果不是已经很清楚,跨项目的参照是一个标准的Xcode功能,实际上是由苹果公司建议在官方的“ Xcode项目管理指南 “文档。从苹果公司的指导信息,你当然可以得到一些伟大的位,但正如你所期望的,它是一个高层次的文件(因此我的想法,本教程可以帮助别人)。

    第1部分:全球Xcode中设置

    在得到您的Xcode项目使用跨项目参照的第一步是配置夫妇的事情,是不特定的任何一个项目(即全局设置)。

    建立一个共享的生成输出目录,将所有的Xcode项目共享。

    截图显示如何在Xcode首选项对话框,以及如何配置的Xcode使用一个全球性的生成输出目录。

    截图显示如何在Xcode首选项对话框,以及如何配置的Xcode使用一个全球性的生成输出目录。

    1. 与Xcode打开,选择菜单栏“的Xcode>”首选项“。
    2. 选择“构建”标签。
    3. 设置“地方建设项目”,“自订位置”,并指定路径共同构建您创建的目录。
    4. 设置“广场中间构建文件”“打造产品。”以

    为什么这个必要吗?

    一个简要说明为什么这是必要的,可能对某些人来说很有帮助。当您建立您的应用程序(即,Xcode项目)的Xcode在自身建设项目的输出目录生成一个或多个“产品”(对象文件,库等),默认情况下,然后,它会“看”这个目录内时,时候连接一切在一起,使一个可执行文件,例如。

    一旦你开始使用跨项目的引用,你基本上可以建立多个项目。然而,Xcode将仍然只能看在眼前项目的构建库的输出目录。因此,苹果建议使用共享,建立跨项目引用的输出目录(见中的“最后一段引用其他项目 “一节”的Xcode项目管理指南:在项目文件“)。这将确保Xcode将总是能够找到从其他项目生成的产品。

    将共享生成输出目录会造成问题吗?

    我已经从有关人是否或不使用共享建立输出目录会导致问题的一些问题。虽然我肯定不是一个机关建设与Xcode,我可以说,在使用这种技术(几个项目,几个不同的共享库)我已经没有任何问题(如“调试”建立4个月导致“释放”版本被覆盖,您的图书馆等)。

    苹果的Xcode单证明确指出说:“在Xcode的build目录,由项目定义的每个生成配置保持独立的子目录”(见“ 生成点 一节“Xcode项目管理指南:建筑产品”)。例如,我有一个自定义的日志记录库,是由多个iPhone和OS X应用程序使用。OS X的版本。*文件显示在“释放”和“调试”共同构建输出文件夹,在“发行iphonesimulator”和“调试iphonesimulator”的模拟器版本内的子目录,最后的设备“释放的iPhoneOS”和“调试的iPhoneOS。”版本,换句话说,该版本似乎没有相互覆盖。

    添加一个“源树”的变量,Xcode可以使用动态发现静态库项目。

    “源树设置”基本上是Xcode环境变量保存到文件系统上的目录的路径,这使我们能够灵活,跨项目的引用,避免硬编码路径。

    截图显示“源树”设置“选项卡,在Xcode的喜好。

    截图显示“源树”设置“选项卡,在Xcode的喜好。

    1. 再次,打开Xcode的喜好。
    2. 选择“源树”选项卡。
    3. 通过点击“+”按钮,填写列,创建一个新的源代码树变量。上述表明,我们正在使用cocos2d-iPhone变量名“COCOS2D_SRC”和截图,它指向提示:避免“/ Users/clint/dev/cocos2d-iphone.googlecode.com/release-0.5.3”。在实际的文件路径中使用特殊字符(即,坚持以字母数字字符,下划线和连字符);这条道路将被用来作为一个“搜索路径”和Xcode似乎有问题的搜索路径,使用像一个符号字符(&)。

    第2部分:项目特定的设置。

    一旦你得到了Xcode的配置使用一个全球性的生成输出目录,并有“源树”变量指向您的共享项目,你准备成立跨项目的参考,依赖性等

    成立跨项目的参考,头文件搜索路径,以及静态库链接

    1. 在Xcode中打开您的项目。
    2. 的Xcode在“组和文件”窗格中,选择项目的根和命中期权+ Cmd的+一个(添加项目)。
    3. 查找共享库的项目,其中包含的Xcode项目包。使用我们的例子中,我们将选择Cocos2d-iPhone Xcode项目(cocos2d port.xcodeproj):
      截图显示第二Xcode项目文件被选中,这样我们可以添加一个引用。

      截图显示第二Xcode项目文件被选中,这样我们可以添加一个引用。

    4. 当“添加项目”对话框中显示,使用下面的截图中显示的相同的设置,并单击“添加”按钮。重要:不选中“复制项目”框中。

      截图显示“添加项目”选项被选中时,在Xcode中添加一个跨项目的参考。

      截图显示“添加项目”选项被选中时,在Xcode中添加一个跨项目的参考。

    5. “子工程”。之后单击“添加”按钮将显示为一个项目,在我们的Cocos2d iPhone例如,它看起来像这样:

      截图显示如何Cocos2d-iPhone Xcode项目一旦它被添加到主的“骨架”项目作为“子工程”出现。

      截图显示如何Cocos2d-iPhone Xcode项目一旦它被添加到主的“骨架”项目作为“子工程”出现。

      记住,你有没有进口的第二个物理副本项目,它是一个参考。

    6. 当出现跨项目的参考选中它,按Cmd + I。然后改变“路径类型”是相对的环境变量设置在第1部分。在下面的例子中,我们使用COCOS2D_SRC变量:

      Xcode的“项目信息”对话框为项目添加屏幕截图通过跨项目的参考。

      Xcode的“项目信息”对话框为项目添加屏幕截图通过跨项目的参考。

    配置库的依赖,链接,和头文件

    1. 在“组和文件”的Xcode窗格中,在“目标”,选择你的主要应用目标和按Cmd + I。然后选择“常规”选项卡,添加静态库(IES)您的应用程序共享的项目,需要通过点击“+”按钮下的“直接依赖”。在我们的例子中,我们添加了“花栗鼠”和“cocos2d”都从Cocos2d iPhone项目建库:

      截图显示一个Xcode的可执行文件被配置为依赖于静态库是建立一个跨项目的参考目标。

      截图显示一个Xcode的可执行文件被配置为依赖于静态库是建立一个跨项目的参考目标。

    2. 单击“生成”选项卡上,向下滚动到“搜索路径”一节
    3. 重要:如果您的共享项目硬编码的路径出现在“库搜索路径”字段,删除它。这可以通过双击领域和使用“ - ”按钮。
    4. 双击“头用户的搜索路径”旁边的空白区域。然后点击“+”按钮,检查递归复选框,点到您的共享项目目录,$(包围)在Xcode环境变量的类型。例如下面的截图显示$(COCOS2D_SRC)正在使用:

      截图显示如何配置Xcode的“用户头搜索路径”图书馆正在通过跨项目参考。

      截图显示如何配置Xcode的“用户头搜索路径”图书馆正在通过跨项目参考。

    5. 当您单击确定,回去Build标签,“用户头搜索路径”文本字段应显示您的共享项目目录的绝对路径。在我们的例子中,$(COCOS2D_SRC)扩大与“**”的实际路径和结束表明,搜索将是递归的:

      截图显示Xcode环境变量将如何动态地扩展到实际的,绝对路径,一旦进入,使用$()符号。

      截图显示Xcode环境变量将如何动态地扩展到实际的,绝对路径,一旦进入,使用$()符号。

    6. 最后,单击并拖动下方的跨项目参考静态库“目标> {目标}>图书馆链接的二进制。”这将确保。a文件将被传递给链接器,当你建立。这里有一个从我们的示例应用程序的示例截图:

      截图显示如何通过跨项目在Xcode参考的静态库链接到你的可执行文件。

      截图显示如何通过跨项目在Xcode参考的静态库链接到你的可执行文件。

    总结

    总的来说,如果您需要在不同的iPhone项目分享代码,我建议:1)把自己的“静态库”Xcode项目和2共享代码)使用跨项目的参考,让你可以建立自己的应用程序库需要。在本教程的冗长可能给你的印象,设置此功能的是大量的工作,它是不是,真的,尤其是如果你做它不止一次(这很可能是,考虑,这里的目标是,以分享整个代码的多个项目的)。我一直在使用这种方法约四个月几个项目,并肯定它为我节省了很多时间。最后,有可能是一个更好的策略,我不知道的替代解决方案的反馈意见和建议,当然欢迎。

  • 相关阅读:
    LCM与GCD算法
    LCS,LIS,LICS算法
    高精度算法(C/C++)
    SystemTap
    VMware15下解决Ubuntu18.04没有网络连接问题
    Git ssh-key 配置问题
    Ubuntu18.04更换国内源
    sql 错误日志存储路径设置
    资源
    System.Data.DataTable 基本方法
  • 原文地址:https://www.cnblogs.com/jackljf/p/3588949.html
Copyright © 2011-2022 走看看