iOS 10 创建iMessage App

原文作者 澳大利亚19岁少年--Davis Allie ----原文地址

时值中秋佳节, 送给出门在外的程序猿们 !

骚年们, 自己写个表情包斗图可否 !

斗-seal.svg.png

第一. 介绍

随着iOS10的发布,苹果对开发者开放了Messages应用程序,开发人员现在可以创建他们自己的各种类型 并且可以内联iMessage内容的 iMessage apps,包含简单的表情包到可以交互的复杂界面。

在这个教程中, 我将会为你介绍新的framework--Messages framework, 并且为你展示如何创建属于自己的iMessage Apps;

这个教程的前提是你在OS X El Capitan或以上版本中运行xcode8, 并且有一定的iOS开发经验;如果你是刚开始学习iOS开发, 你可以先学习这个课程iOS From Scratch With Swift; 在这系列中,你将了解如何开始开发iOS平台的深入的文章和教程。

1.生态系统(Ecosystem)
iMessage APP生态系统开始于一个完整的App Store,用户通过Message 应用程序都可以访问。这家App Store是完全独立于之前的应用商店,并将只显示iMessage-related应用

iMessage apps的存在在一定程度上延展了印象中的iOS应用程序, 比如表情包(斗图岂能少了表情包)和自定义键盘;最重要的不同在于,这个iMessage App Store 只存在于系统Messages之中, 你创建iMessage APP 不需要像创建iOS APP那样显示在手机主屏幕上, iMessage应用程序创建一个扩展的有效空白和无形的iOS应用程序。然而,如果你想开发一个包含iOS和iMessage的应用,你可以创建一个像任何其他类型的扩展的iMessage扩展。

最后要说的是, 这个 iMessage apps 只有效于iOS系统, 但它的内容可以在MacOS和watchOS上显示;此外,watchOS 3的用户能够查看最近使用的表情包,并可以从苹果的手表把这些表情直接直接发给联系人。

第二. 基本的表情包

为了让开发者快速简单的创建一个iMessage 表情表, Xcode提供了一个没有任何代码的模板! 这将是一个伟大的工具,使艺术家与没有编程知识的人都可以创建一个表情包。

使用新的Messages framework 创建一个表情,你可以创建小的, 不大不小的, 大的表情, 这个尺寸,适用于所有的表情包。你只需要提供最大图像大小为每个表情在你的表情包中,如果需要缩减在某些设备上需要缩放, 系统会替你完成。

虽然没有严格限制,但是苹果建议的表情文件大小:

1. Small: 100 x 100 pt @3x scale (300 x 300 pixel image)
2. Medium: 136 x 136 pt @3x scale (378 x 378 pixel image)
3. Large: 206 x 206 pt @3x scale (618 x 618 pixel image)

也有其他的一些限制, 表情包的大小:

1. 文件中images不可以大于500kb;
2. iamge不可以小于100 x 100 pt (300 x 300 pixels).
3. iamge不可以大于206 x 206 pt (618 x 618 pixels).
4. 图片格式必须是 PNG, APNG, JPEG, GIF ;

打开Xcode, 创建一个新的工程, 选择iOS > Application, 你将会看到 iMessage ApplicationSticker Pack Application 的可选项, 第一个例子中, 选择Sticker Pack Application :

Paste_Image.png

如果你一直照着做,并且想得到一些表情, 你可以从这里下载--tutorial GitHub repo.

打开项目, 你会发现Xcode的左侧边栏中有个Stickers.xcstickers , 这个文件夹中包含了iMessage APP的icon 和表情, 稍后将这些表情拖拽到你的项目中的Sticker Pack 文件夹中的New Sticker Sequence;

Paste_Image.png

如果你想要添加动态表情那么你添加一组图片即可, 你可以点击Sticker Pack 文件夹, 选择 Add Assets > New Sticker Sequence 这个选项, 在这个表情包中, 你可以再次设置;

注意一定要按步骤添加图片

3.png

最后, 你如果想要更改表情包得默认名称和大小, 你可以在右侧Attributes inspector 中更改;

4.png

测试你的表情包

测试表情包, CMD + R即可, 也可以点击左上角的运行按钮, 然后模拟器会弹出如下菜单:

5.png

选择Message然后点击run按钮, 模拟器展示出Message应用, 点击APP store按钮, 即靠近输入框的按钮;

6.png

你的表情包将会展示在最前边,你会发现两个表情并且可供使用和发送;

7.png

点击任何一个表情, 它将会被添加在当前的信息中,

8.png

正如你所看到的, 在iOS10中你可以快速简单的创建表情包并且不需要任何代码;

