Potatso is an iOS client that implements custom proxies with the leverage of Network Extension framework introduced by Apple since iOS 9.
Currently, Potatso is compatible with following proxies:
Subscribe Telegram Channel to get updates of Potatso.
Join Telegram Group to chat with users.
Author: icodesign
Potatso has in total 31 dependencies as following
- 28 Cocoapod dependencies
- 1 Carthage dependency
- 2 submodules dependencies
The project is tested with Xcode 8.2 (8C38) on iOS 10.2 (14C92) device with cocoapod version 1.1.1
.
Perform the following steps to be able to build the project.
Be warned that you should not call pod update
as newer version of pod frameworks that Potatso depends on might break building process and there will be errors.
git submodule update --init
to update git submodulepod install
to pull down dependencies into our projectcarthage update
to pull down dependencies intoCarthage/Checkouts
folder and build each one- Open Xcode workspace project (
Potatso.xcworkspace
).- Click on Potatso project, then click on
General
tap. - Click on
Potatso
target at Targets section. - Change its
Bundle Identifier
to match with your desire domain name for examplecom.yourdomain.potatso
. - For the following targets, you change
io.wasin.potatso
to match your domain name. This means if you seeio.wasin.potatso.tunnel
, you change it tocom.yourdomain.potatso.tunnel
.PacketTunnel
TodayWidget
PotatsoLibrary
PacketProcessor
PotatsoModel
PotatsoBase
- Click on Potatso project, then click on
- Follow the guide in Set up Guide - Apple Developer Website section.
- Build and Run the project. Done.
Note that it's better to not allow Xcode to automatically manage your provisioning profile for the application included Potatso (main app), PacketTunnel (extension), and TodayWidget (extension). Most of the time, such provisioning profile won't generate on developer page, or point to generic one which makes it not working!.
So follow the following steps
-
Create 3 App IDs for
Potatso
,PacketTunnel
, andTodayWidget
on Apple Developer website. Make sure to name bundle id for each one matches bundle identifier you used when setting up with Xcode. In this caseio.wasin.potatso
,io.wasin.potatso.tunnel
, andio.wasin.potatso.todaywidget
respectively. Rename to be your domain name freely.Potatso
EnableApp Groups
,Game Center
,iCloud
,In-App Purchase
,Network Extensions
, andPush Notifications
.PacketTunnel
EnableApp Groups
,Game Center
,In-App Purchase
, andNetwork Extensions
.TodayWidget
EnableApp Groups
,Game Center
,In-App Purchase
, andNetwork Extensions
.
-
Create 3 corresponding provisioning profile for each created App ID on Apple Developer website.
-
Now go back to Xcode
-
Click on project -> click on General tap -> select
Potatso
target and uncheck "Automatically manage signing" -> select a proper provisioning profile in both "Signing (Debug)" and "Signing (Release)". -
Do the same for
PacketTunnel
andTodayWidget
target.
There're a couple of issues that needed to look at, but at tested, it doen not effect the functionality of the app.
-
In file
Potatso/Core/API.swift
, it's the following code focusing on line with comment that I can't figure it out yet how to migrate it to Swift 3 code.var JSONToMap: AnyObject? if let keyPath = keyPath, keyPath.isEmpty == false { //JSONToMap = (result.value? as AnyObject).value(forKeyPath: keyPath) JSONToMap = nil } else { JSONToMap = result.value as AnyObject? }
-
Potatso core code depends on version
1.7.0
of Eureka with manual migration to Swift 3. It's already done and linked to project. But you will seeobserveValue()
function inEureka/Source/Rows/PostalAddressRow.swift
that has been commented for all of its function code due to Eureka's newer version2.0.0-beta.1
doesn't include such file in the project anymore, but it still works with no problem. This note is meant to mark that there is going to be a lot of effort if we decide to depend on Eureka version2.0.0-beta.1
as we need to change a lot of Potatso core code.
Clone the project, make some changes or add a new feature, then make a pull request.
The development covers a lot of complicated work, costing not only money but also time.
There're two ways you can support us:
-
Download Potatso from Apple Store. (Recommended)
-
Donate with Alipay. (Account: [email protected])
We use the following services or open-source libraries. So we'd like show them highest respect and thank for bringing those great projects:
Services:
Open-source Libraries:
- KissXML
- MMWormhole
- CocoaAsyncSocket
- Cartography
- AsyncSwift
- Appirater
- Eureka
- MBProgressHUD
- CallbackURLKit
- ISO8601DateFormatter
- Alamofire
- ObjectMapper
- CocoaLumberjack
- AlamofireObjectMapper
- YAML.framework
- tun2socks-iOS
- shadowsocks-libev
- Antinat
- Privoxy
Also we'd like to thank people that helped with the project:
or donated us:
And also thank all TestFlight Users and Telegram Group Users.
Thanks again!
You can't submit the app to App Store.
To be compatible with those libraries using GPL, we're distributing with GPLv3 license.
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.