I'm using Cocoapods to install the following package in a brand new iOS project in Xcode.
https://github.com/jpsim/JPSVolumeButtonHandler
After adding pod 'JPSVolumeButtonHandler' to my Podfile and running pod install, I close the existing Xcode project and open the new xcworkspace file
If I then try to #import 'JPSVolumeButtonHandler.h' in my ViewController.h file, I get an error:
JPSVolumeButtonHandler file not found
I know this can sometimes be resolved by building the project, but even after doing so, I still get the same error. Anything I'm missing?
Just figured this out. In past Cocoapod libraries I had used, there was a single global file to be included that lived outside of the cocoapod library's directory.
In this case, I had to provide the full path from my Pod Root to the the header file I needed, which is located at pods/JPSVolumeButtonHandler/JPSVolumeButtonHandler.h
So my import statement now looks like:
#import "JPSVolumeButtonHandler/JPSVolumeButtonHandler.h"
Related
I am new to Swift and Xcode, I once import Alamofire, SwiftyJSON using cocoa pods in some tutorials, In the beginning, everything works fine, but recently every time I restart my swift project, I always get an error of No such module 'Alamofire', and the pods_proejctname.framework in Frameworks is lost but I didn't do anything:
However, the files in Pods in Xcode repositories doesn't show complete files and folder as finder shows:
If I opened the pods XCode project, the files in the products folder is missing, but I didn't do anything:
When I tried to fix it, this error somehow disappears. Can someone help me with this problem? please comment on my post if you need me to show further information about my project. Thank you!
you have lost path to your libraries in your project. Instead of configuring your path manually just remove your project from cocoa-pods and configure it again. Run the following commands on your project from the terminal
step 1
pod deintegrate
step 2:
delete Podfile.lock and yourproject.xcworkspace file manually from your project. also if delete the pods folder from your project if exist.
Step 3:
install pods again by running
pod install
I'm trying to create a Cocoa Touch Framework.
I created a Cocoa Touch Framework
I ran pod init
I added our own CocoaPod to this, which has some dependencies itself as well.
I ran pod install.
Now when I try to build the framework (I open the .xcodeproj) I get the following warnings for each dependency.
ld: warning: directory not found for option '-F/Users/jeroen/Library/Developer/Xcode/DerivedData/OurFramework-culynvrparvtfjbjlitmammotpkf/Build/Products/Debug-iphoneos/Alamofire'
I get the following errors:
ld: framework not found Alamofire
error: Resource "/Users/jeroen/Library/Developer/Xcode/DerivedData/OurFramework-culynvrparvtfjbjlitmammotpkf/Build/Products/Debug-iphoneos/FirebaseFirestore/gRPCCertificates-Firestore.bundle" not found. Run 'pod install' to update the copy resources script.
I expect that this is because the CocoaPod files are not copied to the right place. Is that correct?
What could I do to make this work anyway?
The reason I want to do this is the following:
I have a CocoaPods project which is a regular Xcode project with only Swift classes and some view controllers. We want to make this available as closed source. So I'm hoping that including this pod in a Cocoa Touch Framework would still make all public functions of its pods available to the user.
If there are other suggestions, they are welcome!
Thanks in advance.
The first point I got is you used .xcodeproj after pod installation. Please note that once you install pods there is one more file is created with an extension .xcworkspace you need to use this file to open project and your future work should be done in this file.
Okay, so all the problems I had with setting this up seemed to be Xcode-related.
Basically what I did to get this working is the following:
Create a Cocoa Touch Framework through Xcode's File > New > Project ....
Using terminal, navigate to the framework's root folder (the folder with the YourFramework.xcodeproj-file).
Run pod init.
Add the necessary CocoaPods to the Podfile.
Run pod install.
Make sure you close the YourFramework-project that's probably open in Xcode.
From here on my problems started occurring. Opening the YourFramework.xcworkspace worked, but in the left-side navigator of Xcode, I could only expand the Pods-project, not the Framework-project; it seemed to be empty. Building didn't work either.
To solve this (So, just the regular steps to solve Xcode problems):
Close Xcode.
Delete derived data.
Open the YourFramework.xcworkspace again.
Clean the build folder.
Now it maybe builds, or not. In my case it didn't and got 100s of problems related to the Swift language being unavailable. I created a framework without any source files, just imported CocoaPods. To solve this create a Swift file in the framework which imports at least Foundation.
Now it should build.
My problem is that I can't import GoogleCloudMessaging, downloaded by podfile, to my Swift project.
My steps:
I installed it by
pod 'GoogleCloudMessaging', '~> 1.2'
http://i.stack.imgur.com/x3rKm.png
2.It has not ".framework", but ".a" file library. So I added this to my Linked Frameworks and Libraries:
http://i.stack.imgur.com/cImxW.png
Also I imported it to my bridging-Header and all is ok, I did not see any errors. Looks like:
#import <GoogleCloudMessaging/GoogleCloudMessaging.h>
So I tried to add library to my AppDelegate with:
import GoogleCloudMessaging
But it shows error "No such module 'GoogleClougMessaging'"
I read some posts about such problem with Google Frameworks, tried to set (changed Google to GoogleCloudMessaging):
"So Instead of adding $(SRCROOT)/Pods (recursive) I added:
"${SRCROOT}/Pods/Google" (recursive) to the Header Search Paths
"${SRCROOT}/Pods/Google" (recursive) to the Framework Search Paths"
But it did not help.
P.S.: sorry, I have not enough reputation to display images in post, so i added links to screenshots
EDIT
God, I did it.
Don't know why, but trying to 'pod Google/CloudMessaging' causes error "Specs satisfying the Google/CloudMessaging dependency were found, but they required a higher minimum deployment target.". But it was 8.0, so this is strange.
Finally I just download my project from my repo with "git clone ..." to new folder and then did "pod install", and all works fine, my 'pod Google/CloudMessaging' was installed successfully. The error with importing dissapeared, and I don't even need to put this library to Linked Frameworks and Libraries, and did not write any import to AppDelegate
I maintain my 3rd party libs with cocoapods. But recently I found some bugs and would like to add some new features to one of the libs so I manually created some .h and .m files in one of the libs.
However when importing those added .h files, Xcode gave the file not found error and couldn't compile them.
How can I solve the problem?
Thanks.
When integrating the Pods into your project, CocoaPods generates libraries that cannot be easily modified from Xcode. If you're having CocoaPods build frameworks, instead, those cannot be modified at all. You usually have to rerun pod install or pod update to let CocoaPods regenerate them if you add files to a Pod.
If you want to reliably add files to a Pod, you should checkout a copy on your machine, somewhere NOT in you project's folder and use something like the following to tell CocoaPods that that one Pod is one you're developing and therefore should integrate differently:
pod MyPod, :path => 'path/to/MyPod.podspec'
Still, even in this case, if you add files to the Pod, although it's easier to add them from Xcode, you might want to rerun the pod command line tool to have CocoaPods reintegrate your pod. However, in this case, you'll only have to make sure your files are added to the right project target in order to add files directly from Xcode.
I recently had to delete a xcode project from my computer and re-clone it down. After cloning it, I ran a pod install and then went to build the project. However, I kept hitting a error in my .pch file that claimed a file (a pod file) was not found.
I looked into the following SO posts:
iOS - Build fails with CocoaPods cannot find header files
Unit Test build failing when importing MagicalRecord
From there I gathered that I needed to add to Header Search Paths the $(inherited) flag. I've done that, I've cleaned the project, and then re-built it, and still am having the following error..
As of version 2.3.0 (released on 1 June 2015) the file CoreData+MagicalRecord.h seems to have been renamed to MagicalRecord.h only.
If you installed MagicalRecord using CocoaPods and ran pod install or pod update again you might have gotten this new version and will end up with the same error message: CoreData+MagicalRecord.h file not found
So you should change the import of the header in your pch file then. This is what I have now:
Try to add this line on top of your podfile:
link_with ['ProjectName', 'ProjectNameTests']
before this line
platform :ios, '8.0'
Install pod, and at your project Build Setting->Other Linker Flags, add $(inherited).
import "MagicalRecord/MagicalRecord.h"
Try to run command (1) in terminal, then add import in step (2)
In your project directory,run pod update
You should now be able to add
#import <MagicalRecord/CoreData+MagicalRecord.h>
to any of your target's source files and begin using MagicalRecord!
I think with 2 steps you can be solved this problem.