Tag: ios10

带CallKit的系统调用屏幕

集成Amazon SNS和CallKit 苹果宣布在WWDC16上开放API,以将iOS上的本机呼叫屏幕与VoIP(IP语音)应用程序配合使用。 我们曾经发送推播通知来通知用户电话。 在iOS10中,第三方应用程序还可以使用CallKit通过本机呼叫屏幕通知用户。 我将总结我对CallKit经验。 抽象 设置Amazon SNS 使用PKPushRegistry在应用程序上进行初始设置以接收VoIP推送通知。 从Amazon SNS发送VoIP推送通知 使用CallKit显示系统调用屏幕 从Amazon SNS接收VoIP推送通知 设置Amazon SNS 应用程序必须在后台才能显示系统调用屏幕。 VoIP推送通知使我们可以唤醒后台应用程序。 当收到VoIP推送通知时,确保应用程序在后台运行。 这使我们可以启动VoIP呼叫。 我没有注意到与常规推送通知和本地通知有这种区别,最终花费了大量时间。 但是,由于在我从事此工作的那一刻(2016年8月),Parse和Firebase不支持VoIP推送通知,因此我决定使用亚马逊的推送通知服务SNS。 在SNS上设置VoIP推送通知的过程与常规推送通知的过程几乎相同。 首先要做的是设置证书。 您可以像常规推送通知一样,从Apple Developer网站创建VoIP推送证书。 选择“ VoIP服务证书”,下载证书,然后导出P12文件。 其次,您需要在SNS上创建一个应用程序。 从AWS仪表板中选择SNS。 然后,选择应用程序>创建平台应用程序。 然后在配置中输入所需的信息。 应用名称:您选择的应用名称 推送通知平台:Apple开发或Apple生产 推送证书类型:VoIP推送证书 选择P12文件:选择使用来自Apple Developer网站的证书创建的VoIP推送通知P12文件。 输入密码:输入创建p12文件时指定的密码 这就是SNS设置所需的全部。 当然,您需要将此连接到服务器以进行生产。 服务器应提供一个简单的API来连接两者。 在应用程序中进行配置以接收VoIP推送通知 下一步是配置iOS项目。 选择项目文件,然后为要允许其推送通知的目标启用“功能中的后台”。 选择“ IP语音和后台提取”,以便您可以接收VoIP推送通知并在后台处理必要的步骤。 现在,我们将使用PKPushRegistry获得设备令牌。 如下所示,我们将PKPushTypeVoIP设置为PKPushRegistry实例。 您指定为代理的实例将接收与VoIP推送通知相关的回调。 在设备令牌注册视图中,您还可以添加用户数据。 您可以添加用户ID等以支持向特定设备发送推送通知。 让我们向设备发送VoIP推送通知。 选择您要发送通知的设备。 单击“ […]

iOS 10的应用程序组和iMessage扩展– Tack Mobile –中

