【问题标题】:A Guide for Creating your own Library for Cocoa(touch) development为 Cocoa(touch) 开发创建自己的库的指南
【发布时间】:2010-10-15 10:53:01
【问题描述】:

我目前正在使用许多具有自定义方法的相同子类对象。 创建可以用于多个项目的我自己的库会更方便

我们的目标是让我自己的类以与UIViewCGRect 等类相同的方式可用,包括CGRectMake 等方便的方法,包括类和结构。总而言之,我想创建自己的等价物:

  • UIView 等类
  • 类似CGRect的结构体
  • CGRectMake 等方便的函数
  • 将此作为库提供
  • 将其作为 XCode 模板提供,从而在 XCode 中将这些自定义对象作为“新文件”提供

所以基本上我正在寻找有关如何创建类、结构等的说明,以便创建上述所有内容。 最好的方法是什么?320 project 似乎是一个很好的起点。但它缺乏(我认为):

  • 立即在新项目中使用该库
  • 在“新文件”下提供新类

即使我要创建一个自己的静态库,我是否能够在应用商店上发布该应用,因为手机不支持链接到第三方库?

为方便起见,这些基本上都是子问题,涵盖了这个问题的范围:

  • 如何为 Mac/iPhone 开发创建自己的库?
  • 如何为此库创建类、结构和内联函数?
  • 如何基于这个库创建自己的 Xcode 模板?
  • 我能否使用自己的静态库发布 iPhone 应用程序?

【问题讨论】:

    标签: c xcode oop frameworks


    【解决方案1】:

    仅供参考 Xcode 3.2 有一个名为 Cocoa Touch 静态库的新项目模板。你可能想走那条路。

    【讨论】:

      【解决方案2】:

      如果您在 Mac 上执行此操作,您将创建一个框架。但是,您提到UIView,显然您正在使用 iPhone。 Apple 不允许 iPhone 应用程序在运行时动态链接到其他库,因此您唯一的选择是创建一个静态库。静态库在构建时链接到应用程序可执行文件。

      据我所知,Xcode 中没有静态库项目模板。您可能需要做的是从一个不同的 iPhone Xcode 模板开始并添加一个静态库目标。挂在默认的应用程序目标上;您可以使用它来构建一个简单的测试应用程序,以确保该库确实有效。

      要在应用程序中实际使用该库,您需要两件事:已编译的库(扩展名为 .a)和所有头文件。在您完成的应用程序中,您将链接到您的静态库,并且您需要#import 头文件,以便编译器了解哪些类、函数等对其可用。 (一种常见的技术是创建一个头文件来导入所有其他头文件。这样,您只需在源文件中导入一个文件。)

      至于创建您自己的自定义模板,这里有一个简单的教程可以帮助您入门:http://www.macresearch.org/custom_xcode_templates您可能可以复制默认模板并根据您的目的自定义它们。

      结构语法如下所示:

      typedef struct _MyPoint {
          CGFloat x;
          CGFloat y;
      } MyPoint;
      

      结构是在头文件中声明的,所以你可以(我相信)Command+双击结构的名称来查看它是如何声明的。

      另一个创建结构的小技巧是这样做:

      MyPoint aPoint = (MyPoint){ 1.5f, 0.25f };
      

      因为编译器知道结构中字段的顺序,它可以很容易地将您在花括号中提供的值与适当的字段匹配。当然,有MyPointMake这样的函数更方便,可以这样写:

      MyPoint MyPointMake(CGFloat x, CGFloat y) 
          return (MyPoint){ x, y };
      }
      

      请注意,这是一个函数,而不是方法,因此它存在于任何 @interface@implementation 上下文之外。尽管我认为如果您在 @implementation 上下文中定义它,编译器不会抱怨。

      CGPointMake 被定义为所谓的inline 函数。你也可以在 Cocoa 头文件中看到它的定义。 (内联函数和普通函数的区别在于编译器可以将CGPointMakecall替换为CGPointMakecopy,这样就避免了进行函数调用。这是一个很小的优化,但对于这么简单的函数来说,它是有意义的。)

      【讨论】:

      • 谢谢!这很有帮助。不过有一个问题;使用 'MyPointMake(x,y)' (如 'CGRectMake(x,y,width,height)' )之类的便捷方法来实例化 MyPoint 是否仍然可行?
      • 在 C99(您可以在构建设置中设置)中,您可以使用复合文字:(MyPoint){ x, y }。这也适用于 Objective-C,只要您将其设置为 C99。如果你真的想要一个功能,当然是可能的。当然,您需要自己编写。
      【解决方案3】:

      320 project 是 iPhone 类库的一个很好的例子。您基本上将您的项目编译成一个 .a 库,然后在您的客户端项目中静态链接它。

      【讨论】:

      • 我检查了这个,但我似乎无法掌握它。你能详细说明一下吗?
      • 他在这里给出了非常详细的说明:github.com/joehewitt/three20/tree/master你到底没有掌握什么?
      • 我不明白如何做我在问题中所说的事情。现在很清楚了。感谢社区。说明确实很详细。
      • 我们只需要说明的 URL。德赫提供了这一点。谢谢!
      【解决方案4】:

      由于这是一个社区 wiki,我认为链接一些资源和教程会有所帮助:

      http://blog.stormyprods.com/2008/11/using-static-libraries-with-iphone-sdk.html

      http://www.clintharris.net/2009/iphone-app-shared-libraries/

      享受吧!

      【讨论】:

        【解决方案5】:

        320 项目似乎确实是一个很好的起点。但它缺乏(我认为):

        • 立即在新项目中使用该库
        • 在“新文件”下提供新类

        这些是项目和文件模板。欲了解更多信息,ask the Google

        【讨论】:

          【解决方案6】:

          如果您计划在应用商店发布此功能,您将无法以您希望的方式使用您的库。如上所述,手机不支持链接到第三方库。我认为有一种“黑客”方式可以让它发挥作用,但你会失去分布。

          我能想到的最好办法就是将所有相关代码放在一个目录中并以这种方式共享。我知道它不那么优雅,但它的局限性,即。不受我们控制。

          【讨论】:

          • 但是支持链接到我自己的静态库吗?不丢失分布?
          • 嗯,可以肯定,所以你的意思是,虽然可以创建自己的静态库,但你将无法在应用商店发布应用?跨度>
          • 如果你使用内置模板 Cocoa Touch 静态库,那么 Apple 会接受。这就是 Three20 的工作方式,Apple 已经接受了许多链接到 Three20 的应用程序。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-24
          • 2011-12-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-31
          相关资源
          最近更新 更多