2011-03-22 47 views
6

我正在创建一些泛型类,可以对许多应用程序重用。如何为iOS应用程序创建Objective-C框架

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

我的想法是,如果一个项目需要这样一个功能,他们需要添加一个框架并调用一个函数或者在框架中显示指定的视图。没有代码级的访问权限给你做这个项目的人。所以如果在该泛型类(框架)中发现任何问题,我需要修复它并重新创建框架,并在使用此框架的所有项目中进行更改,而不会影响现有项目。

我认为不仅是共享功能。更像一个图像滑块,一个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

我不明白如何使用,其中一些还没有完全解释。有些在这些链接中失踪。

在此先感谢

回答

4

我猜你问的是如何制作iOS共享动态库;而且它的长短是:你不能。

唯一一种支持的库是静态库;所以每当你改变你的图书馆;每个使用它的应用程序都需要重新编译。

+0

这个。另外,不要被环视操作系统愚弄。操作系统被允许(并且确实)销售和使用共享的动态库框架,而非OS操作系统开发者则不能。如果你仔细想想,它在iOS上并不会给你带来太多的收益:你的应用运行在它自己的沙盒中,并且允许平台上的任意共享动态库可能会破坏这个机制(至少这会让事情变得复杂) 。我不会屏住呼吸等待这个。 – ipmcc 2011-03-22 13:03:28

+0

谢谢Williham,但是我创建了一个扩展名为.x的框架,但是它是C代码。例如:pjzip。 – 2011-03-24 04:28:38

+0

啊,但你可以伪造一个包含静态库的框架。单个实例不会在应用程序之间共享,因此每个应用程序都将拥有自己的副本。但是该框架比静态库+标头更容易管理。 – 2011-05-18 15:52:58

3

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

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

+0

我认为这就是我正在寻找的答案..但是现在我忙于其他一些项目,所以我会在几周后回来的结果 – 2011-03-31 04:38:43

+0

OCHamcrest使用的方法是使用运行脚本。我发现这在Xcode 4中不起作用,所以我从项目中提取脚本并将其从外部运行。 – 2011-03-31 14:02:58

+0

能否请你解释一下如何在不使用xcode的情况下在外部执行脚本。 – 2012-06-11 12:52:02

8

退房本指南创建静态的iOS框架:

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

+0

我得到了这个与xcode 4.6.3一起工作,但不幸的是,说明是相当过时的。查看问题列表以查找修复程序。 – 2013-07-17 01:20:19

+0

已针对Xcode 5和iOS 7更新说明。 – featherless 2013-10-13 02:40:40

2

我们的目标C创建框架,它的工作完美。

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

1)创建新的框架,

在Xcode选择

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

enter image description here

2)添加h和.M项目中的文件,用于创建框架。

3)在构建阶段添加公共标题中的文件,该文件将显示在您的框架中。

enter image description here

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

Cross-platform =>Aggregate 

enter image description here

5)添加运行脚本

enter image description here

6)将下面的代码添加到运行脚本中,以汇总(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设备。

enter image description here

您将看到iPhone设备创建框架,框架的位置是在显示如下项目得出的数据。

enter image description here

2)构建用于模拟器。

enter image description here

您将看到模拟器创建框架,框架的位置是在显示如下项目得出的数据。

enter image description here

3)这是最后一步创建框架,构建选项 选择Aggregate和构建应用程序见下面的屏幕截图。 enter image description here

最后,您的框架在任何应用程序中都使用此框架,框架位置在派生数据如下。

enter image description here

希望这简单的步骤,帮助别人创造客观的框架C.

+0

恐怕您的脚本存在问题: mkdir -p“$ {INSTALL_DIR}” rm -rf“$ {INSTALL_DIR}” – valeCocoa 2017-06-28 14:17:42

+0

@valeCocoa,It's working完善 – 2017-06-29 10:29:09

相关问题