【问题标题】:aws sdk for mac os x application development [closed]用于 mac os x 应用程序开发的 aws sdk [关闭]
【发布时间】:2012-03-16 16:15:08
【问题描述】:

我需要为 MAC OS X 开发一个应用程序,它将把选择的文件上传到亚马逊网络服务。但为此,我需要适用于 mac 的 aws sdk。我在网上没有找到任何东西。是否可以修改AWS SDK for iOS 使其可用于Mac?

此外,AWS SDK 文档没有说明如何将文件上传到 S3。有没有人有如何做到这一点的例子?

谢谢

【问题讨论】:

标签: objective-c cocoa amazon-s3 amazon-web-services xcode4.2


【解决方案1】:

AWS Developer Forums 中的a discussion on this topic 来看,似乎还没有针对MacOS X 的官方AWS SDK,但iOS 版本已经接近可用。该线程的一位贡献者已为至少一些服务发布了a modified version that allegedly works on MacOS X。我没有任何个人经验,但似乎值得一看。

【讨论】:

  • 实际上我所做的只是 fork iOS 官方版本,然后进行一些非常小的改动——所有这些都是为了满足编译器的需要,比如在任何 iOS 专用代码周围使用 ifdefs(不多),然后换掉一些标题 转到 等。对于大型项目,您可能希望使用自己的 fork,因此您可以亲自查看所有更改。我将它用于 S3、SimpleDB、SQS 和 IAM。
  • 这就是我所做的,但是当我调用 AmazonS3Client 类的 listBuckets 方法时,我得到了一个奇怪的异常。它说:尝试用 appendString 改变不可变对象:我已经在整个 SDK 中搜索了 appendString 调用,但我没有找到任何东西。我发现在第 464 行的 AmazonS3Client 中调用 NSRunLoop runMode:beforeDate: 时发生错误。有人可以帮忙吗?
  • 好的,我已经尝试使用您答案中的修改版本,它适用于这个。仍然想知道为什么它不起作用......
【解决方案2】:

正如 Caleb 所说:没有适用于 OS X 的官方 AWS 开发工具包。

完成 S3 文件上传的最简单方法是使用 ASIHTTPRequest。它是 CFNetwork 的包装器,易于使用。缺点是不支持 ARC,因此您必须自己处理内存管理……

【讨论】:

  • ASI 基本停产。看看吧。
【解决方案3】:

我创建了一个 AWS iOS SDK 的分支,可以构建并用于 Mac OS X 开发。看看:https://github.com/amberdixon/aws-sdk-ios。在自述文件中,我包含了有关如何构建 AWS iOS SDK 框架的 Mac OS X 版本的说明。 tomandersen repo 似乎使用了旧版本的 iOS SDK,我创建的版本更新了一些。

