Haac74
Haac74

Reputation: 688

Failed to recognize AWSDynamoDB with XCode 7.0 Beta, iOS 8.3, and aws-ios-sdk-2.2.0

I am matching guides for using AWSDynamoDB in a test project using Swift 2 in XCode 7.0 Beta. I am required to use that platform instead of the previous stable one and make it work.

I am using the next links:

https://docs.aws.amazon.com/mobile/sdkforios/developerguide/setup.html

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LoadData_Java.html

Best way to make Amazon AWS DynamoDB queries using Swift?

I already made it work for reading and writing text files and images to an S3 Bucket, but now that I am trying to use DynamoDB service something might be missing.

Here is my Podfile contents:

# Uncomment this line to define a global platform for your project
platform :ios, '8.3'
target 'AWSSDKTest' do
    source 'https://github.com/CocoaPods/Specs.git'
    pod 'AWSCore'
    pod 'AWSAutoScaling'
    pod 'AWSCloudWatch'
    pod 'AWSDynamoDB'
    pod 'AWSEC2'
    pod 'AWSElasticLoadBalancing'
    pod 'AWSKinesis'
    pod 'AWSLambda'
    pod 'AWSMachineLearning'
    pod 'AWSMobileAnalytics'
    pod 'AWSS3'
    pod 'AWSSES'
    pod 'AWSSimpleDB'
    pod 'AWSSNS'
    pod 'AWSSQS'
    pod 'AWSCognito'
end
target 'AWSSDKTestTests' do
end

I had to delete Podfile.lock and Pods folder, deleted Configuration Sets in Project->Info->Configurations, and installed pods again. Here is my bridging.h file:

#ifndef AWSSDKTest_bridging_h
#define AWSSDKTest_bridging_h
#endif
#import <AWSCore/AWSCore.h>
#import <AWSS3/AWSS3.h>
#import <AWSDynamoDB/AWSDynamoDB.h>
#import <AWSSQS/AWSSQS.h>
#import <AWSSNS/AWSSNS.h>
#import <AWSCognito/AWSCognito.h>

I downloaded the aws-ios-sdk-2.2.0.zip file, unzipped and added to Frameworks all the AWS frameworks.

I am trying to use AWSDynamoDBModel, here is a swift file for implementing the Upload Sample Items Example for using DynamoDB Mapper:

import Foundation
class Forum : AWSDynamoDBModel, AWSDynamoDBModeling {
    var name : String = ""
    var category : String = ""
    var threads : Int = 0
    var messages : Int = 0
    var views : Int = 0
    // override init!() { super.init() }
    required init!(coder: NSCoder!) {
        fatalError("init(coder:) has not been implemented")
    }
    class func dynamoDBTableName() -> String! {
        return "Demo"
    }
    class func hashKeyAttribute() -> String! {
        return "email"
    }
    class func rangeKeyAttribute() -> String! {
        return "date"
    }
    /*
    override init(dictionary dictionaryValue: [NSObject : AnyObject]!, error: NSErrorPointer) {
        super.init(dictionary: dictionaryValue, error: error)
    }
    override func isEqual(anObject: AnyObject?) -> Bool {
        return super.isEqual(anObject)
    }
    */
}

I had to comment the lines that caused error because those might be fixed. The errors mentioned that those functions couldnt be overridden and that super.init couldnt be called inside a root method.

After cleaning and building again, the error is at the class declaration line

class Forum : AWSDynamoDBModel, AWSDynamoDBModeling {

The error says: Use of undeclared type 'AWSDynamoDBModel' If I try writing other AWSDynamoDB classes they don't appear in the list of suggestions and then cause the same error.

Additionally I want to mention that in the developer's guide setup (first link above) the 4th point of the Getting Started with Swift section says: "Import the AWSCore header in the application delegate":

#import <AWSCore/AWSCore.h>

Than can't be done, only in the bridging.h file which is mentioned in the 2nd point.

My first request of assistance is in fixing the error mentioned and making the project recognize the AWSDynamoDB framework. Then I request your help for any observation about this merge of different tutorials, also any other online tutorial or guide that is more clear than those mentioned.

Upvotes: 0

Views: 699

Answers (2)

schnabler
schnabler

Reputation: 715

In case you are using CocoaPods (0.36) with "use_frameworks!", this answer might solve your problem:

"Normally when you’re importing Objective-C code into Swift, you do so by including the header of the file containing that code in the “Bridging Header” for your project. And that is indeed how you include code from a static library (which your pods used to be.)

But it is not how your import Objective-C code from a Framework. To do that you simply type…

import Framework

…inside your Swift file that’s using the Objective-C class (where “Framework” is the name of the actual Framework containing the class.)"

Source here: http://rogueleaderr.com/post/115372471213/unresolved-identifier-in-swift-when-importing

Upvotes: 1

Yi Zhu
Yi Zhu

Reputation: 166

I think the problem is not related to Xcode7Beta, but the installation process of your project. (My sample DynamoDB project runs fine under Xcode7Beta.)

If you installed the AWS Mobile SDK via cocoapods, you neither have to worry about the bridging file nor need to download aws-ios-sdk-2.2.0.zip file since cocoapods already did everything for you.

My suggestion would be:

  1. clean your project, remove all aws related frameworks, bridging files that you manually added,delete Podfile.lock and Pods folder and AWSSDKTest.xcworkspace file, and the re integrate pods by running "pod install"

  2. Open your project using Xcode 6.4, confirm it can be built and run successfully under Xcode 6.

  3. If everything looks good via Xcode 6, reopen it via Xcode7Beta, If it failed to compile, please post the error output so I can take a look.

Thanks

Upvotes: 0

Related Questions