第三 自定义标签应用

处于用户的需要,基本的表情应用程序提供的模板可能不完全满足需求;处于这个原因, 苹果也提供了一种方法来使你创建更为复杂的标签应用程序;如果你想一块做这个APP, 那么创建一个项目CustomStickerPack, 这次选择iMessage Application模板;

创建完这个空的工程, 你会看到类似iOS APP的文件列表, 但多了一个MessagesExtension文件夹, 最上边的CustomStickerPack文件夹包含Assets.xcassetsInfo.plist文件,重要的是,你提供所有正确的大小的应用程序图标在这个Assets.xcassets目录,因为iOS也将使用它,例如用户的存储使用的设置。

9.png

我们集中精力在MessageExtension文件下,

1. MessagesViewController.swift : iMessage app的程序入口;
2. MainInterface.storyboard: 可视化操作;
3. Assets.xcassets: 图片集合;
4. Info.plist : 配置一些扩展信息;

在我们的例子中, 我们创建MSStickerBrowserViewController这个类;

打开MessagesViewController.swift , 你会发现它是MSMessagesAppViewController的子类, 而再往上看父类就是UIViewController, 这意味着在iMessage APP中都符合UIKit的标准;

这个MSMessagesAppViewController类提供了许多回调函数, 你可以覆盖他们, 进一步定制应用程序的功能,但是我们先不需要这些;接下来先配置MSStickerBrowserViewDataSource协议;

class MessagesViewController: MSMessagesAppViewController, MSStickerBrowserViewDataSource {

    ...

}

之前我们可以展示我们的表情, 我们需要添加文件到我们的工程并且加载他们;拖拽之前用过的图片文件夹到工程中;并且确保他们添加到MessagesExtension这个目标中,因为这个路径将会作为URL来加载他们, 当加载表情时使用使用更加简单;

接下来在MessagesViewController中创建一个MSSticker数组来存储我们的表情包, 并写一个方法来总本地加载他们;
如下代码:

var stickers = [MSSticker]()

func loadStickers() {
        for i in 1...2 {
//语法变了
            if let url = Bundle.main.url(forResource: "Sticker \(i)", withExtension: "png") {
                do {
                    let sticker = try MSSticker(contentsOfFileURL: url, localizedDescription: "")
                    stickers.append(sticker)
                } catch {
                    print(error)
                }
            }
        }
    }

然后在这个类中添加createStickerBrowser, 我们初始化一个MSStickerBrowserViewController作为根视图, 并设置宽高约束:

func createStickerBrowser() {
    let controller = MSStickerBrowserViewController(stickerSize: .large)

    addChildViewController(controller)
    view.addSubview(controller.view)
     //语法变了
    controller.stickerBrowserView.backgroundColor = UIColor.blue
    controller.stickerBrowserView.dataSource = self

    view.topAnchor.constraint(equalTo: controller.view.topAnchor).isActive = true
    view.bottomAnchor.constraint(equalTo: controller.view.bottomAnchor).isActive = true
    view.leftAnchor.constraint(equalTo: controller.view.leftAnchor).isActive = true
    view.rightAnchor.constraint(equalTo: controller.view.rightAnchor).isActive = true
}

然后我们需要实现MSStickerBrowserViewDataSource必须要实现的代理方法;

func numberOfStickers(in stickerBrowserView: MSStickerBrowserView) -> Int {
    return stickers.count
}

func stickerBrowserView(_ stickerBrowserView: MSStickerBrowserView, stickerAt index: Int) -> MSSticker {
    return stickers[index]
}

最后, 所有的代码都已经完成, 替换viewDidLoad中的代码:

override func viewDidLoad() {
    super.viewDidLoad()

    loadStickers()
    createStickerBrowser()
}

像之前那样运行APP, 一旦一切都完成加载, 应该会看到一个完全相同的屏幕除了蓝色背景, 除了蓝色的背景色;

10.png

在这个教程中, 我们只是加载了应用程序中的图片,但好的是我们可以自定义标签应用程序了, 然而, 你可否加载网络服务器呢? 在展示你的MSStickerBrowserViewController之前,可以通过使用别的view controllers来实现的; 再继续一步吧!

自定义APP

在最后一节, 我们将创建一个非常基本的iMessage应用程序来创建一个独特的消息。;

如果你愿意一块继续完成这个目标, 打开xcode创建一个MessageApp, 打开MainInterface.storyboard,删除默认的label, 添加一个stepper和一个button, 如下图:

11.png

请注意,为了让你的iMessage APP的视图位置正确展示在所有的设备中, 你需要添加布局约束, 在这个例子中我已经设置了stepper在视图中间, 这个button在视图的下侧;

