AWS SDK用于Mac OS X应用程序开发

14

我需要为 MAC OS X 开发一个应用程序,可以将选定的文件上传到 Amazon Web Services。但是为此需要 Mac 版 AWS SDK。我在网上没有找到相关资源。请问是否可以修改 AWS SDK for iOS 以便在 Mac 上使用?

另外,AWS SDK 文档没有说明如何上传文件到 S3。有没有人有这方面的示例代码?

谢谢。


1
这完全不是离题。找到适用于Mac OS的AWS SDK将非常有帮助。 - Eddie Sullivan
这个让我开心: https://github.com/swift-aws/aws-sdk-appleos - quarac
5个回答

9
我创建了 AWS iOS SDK 的 fork 版本,可用于 Mac OS X 开发。请查看:https://github.com/amberdixon/aws-sdk-ios。在自述文件中,我提供了如何构建 AWS iOS SDK 框架的 Mac OS X 版本的说明。Tandomersen 仓库似乎使用了旧版 iOS SDK,而我创建的版本则更新一些。

当时,我成功地在macOS上运行了它,而且代码也没有太多混乱,但非常感谢Amber的帮助,这将对其他人有所帮助... - Omer Waqas Khan
我找不到框架,请问您能否提供一下步骤或截图,告诉我在构建了您建议的src/AWSiOSSDK.xcodeproj之后如何找到框架呢?我打开了这个项目并进行了构建,但是没有找到任何框架:( 请帮忙。 - Nitin Gohel

7

4
我所做的只是分叉了iOS官方版本,然后进行了一些非常小的更改 - 全部都是为了满足编译器的要求,例如在任何仅适用于iOS的代码周围使用ifdefs(不多),并交换一些头文件<UIKit>变为<Cocoa>等。对于大型项目,您可能希望使用自己的分支,以便可以亲自查看所有更改。我将其用于S3、SimpleDB、SQS和IAM。 - Tom Andersen
这就是我的做法,但是当我调用AmazonS3Client类的listBuckets方法时,我得到了一个奇怪的异常。它说: Attempt to mutate immutable object with appendString: 我在整个SDK中搜索了appendString调用,但是我没有找到任何东西。我发现错误出现在AmazonS3Client的第464行调用NSRunLoop runMode:beforeDate:时。 有人可以帮忙吗? - IluTov
好的,我已经尝试了你回答中修改过的版本,它可以正常工作。但我仍然想知道为什么之前的版本不能工作... - IluTov

5

之前的答案基础上,我fork并修改了AWS SDK for iOS v2.2,使其能够构建Mac OS X版本(在Yosemite 10.10.3中测试通过):https://github.com/johnabender/aws-sdk-ios 还要检查一下tvos分支!

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

但是,糟糕的是,他们的文档很糟糕。例如,如果您想使用访问密钥而不是Cognito身份验证,您必须查看代码并找出如何做到这一点(至少是可能的!)。想要列出S3存储桶的内容?祝好运。大多数所需的类甚至都没有列在文档中。而且,您必须在项目中包含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
}

你是我这周给出的最大的虚拟高五接收者! - Chris
@jab,你能提供一些关于如何使用它的细节吗?我下载了一个ZIP归档文件,但无法构建它——它抱怨我的Mac不是有效的目标? - Duncan Groenewald
@jab,我使用了您的源代码构建了框架,并将其添加到我的项目中的Frameworks文件夹下,但没有运行pod install安装aws sdk(因为我收到了警告消息,说他们不支持osx)。现在我遇到了以下错误信息:'AWSCore/AWSCore.h'文件未找到。我是否漏掉了什么?非常感谢! - Chris P
@ChrisP 听起来你需要将框架添加到项目的构建中,在项目“常规”设置下的“链接的框架和库”中 - 这正是当不使用 CocoaPods 时必须做的事情。 - jab
这是我第一次编译它时使用的变更集:https://github.com/johnabender/aws-sdk-ios/commit/3a28e815161e7494a7490624c6cb1288df37838d。正如您所看到的,我基本上只是用等效的Cocoa调用替换了UIKit,直到构建成功。可能我错过了一些? - jab
显示剩余4条评论

0

我需要AWS SDK for Mac来支持为我的iOS应用程序预填充数据库,惊讶的是它并不存在(考虑到它将会与iOS版本非常相似,因此生成起来非常简单)。我下载了Amber提到的github MacOS SDK和AWS链接中提到的SDK。然而,两者都不能直接构建,所以我决定修改iOS SDK,以便我能够理解这个过程。

以下是我在MacOS 10.9上使用XCode 5.0.2使DynamoDB工作的步骤:

1.下载iOS AWS 1.7.0 SDK,复制文件夹并将文件夹重命名为aws-MacOS-sdk-1.7.0(一些条件编译和if/else在构建脚本中可以省略此步骤)

2.修改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项目,您需要:

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

为了使DynamoDB工作,我必须构建四个框架——这相当容易。


我似乎无法摆脱这个错误 :: 找不到'Cocoa/Cocoa.h'文件。 - Shumais Ul Haq
你有按照我项目中的 README 文件中的说明吗?谢谢。 - Amber Haq Dixon

0
如Caleb所提到的:OS X没有官方的AWS SDK。
实现S3文件上传最简单的方法是使用ASIHTTPRequest。它是CFNetwork的包装器,易于使用。缺点是没有ARC支持,因此您必须自己处理内存管理...

1
ASI基本上已经停用了。查一下吧。 - Tom Andersen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接