【问题标题】:How can I create objective-C Framework for iOS Application如何为 iOS 应用程序创建 Objective-C 框架
【发布时间】:2011-07-20 09:04:33
【问题描述】:

我正在创建一些可重用于许多应用程序的通用类。

例如:共享功能 - 如果我们在项目中需要此功能,那么我们目前需要在该项目中添加一组类并在该组文件中显示视图控制器,在此视图控制器中有按钮以及所有需要处理共享的内容。

我的想法是,如果一个项目需要这样的功能,他们需要添加一个框架并在其中调用一个函数或在框架中显示指定的视图,即。没有授予您执行该项目的代码级别访问权限。因此,如果在该通用类(框架)中发现任何问题,我需要修复它并重新创建框架并在不影响现有项目的情况下更改使用该框架的所有项目。

我认为不仅仅是分享功能。更像是图像滑块、PDF 查看器、浏览器。封面流。目前我有所有这些功能的代码。但是其他人需要太多时间来集成和使用它。如果发现任何问题,我们需要更改所有项目源类。

我在谷歌浏览了几个链接

Can I develop my own objective-C Framework for Cocoa Touch Applications?

http://www.cocoanetics.com/2010/04/universal-static-libraries/

A Guide for Creating your own Library for Cocoa(touch) development

我无法理解它是如何使用的,其中一些还没有完全解释。这些链接中缺少一些。

提前致谢

【问题讨论】:

    标签: iphone objective-c ipad frameworks


    【解决方案1】:

    查看有关创建静态 iOS 框架的指南:

    https://github.com/jverkoey/iOS-Framework

    【讨论】:

    • 我得到了这个与 xcode 4.6.3 一起工作,但不幸的是,说明已经过时了。查看问题列表以查找修复。
    【解决方案2】:

    我们在 Objective c 中创建了 Framework,它的工作非常完美。

    按照以下简单步骤创建框架

    1) 创建新框架,

    在xcode中选择

     file =>New =>Project =>cocoatouchframework =>Next =>GiveframeworkName =>Create  
    

    2) 在项目中添加.h 和.m 文件,用于创建Framework。

    3) 在构建阶段在 Public Headers 中添加文件,该文件将显示在您的框架中。

    4) 点击项目名称DemoFramework然后选择+按钮然后 选择

    Cross-platform =>Aggregate 
    

    5) 添加运行脚本

    6) 在运行脚本中添加以下代码到 Aggregate(marge)iPhone 和模拟器框架。

       #  ============Script Start==============
       if [ "${ACTION}" = "build" ]
       then
       # Set the target folders and the final framework product.
       INSTALL_DIR=${SYMROOT}/DemoFramework.framework
       DEVICE_DIR=${SYMROOT}/Debug-iphoneos
       SIMULATOR_DIR=${SYMROOT}/Debug-iphonesimulator
    
      # Create and renews the final product folder.
      mkdir -p "${INSTALL_DIR}"
      rm -rf "${INSTALL_DIR}"
      rm -rf "${INSTALL_DIR}/DemoFramework"
    
     # Copy the header files to the final product folder.
     ditto "${DEVICE_DIR}/DemoFramework.framework/Headers" 
     "${INSTALL_DIR}/Headers"
    
     # Copy the info.plist file to the final product folder
     ditto "${DEVICE_DIR}/DemoFramework.framework/info.plist" 
    "${INSTALL_DIR}"
    
    # Copy the ResoureBundle.bundle file to the final product folder
    ditto "${DEVICE_DIR}/DemoFramework.framework/ResourceBundle.bundle" 
    "${INSTALL_DIR}/ResourceBundle.bundle"
    
    # Use the Lipo Tool to merge both binary files (i386 + armv6/armv7) 
     into one Universal final product.
     lipo -create "${DEVICE_DIR}/DemoFramework.framework/DemoFramework" 
    "${SIMULATOR_DIR}/DemoFramework.framework/DemoFramework" -output 
    "${INSTALL_DIR}/DemoFramework"
     fi
     #  ============Script End==============
    

    7) 现在分三步构建项目

    1) 为 iPhone 设备构建。

    您将看到为 iPhone 设备创建了框架,并且框架位置显示在项目的派生数据中,如下所示。

    2) 为模拟器构建。

    您将看到为模拟器创建了框架,并且框架位置显示在项目的派生数据中,如下所示。

    3) 这是创建框架的最后一步, 在构建选项中选择聚合并构建应用程序,请参见下面的屏幕截图。

    最后你的框架被创建在任何应用程序中使用这个框架,框架位置在下面的派生数据中。

    希望这个简单的步骤可以帮助某人在目标 C 中创建框架。

    【讨论】:

    • 恐怕你的脚本有问题:mkdir -p "${INSTALL_DIR}" rm -rf "${INSTALL_DIR}"
    【解决方案3】:

    我猜你要问的是如何为 iOS 创建一个共享动态库;总而言之:你不能。

    唯一支持的库是静态库;因此,每当您对库进行更改时;每个使用它的应用程序都需要重新编译。

    【讨论】:

    • 这个。另外,不要被周围的操作系统所迷惑。操作系统被允许(并且确实)出售和使用共享动态库框架,非操作系统开发人员不能。如果您考虑一下,它在 iOS 上并没有给您带来太多好处:您的应用程序在它自己的沙箱中运行,并且允许平台上的任意共享动态库可能会破坏该机制(至少,它会使问题复杂化) .我不会屏住呼吸等待这个。
    • 感谢 Williham,但我正在创建一个带有 .a 扩展名的框架,以便在 xcode 中使用,但它是 C 代码。例如:pjzip。
    • 啊,但是你可以伪造一个包含静态库的框架。单个实例不会在应用之间共享,因此每个应用都有自己的副本。但是框架比静态库+头文件更容易管理。
    • @JonReid:可能是这样;但从我从您的回答中可以看出,管理框架的构建显然不太容易管理。
    • 是的。生产者更难,消费者更容易。如果你俩都是,那可能是洗头了。
    【解决方案4】:

    http://accu.org/index.php/journals/1594 提供详细说明。

    OCHamcrest 通过获取 OS X 版本框架的副本,并将其动态库替换为 iOS 静态库来实现。 (Xcode 4 版本即将推出。)

    【讨论】:

    • 我认为这就是我正在寻找的答案。但我现在正忙于其他项目,所以我会在几周内回来提供结果
    • OCHamcrest 使用的方法是使用运行脚本。我发现这在 Xcode 4 中效果不佳,所以我从项目中提取脚本并将在外部运行它。
    • 您能否解释一下我们如何在不使用 xcode 的情况下在外部执行脚本。
    • 从终端执行脚本。
    【解决方案5】:

    我为此构建了 Xcode 4 模板。在这里查看我的答案:Can I develop my own objective-C Framework for Cocoa Touch Applications?

    【讨论】:

      【解决方案6】:

      Objective-C 消费者 -> Objective-C 动态框架

      Xcode 版本 10.2.1

      创建 Objective-C 框架

      关注Create Objective-C framework

      Objective-C 消费者与 Objective-C 框架

      关注Swift consumer with Objective-C framework

      将模块导入Objective-C客户端代码[module_name]

      @import module_name;
      
      //or umbrella or public header
      #import <module_name/module_name.h>
      

      调用框架的代码[Use of undeclared identifier]

      [More examples]

      【讨论】:

        猜你喜欢
        • 2011-09-23
        • 1970-01-01
        • 2014-08-07
        • 2010-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多