然后, 选择stepper打开Attributes inspector, 改变最小最大值为0和10:

12.png

接着在 Assistant editor 中打开MessagesViewController.swift并链接起来;

@IBOutlet weak var stepper: UIStepper!

@IBAction func didPress(button sender: AnyObject) {

}

接下来, 写代码的时刻到啦, 第一步我介绍一些用到的类:

1. MSConversation: 代表了当前打开的对话。可以使用这个类来操作一些步骤,例如通过插入消息或当前选择的信息;
2. MSMessage: 代表单个消息,判断是否由你插入对话或已经存在的对话;
3. MSMessageTemplateLayout: 创建一个消息气泡,如下图, 里边有许多属性和空间来提供给你来自定义message;

13.png

特别提醒, 左上角的空间是展示你的icon, 所有的属性都是可选的, 提供任何标题字符串将摆脱底部部分的布局。

MessagesViewController.swift中修改如下代码:

在这个方法中, 我们将当前的stepper的数值显示到圆形的label中, 然后将label放在UIImage对象中, 以便于我们可以在message中捕获到;

func createImageForMessage() -> UIImage? {
        let background = UIView(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
        background.backgroundColor = UIColor.white

        let label = UILabel(frame: CGRect(x: 75, y: 75, width: 150, height: 150))
        label.font = UIFont.systemFont(ofSize: 56.0)
        label.backgroundColor = UIColor.red
        label.textColor = UIColor.white
        label.text = "\(Int(stepper.value))"
        label.textAlignment = .center
        label.layer.cornerRadius = label.frame.size.width/2.0
        label.clipsToBounds = true

        background.addSubview(label)
        background.frame.origin = CGPoint(x: view.frame.size.width, y: view.frame.size.height)
        view.addSubview(background)

        UIGraphicsBeginImageContextWithOptions(background.frame.size, false, UIScreen.main.scale)
        background.drawHierarchy(in: background.bounds, afterScreenUpdates: true)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        background.removeFromSuperview()

        return image
    }

接下来在didPress(button:) 中修改为如下代码:

首先创建message的布局, 并且设置image和caption, 接着我们创建MSMessage对象并插入到会话中;

@IBAction func didPress(button sender: AnyObject) {
        if let image = createImageForMessage(), let conversation = activeConversation {
            let layout = MSMessageTemplateLayout()
            layout.image = image
            layout.caption = "Stepper Value"

            let message = MSMessage()
            message.layout = layout
            message.url = URL(string: "emptyURL")

            conversation.insert(message, completionHandler: { (error) in
                print(error)
            })
        }
    }

要注意, 在iMessage中自定义message必须要设置layout和URL, 这个URL是链接某个web页面的一些内容, 进而MacOS用户可以看到iMessage的内容, 在这个例子中, 我们只是创建了简单的字符URL;

最后我们将这个message插入到当前活动的会话中, 调用这个方法不会发送信息, 相反,它把你的信息在用户的输入字段,以便他们可以发送。

再次运行APP, 你会看到如下界面:

14.png

你点击Create Message按钮, 你会发现message的位置在输入框中间, 并且可以被发送;

15.png

总结

在这个教程中, 我将你介绍了iOS10中新的Messages framework, 允许你创建表情包和iMessage应用程序, 我们重写了基础的类, 包括:MSStickerBroeserViewcontroller, MSConversation, MSMessage, MStemplateMessageLayout;

这个框架许多API来开发自己的iMessage APP, 更进一步, 我会推荐你查看苹果的文档--Messages Framework Reference.

文/Mugworts(简书作者)
原文链接:http://www.jianshu.com/p/8d8844f621b2
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

时间: 2024-10-31 05:42:31

iOS 10 创建iMessage App的相关文章

iOS 10的23个隐藏新特性-b

上周iOS 10正式版推送后,24小时的更新率已经超过15%,实在惊人.虽然有着初期变砖.5S6卡顿.移动VoLTE无法使用.美版无信号等BUG,但不可忽视的是,iOS 10还是带来了很多从前没有的功能,比如骚扰拦截.预装应用删除等.现在CNET总结的iOS 10的23个隐藏功能,苹果用户不妨了解下—— 1.消息功能添加了内置的图像搜索: 现在,你可以在消息应用程序里直接搜索动画GIF图像,当你在消息功能中写入消息时,点击应用程序商店图标,然后滑动到图像页面,输入搜索项或从列表中选择一个类别即可

[iOS 10 day by day] Day 1:开发 iMessage 的第三方插件

本文介绍了 iOS 10 的一个重要更新:Messages 应用支持第三方插件了.作者用一个小游戏作为例子,说明了插件开发从建工程开始,到绘制界面.收发消息的全过程. <iOS 10 day by day>是 shinobicontrols 公司编写的系列博客,介绍开发者需要了解的 iOS 10 新特性,每周更新.本系列翻译(文集地址)已取得官方授权.仓薯翻译,欢迎指正:) Shinobicontrols 为 iOS 和 Android 开发者提供高性能.响应式的 UI 控件 SDK,尤其是图

