【问题标题】:Cloudinary SDK in Swift projectSwift 项目中的 Cloudinary SDK
【发布时间】:2023-03-30 12:32:03
【问题描述】:

有没有办法在 Swift 文件中使用 Obj-C SDK? 我尝试将 cloudinary SDK 添加到我的项目中。我找到了一种将 libcloudinary.a 添加到我的项目框架的方法,但它不起作用。

更新:Cloudinary 刚刚发布了用 Swift 语言编写的新 SDK:https://github.com/cloudinary/cloudinary_ios(Swift 3 和 Swift 2.3 在不同的早午餐上)

【问题讨论】:

标签: objective-c swift xcode6 cloudinary


【解决方案1】:

这些对我有用:

  1. 创建或附加到 Podfile 文件:pod "Cloudinary"
  2. 运行pod install,然后打开工作区文件,而不是项目。
  3. 将 Obj-C 文件添加到您的项目 (http://cl.ly/image/272V1Z2Q3g0e) 并在询问是否添加 Objective-C 桥接头时说是
  4. 在这个文件中添加#import "Cloudinary/Cloudinary.h"
  5. 您现在可以使用 Cloudinary API。这是一些要上传的代码:

    let cloudinary_url = "cloudinary://API_KEY:API_SECRET@CLOUD_NAME"
    var uploader:CLUploader = CLUploader(cloudinary, delegate: self)
    uploader.upload(UIImageJPEGRepresentation(new_image, 0.8), options: ["format":"jpg"], withCompletion: { ([NSObject : AnyObject]!, errorResult:String!, code:Int, context:AnyObject!) -> Void in
    
    }, andProgress: { (p1:Int, p2:Int, p3:Int, p4:AnyObject!) -> Void in
    
    })
    

【讨论】:

  • 嗨,我正在尝试在我的 swift 应用程序中使用 wloudinary,我使用了一个头文件,但我收到此错误:架构 x86_64 的未定义符号:“_OBJC_CLASS_$_CLCloudinary”,引用自:类型元数据CloudinaryController.old 中 __ObjC.CLCloudinary 的访问器:未找到体系结构 x86_64 的符号:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)"
【解决方案2】:

是的,你可以。

首先,您需要按照他们在here 找到的说明设置您的 xcode 项目。然后,您需要创建一个在Swift docs 中定义的桥接头文件。

例子

#ifndef Fun_Bridging_Header_h
#define Fun_Bridging_Header_h

#import "Cloudinary.h"

#endif

不幸的是,他们的 Objective-c API 不能与 Swift 完全互操作,即他们的上传 API (CLUploader)。

我必须做的是在objective-c中为它创建一个工厂类

接口(CloudinaryFactory.h)

#ifndef Fun_Wrappy_h
#define Fun_Wrappy_h
#import "Cloudinary.h"

@interface CloudinaryFactory : NSObject  
+ (CLUploader*)create:(CLCloudinary*)cloudinary delegate:(id <CLUploaderDelegate> )delegate;
@end

#endif 

实现(CloudinaryFactory.m):

#import "CloudinaryFactory.h"

@implementation CloudinaryFactory  

+ (CLUploader*)create:(CLCloudinary*)cloudinary delegate:(id <CLUploaderDelegate> )delegate
{
    return [[CLUploader alloc] init:cloudinary delegate:delegate];
}

@end

以及更新的桥接文件

#ifndef Fun_Bridging_Header_h
#define Fun_Bridging_Header_h

#import "CloudinaryFactory.h"

#endif

现在,使用它:

 var image:UIImage? //todo: i'm assuming you would set this somewhere
 @IBAction func uploadGarment(sender: AnyObject) {
    let clouder = CLCloudinary(url: "cloudinary://your:cloudinary@url")

    let forUpload = UIImagePNGRepresentation(image) as NSData
    let uploader = CloudinaryFactory.create(clouder, delegate: self)

    uploader.upload(forUpload, options: ["public_id":"testo"])   

}

希望对你有帮助!更多,这里是相关的blog post

【讨论】:

  • 这也是我们最终所做的,希望很快看到 cloudinary 的迅速支持
  • 在该 github 链接的 Setup 部分的第三段中,swift 的步骤是什么?我找不到任何Other Linker Flags 设置
【解决方案3】:

您可以在此处查看 iOS 示例代码: https://github.com/cloudinary/cloudinary_ios#upload.

另外,这里有一个代码参考: https://github.com/cloudinary/cloudinary_ios/blob/master/CloudinaryTests/UploaderTests.m

另外,您可以使用 Cloudinary 的未签名上传。以下是更多信息,包括 iOS 示例:http://cloudinary.com/blog/direct_upload_made_easy_from_browser_or_mobile_app_to_the_cloud#api_example_2

【讨论】:

  • 谢谢,您有 swift 样品吗?
  • 很遗憾,目前没有,只有博客中提到的目标 C 示例。
【解决方案4】:

在您的项目中创建桥接头文件。之后将 .h 文件导入桥接头文件。

请看这里: 1 步: xyz-Bridging-header.h

将 Cloudinary.h 文件导入 Bridging-header 文件

#import "Cloudinary.h"

第二步:ViewController.swift

Class viewController : UIViewController {
      cloudinary: CLCloudinary = CLCloudinary()
      override func viewDidLoad() {
            super.viewDidLoad()
            // Cloudinary Setup
            cloudinary.config().setValue("xxxxxxxx", forKey: "cloud_name")
            cloudinary.config().setValue("xxxxxxxx", forKey: "api_key")
            cloudinary.config().setValue("xxxxxxxx", forKey: "api_secret")
      }
}

您的 Cloudinary 设置已完成。现在可以使用了。

【讨论】:

    猜你喜欢
    • 2015-03-14
    • 2018-10-23
    • 2015-01-29
    • 2021-12-11
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    相关资源
    最近更新 更多