# Cross-compile for iOS and POSIX platforms

**URL:** https://discourse.cmake.org/t/cross-compile-for-ios-and-posix-platforms/11491
**Category:** Usage
**Created:** [August 20, 2024, 5:38pm UTC](https://discourse.cmake.org/t/cross-compile-for-ios-and-posix-platforms/11491 "2024-08-20T17:38:21Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![Viktor\_Nagy](https://discourse.cmake.org/user_avatar/discourse.cmake.org/viktor_nagy/32/4866_2.png) [@Viktor\_Nagy](https://discourse.cmake.org/u/Viktor_Nagy)
#### Post date: [August 20, 2024, 5:38pm UTC](https://discourse.cmake.org/t/cross-compile-for-ios-and-posix-platforms/11491/1 "2024-08-20T17:38:21Z")

</div>

Hello everyone!

I am about to build a simple 2 file test c++ library and than use it as a Cocoa Pod. The library does some basic logging.

I am struggling to find the right resources to what and how should I approach this problem. I am confused whether I should build a framework or build always from source.

I would be really really grateful if you could give me some advice or some examples what should I check or read. Also this might be also helpful for others. My end goal would be to create a library for general utilities for applications. For example, I would like to use a thirdparty HTTP client in C++ and link it with CMake using FetchContent. I know there are libraries that cannot be built for iOS, but lets assume that I want to link such a library.

So the general idea would be to have a library that holds some public APIs that I can import in Swift, ObjC or Java. Those APIs are defined by me, something like ApplicationUtils.postRequest, but that uses under the hood some other C++ library that is being linked by CMake.

What I do:

- Build the framework with the following command and it gives me the framework as expected:

```bash
cmake -B build -G Xcode -DCMAKE_TOOLCHAIN_FILE=./toolchain/ios.toolchain.cmake -DPLATFORM=SIMULATORARM64
cmake --build build --config Release

```

- In an example application I install the pod by its path, but when building the application the module cannot be found in a Swift file.

The file structure looks like this:

build/  
— MyFramework.framework  
include/  
— MyClass.hpp  
— module.modulemap  
src/  
— MyClass.cpp  
CMakeLists.txt  
MyFramework.podspec

The CMake file looks like this:

```CMake
CMAKE_MINIMUM_REQUIRED(VERSION 3.15)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

PROJECT(MyFramework)

set(SOURCES
  src/MyClass.cpp
)

set(HEADERS
  include/MyClass.hpp
  include/module.modulemap
)

add_library(MyFramework STATIC ${HEADERS} ${SOURCES})

target_include_directories(MyFramework
    PUBLIC
        ${CMAKE_CURRENT_SOURCE_DIR}/include
    PRIVATE
        ${CMAKE_CURRENT_SOURCE_DIR}/src
)

set_target_properties(MyFramework PROPERTIES
  FRAMEWORK TRUE
  VERSION 1.0.0
  SOVERSION 1.0.0
  PUBLIC_HEADER "${HEADERS}"
  FRAMEWORK_VERSION A
  XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET 13.0
  XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT "dwarf-with-dsym"
)

```

The podspec looks like this:

```ruby
Pod::Spec.new do |s|
  s.name = "MyFramework"
  s.version = "1.0.0"
  s.summary = "Core"
  s.homepage = "Core"
  s.license = "MIT"
  s.authors = "Author"
  s.source = { :git => 'https://example.com/MyFramework.git', :tag => s.version.to_s }

  s.platform = :ios, '13.0'

  s.module_map = 'include/module.modulemap'

  s.vendored_frameworks = 'build/MyFramework.framework'
  s.public_header_files = 'build/MyFramework.framework/Headers/*'
  s.source_files = 'build/MyFramework.framework/Headers/*'

  s.libraries = 'c++'

end

```

Thank you in advance!
