Code Monkey home page Code Monkey logo

sidestore's Introduction

SideStore

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

License: AGPL v3 PRs Welcome Nightly SideStore build .github/workflows/beta.yml Discord

Alt

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.

Contributing/Compilation Instructions

Please see CONTRIBUTING.md

Licensing

This project is licensed under the AGPLv3 license.

sidestore's People

Contributors

bogotesr avatar bogsen avatar ccheever avatar coliff avatar ds8k avatar f1shy-dev avatar fabianthdev avatar jawshoeadan avatar jjtech0130 avatar jkcoxson avatar joematt avatar junepark678 avatar litritt avatar lonkelle avatar naturecodevoid avatar noah978 avatar nythepegasus avatar oq-x avatar osy avatar osy86 avatar rileytestut avatar shanegillio avatar soy0ung avatar spidy123222 avatar sternxd avatar stossy11 avatar tbodt avatar wesleybryie avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sidestore's Issues

Sideloading big apps don’t work.

Currently when you sideload big apps like retroarch without modifying currently never finishes. AltStore has this issue before but I do see people want that fixed for big apps like it.

Change default anisette server (Sideloadly may lock accounts)

this may seem a bit stupid at first but what i have found out is that sideloadly's anisette server has been overflowed with so many devices that ANYONE who tries to connect to it and use it WILL get locked out of their apple id RIGHT AWAY i was able to get my apple id back though PLEASE add a warning or remove sideloadly as the default server thanks

Refactor error handling in LaunchVC

These checks should be done sooner and an error view should show if data is missing or proxy bind fails

    override func viewDidLoad()
    {
        super.viewDidLoad()
        start_em_proxy(bind_addr: "127.0.0.1:51820")
        
        guard let pf = Bundle.main.object(forInfoDictionaryKey: "ALTPairingFile") as? String else {
            print("Error: Nil ALTPairingFile")
            return
        }
        set_usbmuxd_socket()
        start_minimuxer(pairing_file: pf)
        auto_mount_dev_image()
        
        // Create destinationViewController now so view controllers can register for receiving Notifications.
        self.destinationViewController = self.storyboard!.instantiateViewController(withIdentifier: "tabBarController") as! TabBarController
    }

Is this ready for use?

This looks really cool! I'm wondering if it is remotely ready for use as an alternative to AltStore?

Provision based anisette servers don't work

Currently any anisette data server that is ran using Provision doesn't work. Ones that use Altserver Linux's container anisette server which uses windows iCloud under wine works fine.

Expose UI for setting `customAnisetteURL` in settings

From Jawshoeadan on Discord:

So the only thing we need for settings, is a text box that sets the userdefaults key "customAnisetteURL" to the url entered. preferably it would also check for https:// and make sure it's a valid url before saving, but I could add the checking stuff to the backend

Prebuilt ipa needed

I know this is still beta. But for the people using non-macOS, can you please build with newest repo? I found some old one in issues tab and that won't open in IOS 16 for me

ALTDeviceID in Xcode as variable

