I am trying to create my own CocoaPod. I have updated cocoapods to the latest version (sudo gem install cocoapods) and then ran this: pod lib create MySwiftLibrary. I set the language to Swift, used the Quick testing framework, added an auto-generated example project, and did not include UI tests. I then navigated to MySwiftLibrary/Example and ran pod install.
That way, my example project was configured. I opened the *.xcworkspace in the auto-generated example project, navigated to Pods -> Development Pods/MySwiftLibrary/MySwiftLibrary/Classes/ReplaceMe.swift and added the following code:
public class ReplaceMe : UILabel {
public func testMe() -> String {
return "Hello World"
}
}
I ran pod install again, and in the example part of the project (MySwiftLibrary -> Example for MySwiftLibrary/ViewController.swift) I added the line import MySwiftLibrary and modified the viewDidLoad method such that the file looked as follows:
import UIKit
import MySwiftLibrary
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let label = ReplaceMe()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
I ran pod install and pod update, just to be sure, but when trying to build the project, I get the following error: Use of unresolved identifier 'ReplaceMe'. What am I doing wrong? This is literally the barest of bare-bone project modifications.
UPDATE: I just found out the issue, and it is something a responded could not have guessed. I have anonymized the name of the pod. In reality, I didn't call the pod MySwiftLibrary, but MyLibrarySwift. (MyLibrary is still not what it really was). I tried making that same pod again and again, and it didn't work. But then I had the idea to try a name that did not end with Swift, and it instantly started working.
Related
So I am mixing swift and objc everywhere.
I have development pod called Renetik.
It has some extensions written in swift but it's mostly objective c code.
Now, I wrote some class and used it in main project fine and wanted to move it to Renetik development pod. When I do it somehow in Renetik-Swift.h wrong import is generated and project won't compile.
#import <Renetik/Renetik.h>
Then I experimented a lot. And found out that wrong import is generated when I actually return from swift class function type defined in pod itself. It is happening just when I try to make it in Development Pod where is mostly objective-c. Other swift extension and classes works juts when I try to modify some class to return objc class defined in pod itself.
I will write example when everything is OK. This compiles fine and I can call function testMe from main project:
#objc public class ReplaceMe: NSObject {
#objc public func testMe() {
let variable = CSResponse<NSObject>()
variable.cancel()
}
}
Just this small change and wrong header is generated as I stated before:
#objc public class ReplaceMe: NSObject {
#objc public func testMe() -> CSResponse<NSObject> {
let variable = CSResponse<NSObject>()
variable.cancel()
return variable
}
}
I use use_frameworks! in podfile as use_modular_headers! don't work for other reasons. I m able to setup branch in Github project where this happens as this is open source.
So it seems only not hack possibility is to create other pod just for Swift files. Define in podspec dependency to released verison, and in host application podfile add dependencies with :path => .
how can I use iosMath in Swift on iOS, because iosMath is written in Objective C? Or is there another way to display mathematical formulas with Swift?
I will make this as fast as possible:
1.) install cocoaPods (open up terminal and write sudo gem install cocoapods)
2.) From terminal change directory to your project and init cocoaPods and edit the Podfile like this:
cd /ProjectFolder
pod init
nano podFile
(opens the podfile, where you paste the pod repo) , should look like this:
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'
target 'mathExample' do
# Comment the next line if you're not using Swift and don't want to use dynam$
use_frameworks!
# Pods for mathExample
pod 'iosMath'
end
save podfile and install via:
pod install
from now, use the workspace file instead of the project file... We are done installing the pod you need right now...
Now it gets a little bit tricky -> You need to add new Objective-C file into the project (so just New File -> Objective-C file and select create bridging header) from now, you can just delete the created file (BUT NOT THE BRIDGING HEADER)
from now, you can use the Objective-C framework just as it was swift framework,don't forget to import that framework into classes you will use it:
import UIKit
//Importing our module
import iosMath
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
print(iosMathVersionNumber)
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
Hope this helps, wish happy coding! :)
The general question has already been answered. Check this question out.
All you have to do is add iosMath in your podfile and as long as you have use_frameworks! in the podfile, you won't need any headers. Simply, import iosMath in your swift file and you are good to go.
I am following http://guides.cocoapods.org/making/using-pod-lib-create guide to created my own swift library.
Briefly steps:
pod lib create MyLibrary
And the question with Yes,Swift etc. (Example project created)
Created my own class ABXXXView to replace the default in 'Pods/Development Pods/MyLibrary/pod/Classes/ReplaceMe.swift'
Then i want to make an example in Example for MyLibrary in ViewController.swift, when i used the class ABXXXView under my own pods, i got the error as title described:
import MyLibrary
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let vi = ABXXXView()
self.view.addSubview(vi)
}
}
Which means can't find "ABXXXView", but i have import MyLibrary, any hint? Thanks!
EDIT:
If i recreated a project with Objc language, everything works fine.
Add the scope of your class "ABXXXView" to public.
public class ABXXXView : UIView {
}
I hope it will solve your problem.
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.
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
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:
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"
Open your project using Xcode 6.4, confirm it can be built and run successfully under Xcode 6.
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
I'm trying to setting up a new project using Metaio SDK but i have a few problems with this.
First of all i've followed the tutorial of this website, but it ended up not working. (http://dev.metaio.com/sdk/getting-started/ios/creating-a-new-ar-application/index.html)
I've been trying to do it with objective C or with Swift with an Obj-C bridging file.
This is what i've done:
-DL metaioSDK.framework and add to project
-Add other frameworks:
-Import metaioSDK (in view controller or in bridge)
#import <MetaioSDK/MetaioSDKViewController.h>
-Add subclass in ViewController (MetiaoSDKViewController)
Just like this:
import UIKit
class ViewController: MetiaoSDKViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
-This images show the errors i'm getting:
The errors you're getting are coming from c++ code being compiled with the Swift compiler.
You should change it to Obj-C++. Either you change the file extension of your ViewController from 'm' to 'mm' (obj-c++) or change the compile-settings to compile your whole project as Obj-C++.
In the Metaio tutorial which I assume you're following, they have a spelling error in subclassing MetaioSDKViewController since Metaio is spelt Metiao. So all you need to change is that line.