雪豹系统上的PyObjc和Cocoa

12

我即将开始我的高中水平的A-Level计算机项目,希望能开发一个Mac OS的销售点应用程序。不幸的是,Objective-C目前有些超出了我的能力范围,如果在项目中遇到问题而无人帮忙,我就会失败,并不能进入大学。因此,这对我来说非常重要。

我想使用Python开发Cocoa应用程序。我知道我需要PyObjc,然而网络上所有的细节都假定它已经预安装了。显然,在Leopard和Snow Leopard中是这样的,但是我似乎在Snow Leopard上没有找到它,甚至在Leopard上也没有注意到它。此外,我尝试按照Sourceforge页面上的说明安装最新的PyObjc beta版,但没有成功。

如果有人能够解释需要安装什么,如何安装以及任何可帮助我使用的资源或教程的链接,我将不胜感激。

提前感谢您的帮助!

更新:我看到这是一个受欢迎的问题,我刚刚获得了“显着问题”徽章,所以我想更新一下任何访问此页面并得到答案后我所做的事情。

不幸的是,我无法使用Python创建Mac应用程序。当时这令我非常失望,但可能是一件好事。我用C#为我的项目制作了一个Windows应用程序,它是一个在模拟环境中创建和运行汇编应用程序的工具。我的课程老师现在已经开始使用我的工具来教授课程,而不是他自己的工具!我在计算机项目中得到了非常高的分数(超过90%),这导致我在计算机A-Level考试中获得了A *(最高等级),并且我随后被南安普顿大学录取,学习计算机科学。

今年夏天,我决定制作一个iPad应用程序(即将发布),我很高兴地说,我现在认为我已经学会了足够制作Objective-C Mac OS应用程序。我很高兴花时间学习它,它是一种很棒的语言,在iOS变得如此流行时非常有用。

抱歉我夸夸其谈了,但我真的很高兴。我想说的是,如果你来到这个页面希望使用 PyObjc 轻松地创建 Mac 应用程序,请不要尝试。虽然需要花费一些时间和努力,但一旦学会了 Objective-C,使用它创建应用程序会非常令人满意。祝好运!


你尝试过使用macports安装PyObjC吗? - Matt Ball
1
你安装了最新版本的开发者工具吗?我从未使用过PyObjc,但我认为它不会比使用Objective-C更容易。这是一种易于学习的语言,由于Mac OS X API是以此为设计思路而创建的,因此与之配合非常良好。如果您不想担心内存管理,甚至可以使用垃圾回收,但内置的引用计数足够简单,我从未感觉需要使用垃圾回收。如果您想继续进行Mac开发,这也是您应该了解的内容。 - Amok
谢谢回复,我会尝试使用macports安装PyObjc,并且我已经拥有最新的Xcode 3.2、开发工具和SDK。我曾经尝试过Objective-C,并且有一本相关书籍,但是由于过去只是作为业余爱好和高中课程进行基础编程,所以我很难掌握它。相比之下,我做过的C# .NET要容易得多。此外,如果软件无法正常工作,那么就会有很大的风险,而且我不认识任何可以帮助我的人。至少,如果我选择使用PyObjc,我有一个朋友是Python方面的专家。 - danpalmer
这很好,但是Python专业知识≠PyObjC专业知识。我有一个朋友(现在在亚马逊工作),可能是我认识的最大的Python专家,但是当涉及到PyObjC时,他完全被难住了,来找我寻求帮助。他也许能帮你设计Python后端,但不要指望他知道如何与Cocoa进行接口交互。祝你好运! - Quinn Taylor
1
PyObjC在Snow Leopard上默认安装,至少作为Xcode工具的一部分。确保你已经完成了这个步骤。此外,要注意第三方Python源,如Fink、MacPorts和自行构建的源,因为这些安装不会包含PyObjC——如果你安装了另一个Python,你确实需要安装另一个PyObjC。 - Peter Hosey
6个回答

18

让我重申之前的话。我也是一名学生,刚开始进行 Cocoa 开发项目时,我想,“我已经懂 Python 了,我可以使用 PyObjC,避免学习看起来很难的 Objective-C。”但我很快意识到这是不可能的。你可以在没有学习 Objective-C 的情况下开发 OS X 应用程序,但是你必须学习构成 Objective-C 编写 Cocoa 应用程序所需的 99% 的 Cocoa 库。Objective-C 本身并不难,需要投入学习的是 Cocoa 库。

PyObjC 基本上使用 Cocoa 库和 Python 语法。我很快放弃了它,并决定如果我必须学习 Cocoa,那就直接使用 Objective-C。

如果你想学习,Aaron Hillegass 的书是一个不错的起点。祝好运!