Messages应用程序的可能性几乎是无穷无尽的,我很高兴看到iOS 10的发布在接下来的几个月中提出了其他独立或捆绑的创造性应用程序。对于我一直在从事的项目在过去的6-7个月中,我们希望通过Messages扩展程序使事情变得简单。 没有新功能,只有现有应用程序的简单功能扩展到了Messages,可以与当前没有该应用程序的人共享。 对于没有订阅功能的付费应用程序,新用户的招聘对于赚钱至关重要,这是创建Messages扩展的主要目标。 本质上,我们希望为用户提供一种更轻松的共享方式,从而通过消息向非用户推广。 第一步是创建一种在现有包含应用程序和Messages应用程序之间共享数据的方法。 本文底部已链接了有关创建App组以通过NSUserDefaults和Core Data共享数据的出色教程,我在创建Messages应用程序时引用了这些教程。 这篇文章是关于使用应用程序组通过NSFileManager共享iMessage扩展的数据。 我们已经在使用NSFileManager将要共享的数据写入磁盘。 本质上,我们遵循将数据托管在服务器上的通用模式,该服务器可根据需要提取并在本地写入/删除/读取。 由于我们已经使用NSFileManager写入文档目录,因此我使用NSFileManager与我们的消息应用程序共享数据。 就我的目的而言,Core Data可能会过大。 第一步是创建iMessage扩展。 从现有容器应用程序中,选择文件->新建->目标。 这将弹出此窗口: 选择“ iMessage扩展”,然后选择一个名称。 您可以稍后更改显示名称,并且显示名称可以与您的容器应用程序相同,这是我们选择执行的操作,因为扩展名旨在驱动用户购买容器应用程序。 要开始共享数据,您需要在“目标”功能中打开应用程序组。 这应将com.apple.security.application-groups添加到YourProject.entitlements文件,并在project.pbxproj文件中启用com.apple.ApplicationGroups.iOS。 需要明确的是,您并没有更改这些文件,当您在“目标”->“功能”中打开“应用程序组”时,它应该只显示在源代码控件中。 在新启用的“应用程序组”部分中,单击加号图标,Xcode将弹出一个视图,显示“添加新容器”。 这必须是唯一的,因此我遵循推荐的group.com.YourCompanyName.YourProjectName.container命名约定。 除不创建新容器外,还请按照消息目标中的这些相同步骤进行操作,只需选择刚刚创建的容器即可。 它是两个应用程序之间的共享容器。 确保两个目标都选中了您创建的容器,并且选中了“步骤:”下面的三个标记。 现在,您已经在两个目标中都启用了应用组,就可以开始编码了。 我做的第一件事是创建用于访问共享容器的辅助方法,因为它是我用于创建共享目录,写入数据和删除数据的路径。 您将要使用您在“项目设置”中“应用程序组”下创建的确切字符串。 我将其设置为常量,并使用NSFileManager方法containerURLForSecurityApplicationGroupIdentifier:创建了一个返回容器路径的方法,并传入了App Group常量。 在消息扩展之前,我们使用NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)将数据写入NSDocumentDirectory; 然后选择返回的第一个路径。 我更新了所有我们使用共享应用程序组容器的地方。 基本上,在使用此标准NSDocumentDirectory的任何地方,都需要对其进行更新以使用容器路径。 主要是在这里NSFileManager写入数据,获取数据和删除数据。 我们还有一个可用的磁盘空间检查,在这里我们检查attributeOfFileSystemForPath:并检查NSFileSystemFreeSize对象以查看剩余的磁盘空间,并且我还更新了此路径以检查容器路径而不是NSDocumentDirectory路径。 仔细检查文件管理器的工作并确保全面更新非常重要,因为您可以想象如果更新以将数据写入新容器但仍从NSDocumentDirectory等删除数据时可能会遇到的错误。 ,在初始化下载管理器时,我检查了共享路径中的目录是否存在,如果不存在,则使用createDirectoryAtPath:withIntermediateDirectories:attributes:error创建了该目录,然后再次传递了共享容器路径。 您需要执行此步骤,因为NSDocumentDirectory已经存在,但是需要创建容器目录。 既然您已使容器应用程序从共享应用程序组中写入,读取和删除数据,那么您也应该可以在iMessage扩展中自由使用它了! 当然,您的扩展程序需要数据的用途可能千差万别,但对我来说,仅对viewWillAppear进行一次检查/更新以查看文件管理器中的数据就足够了。 自从我在Swift中编写扩展名以来,我就使用了FileManager.default,并且再次使用了相同的containerURLForSecurityApplicationGroupIdentifier方法,该方法在Swift中被命名为forSecurityApplicationGroupIdentifier。 同样,您需要在“应用程序组”部分中传递确切的字符串。 然后,我过滤了结果以仅查找带有m4a文件扩展名的项目,并将这些文件保存在用于填充CollectionView的array属性中。 根据您要写入文件管理器的数据类型,这可能会变得很复杂。 但是对于我的使用,仅从写入共享应用程序组的文件和文件名中,我就能获得编写简单但有意义的扩展名所需的信息。 要考虑的一个潜在问题是您的用户在现有版本上更新到新的应用程序版本。 该应用程序的较旧版本将把数据写入NSDocumentDirectory,并且在尝试在新的应用程序组容器中查找数据时将失败。 为了获得无缝的体验,并且不让用户再次下载他们已经拥有的项目,您需要将数据从NSDocumentDirectory迁移到新的应用程序组容器。 在初始化下载管理器时,我在m4a文件格式的documents目录中添加了对项目的检查,并将其复制到共享应用程序组中,然后从NSDocumentDirectory中删除。 链接到有关使用应用程序组将NSUserDefaults共享到扩展的教程,该扩展对我有所帮助:http://www.atomicbird.com/blog/sharing-with-app-extensions

iOS 10远程通知

