Giter VIP home page Giter VIP logo

swift-sdk's Introduction

LeanCloud Swift SDK

Build Status

Features

  • Data Storage
  • Object Query
  • Cloud Engine
  • Short Message
  • File Hosting
  • Push Notification
  • Instant Messaging

Communication

  • If you have some advice, open an issue.
  • If you found a bug, open an issue, or open a ticket in LeanTicket.
  • If you want to contribute, submit a pull request.

Installation & Quick Start

Please read this documentation.

swift-sdk's People

Contributors

cavanlee avatar hjiang avatar jwfing avatar notevenaneko avatar tang3w avatar weakish avatar zapcannon87 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

swift-sdk's Issues

业务变动,新加了字段,加载老数据的时候会crash

我是使用下边的方法去获取message
let message:String = (messageList[indexPath.row].get("message")?.stringValue)!

假设我现在新业务多了另一个属性,message2
let message2:String = (messageList[indexPath.row].get("message2")?.stringValue)!

新的数据,没有问题,老的数据这行报错
尝试判断messageList[indexPath.row].get("message2")是否为空,无效,是否有其他办法来处理这个问题,
另外我看后台数据库所有的数据都有了该字段,但是请求回来的数据没有该字段

与WKWebView冲突

只要任何一个VC内集成了WKWebView,就会崩溃。具体崩溃点如图
5e24bb86-5651-45b9-9946-ed213f5c9ada

How to support iOS 8.0?

Our project still needs support iOS 8.0, but leancloud swift-sdk requires >= iOS 9.0. So how can we use leancloud sdk on iOS 8.0?

详细安装说明?

官网和 github 的 pod 安装都说的比较简单,但执行 pod install 以后并没成功
image

Swift 3.0官网版本与发布版本

直接使用pod得到的版本是 1.2.0,该版本为Swift2.3
仓库中release版本最新是1.4.0,但是没有push到pod公开仓库,
什么时候可以更新一下

LCValue 自定义类型

在 LCValue 中
public var intValue: Int? { guard let number = rawValue as? Double else { return nil } return Int(number) }

为何要判断是否能转换成 Double 类型?

cocopods集成报错

pod 'LeanCloud'

[!] There are only pre-release versions available satisfying the following requirements:

'LeanCloud', '>= 0'

You should explicitly specify the version in order to install a pre-release version

LCQuery#count() 缺少异步的版本

    /**
     Count objects synchronously.

     - returns: The result of the count request.
     */
    public func count() -> LCCountResult {
        var parameters = self.parameters

        parameters["count"] = 1
        parameters["limit"] = 0

        let response = RESTClient.request(.GET, endpoint, parameters: parameters)
        let result = LCCountResult(response: response)

        return result
    }

目前只有同步的版本。

[feauture] Query 缺少实例方法 getByObjectId

对应的 objc 的方法如下:

    AVQuery *query = [AVQuery queryWithClassName:@"Todo"];
    [query getObjectInBackgroundWithId:@"558e20cbe4b060308e3eb36c" block:^(AVObject *object, NSError *error) {
        // object 就是 id 为 558e20cbe4b060308e3eb36c 的 Todo 对象实例
    }];

LeanCloud.LCObject 缺失 dictionaryForObject 以及 objectWithDictionary

参考 objc 的版本

  AVObject *todoFolder = [[AVObject alloc] initWithClassName:@"TodoFolder"];// 构建对象
    [todoFolder setObject:@"工作" forKey:@"name"];// 设置名称
    [todoFolder setObject:@1 forKey:@"priority"];// 设置优先级
    [todoFolder setObject:[AVUser currentUser] forKey:@"owner"];// 这里就是一个 Pointer 类型,指向当前登录的用户

    NSMutableDictionary *serializedJSONDictionary = [todoFolder dictionaryForObject];//获取序列化后的字典
    NSError *err;
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:serializedJSONDictionary options:0 error:&err];//获取 JSON 数据
    NSString *serializedString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];// 获取 JSON 字符串
    // serializedString 的内容是:{"name":"工作","className":"TodoFolder","priority":1}
    NSMutableDictionary *objectDictionary = [NSMutableDictionary dictionaryWithCapacity:10];// 声明一个 NSMutableDictionary
    [objectDictionary setObject:@"工作" forKey:@"name"];
    [objectDictionary setObject:@1 forKey:@"priority"];
    [objectDictionary setObject:@"TodoFolder" forKey:@"className"];

    AVObject *todoFolder = [AVObject objectWithDictionary:objectDictionary];// 由 NSMutableDictionary 转化一个 AVObject

    [todoFolder saveInBackground];// 保存到云端

循环引用

HTTPClient 和 HTTPRouter 相互持有对方,不会造成循环引用吗?

WKWebView 冲突

LeanCloud 开发团队,您好!

我在使用 Swift SDK 的时候遇到了一个严重的问题,就是如果引入 WebKit,并在代码中创建一个 WKWebView 的对象之后就会报错。这个错误非常容易复现,根据错误信息来看是 WKWebView 与 SDK 本身有冲突。

希望能得到您的回复
十分感谢!

screen shot 2017-03-28 at 11 16 07 pm

An issue of SMS

        LCSMS.requestShortMessage(mobilePhoneNumber: phoneNumber, templateName: "", variables: nil) { (res) in
            if res.isSuccess {
                print("success")
            }
            if res.isFailure {
                print("failure")
            }
        }

templateName represents what?

SDK 支持多应用的方案中,关于序列化部分的建议

#63 的基础上,主要改动有以下几点。

  1. LCApplication 支持序列化
public final class LCApplication: NSCoding {
    
    /// 这三个是必须要序列化的,可以让 Region 带上 String 类型来支持序列化
    public let ID: String
    public let key: String
    public let region: Region
    
    /// logLevel 变为 static 可能更好一点,也能更省事不用序列化了
    public static var logLevel: LogLevel = .off
    
    // current, currentKey 还有 perform() 可以删掉了
    /*
     public static var current: LCApplication?
     private static let currentKey = "CurrentLeanCloudApplication"
     public func perform<T>(body: () throws -> T) rethrows -> T
     */

    // 其它的应该不用改动了
}
  1. 然后就是在 LCObjectLCQuery 在序列化方法里加上 application 属性的序列化代码

  2. 最后就是根据以上两点,对代码的其它部分进行相应的调整

RAC Extension

因为整个项目都是基于 ReactiveCocoa 和 ReactiveSwift,于是写了一个 LCEngine 的 extension,将网络请求封装成 RAC 的 SignalProducer。

那么 disposable 这里应该怎么处理比较恰当?当前 LCEngine 并没有公开的 cancel 方法。

extension LCEngine {
    
    public static func rac_call(_ function: String, parameters: LCDictionaryConvertible? = nil) -> SignalProducer<LCValue, LCError> {
        return SignalProducer { observer, disposable in
            self.call(function, parameters: parameters, completion: { result in
                if let e = result.error {
                    observer.send(error: e)
                } else if let object = result.object {
                    observer.send(value: object)
                    observer.sendCompleted()
                } else {
                    fatalError("Invalid response -- no HTTP response or error")
                }
            })
            disposable.add {
                // ???
            }
        }
    }
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.