(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.

This is confusing for people less experienced with Xcode, as Info.plist is generated at build time and does not show up in the editor. Instead, you must edit the property in AltStore -> Targets -> AltStore -> Info -> Custom iOS Target Properties.

I would have just PR'd a change in the README, but I wondered if another solution might be preferable, such as adding the property to CodeSigning.xcconfig or somewhere else more visible.

App list goes missing after first refresh.

Currently there seems to be a bug on after you install sidestore for the first time and sideloaded apps without refreshing sidestore. The list of apps disappears on the app during a refresh. Resideloading the apps sideloaded works but it's odd that behavior happens.

App id's list is missing

The list that is normally at bottom of my apps for looking at my appid's is missing in beta mode.
image

image

No auto jit activator.

Currently it seems there is no method of an automatic jit activation method like altkit or jitstreamer attach. We could maybe implement jitstreamer attach but I think one modified into altkit would be better rollout as joelle mentioned they could do that.

Bypass 10 App ID limit for free ADP members by using "Universal" App IDs

Related
While working on this, consider switching to Apple ID suffixes rather than Team ID for reasons explained here: ENHANCEMENT: Change AltStore’s app ID suffix to "AppleID.TeamID" instead of just TeamID to allow for seamless paid dev team switching *on device*

Premise
Using "Universal App IDs" that will essentially eliminate the issue caused by the 10 App ID limit.

Limitations to this per IPA could be specified in the JSON source (as those are developer-maintained) given not all IPAs can have their ID changed and still function properly. For those, AltStore can sign them using a universal App ID and install them with whatever the Bundle ID needs to be.

Reference

(Patron Discord)

From Trello: https://trello.com/c/wayqgqSe

Remove unnecessarily copied files from build

Screen Shot 2022-09-15 at 11 44 48 PM

Not too hard to do, although I'm not sure what is needed and what isn't. To solve, go to build phases and delete all of the files in the copy files section. Just adding this issue as a part of our to-do list

Use Shortcut to extend SideStore execution time

This was mentioned in discord by joelle and essentially uses shortcut to extend the life of sidestore. Using Sidestore to create a sound and shortcut reacting to it and extending execution time could make it last 100% time on device. This requires experimentation to fool the detection system ios uses to trigger this process.

SideStore will not complete installation with public JITStreamer

SideStore will stall with the progress bar mostly completed, right after Successfully sent app data (XXXXXXXX bytes), and the server never actually installs the app on the device.

This issue only occurs when using the JITStreamer server, a local instance of SideServer works fine.

Allow importing/exporting certificate(s) / provisioning profile(s)

Note
When the Harmony Sync card is done - sure to Harmony sync these files across devices and for org accounts, allow them to share their cert with their other Org members.

Import
Setting's Tab in Login Info Section: "Replace Apple ID with imported certificate..."
• .p12 file opens in AltStore.
• AltStore asks for .p12 password (and optionally a .mobileprovision file)
Note: Indicate that the user is using an external cert in the login info section of the Setting tab after import.

Export
AltStore / AltServer should be able to export it's .p12, .p12 password (device UUID / machine ID), and the .mobileprovision file.

From https://trello.com/c/O5dNR1fW

Default enabled trusted sources

This would make it so you can have default trusted sources so users can remove trusted sources if they don't want it. If it's not in List the user can add their own. This would make sidestore more like an actual AppStore than it be a proxy to add apps. This would eliminate needing to update the built in app list without possible risk of crashing from what I'm told.

Refreshing display 6 days

When you refresh via side store it says it has 6 days left when refreshing yourself at 5-6 day marks or below when it should be 7 like AltStore has.

image

This also includes appid's

Provide a pre-built IPA

This could be an extension of #22, providing build artifacts for every commit.
Not everybody has Xcode (Windows/Linux users), and it's very finicky and often refuses to cooperate and provide a viable artifact.

beta mode

Seems like whenever beta mode enables randomly after compiling it causes issues with the app like the appids button disappears. Sometimes sources seems affected too like if something is being changed.

Collaboration offer

Hi!

I'm ZonD80, I have a proposal for sidestore development, and I can make server side of it (in case if you will accept this), If you are interested, how can I contact you on telegram or any other messenger (I'm @ZonD80 everywhere)

Btw your email github@sidestore is not working, that's why it is here

Refactor consts

Find all the urls and Riley ids and refactor to a data manager or const structs

Im confused

Im confused because i dont speak code, if you can please make some sort of simplified tutorial for non developers

I get a error when trying to build Sidestore using the instructions in readme.md

Build input file cannot be found: '/Users/***/Documents/SideStore/Dependencies/em_proxy/em_proxy.h'. Did you forget to declare this file as an output of a script phase or custom build rule which produces it? (in target 'EmotionalDamage' from project
'AltStore')

