iOS SDK Support CocoaPods

Before starting this, please prepare iOS SDK Deploy Github XCFramework and iOS SDK Sample App import XCFramework,

Now, we have xcframework and test sample app. What we want to do is

  • Deploy XCFramework (DONE)
  • Prepare pods with Github
  • Import XCFramework using pods

Install pods

If you don’t have CocoaPods, please install pods

brew install cocoapods

For M1 users, please use brew instead of ruby gem.

Ruby gem has errors.

podspec file

To import XCFramework via Cocoapods, we need podspec file.

To create this file from scratch is not easy so, we get template from commands.

To create iOSMobileSDK.podspec file template, you need to go Project root and run following command

pod spec create iOSMobileSDK

O.K. Now, this is template and we edit this and put this into github repository.


From template some parts are filled by default, but some parts are required to update

This is an example

#  Be sure to run `pod spec lint iOSMobileSDK.podspec' to ensure this is a
#  valid spec and to remove all comments including this before submitting the spec.
#  To learn more about Podspec attributes see
#  To see working Podspecs in the CocoaPods repo see
# do |spec|

  # ―――  Spec Metadata  ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
  #  These will help people to find your library, and whilst it
  #  can feel like a chore to fill in it's definitely to your advantage. The
  #  summary should be tweet-length, and the description more in depth.
  #         = "iOSMobileSDK"
  spec.version      = "1.0.0"
  spec.summary      = "iOS Mobile SDK Test SDK."

  # This description is used to generate tags and improve search results.
  #   * Think: What does it do? Why did you write it? What is the focus?
  #   * Try to keep it short, snappy and to the point.
  #   * Write the description between the DESC delimiters below.
  #   * Finally, don't worry about the indent, CocoaPods strips it!
  spec.description  = "DJ110 iOS Mobile SDK Example"

  spec.homepage     = ""
  # spec.screenshots  = "", ""

  # ―――  Spec License  ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
  #  Licensing your code is important. See for more info.
  #  CocoaPods will detect a license file if there is a named LICENSE*
  #  Popular ones are 'MIT', 'BSD' and 'Apache License, Version 2.0'.

  spec.license      = { :type => "MIT", :text => "Copyright @DJ110" }

  # ――― Author Metadata  ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
  #  Specify the authors of the library, with email addresses. Email addresses
  #  of the authors are extracted from the SCM log. E.g. $ git log. CocoaPods also
  #  accepts just a name if you'd rather not provide an email address.
  #  Specify a social_media_url where others can refer to, for example a twitter
  #  profile URL.
  #             = { "DJ110" => "" }
  # Or just:    = "DJ110"
  # spec.authors            = { "DJ110" => "" }
  # spec.social_media_url   = ""

  # ――― Platform Specifics ――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
  #  If this Pod runs only on iOS or OS X, then specify the platform and
  #  the deployment target. You can optionally include the target after the platform.

  spec.platform     = :ios
  # spec.platform     = :ios, "5.0"

  #  When using multiple platforms
  spec.ios.deployment_target = "15.2"
  # spec.osx.deployment_target = "10.7"
  # spec.watchos.deployment_target = "2.0"
  # spec.tvos.deployment_target = "9.0"
  spec.ios.vendored_frameworks = 'iOSMobileSDK.xcframework'

  # ――― Source Location ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
  #  Specify the location from where the source should be retrieved.
  #  Supports git, hg, bzr, svn and HTTP.

  spec.source       = { :http => '' }

  # ――― Source Code ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
  #  CocoaPods is smart about how it includes source code. For source files
  #  giving a folder will include any swift, h, m, mm, c & cpp files.
  #  For header files it will include any header in the folder.
  #  Not including the public_header_files will make all headers public.

  #spec.source_files  = "Classes", "Classes/**/*.{h,m}"
  #spec.exclude_files = "Classes/Exclude"

  # spec.public_header_files = "Classes/**/*.h"

  # ――― Resources ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
  #  A list of resources included with the Pod. These are copied into the
  #  target bundle with a build phase script. Anything else will be cleaned.
  #  You can preserve files from being cleaned, please don't preserve
  #  non-essential files like tests, examples and documentation.

  # spec.resource  = "icon.png"
  # spec.resources = "Resources/*.png"

  # spec.preserve_paths = "FilesToSave", "MoreFilesToSave"

  # ――― Project Linking ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
  #  Link your library with frameworks, or libraries. Libraries do not include
  #  the lib prefix of their name.

  # spec.framework  = "SomeFramework"
  # spec.frameworks = "SomeFramework", "AnotherFramework"

  # spec.library   = "iconv"
  # spec.libraries = "iconv", "xml2"

  # ――― Project Settings ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
  #  If your library depends on compiler flags you can set them in the xcconfig hash
  #  where they will only apply to your library. If you depend on other Podspecs
  #  you can include multiple dependencies to ensure it works.

  # spec.requires_arc = true

  # spec.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" }
  # spec.dependency "JSONKit", "~> 1.4"


I changed license, deploy target vendored_frameworks, source etc…

Especially source is target in Github.

Verify podspec file

Grammar level validation, we can use following command.

pod lib lint

Unfortunately, this command cannot check structure.

Upload podspec file into Github

Let’s push podspec file into Github project.

You create github project when we deploy XCFramework binary file. (iOS SDK Deploy Github XCFramework)

We need to push this file like following structure

|- .gitignore
|- iOSModuleSDK
     |- 1.0.0
         |- iOSModuleSDK.podspec

We managed podspecfile under target name. Target/Version/Target.podspec.

If you want to add new version, create version under Target folder.

In this time, 1.0.0 is the target version.

If you want to know more details, please check the target repository iOS-Mobile-SDK.

Use XCFramework via CocoaPods

Let’s use XCFramework via CocoaPods. Switch to application project.

To support pods for a project, go to application project root (same directory as .xcodeproj file)

Run a following command.

pod init

We can see Podfile under the directly.

Edit this Podfile to support github binary.


Please add dependency.

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'
source ''
source ''

target 'iOSMobileSDKApp' do
  # Comment the next line if you don't want to use dynamic frameworks

  # Pods for iOSMobileSDKApp
  pod 'iOSMobileSDK', '1.0.0'

  target 'iOSMobileSDKAppTests' do
    inherit! :search_paths
    # Pods for testing

  target 'iOSMobileSDKAppUITests' do
    # Pods for testing


Ready to install

Run a following command to install

pod install

After this, you can see .xcworkspace file in your directly

Please open this file to start XCode project

That’s all to support CocoaPods

Professional Programmer2