Tag: 可可

在Swift中创建自定义macOS共享服务

在最新版本的macOS中,共享按钮已成为常见的OS功能。 从Finder到Safari的所有内容都具有这些按钮,它们使用相同的标准化,可自定义和可扩展的体验。 我们可以使用NSSharingServicePicker在我们自己的应用程序中轻松使用它们,甚至可以添加自定义服务! 它们的功能类似于使用UIActivityViewController的iOS共享表。 我将演示如何自己使用NSSharingServicePicker ,以及如何使用NSSharingService和相应的委托添加自定义共享操作。 示例应用程序( 末尾提供了完整的示例代码 )将一个简单的“复制文本”添加到剪贴板选项到我们的共享菜单。 连接一个NSSharingServicePicker Apple仅需几行代码,即可轻松使用它: 采用NSSharingServicePickerDelegate 我们遵循NSSharingServicePickerDelegate并实现了sharingServicePicker ,然后创建了自己的定制服务。 首先,我将共享整个代码,然后将其分解为多个部分。 小调整 在大多数情况下,就是这样。 还有一些其他小事情要注意: 如果使用按钮操作触发NSSharingServicePicker ,则可能会收到有关可通过在按钮.sendAction(on: .leftMouseDown)设置.sendAction(on: .leftMouseDown)来修复的操作的错误。 NSSharingService要求您提供共享服务的映像,我建议为此使用xcode资产文件夹 示例项目源代码 如果您想使用此代码查看简单的示例应用程序,可以在此处找到 这篇文章的启示 我目前正在为我的高级项目构建一个菜单栏macOS应用程序,它使您可以立即将文本或代码共享到gist.github.com。 整个代码在我的GitHub上都是开源的,可以在这里找到。 当希望将简单的剪贴板复制功能添加到共享表时,我找不到有关该主题的任何stackoverflow问题或中级文章,因此我决定写我的第一篇文章! 谢谢阅读!

自定义NSTabView – Szabolcs Toth –中

最近,我发现了关于NSToolbar和NSSegmentedControl的两篇非常有趣的文章。 一本是克里斯蒂安·蒂采(Christian Tietze)撰写的,另一本是由sanjeetsuhag写的。 在创建我的项目之一时,我遵循了Chritian的教程。 今天,对于另一个我想关注sanjeetsuhag的项目,但发现自己有些迷茫,因此决定撰写更详细的文章,希望他不会介意。 左侧是我们的项目,右侧是标准AppKit元素的外观。 步骤1.创建一个项目并命名 步骤2.删除视图控制器 步骤3.添加NSToolbar,但删除所有项目 步骤4.添加NSSegmentedControl并将段数减少到2 将“ Segment 0”设置为“ Selected”,激活第一个“ tab”或“ segment”。 步骤5.添加TabView控制器 步骤6.将TabView Controller添加到NSWindow作为内容视图 步骤7.将两个图像添加到视图中以检查它们是否正常工作 步骤8.将“ NSWindowController”“ New file”添加到我们的项目中 步骤9.使您的主窗口使用此新创建的类 步骤10.将NSSegmentedControl连接到新的WindowController类 // This is your newly added action @IBAction func segmentedControlSwitched(_ sender: Any) { } 在方法内部实现以下内容: @IBAction func segmentedControlSwitched(_ sender: Any) { let segmentedControl = sender as! NSSegmentedControl self.tabViewController?.selectedTabViewItemIndex = […]

在MacOS应用程序中嵌入Python

通过pyinstaller将python应用程序嵌入MacOS可可应用程序中 用于macOS核心的Mosaic Shapes用Python编写。 该UI用Objective-C编写,并通过NSTask和NSPipes与嵌套的Python应用程序进行通信。 由于产生的沙箱约束和代码签名问题,花了很多时间,咒骂和深夜才弄清楚如何将Python应用程序嵌套在Cocoa应用程序中。 我找不到在线全面的解决方案来解决我的问题。 我希望本演练对将来在搜索Google搜索结果的人中有所帮助。 从pyinstaller生成.app并将其嵌套在XCode中之后,通过NSTask调用python应用程序很简单。 但是,一旦准备好将应用程序提交给商店,就需要正确设置应用程序的沙箱权利并对该应用程序进行代码签名。 这就是噩梦通常开始的地方。 从这里下载python 2.7.13: https://www.python.org/downloads/ 下载pyinstaller: http://www.pyinstaller.org/ 一旦将应用程序沙箱化,MacOS的默认出厂python版本和Python的Hombrew / Cellar版本将出现代码签名问题。 嵌套python应用程序后,使用适当的沙盒权利对其进行签名,然后尝试调用您的python应用程序后,就会显示该错误。 您将收到崩溃消息,该崩溃消息给出了引用Python的古老代码签名错误。 (堆栈溢出)。 确保直接从python.org下载Python安装程序。 就我而言,我正在使用2.7.13(尚未使用Python 3进行测试) 下载并安装后,仔细检查默认的Python: guppy:〜dean $哪个python /Library/Frameworks/Python.framework/Versions/2.7/bin/python guppy:〜院长$ python -version Python 2.7.13 如果您使用的安装方式不是默认的python解释器,则可以明确指定要在python virtualenv中使用的python版本 mkvirtualenv -python = /库/框架/Python.framework/版本/2.7/bin/python 现在,打包您的python应用程序(替换为您的参数): python pyinstaller.py run.py -icon = icon-windowed.icns -clean -windowed -onefile -osx-bundle-identifier“ com.mosaic.mosaicshapes” 注意 :请确保您已经准备好图标文件,否则pyinstaller将默认使用其自己的图标。 此外,将包ID替换为父应用程序的包ID。 将生成的应用程序嵌入XCode […]