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.0.1
.
If you experience error in building the project, it's good idea to proceed with cocoapod version 1.0.1
first by doing the following steps
sudo gem uninstall cocoapods
- to uninstall the current version firstsudo gem install cocoapods -v 1.0.1
- to specifically install cocoapods version1.0.1
pod --version
- to check version of current installed cocoapods. It should output1.0.1
.
Perform the following steps to be able to build the project.
-
git submodule update --init
to update git submodule -
pod install
to pull down dependencies into our project -
carthage update
to pull down dependencies intoCarthage/Checkouts
folder and build each one -
If not yet have "YAML.framework" as part of "Linked Frameworks and Libraries" section in "General" tab of Potatso target, then drag and drop
YAML.framework
file fromCarthage/Build/iOS
into it. -
If not yet have "Carthage" run script inside "Build Phases" of Potato target, then click the "+" icon and choose "New Run Script Phase". Create a Run Script with name "Carthage" in which has
bin/sh
as shell with following content/usr/local/bin/carthage copy-frameworks
and add the paths to added framework under "Input Files" as follows
$(SRCROOT)/Carthage/Build/iOS/YAML.framework
-
Search for
io.wasin.potatso
for project-wide, and replace it with your own domain name. This is necessary as you need to create your own provisioning profile as it uses your domain name. -
Open file
CallbackURLKit.swift
by hitting cmd+shift+o then enter the name of file. Add @escaping in front of all function signature parameters inActionHandler
defined at the top of the file. Make it as followspublic typealias ActionHandler = (Parameters, @escaping SuccessCallback, @escaping FailureCallback, @escaping CancelCallback) -> Void
-
Build the project. Done.
Note that it's better to not allow Xcode to automatically manage yoru 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
. Make sure to name bundle id for each one matches the ones that use in code. 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.
-
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 doens't 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? }
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/.