I have a framework project that has dependency private third libraries, i want to use pod package to pack the project so that users can only add one framework.
But the fact is the third libraries didn't pack into the final framework.
My package commond is 'pod package TestPod.podspec --no-mangle --force'
And this is my spec:
Pod::Spec.new do |s|
s.name = "TestPod"
s.version = "0.0.1"
s.summary = "A short description of TestPod."
s.authors = 'wangb'
s.description = <<-DESC
long desc
DESC
s.homepage = "http://EXAMPLE/TestPod"
s.license = "MIT"
s.platform = :ios, "7.0"
s.source = { :git => "https:mygitpath/TestPod.git"}
s.source_files = "TestPod/TestPod/*.{h,m}"
s.public_header_files = "TestPod/TestPod/TestPodPublic.h"
s.vendored_frameworks = "TestPod/TestPod/uAnalytics.framework"
s.frameworks = "CoreTelephony", "SystemConfiguration"
s.libraries = "sqlite3"
end
I have find the answer, pod package not support for now!
https://github.com/CocoaPods/cocoapods-packager/issues/26
Related
I am trying to install a library through local podspec. This is how my podspec looks like
Pod::Spec.new do |s|
s.name = 'MI_SDK_DEVELOPMENT'
s.version = '1.0.0'
s.license = { :type => 'Unspecified' }
s.homepage = 'https://www.modirum.com'
s.authors = { 'Modirum Ou' => 'info#modirum.com' }
s.summary = 'Modirum 3DS SDK iOS framework (Development)'
s.platform = :ios
s.source = { :path => './LocalPods/MI_SDK_DEVELOPMENT.framework.zip' }
s.ios.deployment_target = '8.0'
s.ios.vendored_frameworks = 'MI_SDK_DEVELOPMENT.framework'
end
when I run the pod install pods installed successfully but it does not copy the 'MI_SDK_DEVELOPMENT.framework' in the XCode project. So I am having the following error
So don't know is there something wrong with the Pod itself or I am missing something in the installation. Any help will be highly appreciated. Thanks
EDIT:
Podfile
# Uncomment the next line to define a global platform for your project
platform :ios, '8.0'
target 'ModirumSDKExample' do
# Comment the next line if you're not using Swift and don't want to use dynamic frameworks
use_frameworks!
# Pods for ModirumSDKExample
pod 'MI_SDK_DEVELOPMENT', :path => './LocalPods/MI_SDK_DEVELOPMENT.podspec'
end
By the Cocoapods Documentation, it seems that .zip files are only unarchivable via http resources:
Using HTTP to download a compressed file of the code. It supports zip, tgz, bz2, txz and tar.
So this would work:
s.source = { :http => 'https://example.com/MI_SDK_DEVELOPMENT.framework.zip' }
This would not:
s.source = { :path => './LocalPods/MI_SDK_DEVELOPMENT.framework.zip' }
I am trying to find out a way to declare dependency from subspec 'B' to subspec 'A' in the podspec: 'mypodspecfile.podspec' as below:
Pod::Spec.new do |s|
s.name = "MyLib-SDK"
s.version = "1.0"
s.summary = "My Library"
s.homepage = "http://myhomepage.com"
s.ios.deployment_target = "8.0"
s.ios.frameworks = "Foundation", "UIKit", "SystemConfiguration", "Security", "CoreTelephony", "WebKit"
s.source = { :git => "https://github.com/myhome/ios-project.git", :tag => "1.0" }
s.subspec 'MyLibrary-A' do |libOne|
libOne.source_files = "Headers", "Headers/**/*.h"
libOne.exclude_files = "Headers/Exclude"
libOne.resources = "SharedAssets/*"
libOne.libraries = "z","sqlite3" #Zlib for gzip, sqlite3 for event store
libOne.vendored_library = "libMyLibrary_A.a"
end
s.subspec 'MyLibrary-B' do |libTwo|
libTwo.source_files = "Headers", "Headers/**/*.h"
libTwo.exclude_files = "Headers/Exclude"
libTwo.resources = "SharedAssets/*"
libTwo.dependency 'MyLibrary-A' <-- doesn't seem to be working here!!
libTwo.libraries = "sqlite3" # sqlite3 for db
libTwo.vendored_library = "libMyLibrary_B.a"
end
end
When I execute:
$pod spec lint mypodspecfile.podspec --verbose
-ERROR | [iOS] unknown: Encountered an unknown error (Unable to find a specification for MyLibrary-A depended upon by MyLibrary-B
Any help would be greatly appreciated. Thanks you!
You should always write the full path to the pod dependencies. The error states that cocoa pods cannot find the .podspec file for MyLibrary-A in the pod repo(s). To fix the issue, specify full path 'MyLib-SDK/MyLibrary-A'.
So your podspec file should look like this:
Pod::Spec.new do |s|
s.name = "MyLib-SDK"
s.version = "1.0"
s.summary = "My Library"
s.homepage = "http://myhomepage.com"
s.ios.deployment_target = "8.0"
s.ios.frameworks = "Foundation", "UIKit", "SystemConfiguration", "Security", "CoreTelephony", "WebKit"
s.source = { :git => "https://github.com/myhome/ios-project.git", :tag => "#{s.version}" }
s.subspec 'MyLibrary-A' do |libOne|
libOne.source_files = "Headers", "Headers/**/*.h"
libOne.exclude_files = "Headers/Exclude"
libOne.resources = "SharedAssets/*"
libOne.libraries = "z","sqlite3" #Zlib for gzip, sqlite3 for event store
libOne.vendored_library = "libMyLibrary_A.a"
end
s.subspec 'MyLibrary-B' do |libTwo|
libTwo.source_files = "Headers", "Headers/**/*.h"
libTwo.exclude_files = "Headers/Exclude"
libTwo.resources = "SharedAssets/*"
libTwo.dependency 'MyLib-SDK/MyLibrary-A' # here is the change
libTwo.libraries = "sqlite3" # sqlite3 for db
libTwo.vendored_library = "libMyLibrary_B.a"
end
end
I have a "CocoaPod" (terminology?) that's currently at version 1.1.
There's also a develop branch of the repo that requires Swift 2.0 (so needs a base SDK of IOS 9.0) with a PodSpec as follows:
Pod::Spec.new do |s|
s.name = 'ReachabilitySwift'
s.version = '2.0-beta1'
s.homepage = 'https://github.com/ashleymills/Reachability.swift'
s.authors = {
'Ashley Mills' => 'ashleymills#mac.com'
}
s.summary = 'Replacement for Apple\'s Reachability re-written in Swift with callbacks.'
s.license = { :type => 'MIT' }
# Source Info
s.ios.platform = :ios, "9.0"
s.osx.platform = :osx, "10.11"
s.ios.deployment_target = "8.0"
s.osx.deployment_target = "10.9"
s.source = {
:git => 'https://github.com/ashleymills/Reachability.swift.git',
:branch => 'develop',
:tag => 'v'+s.version.to_s
}
s.source_files = 'Reachability.swift'
s.framework = 'SystemConfiguration'
s.requires_arc = true
end
The PodSpec fails to validate (pod spec lint) as it builds using Xcode 8.3. How do I force it to use the latest Xcode-beta?
You can easily change the Command-Line tools version in the Xcode Preferences "Locations" tab, and change "Command Line Tools" to Xcode 7.0.
This should do the trick with "pod lib lint".
Here is my podspec:
Pod::Spec.new do |s|
s.name = "MXMarkdownKeyboard"
s.version = "0.0.3"
s.summary = "MarkdwonKeyboard for iOS"
s.homepage = "https://github.com/mexiQQ/MXMarkdownKeyboard"
s.license = { :type => "MIT", :file => "LICENSE.md" }
s.author = { "mexiqq" => "ljw040426#gmail.com" }
s.platform = :ios
s.source = { :git => "https://github.com/mexiQQ/MXMarkdownKeyboard.git",:tag => '0.0.3'}
s.source_files = "MXMarkdownKeyboard", "MXMarkdownKeyboard/*.{h,m}"
end
The repo is here: https://github.com/mexiQQ/MXMarkdownKeyboard
When I execute pod spec lint it returns:
MXMarkdownKeyboard.podspec passed validation.
But, when I execute pod trunk push I get this error:
[!] The Pod Specification did not pass validation.
How can I fix this and push my spec to trunk?
It's expecting a file called LICENSE in the root of your repo, but it can't find one.
For example, I have project A, and it need project B, so I use pod "Project B". But project B need some dylib and static library. So, I write project B podspec such as:
Pod::Spec.new do |s|
s.name = 'ProjectB'
s.version = '3.0.0'
s.license = 'MIT'
s.summary = 'ProjectB'
s.homepage = 'urlAddress'
s.authors = { 'Jumei' => 'app#jumei.com' }
s.source = { :git => 'gitAddress', :branch => 'develop'}
s.vendored_library = 'ProjectB_Dir/libmp3lame.a'
s.library = 'libc++.dylib'
s.requires_arc = true
s.ios.deployment_target = '5.0'
end
but thers is not libc++.dylib in project B.
Please run pod spec lint on specs as you write them. We've removed the need for you to include lib and .dylib from included libraries. So in this case you should just use:
s.library = 'c++'