SwiftDriver\ Compilation\ Requirements EmotionalDamage normal x86_64 com.apple.xcode.tools.swift.compiler (in target 'EmotionalDamage' from project 'AltStore')
cd /Users//Documents/SideStore
builtin-Swift-Compilation-Requirements -- /Applications/Dev\ Tools/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc -module-name EmotionalDamage -Onone -enforce-exclusivity=checked @/Users/
/Library/Developer/Xcode/DerivedData/AltStore-erhphkamnhsnvjafidkrxadqufph/Build/Intermediates.noindex/AltStore.build/Debug-iphonesimulator/EmotionalDamage.build/Objects-normal/x86_64/EmotionalDamage.SwiftFileList -DDEBUG -sdk /Applications/Dev\ Tools/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator16.1.sdk -target x86_64-apple-ios14.0-simulator -enable-bare-slash-regex -g -module-cache-path /Users//Library/Developer/Xcode/DerivedData/ModuleCache.noindex -Xfrontend -serialize-debugging-options -enable-testing -index-store-path /Users//Library/Developer/Xcode/DerivedData/AltStore-erhphkamnhsnvjafidkrxadqufph/Index.noindex/DataStore -swift-version 5 -I /Users//Library/Developer/Xcode/DerivedData/AltStore-erhphkamnhsnvjafidkrxadqufph/Build/Products/Debug-iphonesimulator -F /Users//Library/Developer/Xcode/DerivedData/AltStore-erhphkamnhsnvjafidkrxadqufph/Build/Products/Debug-iphonesimulator -parse-as-library -c -j6 -enable-batch-mode -incremental -output-file-map /Users//Library/Developer/Xcode/DerivedData/AltStore-erhphkamnhsnvjafidkrxadqufph/Build/Intermediates.noindex/AltStore.build/Debug-iphonesimulator/EmotionalDamage.build/Objects-normal/x86_64/EmotionalDamage-OutputFileMap.json -use-frontend-parseable-output -save-temps -no-color-diagnostics -serialize-diagnostics -emit-dependencies -emit-module -emit-module-path /Users//Library/Developer/Xcode/DerivedData/AltStore-erhphkamnhsnvjafidkrxadqufph/Build/Intermediates.noindex/AltStore.build/Debug-iphonesimulator/EmotionalDamage.build/Objects-normal/x86_64/EmotionalDamage.swiftmodule -Xcc -I/Users//Library/Developer/Xcode/DerivedData/AltStore-erhphkamnhsnvjafidkrxadqufph/Build/Intermediates.noindex/AltStore.build/Debug-iphonesimulator/EmotionalDamage.build/swift-overrides.hmap -Xcc -iquote -Xcc /Users//Library/Developer/Xcode/DerivedData/AltStore-erhphkamnhsnvjafidkrxadqufph/Build/Intermediates.noindex/AltStore.build/Debug-iphonesimulator/EmotionalDamage.build/EmotionalDamage-generated-files.hmap -Xcc -I/Users//Library/Developer/Xcode/DerivedData/AltStore-erhphkamnhsnvjafidkrxadqufph/Build/Intermediates.noindex/AltStore.build/Debug-iphonesimulator/EmotionalDamage.build/EmotionalDamage-own-target-headers.hmap -Xcc -I/Users//Library/Developer/Xcode/DerivedData/AltStore-erhphkamnhsnvjafidkrxadqufph/Build/Intermediates.noindex/AltStore.build/Debug-iphonesimulator/EmotionalDamage.build/EmotionalDamage-all-non-framework-target-headers.hmap -Xcc -ivfsoverlay -Xcc /Users//Library/Developer/Xcode/DerivedData/AltStore-erhphkamnhsnvjafidkrxadqufph/Build/Intermediates.noindex/AltStore.build/Debug-iphonesimulator/EmotionalDamage.build/all-product-headers.yaml -Xcc -iquote -Xcc /Users//Library/Developer/Xcode/DerivedData/AltStore-erhphkamnhsnvjafidkrxadqufph/Build/Intermediates.noindex/AltStore.build/Debug-iphonesimulator/EmotionalDamage.build/EmotionalDamage-project-headers.hmap -Xcc -I/Users//Library/Developer/Xcode/DerivedData/AltStore-erhphkamnhsnvjafidkrxadqufph/Build/Products/Debug-iphonesimulator/include -Xcc -isystem -Xcc /Users//Documents/SideStore/Dependencies/AltSign/Dependencies -Xcc -I/Users//Library/Developer/Xcode/DerivedData/AltStore-erhphkamnhsnvjafidkrxadqufph/Build/Intermediates.noindex/AltStore.build/Debug-iphonesimulator/EmotionalDamage.build/DerivedSources-normal/x86_64 -Xcc -I/Users//Library/Developer/Xcode/DerivedData/AltStore-erhphkamnhsnvjafidkrxadqufph/Build/Intermediates.noindex/AltStore.build/Debug-iphonesimulator/EmotionalDamage.build/DerivedSources/x86_64 -Xcc -I/Users//Library/Developer/Xcode/DerivedData/AltStore-erhphkamnhsnvjafidkrxadqufph/Build/Intermediates.noindex/AltStore.build/Debug-iphonesimulator/EmotionalDamage.build/DerivedSources -Xcc -DDEBUG=1 -emit-objc-header -emit-objc-header-path /Users//Library/Developer/Xcode/DerivedData/AltStore-erhphkamnhsnvjafidkrxadqufph/Build/Intermediates.noindex/AltStore.build/Debug-iphonesimulator/EmotionalDamage.build/Objects-normal/x86_64/EmotionalDamage-Swift.h -import-objc-header /Users//Documents/SideStore/Dependencies/em_proxy/em_proxy.h -pch-output-dir /Users//Library/Developer/Xcode/DerivedData/AltStore-erhphkamnhsnvjafidkrxadqufph/Build/Intermediates.noindex/PrecompiledHeaders -working-directory /Users/***/Documents/SideStore -experimental-emit-module-separately

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.