This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
zhangyang-libzt/docs/ios_zt_sdk.md

60 lines
2.2 KiB
Markdown
Raw Normal View History

2016-06-14 16:01:19 -07:00
iOS + ZeroTier SDK
====
Welcome!
Imagine a flat, encrypted, no-configuration LAN for all of the instances of your iOS app.
2016-07-18 17:34:18 -07:00
This short tutorial will show you how to enable ZeroTier functionality for your iOS app with little to no code modification. Check out our [ZeroTier SDK](https://www.zerotier.com/blog) page for more info on how the integration works.
2016-06-14 16:01:19 -07:00
2016-07-14 08:40:40 -07:00
***
**Step 1: Build iOS framework**
2016-06-14 16:01:19 -07:00
2016-07-14 08:40:40 -07:00
- `make ios_app_framework`
- This will output to `build/ios_app_framework/Release-iphoneos/ZeroTierSDK_iOS.framework`
2016-06-14 16:01:19 -07:00
2016-07-14 08:40:40 -07:00
**Step 2: Integrate SDK into project**
2016-06-14 16:01:19 -07:00
2016-07-14 08:40:40 -07:00
- Add the resultant framework package to your project
- Add `src` directory to *Build Settings -> Header Search Paths*
2016-07-14 08:40:40 -07:00
- Add `build/ios_app_framework/Release-iphoneos/` to *Build Settings -> Framework Search Paths*
- Add `ZeroTierSDK.frameworkiOS` to *General->Embedded Binaries*
2016-09-09 12:02:27 -07:00
- Add `src/ZTSDK.swift`, `src/SDK_XcodeWrapper.cpp` and `src/SDK_XcodeWrapper.hpp` to your project:
- Set `src/SDK_Apple-Bridging-Header.h` as your bridging-header in *Build Settings -> Objective-C Bridging-header*
2016-06-14 16:01:19 -07:00
2016-07-14 08:40:40 -07:00
**Step 3: Start the ZeroTier service**
2016-06-14 16:01:19 -07:00
2016-07-14 08:40:40 -07:00
Now find a place in your code to set up the ZeroTier service thread:
2016-06-14 16:01:19 -07:00
2016-09-09 12:02:27 -07:00
`Start the service:
2016-06-14 16:01:19 -07:00
```
2016-09-09 12:02:27 -07:00
zt.start_service(nil);
zt.join_network(nwid);
2016-06-14 16:01:19 -07:00
```
2016-09-09 12:02:27 -07:00
Listen for incoming connections:
2016-06-14 16:01:19 -07:00
```
2016-09-09 12:02:27 -07:00
let sock: Int32 = zt.socket(AF_INET, SOCK_STREAM, 0)
let ztaddr: ZTAddress = ZTAddress(AF_INET, serverAddr, Int16(serverPort))
let bind_err = zt.bind(sock, ztaddr)
zt_listen(sock, 1);
accepted_sock = zt.accept(sock, ztaddr)
```
Or, establish a connection:
```
let sock: Int32 = zt.socket(AF_INET, SOCK_STREAM, 0)
let ztaddr: ZTAddress = ZTAddress(AF_INET, serverAddr, Int16(serverPort))
let connect_err = zt.connect(sock, ztaddr)
2016-06-14 16:01:19 -07:00
```
2016-07-14 08:40:40 -07:00
**Step 4: Pick an API**
2016-06-14 16:01:19 -07:00
2016-07-18 18:27:23 -07:00
The following APIs are available for this integration:
2016-07-18 18:13:53 -07:00
- `Direct Call`: Consult [src/SDK_Apple-Bridging-Header.h](../../../../src/SDK_Apple-Bridging-Header.h).
- `Hook of BSD-like sockets`: Use BSD-like sockets as you normally would. This likely won't work for calls used by a third-party library.
2016-09-09 12:02:27 -07:00
- `Proxy of NSStream`: Create NSStream. Configure stream for SOCKS5 Proxy (127.0.0.1:PORT). Start Proxy. Use stream. An example of how to use the proxy can be found in the example iOS/OSX projects.