iOS Universal Links

什么是Universal Links?

Universal Links 中文名:通用链接,是苹果在推出iOS9的时候推出的新功能,一种能方便的通过传统的HTTP链接来启动App,使用相同的网址打开网站和App。

通过唯一的网址,不需要Schema就可以跳转到界面到App里面,比如说在搜索引擎中搜索到某新闻(比如OO新闻网),点击新闻链接之后,如果iOS设备中安装了(并且支持通用链接)的应用,那么它将自动在App中打开这个页面,如果没有安装则在Safari中直接打开链接(和浏览网站一样)。

如果在服务器上配置Universal Links?

需要在域名根目录创建一个 apple-app-site-association 文件,没有任何扩展名。

文件内容如下:

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "9JA89QQLNQ.com.apple.wwdc",
                "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*" ]
            },
            {
                "appID": "TeamID.BundleID2",
                "paths": [ "*" ]
            }
        ]
    }
}

appID 必须是TeamID.Bundle Identifier的组合

根据paths键设定允许的列表,或者使用星号来表示任意。

注意:区分大小写。

举例:

* 只要域名符合即可,路径随意。
比如:http://xloli.net

/news/id/* 路径必须是 “/news/id/” + 后面任意
比如:http://xloli.net/news/id/12345

/news/ 路径必须是 “/news/”
比如:http://xloli.net/news/

再次提醒,apple-app-site-association必须在根目录。

Web服务器必须支持HTTPS,客户端只支持HTTPS协议访问,并且不支持任何重定向。

App处理Universal Links

点击项目设置中的Capabilities,将AssociatedDomains打开为ON(同时还需要在开发者网站中AppID中也要打开)。

在下面Domains中添加域名,格式如下:

applinks:domain.com

举例:

applinks:xloli.net
applinks:www.xloli.net

当设置完毕之后,当你第一次启动App的时候会从指定的路径自动下载文件。

https://domain.com/apple-app-site-association

最后需要在AppDelegate中实现自己的逻辑,比如根据URL的规则进行指定的跳转。

func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool {
        if let url = userActivity.webpageURL {
            print(url)
            // 根据URL 书写自己必要的逻辑代码
        }
        return true // true 将会打开App, false 不会打开App。
}

iOS 跳转到系统App的方法

使用 UIApplication.sharedApplication().openURL 方法可以跳转到系统的App中。

跳转到程序 自身的设定可以使用以下方法:

 Swift

UIApplication.sharedApplication().openURL(NSURL(string: UIApplicationOpenSettingsURLString))

Objc

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];

参考:

About —> prefs:root=General&path=About

Accessibility —> prefs:root=General&path=ACCESSIBILITY

Airplane Mode On —> prefs:root=AIRPLANE_MODE

Auto-Lock —> prefs:root=General&path=AUTOLOCK

Brightness —> prefs:root=Brightness

Bluetooth —> prefs:root=General&path=Bluetooth

Date & Time —> prefs:root=General&path=DATE_AND_TIME

FaceTime —> prefs:root=FACETIME

General —> prefs:root=General

Keyboard —> prefs:root=General&path=Keyboard

iCloud —> prefs:root=CASTLE

iCloud Storage & Backup —> prefs:root=CASTLE&path=STORAGE_AND_BACKUP

International —> prefs:root=General&path=INTERNATIONAL

Location Services —> prefs:root=LOCATION_SERVICES

Music —> prefs:root=MUSIC

Music Equalizer —> prefs:root=MUSIC&path=EQ

Music Volume Limit —> prefs:root=MUSIC&path=VolumeLimit

Network —> prefs:root=General&path=Network

Nike + iPod —> prefs:root=NIKE_PLUS_IPOD

Notes —> prefs:root=NOTES

Notification —> prefs:root=NOTIFICATIONS_ID

Phone —> prefs:root=Phone

Photos —> prefs:root=Photos

Profile —> prefs:root=General&path=ManagedConfigurationList

Reset —> prefs:root=General&path=Reset

Safari —> prefs:root=Safari

Siri —> prefs:root=General&path=Assistant

Sounds —> prefs:root=Sounds

Software Update —> prefs:root=General&path=SOFTWARE_UPDATE_LINK

Store —> prefs:root=STORE

Twitter —> prefs:root=TWITTER

Usage —> prefs:root=General&path=USAGE

VPN —> prefs:root=General&path=Network/VPN

Wallpaper —> prefs:root=Wallpaper

Wi-Fi —> prefs:root=WIFI

RxSwift 入门 - 第一部分

Observables

Observables是一个事件流的对象,通过以下的函数可以生成一个事件流。

  • empty
  • just
  • of
  • toObservable
  • create
  • error
  • deffered

通过subscribe方法可以监听订阅流中的数据,在闭包中进行必要的逻辑编程。

热信号vs冷信号

信号分两种,热信号在它创建的时候就开始推送事件,这意味着如果后面有订阅者来的时候,就可能会错过一些事件。而冷信号则不会,只有在它被订阅的时候,它才会发送事件,这可以保证后面即使有订阅者中途加入的时候也能收到完整的事件序列。

(更多…)

Xcode真机调试could not find developer disk image解决方法

在使用Xcode进行真机调试的时候,由于真机系统过高或者过低,Xcode中没有匹配的配置文件,会出现【could not find developer disk image】的错误,通常更新最新版本的Xcode可以解决问题,如果不想更新,可以从官网下载最新的Xcode或者Xcode beta (如果测试机为 beta版系统) 下载最新的dmg文件,在下面的文件夹中寻找需要的配置文件夹。

(更多…)

解决Xcode6模拟器消失的问题

最近公司重新安装了一下xcode6,发现以前所使用的iPhone模拟器全部消失了,只剩下一个自己的真机在上面,通过网上查询资料找到了解决办法。

依次打开“Xcode->Window->Devices”,点击位于左下角的“+”按钮,新增常使用的设备即可,不常使用的设备也可以在选中后,点击“-”移除。

不知道是什么时候才出现的这个问题,之前一直使用xcode6 beta没有遇到问题。

iOS判断推送权限开关是否打开

根据 [[UIApplication sharedApplication] enabledRemoteNotificationTypes] 的返回值来进行判断,该返回值是一个枚举值,如下:

typedef enum {
UIRemoteNotificationTypeNone = 0,
UIRemoteNotificationTypeBadge = 1 << 0,
UIRemoteNotificationTypeSound = 1 << 1,
UIRemoteNotificationTypeAlert = 1 << 2,
UIRemoteNotificationTypeNewsstandContentAvailability = 1 << 3,
} UIRemoteNotificationType;

如果是 UIRemoteNotificationTypeNone ,则可以认为推送开关没有打开,反之亦然。

不过在iOS8中苹果对其做出了调整,需要使用下面的代码进行判断:

if (is_ios_8) {
UIUserNotificationSettings *mySet = [[UIApplication sharedApplication] currentUserNotificationSettings];
mySet.types; // <– 这里是一个枚举值
}

枚举值有如下:

typedef NS_OPTIONS(NSUInteger, UIUserNotificationType) {
UIUserNotificationTypeNone = 0, // the application may not present any UI upon a notification being received
UIUserNotificationTypeBadge = 1 << 0, // the application may badge its icon upon a notification being received
UIUserNotificationTypeSound = 1 << 1, // the application may play a sound upon a notification being received
UIUserNotificationTypeAlert = 1 << 2, // the application may display an alert upon a notification being received
} NS_ENUM_AVAILABLE_IOS(8_0);

Swift学习笔记(一) 基础部分

Swift 是一种适用于 iOS 和 OS X 应用的全新编程语言,它建立在最好的 C 和 Objective-C 语言之上,并且没有 C 语言的兼容性限制。Swift 采用安全的编程模式,增加了现代功能使编程更容易、更灵活、更有趣。Swift 以成熟且备受宠爱的 Cocoa 和 Cocoa Touch 框架为 支撑,这是一个重新构想软件开发的机会。
Swift 经过了数年的酝酿,Apple 通过改进现有的编译器、调试器和框架结构奠定了 Swift 的 基础,并通过 Automatic Reference Counting(ARC)简化了内存管理。Swift 的 framework stack 建立在坚实的 Foundation 和 Cocoa 基础之上,实现了现代化和彻底标准化。Objective-C 本身已经逐步发展到到支持 blocks、 collection literals 和 modules,使框架不间断地采 用现代语言技术。基于这个基础,我们可以为今后的 Apple 软件开发引入一种新语言。

(更多…)

iOS开发之利用APNS进行信息推送

iOS消息推送的工作机制可以简单的用下图来概括:

[转载]百度网盘上传脚本bpcs_uploader[转载]百度网盘上传脚本bpcs_uploader1

Provider是指某个iPhone软件的Push服务器,APNS是Apple Push Notification Service的缩写,是苹果的服务器。

上图可以分为三个阶段:

第一阶段:应用程序把要发送的消息、目的iPhone的标识打包,发给APNS。
第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发送到iPhone。

第三阶段:iPhone把发来的消息传递给相应的应用程序,并且按照设定弹出Push通知。

(更多…)