在iOS 10中,通知发生了很大变化。 远程和本地通知方法是统一的。 您可以使用通知扩展名添加图像之类的媒体。 在本文中,我将讨论如何设置通知类型和注册远程通知。 在下一部分中,我将向您展示如何处理远程通知和可操作的通知。 远程通知过程 首先,了解如何使用远程通知会很有帮助。 远程通知涉及以下步骤: 配置您的通知类型并注册远程通知 注册到APN的远程通知 将设备令牌注册到服务器(推送通知提供程序) 在提供商和APN之间进行通信 处理远程通知 步骤3和4是服务器端过程。 步骤1.配置通知类型并注册远程通知 1)配置通知类型 您需要请求授权才能接收通知。 在此阶段,您可以设置通知类型,例如警报,声音和标志。 在iOS 9及以下版本中 使用`registerUserNotificationSettings`方法 在iOS 10中 使用`requestAuthorization(options:completionHandler:)`方法。 func requestAuthorization(options:UNAuthorizationOptions = [], completeHandler:@转义(Bool,Error?)-> Void) 选项描述您要提供的通知类型。 completeHandler具有两个参数: Grant和error –如果未发生错误,则错误为nil 。 – 授予的返回true或false取决于以下情况。 这不是我期望的结果。 为什么? 授予所请求选项的授权时,此参数的值为* true *。 当一个或多个选项的授权被拒绝时,该值为* false *。 在Apple文档中,他们谈论的是请求的选项,而不是通知设置。 但是实际的测试结果与上面的列表不同。 即使用户更改了授权选项(例如在设置应用中禁用警报),它也没有返回“ false”值。 首次启动应用程序时,“授权请求”对话框仅出现一次。 因此,我建议您将`.alert`选项设置为默认选项。如果您从`registerUserNotificationSettings`或`requestAuthorization(options:completionHandler:)`中省略了该选项,则无法在设置应用程序中为您的应用程序通知找到警报选项。 2)注册远程通知 调用registerForRemoteNotifications()方法。 如果注册成功,它将自动调用` […]

iOS 10推送通知有哪些新功能?

[vc_row full_width =”“ parallax =”“ parallax_image =”“ bg_type =”“ parallax_style =”“ bg_image_new =”“ layer_image =”“ bg_image_repeat =”“ bg_image_size =”“ bg_c​​stm_size =”“ bg_img_attach =”“ parallax_style =”“ bg_image_posiiton =”“ animation_direction =”“ animation_repeat =”“ video_url =”“ video_url_2 =”“ u_video_url =”“ video_opts =”“ video_poster =”“ u_start_time =”“ u_stop_time =”“ viewport_vdo =”“ enable_controls =”“ bg_override = ”” disable_on_mobile_img_parallax =”” parallax_content […]

访问对隐私敏感的数据iOS10

在访问对隐私敏感的数据(如照片库,相机,联系人,日历,提醒,麦克风,位置等)之前,必须先获得授权。 当您未经许可直接访问它们时,您的应用程序将崩溃。 然后,Xcode将记录如下: 该应用已崩溃,因为它尝试访问没有使用说明的隐私敏感数据。 该应用程序的Info.plist必须包含一个NSContactsUsageDescription键,该键具有一个字符串值,向用户解释该应用程序如何使用此数据。 该如何处理? 正如苹果所说: 您必须通过在Info.plist文件中包含适当用途的字符串键来静态声明应用程序对受保护数据类的预期用途。 在您的项目中打开名为info.plist的文件,右键单击它,将其作为Source Code打开,然后将此代码粘贴到该文件中。 或者,您可以默认打开info.plist作为“ Property List ,单击“添加”按钮,Xcode将在键入“ Privacy -时为您提供建议的完成内容Privacy -借助键盘⬆️和⬇️。 可算作私有数据的框架列表很长: 联系人,日历,提醒,照片,蓝牙共享,麦克风,相机,位置,健康,HomeKit,媒体库,动作,CallKit,语音识别,SiriKit,电视提供商。 请记住在和之间写下您为何要求此授权的描述,否则您的应用将被apple拒绝: NSPhotoLibraryUsageDescription $(PRODUCT_NAME)照片使用 NSCameraUsageDescription $(PRODUCT_NAME)相机使用 NSMicrophoneUsageDescription $(PRODUCT_NAME)麦克风使用 NSLocationUsageDescription $(PRODUCT_NAME)的位置使用 NSLocationWhenInUseUsageDescription $(PRODUCT_NAME)的位置使用 NSLocationAlwaysUsageDescription $(PRODUCT_NAME)始终使用位置 NSCalendarsUsageDescription $(PRODUCT_NAME)日历事件 NSRemindersUsageDescription $(PRODUCT_NAME)提醒使用 NSContactsUsageDescription $(PRODUCT_NAME)联系人使用 NSMotionUsageDescription $(PRODUCT_NAME)动作使用 NSHealthUpdateUsageDescription $(PRODUCT_NAME)健康更新使用 NSHealthShareUsageDescription $(PRODUCT_NAME)健康共享使用 NSBluetoothPeripheralUsageDescription $(PRODUCT_NAME)蓝牙外围设备使用 NSAppleMusicUsageDescription $(PRODUCT_NAME)媒体库使用 NSSiriUsageDescription $(PRODUCT_NAME)siri使用 NSHomeKitUsageDescription $(PRODUCT_NAME)家用套件的使用 NSSpeechRecognitionUsageDescription $(PRODUCT_NAME)语音使用 NSVideoSubscriberAccountUsageDescription […]

iOS 10中的本地通知

本地通知是一种将通知发送给用户的好方法,而无需Internet连接或服务器端编程。 这些通知对于任何类型的“提醒类型的应用程序”都是完美的,并且自iOS 4发行以来就可用。如果您正在编程一段时间,我确定您已经熟悉UILocalNotification类,现在就熟悉iOS的发布10,我敢打赌,您和我一样高兴(这是非常讽刺的方式), UILocalNotification已过时。 好吧,新的更新随新的代码实现一起出现,作为开发人员,我们应该保持代码更新,对吗? 好的,让我们来聊聊吧,让我们构建一个非常简单的应用程序,它会使用新的UserNotifications Framework’s UNNotificationRequest.提醒我们进行UserNotifications Framework’s UNNotificationRequest. 首先在Xcode中创建一个新项目,然后在“链接框架和库”部分中添加UserNotifications Framework 。 转到您的AppDelegate.m文件,然后像这样导入框架… 现在,在didFinishLaunchingWithOptions:内部didFinishLaunchingWithOptions:复制并粘贴… – (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. if ([application respondsToSelector:@selector(isRegisteredForRemoteNotifications)]) { UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; [center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert + UNAuthorizationOptionSound + UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error) { if (!granted) { //Show […]

带附件的iOS 10通知以及更多其他内容

这是关于iOS 10通知的两部分文章的第二部分。 今天,我们将详细介绍如何实现通知附件的技术细节以及iOS 10中引入的许多更复杂的功能。 首先,Apple已将通知处理移至名为UserNotifications的新框架。 请参阅https://medium.com/@prianka.kariat/ios-10-notifications-an-overview-8e88b7f3436b#.1yk3ij8j4了解iOS 10通知中的新功能。 本文将分为以下几部分 权限处理 带有附件和通知处理的本地通知 带有附件的远程通知 自定义通知的UI 1.权限处理 为了使您的应用能够将通知发送到设备,它应该向用户询问权限。 可以使用UserNotifications框架按以下说明进行操作 。 不同的通知可能具有不同的操作。 如果您可以从应用程序发送短信和电子邮件会话,则在收到每种消息时必须响应的动作将有所不同。 因此,我们有通知类别。 稍后您将了解到,当您想为不同的通知实现自定义界面时,这些类别也很重要。 UNUserNotificationCenterDelegate 如果用户在取消通知或单击操作按钮后打开应用程序,则您的应用程序应实现此委托以在前台接收通知并进行任何处理。 我有一个可以删除通知的按钮。 我将仅在用户使用“发送”按钮发送通知后启用该按钮。 我们有一个文本字段,可让用户输入通知的正文。 我们仅发送带有单个标识符的通知。 因此,当收到新通知时,它将更新现有通知,而不会使通知中心混乱。 我们为通知触发器指定了10秒的间隔。 如果用户选择在发送通知之前选择发送带有修改主体的通知,则通知中心安排的旧通知将被更新。 删除通知 您可以删除传递的通知以及应用程序发送的未决通知。 附件应该很小! 使附件保持最小尺寸,尤其是在下载内容时。 短时间间隔后,操作系统将终止服务扩展。 因此,您必须确保在分配的时间之前完成处理。 我们将向用户显示食谱供稿,以作为通知。 此通知将包括以下部分。 食谱标题 字幕 -谁张贴了食谱 正文 -食谱的简短说明 视频附件 –显示配方过程 因此,当前的工作是将视频附加到服务扩展中的通知上。 您的服务扩展名有两个文件Info.plist和NotificationService.swift 您将在NotificationService中获得一些样板代码。 不过,让我们编写用于下载视频和设置通知内容的代码。 在此之前,只需确保要发送的有效负载如下。 4.自定义通知的UI 上面交付给用户的UI是带有视频附件的通知的默认UI。 iOS 10添加了自定义此UI的功能。 现在,自定义通知UI时有些事情看起来是不可能的。 动画。 […]

统一日志记录和活动跟踪

去年,苹果对所有更新平台(iOS 10,watchOS 3,tvOS 10,macOS 10.12)的日志记录系统进行了重大更改:现在,将旧的ASL和Syslog API重定向到了新的统一日志记录,从而大大改善了活动跟踪。 这是一个关于我如何采用它们来调试用Swift3编写的极其异步的watchOS3 / iOS10应用程序的故事。 为什么要进行统一日志记录? 认识Fox:具有watchOS3扩展功能的iOS10应用。 Fox正在通过Apple Watch的加速度计跟踪用户的运动活动,将原始数据传输到手机,然后传输到服务器以进行进一步的大数据分析。 棘手的事情是:用户参加医学研究并且他的生活非常艰苦,因此Fox不应在白天打扰他,它应该在后台运行并以静默方式收集数据。 至于watchOS3,watchapps主要被视为前台应用程序,后台执行仅用于更新UI。 对于Dock中的应用程序,每小时可以获得一次后台执行时间;对于在当前表盘上拥有活动Complication的应用程序,则可以获得每小时两次的后台执行时间。 在每个后台任务中,Fox应该从运动传感器请求加速度计数据(这是异步完成的),将其写入文件,放置到传输队列中,等到将其传输到iPhone并获得传输成功无误的响应。 另外,我们希望通过在N个并发操作中运行此请求数据文件传输响应来提高性能。 我们希望日志能够调试整个事情。 像大多数iOS项目一样,第一动力是使用像Crashlytics或Cocoalumberjack这样的流行的第三方框架。 令人失望的是:Crashlytics仍然缺乏watchOS支持,并且想像一下我在Cocoalumberjack的普通文本日志中看到的一团糟,当时四个线程和许多回调开始同时将消息推送到文件末尾。 另一个问题是观察者效应 :通过Cocoalumberjack编写的每条消息都占用了CPU时间,更改了整个算法的时间,并且在后台任务期间处理的数据量更少。 watchOS3具有斯巴达式的限制:如果您的上一个后台任务花费的时间太长或占用了过多的CPU,则OS不会为您提供后台执行时间。 这种伐木造成的危害大于利润。 因此,我需要快速的日志记录系统,适合异步代码,并具有不受欢迎的Apple平台支持。 我已经决定从根本上尝试原生的统一日志记录和活动跟踪。 记录中 功能,如WWDC会话721中所述: 分类和过滤 :每条消息都有子系统,类别,四个级别之一(默认,信息,调试,故障,错误),已启用标志和目标(磁盘或内存)。 隐私 :通过用字替换动态字符串,集合和数组,防止将个人身份信息意外泄漏到存储的日志中。 可以在每个参数的基础上覆盖此行为。 可用性 :日志记录系统为您收集呼叫者信息,内置类型说明符可简化消息准备。 性能 :观察者影响最小。 数据存储在/ var / db / diagnostics /中的二进制.tracev3文件中,并以.logarchive文件传输(两种文件格式都可以使用macOS Sierra中更新的Console.app打开)。 整个系统的日志被写入一个位置。 尽管在WWDC会话幻灯片中描述了许多C函数,但在Swift中的用法却非常简单:一个os_log函数以静态字符串 (在编译时称为)接受消息,并带有占位符作为参数,参数本身, OSLog(如果要使用非参数) -default子系统和类别,以及用于日志级别的枚举 。 仅消息字符串是必需的: func os_log(_消息:StaticString, […]

小部件,iOS 10,Xcode 7和大小

随着iOS 8的发布,Apple引入了Widgets 。 在iOS 9上,变化不大,我们所有应用程序的Widget使用率仍然很低。 iOS 10的推出Apple尝试将Widgets放在更多的焦点。 最大的更改之一(并且可能会破坏所有小部件的更改)之一是, 小部件现在可以具有两种模式: 紧凑和扩展 。 紧凑模式的固定高度为110px(据我所知 ),对于扩展模式,您可以像以前一样设置自己的首选高度。 苹果选择默认情况下实施紧凑模式 (我个人认为这是一个糟糕的选择,因为开发高度超过110像素的所有小部件都被切断了)。 另外,由于Xcode 8仍处于测试版,并且Apple不接受使用Beta版制作的版本,因此您还不能正式修复此问题。 那么该怎么办? 好了,我们可以尝试解决此问题:调用函数,设置属性并查看在iOS 10上会发生什么。 为此,我们首先创建了一个枚举“复制” Apple NCWidgetDisplayMode 在根窗口小部件视图控制器中,我们添加了一些方法,使我们可以“公开”新的枚举。 对于iOS 9及以下版本,我们回退到扩展模式,因为该模式的行为等同于当前的小部件行为。 这段代码本身并不能解决我们的问题。 我们的小部件保持紧凑模式。 它只允许我们为iOS 10进行“准备”并迁移到Swift 3.0。 为了使小部件进入扩展 模式, iOS需要再按一次(以下代码放置在loadView方法中)。 我们使用此代码构建了我们的应用,并将其提交给TestFlight,以便我们可以在iOS 10设备上运行它。 而且有效! Widget并非处于预期的100%状态,而是处于展开模式,但未显示少显示按钮。 这对我们来说不是损失,因为我们只使用了扩展模式 。 短时间内,我们尝试通过在根窗口小部件视图控制器中实现以下方法来解决此问题: 但这并没有改变。 之后,我们停止了,因为我们已经实现了想要的目标。 通过这种方式,我们的应用仍支持iOS 7(与Xcode 8不同),同时为我们的iOS 10用户提供了最佳体验。 注意:这仅适用于iPad,iPhone将默认返回紧凑模式。

你好贴纸!

如果您是iOS开发人员,那么今年夏天应该只关注iOS 10及其出色的新API。 新版本的iOS公开了前所未有的系统API。 其中,最令人兴奋的功能之一就是能够为Messages应用程序创建扩展。 因为此帖子旨在具有“ hello world”的复杂性,所以我们将创建一个不需要编码技能的贴纸包扩展。 资料来源:http://bit.ly/1XYhCMS 请注意,要运行此示例,您需要在Mac上安装Xcode 8.0beta。 为了使本示例正常工作,您需要一包贴纸(图像)。 我们从https://tlgrm.eu/stickers获得了我们的列表,这些列表被公开列出。 步骤1:建立专案 打开Xcode,然后选择创建新的Xcode项目。 从“模板”对话框菜单中,选择“ iOS /应用程序”部分下的Sticker Pack应用程序,然后输入产品名称。 第2步:导入贴纸 对于新打开的项目,选择“项目浏览器”,您应该看到Stickers.xcstickers资产文件夹。 现在将您的贴纸拖放到贴纸包文件夹中 步骤3:运行项目 要运行,只需按cmd + R或单击Xco​​de工具栏中的播放按钮。 由于这不是应用程序,而是Messages应用程序扩展,因此需要在 Messages 内部运行。 出现对话框菜单时,选择“消息”应用程序,然后按“运行” 。 步骤4:模拟器 该模拟器应该已经与测试用户一起打开了Messages应用程序以进行测试。 现在,如果您按消息文本字段附近的App Store图标并导航到右侧,您将找到新创建的Stickers Pack。 最后的想法 我们期望在iOS 10的Messages应用程序中添加大量贴纸,因为创建自己的贴纸包并在Messages App Store中出售非常容易。 是的,没错,有一个新的App Store,专门用于Messages应用程序扩展。 在下一篇文章中,我们计划专注于更复杂的东西,称为“交互式消息自定义标签应用程序”。 绘画愉快! [编辑:]动画贴纸 事实证明,我们可以像创建静态贴纸一样轻松地制作动画贴纸。 为此,您需要右键单击Sticker Pack文件夹(在Stickers.xcstickers中可见),选择New Sticker Sequence。 填写动画贴纸的框架,就是这样! 贴纸格式和尺寸 支持PNG,APNG,GIF和JPEG文件。 苹果建议使用PNG和APNG 贴纸有3种尺寸:小(100 […]