IOS开发创建开发证书及发布App应用(二)——创建证书

源于:http://www.jkqnb.com/ydkf/article/27 预览图 2. 创建证书 证书分为两种, 一种是开发者证书,主要是用来真机调试的 另一种就是发布证书,就是用来发布应用的, 最好是两种都要下载,不然编译时候可能报错,我猜想可能苹果怕你没用真机调试 创建证书分为两个步骤: 在苹果电脑生成证书签名公钥 提交证书公钥文件到开发者网站 1)  创建开发者证书  1.生成证书签名公钥 在有Mac OS X的操作系统中打开"应用程序" -- "实用工具&quo

IOS开发创建开发证书及发布App应用(一)——流程说明

源于:http://www.jkqnb.com/ydkf/article/26 描述 先说一下这个发布 编译 苹果app的流程吧1. 注册苹果开发者帐号2. 创建证书 3. 创建App ID(不是那个登录账号)4. 创建配置概要文件5. 应用编译6. 应用打包 7. 在iTunes创建填写应用基本信息8. 使用Application Loader工具上传应用9. 等待审核 1.注册苹果开发者账号注册之后一定要成为付费会员,一种99美元(标准版) 一种299美元(企业版)具体区别就百度吧,一般都是

iOS 10 的坑:新机首次安装 app,请求网络权限“是否允许使用数据”

这个坑最近弄得我很抓狂,不过现在基本弄清楚了.记录一下过程中我收集到的信息,分享给大家. 症状 iOS 10 之后,陆陆续续地有用户联系我们,说新机第一次安装.第一次启动的时候,app 首屏一片空白,完全没数据.kill 掉重新打开就好了. 一开始以为是用户网络情况不好,但随着越来越多的用户报告这个问题,我意识到这并不是偶然情况.但是并非所有用户都如此. 而且卸载掉之后,如果再装,也不会出现这现象.问题只会出现在这台设备第一次安装.第一次启动的情况下.如果把手机抹掉.重置,问题还能重现. 定位问

iOS开发上传App Store时候一直卡在 Authenticating with the iTunes Store 的解决办法 2017-05-04 10:33

参考:http://blog.csdn.net/whjay520/article/details/71158757?utm_source=itdadao&utm_medium=referral iOS开发上传App Store时候一直卡在 Authenticating with the iTunes Store 的解决办法 2017-05-04 10:33 359人阅读 评论(2) 收藏 举报 分类: swift(29) iOS相关(46) 版权声明:本文为博主原创文章,未经博主允许不得转载.

iOS 10跳转到其他app

- (BOOL)jumpsToThirdAPP:(NSString *)urlStr{ if ([urlStr hasPrefix:@"mqq"] || [urlStr hasPrefix:@"weixin"] || [urlStr hasPrefix:@"alipay"]) { if (@available(iOS 10.0, *)) { [[UIApplication sharedApplication]openURL:[NSURL URLW

开发者所需要知道的 iOS 10 SDK 新特性

转自:https://onevcat.com/2016/06/ios-10-sdk/ 写的很好啊.哈哈哈 总览 距离 iPhone 横空出世已经过去了 9 个年头,iOS 的版本号也跨入了两位数.在我们回顾过去四五年 iOS 系统的发展的时候,不免感叹变化速度之快,迭代周期之短.iOS 7 翻天覆地的全新设计,iOS 8 中 Size Classes 的出现,应用扩展,以及 Cloud Kit 的加入,iOS 9 里的分屏多任务特性等等.Apple 近年都是在 WWDC 发布新的系统和软件,然后

第三十二篇、iOS 10开发

1.语音识别 苹果官方在文档中新增了API   Speech,那么在以前我们处理语音识别非常的繁琐甚至很多时候可能需要借助于第三方框架处理,那么苹果推出了这个后,我们以后处理起来就非常的方便了,speech具有以下特点: 可以实现连续的语音识别 可以对语 音文件或者语音流进行识别 最佳化自由格式的听写(可理解为多语言支持)和搜索式的字符串 官方文档: 核心代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23   #impo