/SideStore

SideStore is a fork of AltStore that doesn't require an AltServer.

Primary LanguageSwiftGNU Affero General Public License v3.0AGPL-3.0

SideStore

SideStore is an untethered, community driven alternative app store for non-jailbroken iOS devices

License: AGPL v3 PRs Welcome Build and Upload SideStore

SideStore is an iOS application that allows you to sideload apps onto your iOS device with just your Apple ID. SideStore resigns apps with your personal development certificate, and then uses a specially designed VPN in order to trick iOS into installing them. SideStore will periodically "refresh" your apps in the background, to keep their normal 7-day development period from expiring.

SideStore's goal is to provide an untethered sideloading experience. It's a community driven fork of AltStore, and has already implemented some of the community's most-requested features.

(Contributions are welcome! 🙂)

Requirements

  • Xcode 14
  • iOS 14+
  • Rustup (brew install rustup)

Why iOS 14? Targeting such a recent version of iOS allows us to accelerate development, especially since not many developers have older devices to test on. This is corrobated by the fact that SwiftUI support is much better, allowing us to transistion to a more modern UI codebase.

Project Overview

SideStore

SideStore is a just regular, sandboxed iOS application. The AltStore app target contains the vast majority of SideStore's functionality, including all the logic for downloading and updating apps through SideStore. SideStore makes heavy use of standard iOS frameworks and technologies most iOS developers are familiar with.

EM Proxy

SideServer mobile powers the defining feature of SideStore: untethered app installation. By levaraging an App Store app with additional entitlements (WireGuard) to create the VPN tunnel for us, it allows SideStore to take advantage of Jitterbug's loopback method without requiring a paid developer account.

Minimuxer

Minimuxer is a lockdown muxer that can run inside iOS’s sandbox. It replicates Apple’s usbmuxd protocol on MacOS to “discover” devices to interface with wireguard On-Device.

Roxas

Roxas is Riley Testut's internal framework from AltStore used across many of their iOS projects, developed to simplify a variety of common tasks used in iOS development.

We're hoping to eventually eliminate our dependency on it, as it increases the amount of unnecessary Objective-C in the project.

Compilation Instructions

SideStore is fairly straightforward to compile and run if you're already an iOS or macOS developer. Here are some basic instructions to get you started:

  1. Clone the repository
    git clone https://github.com/SideStore/SideStore.git --recurse-submodules
    
  2. After installing Rustup, run rustup target add aarch64-apple-ios
  3. Within the Dependencies/em_proxy and Dependencies/minimuxer directories, run cargo build --release --target aarch64-apple-ios
  4. Open AltStore.xcodeproj and select the AltStore project in the project navigator. On the Signing & Capabilities tab, change the team from to your own account.
  5. (Development only) Change the value for ALTDeviceID in the Info.plist to your device's UDID. Normally, SideServer embeds the device's UDID in SideStore's Info.plist during installation. When running through Xcode you'll need to set the value yourself or else SideStore won't resign (or even install) apps for the proper device. You can achieve this by changing a few things to be able to build and use SideStore.
  6. Copy CodeSigning.xcconfig.sample to CodeSigning.xcconfig
  7. Fill out all of the properties in CodeSigning.xcconfig to match your account.
  8. In Shared/Extensions/Bundle+AltStore.swift, replace "group.com.rileytestut.AltStore" with your own App Group ID.
  9. Build + run app! 🎉

Licensing

This project is licensed under the AGPLv3 license.