【讨论】:

  • +1 就像一个魅力
  • 当时,我在 macOS 上管理它,代码没有太多混乱,但 Amber 非常感谢,它会帮助其他人......
  • 我找不到框架你能把步骤或截图告诉我如何在构建你的建议 src/AWSiOSSDK.xcodeproj 后找到框架我打开这个项目然后构建但没有找到任何框架:(请帮助
【解决方案4】:

我需要适用于 Mac 的 AWS 开发工具包来支持为我的 iOS 应用程序预填充一个数据库,并且很惊讶它不存在(考虑到它与 iOS 版本如此相似的生产将是多么微不足道)。我下载了上面 Amber 提到的 github MacOS SDK 和上面 AWS 链接中提到的那个。然而,两者都不是直接构建的,所以我决定自己修改 iOS SDK,这样我就可以理解这个过程是什么。 以下是我让 DynamoDB 在 MacOS 10.9 上的 XCode 5.0.2 中工作所经历的步骤:

1.下载iOS AWS 1.7.0 SDK,复制文件夹并将文件夹重命名为aws-MacOS-sdk-1.7.0(少量条件编译和构建脚本中的if/else将取消这一步)

2.Modify src/Scripts/Framework.sh - 这是所有 AWS 框架的构建工具 - 将所有四个 xcodebuild 行 (30-39) 替换为:

`xcodebuild -configuration Release -project "${PROJECT}.xcodeproj" -target "${PROJECT}" -sdk macosx10.9`
  • 将 lipo 线 (82-87) 替换为:

    FRAMEWORK_INPUT_MAC_FILES="build/Release/lib${PROJECT}.a" cp "$FRAMEWORK_INPUT_MAC_FILES" "$FRAMEWORK_DIR/Versions/Current/$FRAMEWORK_NAME"

3.在 src 文件夹中,每个框架都有一个 XCode 项目,您需要的每个项目:

  • 将项目的 Base SDK 更改为最新的 OS X
  • 将FTarget的Framework的SDKROOT改为macosx10.9
  • 确保当前方案设置为框架并构建
  • 修复编译器错误(我遇到了一堆与@property有关的问题,不得不在这里和那里用<Cocoa/Cocoa.h>替换<UIKit/UIKit.h>,用[[NSProcessInfo processInfo] operatingSystemVersionString]替换[[UIDevice currentDevice] systemName]

为了让 DynamoDB 正常工作,我必须构建四个框架 - 这相当轻松

【讨论】:

  • 我似乎无法摆脱这个错误 :: 'Cocoa/Cocoa.h' file not found.
  • 您是否按照我的项目自述文件中的说明进行操作?谢谢。
【解决方案5】:

previous answer 之后,我分叉并修改了适用于 iOS 的 AWS 开发工具包 v2.2,因此它现在可以为 Mac OS X 构建(在 Yosemite 10.10.3 中测试):https://github.com/johnabender/aws-sdk-ios 还可以查看 @ 987654324@分店!

它们提供了一个命令行工具来将 SDK 组件打包为 .framework 对象。运行Scripts/SdkPackage.sh AWSS3,它将构建 S3 框架和任何依赖项。运行Scripts/Package.sh 以构建所有框架。如果您全部构建,构建的框架最终会在您的 AWS 开发工具包目录的 root/build 中。

但是,哎呀,他们的文档很糟糕。例如,如果您想使用访问密钥而不是 Cognito 身份,则必须检查代码并弄清楚如何使用(至少这是可能的!)。想要列出 S3 存储桶的内容?祝你好运。大多数必需的类甚至没有在documentation 中列出。您必须在项目中包含 libz.dylib 才能使用 S3 SDK 构建它 - 他们也不会告诉您。

无论如何,这里有一些代码可以帮助任何人入门:

// This is helpful, also basically undocumented.
AWSLogger.defaultLogger().logLevel = .Verbose

let credentials = AWSStaticCredentialsProvider(accessKey: accessKeyId, secretKey: secretAccessKey)
let config = AWSServiceConfiguration(region: AWSRegionType.USWest2, credentialsProvider: credentials)

let listRequest = AWSS3ListObjectsRequest()
listRequest.bucket = "mybucket"
listRequest.prefix = "folder/"

// The key name allows you to set up multiple, global S3 configurations
// -- in case you'd ever want to do that, in violation of OO programming principles.
// But there's no way to make S3 requests using only a local config.
AWSS3.registerS3WithConfiguration(config, forKey: "s3")

AWSS3.S3ForKey("s3").listObjects(listRequest).continueWithBlock { (task: AWSTask!) -> AnyObject! in
    if task.error != nil {
        NSLog("error %@", task.error)
    }
    if task.result != nil {
        NSLog("finished %@", task.result!.description)
    }
    return nil
}

【讨论】:

  • 你是我整个星期给出的最大虚拟高五的接收者!
  • @jab 你能提供一些关于如何使用它的细节吗?我下载了一个 ZIP 存档但无法构建它 - 它抱怨我的 Mac 不是有效的目标?
  • 好的,明白了!运行脚本!!虽然得到以下错误。 ** BUILD FAILED ** The following build commands failed: CompileC build/AWSMobileAnalytics.build/Debug/AWSMobileAnalytics.build/Objects-normal/x86_64/AWSMobileAnalyticsIOSLifeCycleManager.o AWSMobileAnalytics/Internal/AWSMobileAnalyticsIOSLifeCycleManager.m normal x86_64 objective-c com.apple.compilers.llvm.clang.1_0.compiler (1 failure) Error occurred, abort
  • 你到底在跑什么?您是否正在尝试为 MacOS 或 tvOS 构建?此错误消息不是很有帮助。真正的错误可能出现在最终中止消息上方的页面和页面。
  • @jab 所以我使用你的源代码构建了框架,并将它们添加到我的项目下的框架下,没有为 aws sdk 运行 pod install (因为我被拒绝,警告消息说它们不支持 osx )。现在我收到以下错误消息:'AWSCore/AWSCore.h' file not found。有什么我想念的吗?非常感谢!
猜你喜欢
  • 1970-01-01
  • 2011-11-19
  • 2018-01-24
  • 2011-08-25
  • 1970-01-01
  • 1970-01-01
  • 2013-04-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多