Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.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
Iphone 如何为iOS应用程序创建objective-C框架 我正在创建一些可用于大量应用程序的泛型类。_Iphone_Objective C_Ipad_Frameworks - Fatal编程技术网

Iphone 如何为iOS应用程序创建objective-C框架 我正在创建一些可用于大量应用程序的泛型类。

Iphone 如何为iOS应用程序创建objective-C框架 我正在创建一些可用于大量应用程序的泛型类。,iphone,objective-c,ipad,frameworks,Iphone,Objective C,Ipad,Frameworks,例如:共享功能-如果我们在项目中需要此功能,那么我们当前需要将一组类添加到该项目中,并在该组文件中显示视图控制器,在该视图控制器中有按钮以及所有需要处理共享的内容 我的想法是,如果一个项目需要这样的功能,他们需要添加一个框架,并在其中调用一个函数,或者在框架中显示指定的视图,也就是说,没有代码级别的访问权限给你做这个项目的人。因此,如果在泛型类(框架)中发现任何问题,我需要修复它,并在使用该框架的所有项目中重新创建框架和更改,而不会影响现有项目 我认为不仅仅是分享功能。更像是图像滑块、PDF查看

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

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

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

我在谷歌上浏览了几个链接

我无法理解它是如何使用的,其中一些人没有充分解释它。这些链接中缺少一些内容


提前感谢

我猜您想要的是如何为iOS创建共享动态库;长话短说就是:你不能

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

提供了详细的说明


通过复制OSX版本的框架,并将其动态库替换为iOS静态库来实现这一点。(Xcode 4版本即将推出。)

我构建了Xcode 4模板来实现这一点。请参阅我的答案:

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


我们在目标c中创建了框架,它的工作非常完美

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

1) 创建新的框架

在xcode中选择

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

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

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

   #  ============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==============

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

5) 添加运行脚本

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设备构建

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

2) 为模拟器构建

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

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

最后,在任何应用程序中使用此框架创建框架,框架位置位于派生数据中,如下所示

希望这些简单的步骤能帮助人们在objective C中创建框架。

objective-C consumer->objective-C dynamic framework Xcode版本10.2.1

创建Objective-C框架 跟随

具有Objective-C框架的Objective-C消费者 跟随

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

@导入模块\u名称;
//或伞或公共标题
#进口
调用框架的代码


这个。另外,不要被操作系统所愚弄。操作系统被允许(并且确实)销售和使用共享动态库框架,而非操作系统开发人员不能。如果你仔细想想,它在iOS上买不到多少东西:你的应用程序运行在它自己的沙箱中,在平台上允许任意共享动态库可能会破坏这种机制(至少,这会使事情复杂化)。我不会屏住呼吸等待这个。谢谢Williham,但我创建了一个框架。一个用于xcode的扩展,但它是C代码。啊,但是你可以伪造一个包含静态库的框架。单个实例不会在应用程序之间共享,因此每个应用程序都有自己的副本。但是框架比静态库+头更容易管理。@JonReid:可能是这样;但是从您的回答中我可以看到,管理框架的构建显然不那么容易管理。是的。生产者越难,消费者越容易。如果你们两个都是,这可能是个错误。我想这就是我正在寻找的答案。。但我现在正忙于其他项目,所以我将在几周内返回结果OCHamcrest使用的方法是使用运行脚本。我发现这在Xcode 4中不起作用,所以我正在从项目中提取脚本,并将在外部运行它。请您解释一下,我们如何在不使用Xcode的情况下在外部执行脚本。从终端执行脚本。我使用Xcode 4.6.3时得到了这一点,但不幸的是,这些指令已经过时了。请查看问题列表以查找修复。恐怕您的脚本有问题:mkdir-p“${INSTALL\u DIR}”rm-rf“${INSTALL\u DIR}”
@import module_name;

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