diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..d28050e
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,38 @@
+cmake_minimum_required(VERSION 3.15.1)
+
+project(AltKit LANGUAGES C Swift)
+
+add_library(CAltKit
+ Sources/CAltKit/NSError+ALTServerError.h
+ Sources/CAltKit/NSError+ALTServerError.m
+)
+
+add_library(AltKit
+ Sources/AltKit/Extensions/ALTServerError+Conveniences.swift
+ Sources/AltKit/Extensions/Result+Conveniences.swift
+
+ Sources/AltKit/Server/Connection.swift
+ Sources/AltKit/Server/NetworkConnection.swift
+ Sources/AltKit/Server/Server.swift
+ Sources/AltKit/Server/ServerConnection.swift
+ Sources/AltKit/Server/ServerManager.swift
+ Sources/AltKit/Server/ServerProtocol.swift
+
+ Sources/AltKit/Types/CodableServerError.swift
+)
+
+target_link_libraries(AltKit PRIVATE CAltKit)
+
+set_property(TARGET AltKit PROPERTY XCODE_ATTRIBUTE_SWIFT_VERSION "5.0")
+
+# Make CAltKit's modulemap available to AltKit
+set_property(TARGET AltKit PROPERTY XCODE_ATTRIBUTE_SWIFT_INCLUDE_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/Sources/CAltKit")
+
+# Add binary dir to interface include path to make Swift header accessible to targets using AltKit
+target_include_directories(AltKit INTERFACE ${CMAKE_CURRENT_BINARY_DIR})
+
+# Copy generated Swift header to binary dir
+add_custom_command(TARGET AltKit
+ POST_BUILD
+ COMMAND cp $DERIVED_SOURCES_DIR/AltKit-Swift.h ${CMAKE_CURRENT_BINARY_DIR}
+)
diff --git a/README.md b/README.md
index a94c2c2..6344989 100644
--- a/README.md
+++ b/README.md
@@ -27,6 +27,21 @@ Finally, right-click on your app's `Info.plist`, select "Open As > Source Code",
[Your app] uses the local network to find and communicate with AltServer.
```
+### CMake Integration
+
+Note: CMake 3.15 is required for the integration. The integration only works with the Xcode generator.
+
+Steps:
+- Add the AltKit CMake project to your CMake project using `add_subdirectory`.
+- Add Swift to your project's supported languages. (ex.: `project(projName LANGUAGES C Swift)`)
+
+If you're using `add_compile_options` or `target_compile_options` and the Swift compiler complains about the option not being supported, it's possible to use CMake's generator expressions to limit the options to non-Swift source files.
+
+Example:
+```
+add_compile_options($<$>:-fPIC>)
+```
+
## Usage
### Swift
diff --git a/Sources/CAltKit/module.modulemap b/Sources/CAltKit/module.modulemap
new file mode 100644
index 0000000..e52c084
--- /dev/null
+++ b/Sources/CAltKit/module.modulemap
@@ -0,0 +1,4 @@
+module CAltKit {
+ umbrella "./include"
+ export *
+}