Tag: macos

在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 = […]

在Swift 5中使用模型的简单NSTableView – Szabolcs Toth –中

在本教程中,我们将使用Person模型创建一个简单的基于视图的NSTableView。 因此,最终将是: 步骤1.创建一个Cocoa Application项目。 步骤2.将NSTableView添加到Main Storyboard并进行一些自定义 将列数从2增加到3。 单击标题并命名列 我们需要向列和单元格添加标识符。 您还应该在“姓氏(lastName)”和“手机号码(mobileNumber)”列以及单元格中重复此操作。 创建一个IBOutlet并将其连接到您的表视图,但是不要忘记dataSource和委托。 @IBOutlet var tableView: NSTableView! 因此,我们添加了一个新文件,而不是使用Dictionary创建数组。 import Cocoa struct Person { let firstName: String let lastName: String let mobileNumber: String } 我们有Person模型,我们需要向其中添加一些值,但首先要创建一个数组。 @IBOutlet var tableView: NSTableView! var people: [Person] = [] override func viewDidLoad() { super.viewDidLoad() let person1 = Person.init(firstName: “Ragnar”, lastName: “Lothbrok”, mobileNumber: “555-1234”) […]

XCode代码段nasılayarlanır?

Benimkeşfetmemuzunsürdüğünden,比尔哈萨大城堡 片段nedir吗? 片段kod yazarkenişimiziinanılmazkolaylaştıranbir IDE eklentisi。 BirtakımIDE’ler iletümleşikgelmemesine档案XCode bu konudabaşarılıbirişçıkartmış。 ÖrneğinC ++’daaşağıdakikodu yazmaktansıkıldıysanıztam olarakdoğruyerdesiniz。 #include 使用命名空间std; int main(){ } Nasılkullanılır? Bu ekrana geldikten sonrayapmamızgerekençokbasit kodyazdığımızyerdekısayolyapmakistediğimizkoduseçipCMDtuşunabasılıtutaraksnippet’larınolduğuyeresürüklemek。 Çıkanekranda; 标题:Sizinanlayabileceğinizbirbaşlık。 完成捷径:Kod yazarken incyazdığımdaaşağıdakitümkodlarıyazıyor。 您可以在“收入”中找到更多的信息。 Geldikpüfnoktasına。 Eğerki kodunuzdabirtakımdeğişkenlervarsa yani kodu她的yazdığınızdaaynıolmayan fakat koduniçindebulunan yerler var ise,ki fordöngüsübunaörnekolabilir,onlariçin。 Buözelliksayesindearkasıgri olan alanlararasındayazarken TAB ilegeçişyapabilecek,dahahızlıkod yazabileceksiniz。 AşağıdakiGIF’ler konunun daha iyianlaşılabilmesiiçinbaşkabir makaledenalıntıdır。 Kaynakaşağıdabelirtilmiştir。 https://medium.com/@abhimuralidharan/ios-tips-creating-custom-code-snippets-in-xcode-d91facf5e242

在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 […]

直接下载任何Xcode

无论使用哪种浏览器,从App Store下载Xcode甚至下载.xip文件,无论使用哪种浏览器,当您的连接不如其他人稳定和快速地进行连接并且任何时候都可以中断下载时,都可能会很痛苦。时间,您很可能必须重新启动整个下载。 这只是发生在我身上,我正在写这封信作为自己的笔记,还与其他可能遇到类似情况的人分享。 这是我所做的下载… 1.安装Xcode命令行工具 这是一个约183Mb的小包装,我认为足以通过您的浏览器下载。 转到开发人员下载站点 如果需要,请使用您的Apple ID登录 搜索要下载的命令行软件包(我将使用针对Xcode 10和macOS Mojave的最新稳定命令行工具)。 点击右侧的链接,等待下载完成 下载后,将其安装为其他任何.dmg软件包。 2.安装 Homebrew 和wget 我使用Homebrew安装wget 。 可能还有另一种方法,但这就是我的方法。 😅 开放终端 跑 在顶部,您将看到一个链接,显示“单击此处” 。 单击它以下载cookies.txt文件 随时随地保存 4.获取Xcode直接下载链接 再次访问开发人员下载站点。 选择您要下载的Xcode版本(我将下载Xcode 10)。 右键单击右侧的链接,然后选择“复制链接地址” 或者,访问此StackOverflow答案以获取所有Xcode版本的链接。 5.开始下载 打开终端,然后转到cookies.txt文件的位置。 现在运行 开始下载Xcode的命令 将结尾处的链接替换为您要下载的文件,该文件是您在上一步中获得的。 等待下载完成。 笔记: 将-b添加到download命令以在后台运行它,尽管没有它也更容易检查进度和状态。 该命令中的-c选项允许您继续下载,即使您关闭终端,取消该过程或重新启动笔记本电脑等也是如此。 6.安装Xcode 打开下载的文件,使其开始解压缩。 将未压缩的文件移到Applications文件夹,就可以完成! 希望对您有用 ,请不要忘记与他人分享 ! 在jahir.xyz上了解更多关于我的信息 图片来源:unsplash.com

快速为Mac OS构建Vault App

开发iOS应用程序已经很长时间了,有一天我想为Mac OS开发一些实用程序应用程序。 在开发应用程序时,我意识到用于Mac OS应用程序开发的教程博客/视频的数量远远少于iOS应用程序开发的数量。 尽管人数少的原因很明显,但是我决定记下一个教训,就是这样。 在这个分为两部分的教程系列中,我们将构建一个Mac OS应用程序,即。 “保险柜”。 顾名思义,该应用程序将充当一个安全的保险库,其中用户可以隐藏各种文件,应用密码来锁定该应用程序,并且可以摆脱记住那些bash命令以进行隐藏/取消隐藏的操作。 在本部分的最后,这就是您应该开发的。 如果您直接要跳到完成的项目,请从这里克隆它。 首先打开Xcode,然后从New-> Project-> Mac OS中选择Cocoa App 。 创建项目后,打开Main.Storyboard 。 与iOS应用故事板不同,这对您来说似乎有些不同。 不仅有UIViewController,还有应用程序场景,窗口控制器场景和NSViewController 。 我们将在本系列后面的内容中看到“应用程序场景”和“窗口控制器场景”。 现在,让我们开始在提供的View Controller中创建UI。 从对象库中,拖动一个Box(NSBox)并将其放在视图控制器中。 将框重命名为“ ToolBarBox ”,并添加尾随,前导和顶部的约束,并在超级视图中使用“ 0”作为常量值,并在高度上添加约束(这将与superivew的高度成比例)。 为此,将约束添加为“等于Superview的高度”,并将乘数形式1的值更改为0.15 该框可被视为容器视图,其他视图(如“按钮”(用于“添加文件”,“设置”))将驻留在该视图中。 我们可以选择NSView代替NSBox,但是为了使事情变得简单,我选择了NSBox(与NSView不同,这里可以使用Attribute Inspector设置许多属性)。 与ToolBarBox相似,在对象库中添加另一个框,并将其命名为“ HeirarchyBox ”。 这将包含用于查看隐藏文件的按钮。 在此框旁,添加另一个框。 FileExplorerBox 。 这些盒子在一起将覆盖控制器的整个宽度。 就我而言,控制器的宽度和高度分别为1000和600(根据您的设计随意使用任何尺寸)。 HeirarchyBox和FileExplorerBox的顶部将接触ToolbarBox的底部,并且它们一起将覆盖整个宽度。 这样可以为HeirarchyBox提供约束。 虽然FileExplorerBox将在尾随,从底部到超级视图,从顶部到HeirarchyBox 。 我们已经完成了容器的工作,现在让我们在这些容器中添加更多的UI组件。 首先,将四个NSButton(用于图像,视频,音频和文档)从对象库拖到HierarchyBox中 ,并将它们嵌入到堆栈视图中。 在堆栈视图上方放置一个标签“ My Vault ”。 我们将对所有浏览器按钮(音频,视频,图像和文档)使用单一操作方法,因此,将标签分配给每个按钮(在本例中为101,102,103和104)。 […]

通过共享资源内存来结合CoreGraphics和Metal的功能

Metal API很棒,它为移动设备和台式设备打开了很多可能性。 但是, GPU有时可能有点笨拙,尤其是在诸如字体渲染或曲线绘制之类的高精度项目中,因此有时您确实会错过旧的CPU优秀项目。 我经常碰巧会想使用CoreGraphics的一些功能,但是保持我的GPU管道快速高效,而没有多余的转换或CPU / GPU同步中断 。 启发我写这篇文章的情况是,使用户能够绘制遮罩覆盖图,以识别希望显示某些效果的区域。 当然可以用Metal来实现绘图,但这需要大量工作:保持路径数据,三角剖分和渲染逻辑。 对于快速原型,仅使用CoreGraphics会容易得多,但是最直接的方法是从UI画布创建CGImage ,然后转换为MTLTexture以将其作为遮罩提供给某些着色器。 多维门户 但是,如果我们希望避免不必要的转换并将CoreGraphics路径直接绘制到MTLTexture中怎么办 ? 这似乎完全有可能! 为了实现这一点,我们必须在某些CGContext和MTLTexture之间共享一个内存缓冲区。 Metal可以从MTLBuffer对象创建纹理,而MTLBuffer则有机会指向已分配的内存。 因此,我们需要执行以下操作: 为CGContext分配内存 创建指向相同内存的MTLBuffer 从MTLBuffer创建MTLTexture 瞧! 实施 免责声明#1:在此演示中,我使用Alloy ,这是我在Apple平台上所有GPU项目中使用的Metal库。 它在香草金属上提供了一个很小的Swifty API 免责声明2:我既不在演示中也不做任何分解,也没有错误处理。 一切都在视图控制器中完成,无论是强制展开还是致命错误。 本文用作参考片段。 当为MTLBuffer分配无副本内存时,事情有些棘手。 为了使其快乐,它必须完美对齐 ,通常为4096字节。 在创建MTLBuffer时, MTLTextures也很麻烦 :我们必须对齐每个纹理行 ,并且对齐方式取决于我们要使用的像素格式 。 幸运的是,这两个任务都是可行的! 为了演示起见,我们将为MTKView上的可绘制单通道蒙版分配共享资源。 每当我们的MTKView更改大小时,我们都会重新分配掩码。 当然不是必须的,但这是最简单的方法。 首先,我们需要从系统中了解RAM页面大小,因此,我们将使用getpagesize()函数。 现在我们必须计算每行对齐的字节数和总分配大小。 为了分配对齐的内存,我们将使用posix_memalign(_,_,_)系统函数。 请注意,从这一点来看,我们负责分配此内存,但是稍后我们将对其进行处理 现在我们准备从此内存创建CGContext ,您可能已经完成了很多次,因此这应该非常简单: 我在这里使用CGImageAlphaInfo.no​​ne表示这是灰度图像,但是您也可以使用.alphaOnly 使用完全相同的内存,我们现在可以创建一个无副本MTLBuffer ,使其负责释放内存。 但是,您当然可以通过将nil传递给最后一个参数来自行管理。 现在,最后一步:我们正在从此缓冲区创建纹理。 纹理的存储模式必须与缓冲区相同。 […]

对Lona的贡献+如何在macOS上设置Ruby环境

本周初,我正在查看Airbnb的开源项目,并且发现了一个名为Lona的项目。 Lona是用于构建设计系统并使用它们生成跨平台UI代码,Sketch文件和其他工件的工具的集合。 (来自Lona的GitHub存储库) 我真的很喜欢这个项目的想法,所以我选择它作为我的开源课程的下一个项目。 没有打开很多问题,而且我不确定一开始是什么好任务。 我使用了项目自述文件中的提示,其中指出: 如果您有兴趣在公司中贡献或使用它,请随时打开GitHub问题或在Twitter @dvnabbott上与我联系。 (Lona README) 因此,我发了推文给正在维护该项目的Devin: 在开放源代码开发方面有一些经验,我知道维护者和贡献者之间的交流非常重要。 我相信,这是围绕该项目建立社区并让人们希望将来做出更多贡献的关键。 我感谢他的时间,并提供了很多帮助。 让我们回到项目本身。 Lona包含3个部分: Lona Components —跨平台组件的数据格式.component Lona Studio —用于设计.component文件的GUI工具,Swift Mac应用程序。 Lona Compiler —一种CLI工具和API,用于从.component文件,ReasonML生成UI代码 从上面的推文中可以看到,我选择了Lona Studio作为我的贡献。 我决定在接下来的几个月中专注于Swift开发,因此我想尽可能多地使用这种语言。 另外,我发现它很有趣,因为我以前从未使用过Mac应用程序,据我所知,macOS开发与iOS开发有很大不同。 设置项目 首先,我必须在机器上设置项目。 对我来说这不是小事,因为我没有一个先决条件。 为了从源代码构建Lona Studio,您需要安装以下工具: 捆扎机 可可豆 迦太基 我的Mac上已经安装了CocoaPods和Carthage,但是我没有Bundler,甚至没有听说过。 Bundler通过跟踪和安装所需的确切gem和版本,为Ruby项目提供了一致的环境。 (来自bundler.io) 我以前从未接触过Ruby,因此我必须设置Ruby环境才能安装Bundler。 首先,您需要安装RVM(Ruby版本管理器)。 这是我用于安装它的步骤: 安装GnuPG 酿造安装gnupg gnupg2 2.安装RVM的密钥 gpg –keyserver hkp://pool.sks-keyservers.net –recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB 3.运行经过验证的安装 […]

在AppStore中发布iOS应用程序

创建应用程序后的下一步是在AppStore中发布iOS应用程序。 如果我们想向全世界公开iOS应用程序,这是一个“快速”指南。 这个过程可能是第一次。 此过程涉及的主要步骤是: 创建一个Apple ID 加入苹果的开发者计划 在Xcode中 创建和构建您的应用程序 创建已签名应用程序的存档 在App Store Connect中 注册您的应用程序 上传或导出您的应用程序 提交您的申请以供审查 您的应用程序将通过验证并在App Store中发布。 创建一个Apple ID 其余过程需要Apple ID。 要创建Apple ID,您需要一个有效的电子邮件地址,并且可以通过不同的方式来进行操作: 在安装新iPhone或MacBook的过程中 首次使用AppStore或iTunes时 在Apple.com网站(https://appleid.apple.com/account/)上注册 您需要输入识别信息和一些个人数据。 在使用安全代码验证电子邮件之后,您的帐户将处于活动状态。 注册为开发者 下一步是在站点https://developer.apple.com/中注册为Developer ,以开始在AppStore中发布应用程序。 输入苹果开发者的网站 接受苹果开发者协议 您将进入开发者门户 使用此帐户,您只能访问开发人员的常规资源(SDK,下载,开发工具)。 之后, 您需要加入Apple的开发人员计划才能访问所有功能, 包括将 应用程序发布到AppStore。 加入苹果开发者计划 您需要加入Apple Developer Program才能开始发布应用程序。 在主页上,您可以单击“加入Apple开发人员计划” 点击按钮链接“注册” 以个人或组织身份开始注册。 您需要在iPhone或MacBook中为您的Apple帐户启用“双重身份验证”。 输入注册所需的信息后,系统将提示您支付99美元以获得为期一年的订阅会员资格 。 最后一步允许您在AppStore和MacOS应用程序中发布iOS应用程序。 注意:提交并支付iOS开发者注册费用后,您需要等待Apple处理您的订单。 生成应用证书 验证新的开发者帐户后。 您将能够使用Apple开发人员站点中的发布工具。 […]