I have a project XyzAbc with proj structure
--LICENSE
--XyzAbc
----XyzAbc.h
----Info.plist
----file1.swift
----file2.swift
--Products
----XyzAbc.framework
After building this project I pick this XyzAbc.framework and push it in github account that has folder structure
--XyzAbc.framework
--.gitignore
--LICENSE
--XyzAbc.podspec
--README.md
I created XyzAbc.podspec file in my local machine its structure is
Pod::Spec.new do |s|
s.name = ""
s.version = "0.1.1"
s.summary = ""
s.description = ""
s.homepage = ""
s.swift_versions = "4.2"
s.license = {
:type => "MIT",
:file => "LICENSE"
}
s.author = "xyyyy"
s.platform = :ios, "10.0"
s.source = {
:git => "https://github.com/xyz/pqr.git", # github link where I uploaded my compiled library
:tag => "0.1.1"
}
s.source_files = "XyzAbc.framework/Headers/*.h"
s.public_header_files = "XyzAbc.framework/Headers/*.h"
s.vendored_frameworks = "XyzAbc.framework"
s.framework = 'Foundation'
end
I am refering this podspec file in my app like
target 'TestApp' do
use_frameworks!
pod 'XyzAbc', :path => "../../../../Desktop/XyzAbc.podspec"
end
But I am not able to see any header inside pod library. In my project TestApp it looks something like this
--Pods
----Podfile
----Development Pods
------XyzAbc
--------Pods
--------SupportFiles
--------<Frameworks is missing>
I tried using :http then when I provide zip .framework folder in http link, it is not working but when I provide unziped .framework folder then I am able to use this library.
I am following this https://medium.com/onfido-tech/distributing-compiled-swift-frameworks-via-cocoapods-8cb67a584d57
UPDATE - elaborated
Related
I am writing a Cocoapod myself and I am stuck in the .podspec file to set up the path.
I have used many ways to set the path of s.source_files & s.resource_bundles but still, I am getting the same error.
Command
1. pod trunk register -> Successfully
2. pod lib lint. -> Successfully
3. pod trunk push -> Error
ERROR | [iOS] file patterns: The source_files pattern did not match any file.
I am sharing my file hierarchy please help me to set Path.
.podspec file code
Pod::Spec.new do |s|
s.name = 'RandomDataGenerator'
s.version = '1.0.0'
s.summary = 'RandomDataGenerator is very easy to use and very usefull for Lorem Data'
s.description = <<-DESC
'A RandomDataGenerator is a library which is basically used to Generate a number of Random Data for UITAbleView and UICollectionView or for normal bunch of Data. Suppose that if you your app is in Developement Phase and You have not yet implemeted any API for your app but still you want to display Random data in your UI so you can use this to generate Random Data.'
DESC
s.homepage = 'https://github.com/kumarlav0/RandomDataGenerator/tree/master'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'kumarlav0' => 'kumarstslav#gmail.com' }
s.source = { :git => 'https://github.com/kumarlav0/RandomDataGenerator.git', :tag => s.version.to_s }
s.social_media_url = 'https://www.instagram.com/kumarstslav/'
s.ios.deployment_target = '12.0'
s.source_files = 'RandomDataGenerator'
s.requires_arc = true
s.swift_version = '5.0'
s.platforms = {
"ios": "12.0"
}
end
.podspec file
File Hierarchy
File Hierarchy Closed
s.source should point to a tagged version of the repository with that directory structure. See spec.version and spec.source in the example at https://guides.cocoapods.org/syntax/podspec.html
Currently my Framework (myFramework.framework) is available through cocoapods. I am making it's source code public but facing some issue.
I have referred following links:
CocoaPod/Podspec and *.framework
https://guides.cocoapods.org/making/using-pod-lib-create.html
http://blog.cocoapods.org/Pod-Authors-Guide-to-CocoaPods-Frameworks/
How can I create .framework (not library) from podspec file?
And even I am able to create library from podspec. But I want to make myFramework.framework file.
Here is podspec file:
Pod::Spec.new do |s|
s.name = 'myFramework'
s.version = '1.0.0'
s.summary = 'Product summary will go here'
s.description = <<-DESC
Product description goes here. It can be anything which describes your product in few lines.
DESC
s.homepage = 'homepage link'
s.license = { :type => 'Commercial',:text => 'Link to website'}
s.author = { 'abcd' => 'email address' }
s.source = {:path => ':path => ‘local_path/framework-folder'}
s.social_media_url = 'social_media_url'
s.ios.deployment_target = '7.0'
s.source_files = 'framework-folder/inner-folder/*.h'
s.public_header_files = 'framework-folder/inner-folder/*.h'
s.frameworks = 'CoreGraphics', 'MobileCoreServices', 'Security', 'SystemConfiguration'
s.pod_target_xcconfig = { 'OTHER_LDFLAGS' => '-lObjC' }
end
currently I am testing framework locally.
use_frameworks!
target 'podDemo' do
pod 'myFramework', :path => ‘~folder_path/myFramework.podspec’
end
After pod install result is this:
But I want to add .framework like this:
The podspec doesn't specify how the library will be build - statically or dynamically. It's the responsibility of the users of the library to specify how to build it - i.e. in their Podfile.
By default Cocoapods builds static libraries, if you need a framework then you can specify use_frameworks! in your Podfile.
Regarding the header files presence in the project navigator, this is the expected behavior, as the headers need to be referenced somewhere if you want to have them included in the built framework. If you go to the build directory you should be able to find the framework.
I created my own cocoapods library and push it. But when i run pod install for an app, there is only ReplaceMe.m file. But i have changed this file with my own classes. And also i can see files on github.
platform :'ios', '8.0'
pod 'MyPod'
However, if i add git url to Podfile, Library classes exist.
platform :'ios', '8.0'
pod 'MyPod', :git => 'https://github.com/ugurcetinkaya/MyPod.git'
What should i do to solve this?
My .podspec file:
Pod::Spec.new do |s|
s.name = 'UURCCentralizedTokenView'
s.version = '0.1.0'
s.summary = 'Customizable Centralized TokenView'
s.description = 'Customizable Centralized TokenView for iOS applications.'
s.homepage = 'https://github.com/ugurcetinkaya/UURCCentralizedTokenView'
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'Ugur Cetinkaya' => 'ugurcetinkaya#ymail.com' }
s.source = { :git => 'https://github.com/ugurcetinkaya/UURCCentralizedTokenView.git', :tag => s.version.to_s }
s.ios.deployment_target = '8.0'
s.source_files = 'UURCCentralizedTokenView/Classes/**/*'
s.frameworks = 'UIKit'
I solved my problem. Git version of library didn't have library classes on current release. I added classes to my repo. After that i updated version of my repo and my pod with adding new tag to my repo. Cocoapods version is looking at the version of repo.
I made a Swift framework I want to make a CocoaPods for it.
I've followed all the instructions:
created podspec file, added version tag, pushed it to github
When I run pod lib lint it passes but when I run pod spec lint it fails.
Here is my podspec file
Pod::Spec.new do |s|
s.name = "Seru"
s.version = "0.0.3"
s.summary = "Seru is Simple Core Data stack"
s.description = <<-DESC
Seru is Swift framework for working wit Core Data. It setup your core data stack and
gives you nica actions to work with it
DESC
s.homepage = "https://github.com/kostiakoval/Seru"
s.license = { :type => "MIT", :file => "LICENSE" }
s.author = { "Kostiantyn Koval" => "konstantin.koval1#gmail.com" }
s.social_media_url = "http://twitter.com/kostiakoval"
s.platform = :ios, "8.0"
s.source = { :git => "https://github.com/kostiakoval/Seru.git", :tag => s.version }
s.source_files = "Seru/Source", "Seru/Source/**/*.{swift}"
s.requires_arc = true
s.ios.vendored_frameworks = 'Carthage/Build/iOS/Sweet.framework'
end
It has external framework dependency. I'm guessing this is a problem.
When I do pod speck lint, it says that I can't find that external framework
The problem was that CocoaPods don't include vendored_frameworks folder.
To fix it is to specify that this folder should be included to a CocoaPod by using preserve_paths.
s.preserve_paths = 'Carthage/Build/iOS/Sweet.framework'
So i figure this should be really easy but after a day of Googling and playing around i still can't seem to get this working. I have a private cocoapod which downloads code from a private git repository. This is all set-up and works fine.
What i'm struggling with is i need to include localized xibs in the cocoapod. I have a LoginView which is shared code across a number of our internal apps. However we have localised versions of the view. From what i can tell due to the way cocoapods flattens out the structure it's just copying the localized xib which is causing the *.lproj directories to be lost. When i then try and use the cocoapod it seems to pick up the first xib regardless of the language setting on the device.
I'm hoping someone might be able to guide me as to how i go about retaining the folder heirachy or if there's another way to include the localised xibs into the cocoapod.
#
# Be sure to run `pod lib lint NAME.podspec' to ensure this is a
# valid spec and remove all comments before submitting the spec.
#
# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html
#
Pod::Spec.new do |s|
s.name = "ios-XX-common"
s.version = "1.0"
s.summary = "XXXXXX"
s.description = "Pod containing common source code used across multiple apps"
s.homepage = "http://www.example.com"
s.license = 'Copyright'
s.author = { xxx }
s.source = { :git => "xxxx:/data/git/ios-xx-common.git", :tag => 'v1.0'}
s.platform = :ios, '7.0'
s.requires_arc = false
s.header_dir = 'ios-xx-common'
s.header_mappings_dir = 'CommonSourceCode'
s.source_files = "CommonSourceCode/**/*.{h,m}", "CommonSourceCode/CustomUIObjects/**/*.{h,m}",
"CommonSourceCode/Data Objects/**/*.{h,m}", "CommonSourceCode/Helpers/**/*.{h,m}",
"CommonSourceCode/UID/**/*.{h,m}", "CommonSourceCode/UIViews/**/*.{h,m}",
"CommonSourceCode/ViewControllers/**/*.{h,m}"
s.resource_bundles = { 'rr-common-xibs' => ['CommonResources/Xibs/*.lproj'],
'rr-common-other' => ['CommonResources/Icons/*.*', 'CommonResources/IPhone/*.*', 'CommonResources/IPhoneIPad/*.*', 'CommonResources/Sounds/*.*'] }
s.public_header_files = '**/*.h'
s.dependencies = { 'Parse-iOS-SDK' => '~> 1.2.19', 'CocoaLumberjack' => '~> 1.7.0',
'MBProgressHUD' => '~> 0.8', 'AFNetworking' => '~> 1.0' }
end
Thanks
I think you might be after "Development Pods".
So I have two projects, a library project and an app specific project.
In my library project I have a library.podspec file
Pod::Spec.new do |s|
s.name = "Library"
s.version = "0.0.1"
s.summary = "Shared library."
s.description = "This is an iOS library for shared common code across all apps"
s.homepage = "http://blah.com"
s.license = 'COMMERCIAL'
s.author = { "My name" => "my#email.com" }
s.social_media_url = "http://twitter.com/blah"
s.platform = :ios, '8.0'
s.source = { :git => "https://bitbucket.org/blah/library.git", :tag => '0.0.1' }
s.source_files = 'Library/Classes/**/*.{h,m}', 'Library/Models/**/*.{h,m}', 'Library/ViewModels/**/*.{h,m}', 'Library/Views/**/*.{h,m}'
s.resources = "Library/Images/**/*.png", "Library/Images/**/*.jpg", 'Library/Views/**/*.xib', "Library/Fonts/*.otf"
s.requires_arc = true
s.framework = 'MapKit', 'CoreLocation'
s.dependency 'AFNetworking'
s.dependency 'ReactiveCocoa'
s.dependency 'JLRoutes'
end
Then in my specific app project's Podfile...
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
link_with 'Myapp', 'Myapp-Tests'
pod 'Library', :path => '../library/'
Now when I run "pod update" for my specific app project I can see under the Pod project instead of under Pods, I have a new folder called Development Pods.
Just be aware that if you add new files in your Library project, be sure to pod update again.
Peace.