trivago / Heimdallr.swift

Easy to use OAuth 2 library for iOS, written in Swift.
Apache License 2.0
639 stars 86 forks source link

Support for Swift Package Manager ? #112

Closed mackoj closed 4 years ago

mackoj commented 6 years ago

Hi,

Thanks for the great library. It's could be great if you consider adding support for Swift package manager.

This is an example of Package.swift to add to the root of your repository. But you will still have to remove all code that is not available on Linux to make it work.

// swift-tools-version:4.0
import PackageDescription

let package = Package(
    name: "Heimdallr",
    products: [
        .library(name: "Heimdallr", targets: ["Heimdallr"]),
    ],
    dependencies: [
        .package(url: "https://github.com/antitypical/Result.git", .upToNextMajor(from: "3.0.0")),
    ],
    targets: [
         .target(
            name: "Heimdallr",
            dependencies: ["Result"],
            path: "Heimdallr",
            exclude: [
                "HeimdallrTests",
                "script",
                "Carthage",
                "Heimdallr/Supporting Files",
                "bin"]),
    ],
    swiftLanguageVersions: [3]
)

Errors that I get when I try to build it for SPM(Swift Package Manager).

/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessToken.swift:5:32: error: use of undeclared type 'NSObject'
public class OAuthAccessToken: NSObject {
                               ^~~~~~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessToken.swift:4:2: error: only classes that inherit from NSObject can be declared @objc
@objc
~^~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessToken.swift:5:32: error: use of undeclared type 'NSObject'
public class OAuthAccessToken: NSObject {
                               ^~~~~~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessToken.swift:4:2: error: only classes that inherit from NSObject can be declared @objc
@objc
~^~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessToken.swift:5:32: error: use of undeclared type 'NSObject'
public class OAuthAccessToken: NSObject {
                               ^~~~~~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessToken.swift:4:2: error: only classes that inherit from NSObject can be declared @objc
@objc
~^~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessToken.swift:5:32: error: use of undeclared type 'NSObject'
public class OAuthAccessToken: NSObject {
                               ^~~~~~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessToken.swift:4:2: error: only classes that inherit from NSObject can be declared @objc
@objc
~^~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessToken.swift:5:32: error: use of undeclared type 'NSObject'
public class OAuthAccessToken: NSObject {
                               ^~~~~~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessToken.swift:4:2: error: only classes that inherit from NSObject can be declared @objc
@objc
~^~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessToken.swift:13:27: error: use of undeclared type 'Date'
    public let expiresAt: Date?
                          ^~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessToken.swift:27:68: error: use of undeclared type 'Date'
    public init(accessToken: String, tokenType: String, expiresAt: Date? = nil, refreshToken: String? = nil) {
                                                                   ^~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessToken.swift:43:87: error: use of undeclared type 'Date'
    public func copy(accessToken: String? = nil, tokenType: String? = nil, expiresAt: Date?? = nil, refreshToken: String?? = nil) -> OAuthAccessToken {
                                                                                      ^~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessToken.swift:78:36: error: use of undeclared type 'Data'
    public class func decode(data: Data) -> OAuthAccessToken? {
                                   ^~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessToken.swift:60:63: error: use of undeclared type 'Date'
        func toDate(_ timeIntervalSinceNow: TimeInterval?) -> Date? {
                                                              ^~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessToken.swift:60:45: error: use of undeclared type 'TimeInterval'
        func toDate(_ timeIntervalSinceNow: TimeInterval?) -> Date? {
                                            ^~~~~~~~~~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessToken.swift:71:49: error: use of undeclared type 'TimeInterval'
        let expiresAt = (json["expires_in"] as? TimeInterval).flatMap(toDate)
                                                ^~~~~~~~~~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessToken.swift:79:31: error: use of unresolved identifier 'JSONSerialization'
        guard let json = try? JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions(rawValue: 0)),
                              ^~~~~~~~~~~~~~~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessToken.swift:79:81: error: use of unresolved identifier 'JSONSerialization'
        guard let json = try? JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions(rawValue: 0)),
                                                                                ^~~~~~~~~~~~~~~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessToken.swift:4:2: error: @objc attribute used without importing module 'Foundation'
@objc
~^~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessToken.swift:5:32: error: use of undeclared type 'NSObject'
public class OAuthAccessToken: NSObject {
                               ^~~~~~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessToken.swift:4:2: error: only classes that inherit from NSObject can be declared @objc
@objc
~^~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessToken.swift:78:36: error: use of undeclared type 'Data'
    public class func decode(data: Data) -> OAuthAccessToken? {
                                   ^~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessToken.swift:5:32: error: use of undeclared type 'NSObject'
public class OAuthAccessToken: NSObject {
                               ^~~~~~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessToken.swift:4:2: error: only classes that inherit from NSObject can be declared @objc
@objc
~^~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessToken.swift:43:87: error: use of undeclared type 'Date'
    public func copy(accessToken: String? = nil, tokenType: String? = nil, expiresAt: Date?? = nil, refreshToken: String?? = nil) -> OAuthAccessToken {
                                                                                      ^~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthError.swift:90:36: error: use of undeclared type 'Data'
    public class func decode(data: Data) -> OAuthError? {
                                   ^~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessToken.swift:13:27: error: use of undeclared type 'Date'
    public let expiresAt: Date?
                          ^~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessToken.swift:5:32: error: use of undeclared type 'NSObject'
public class OAuthAccessToken: NSObject {
                               ^~~~~~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessToken.swift:4:2: error: only classes that inherit from NSObject can be declared @objc
@objc
~^~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessTokenKeychainStore.swift:14:48: error: use of undeclared type 'Data'
    internal func dataForKey(_ key: String) -> Data? {
                                               ^~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessTokenKeychainStore.swift:38:35: error: use of undeclared type 'Data'
    internal func setData(_ data: Data, forKey key: String) {
                                  ^~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessTokenKeychainStore.swift:51:38: error: use of undeclared type 'Data'
    internal func updateData(_ data: Data, forKey key: String) {
                                     ^~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessToken.swift:13:27: error: use of undeclared type 'Date'
    public let expiresAt: Date?
                          ^~~~
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessTokenKeychainStore.swift:117:17: error: use of unresolved identifier 'Date'
                Date(timeIntervalSince1970: expiresAtInSeconds)
                ^~~~
CoreFoundation.CFDate:1:14: note: did you mean 'CFDate'?
public class CFDate : _CFObject {
             ^
/Users/jmacko/code/vapor/Heimdallr.swift/Heimdallr/OAuthAccessTokenKeychainStore.swift:93:2: error: @objc attribute used without importing module 'Foundation'
@objc public class OAuthAccessTokenKeychainStore: NSObject, OAuthAccessTokenStore {
~^~~~
error: terminated(1): /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-build-tool -f /Users/jmacko/code/vapor/Heimdallr.swift/.build/debug.yaml main

Thanks,

mackoj commented 6 years ago

I made a PR that add support for SPM for macOS

mackoj commented 6 years ago

In order to have SPM support for Linux we should remove the dependence to Security.framework in the future version of Swift 4.1 we will be able to do something more clean like proposed in SE-0075.

RolandasRazma commented 4 years ago

any update on this? With Xcode 11 SwiftPM is build in and would be nice to use it

mackoj commented 4 years ago

@RolandasRazma I don't think they care I'm closing this I don't want to be notify anymore