好的,我不会在所有问题上发表评论,但是让我向每个人表示感谢的支持。我真的很感激!我已经从光盘中安装了开发人员工具,但是Xcode中没有PyObjc。我不愿使用Objc的原因是,如果我卡住了,可能会影响我的大学录取,考虑到我想学习计算机科学,我不能承受这项工作得不到A的风险。还要感谢Koen!实际上,我要写一个POS应用程序,而Checkout启发了我使用PyObjc。再次感谢大家,你们说服我使用纯Objc。 - danpalmer
哦,我已经有了Aaron Hillegass的书,但它包括内存管理代码这一事实让我有点害怕。 - danpalmer
我们选择使用Python编写Checkout的最大原因是SQLAlchemy,一个非常好的ORM。我认为如果没有这个原因,我也会使用Obj-C。 - Koen Bok
19
作为 PyObjC 的维护者近 15 年,我直言不讳地说:请使用 Objective-C。无论如何你都需要了解 Objective-C 才能真正理解 Cocoa,而 PyObjC 只会增加一层对于 99% 的 Cocoa 程序员来说陌生的错误和问题。 - bbum
如果您不想处理内存管理,可以开启垃圾收集,并且在 Hillegass 书籍中要么忽略 MM 代码,要么将其包含在您的程序中。如果您已经开启了 GC,则 MM 代码将不会起作用。 - Ellie P.
这是肯定的。要学习Cocoa,您需要学习Objective-C。PyObjC可能是将Python应用程序移植到OSX的好解决方案;了解如何在Snow Leopard上开始使用PyObc会很有帮助...例如,PyObjC的Xcode模板在哪里?我记得它们在Leopard(我想)上。我在Snow Leopard上找不到它们。 - Dinoboff

7
您的意思是像Checkout这样的软件吗?:-) 我提到它只是因为Checkout非常漂亮,而且是用PyObjC编写的...
您的担忧是合理的,虽然可能并不像您想象的那样成为潜在的障碍。使用PyObjC仍然需要您学习一些Objective-C,并且绝对需要您至少了解一些Cocoa框架,因为当您需要执行某种Cocoa特定任务时,需要调用Cocoa框架。
我建议您阅读并考虑Stack Overflow上的问题“为什么PyObjC文档如此糟糕?”“Mac开发中的PyObjc vs RubyCocoa:哪个更成熟?”,在您完全让自己相信“只有PyObjC”会使事情变得更容易之前。我拒绝贬低PyObjC,因为它非常强大且非常有用,但请意识到没有什么是万能药,没有一种语言或技术适用于所有问题。
Objective-C语言很简单,非常直观。 Cocoa框架通常主导新Cocoa程序员的学习曲线。此外,您有StackOverflow和许多其他资源来帮助回答您的问题。(根据“pyobjc”标签的活动情况,您还有更好的机会在SO上获得良好的Objective-C帮助。)

4
作为 Checkout 开发者之一(嗨 Quinn!),我想提供一些帮助。根据我们的观察,PyObjC 在 Snow Leopard 上运行得相当不错。我们在 Leopard 上使用了最新的 SVN 修订版 2.2b,并对其进行了一些定制,然后将 site-packages 文件夹移植过来。
理论上来说,你应该能够使用内置的 Python/PyObjC(只需执行 import objc、Foundation、AppKit)但由于我们使用自定义版本的 Python 和 PyObjC 进行开发和部署,所以我不确定具体情况如何。邮件列表中并没有提到很多人遇到问题(只有少数人),这可能是个好兆头。
祝项目顺利,如果你有特定的 POS 问题,请给我发电子邮件;-)

3
我是一名长期从事Python开发的开发者,现在已经做了一段时间的iPhone应用程序(只使用我的Python知识来打包构建文件给脚本运行),然后开始制作一些PyObjC应用程序。
我必须说,PyObjC基本上仍然需要学习Objective C(通过iPhone开发我已经知道了),但是如果你使用它,你会得到几个相当不错的好处。
1. 使用你已经了解的Python库非常简单(对你来说更快)。 2. 如果受Cocoa阻碍,可以选择放弃并转向wxPython。 3. 开发时间有点更快(你写的代码更少,两种语言之间的转换也很容易上手)。
此外,界面构建器相对而言有点棘手,但如果你是Python开发人员,那么你也不太习惯于功能性GUI构建器:oP

3

我自己几乎不使用PyObjC,但我认为你需要在Snow Leopard DVD上运行Xcode安装程序才能使用PyObjC。

另外,正如Quinn所说,你需要至少了解一些Objective-C才能使用像PyObjC这样的Cocoa桥接器,否则可能会让你抓狂。它并不能完全隔离你。


3
我同意Quinn的观点。即使你已经精通Python,学习如何将Python和Cocoa进行接口编程也不会比使用Objective-C来学习Cocoa更容易。
Objective-C是一种简单、干净的语言,非常容易理解。构建GUI并将其连接到后端将比学习Objective-C编写后端更难,而构建GUI并将其连接起来并不难。
按照Cocoa应用程序教程(如果你慢慢来,一天或者一个周末就可以完成)进行操作,你就可以顺利上手了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接