 extension String {
 
     var monkeyking_base64EncodedString: String? {
-        return data(using: .utf8)?.base64EncodedString(options: NSData.Base64EncodingOptions(rawValue: 0))
+        return data(using: .utf8)?.base64EncodedString()
     }
 
     var monkeyking_urlEncodedString: String? {
-        return addingPercentEncoding(withAllowedCharacters: CharacterSet.urlHostAllowed)
+        return addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)
     }
 
     var monkeyking_base64AndURLEncodedString: String? {

    }

    var monkeyking_qqCallbackName: String {
        var hexString = String(format: "%02llx", (self as NSString).longLongValue)
        while hexString.count < 8 {
            hexString = "0" + hexString
        }
        return "QQ" + hexString
    }
}

extension Bundle {

    var monkeyking_displayName: String? {
        let CFBundleDisplayName = (localizedInfoDictionary?["CFBundleDisplayName"] ?? infoDictionary?["CFBundleDisplayName"]) as? String
        let CFBundleName = (localizedInfoDictionary?["CFBundleName"] ?? infoDictionary?["CFBundleName"]) as? String

        return CFBundleDisplayName ?? CFBundleName
    }

    var monkeyking_bundleID: String? {
