{"id":19922322,"url":"https://github.com/akemin-dayo/appsync","last_synced_at":"2025-05-14T18:05:50.796Z","repository":{"id":17138786,"uuid":"19905299","full_name":"akemin-dayo/AppSync","owner":"akemin-dayo","description":"Unified AppSync dynamic library for iOS 5 and above.","archived":false,"fork":false,"pushed_at":"2025-01-20T02:52:31.000Z","size":289,"stargazers_count":1163,"open_issues_count":26,"forks_count":202,"subscribers_count":64,"default_branch":"master","last_synced_at":"2025-04-13T13:16:50.103Z","etag":null,"topics":["ios","jailbreak","objective-c"],"latest_commit_sha":null,"homepage":"https://cydia.akemi.ai/?page/ai.akemi.appsyncunified","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":"Unmaintained","scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/akemin-dayo.png","metadata":{"files":{"readme":"README.md","changelog":"changelog-inline.html","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2014-05-18T07:28:57.000Z","updated_at":"2025-04-12T04:50:48.000Z","dependencies_parsed_at":"2024-12-06T06:00:49.756Z","dependency_job_id":"b6c1bae9-270a-46bd-aeeb-631de2bbb37a","html_url":"https://github.com/akemin-dayo/AppSync","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akemin-dayo%2FAppSync","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akemin-dayo%2FAppSync/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akemin-dayo%2FAppSync/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akemin-dayo%2FAppSync/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/akemin-dayo","download_url":"https://codeload.github.com/akemin-dayo/AppSync/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254198514,"owners_count":22030965,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ios","jailbreak","objective-c"],"created_at":"2024-11-12T22:10:35.692Z","updated_at":"2025-05-14T18:05:45.781Z","avatar_url":"https://github.com/akemin-dayo.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AppSync Unified\n###### Unified AppSync dynamic library for iOS 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, and 18.\n\n## What is AppSync Unified?\n\nAppSync Unified is a tweak that allows users to freely install ad-hoc signed, fakesigned, unsigned, or expired IPA app packages on their iOS devices that iOS would otherwise consider invalid.\n\nSome popular use cases include:\n\n* Installing freely-distributed apps that are unavailable from the App Store without having to re-sign the apps in question every 7 days (if the user does not have a subscription to the Apple Developer Program)\n* Assisting in the development of iOS applications with Xcode\n* Cloning or downgrading already-installed apps\n\n---\n\n## How do I install AppSync Unified on my jailbroken iOS device?\n\nAppSync Unified is available from **Karen/あけみ's Repo: https://cydia.akemi.ai/** ([Tap here on your device to automatically add the repo!](https://cydia.akemi.ai/add.php))\n\nIf you do not see AppSync Unified listed in Karen/あけみ's Repo, then that just means you have another repository added that is also hosting a copy of AppSync Unified under the same package ID.\n\n**_Please_ only ever install the official, unmodified release from Karen/あけみ's Repo for your own safety, and to ensure proper operation!** Third-party modified versions from other repositories can and _have_ broken various users' iOS installations in the past.\n\nBy installing third-party modified versions of _any system tweak_ like AppSync Unified, you are putting the security and stability of your iOS device and your personal data at risk.\n\n---\n\n## Help! I installed AppSync Unified, but it doesn't seem to be working after I resprung from Cydia/Zebra/Sileo/etc.!\n\nIf AppSync Unified is not working after installation, please reboot your device or perform a userspace reboot (`launchctl reboot userspace`, `ldrestart`, etc.) to activate it. You will only need to do this ONCE.\n\nThis issue appears to be caused by what …seems like a Cydia Substrate/Substitute bug(?) that's resurfaced from years ago, and occurs _really_ rarely, so it's an absolute nightmare of a bug. It's especially frustrating for me since I'm such a perfectionist when it comes to software development, too ww (🍍˃̶͈̀ロ˂̶͈́)੭ꠥ⁾⁾\n\n**For the curious developers among you:** AppSync Unified's `postinst` binary (see [pkg-actions.m](pkg-actions/pkg-actions.m)) restarts `installd` via `launchctl` — for some reason though, it seems like Cydia Substrate and/or Substitute doesn't always inject the dylib properly into `installd` when it is reloaded via `launchctl` in this way.\n\nI tried _really_ hard to determine the cause of this, but I really have no idea what could be causing this. The dylib has _long_ since been written to the filesystem by the time `postinst` was _executed_, let alone when `launchctl` was even called by `posix_spawn`.\n\nI guess for now, all I can do is inform people about the bug and how to resolve it. ⊂⌒~⊃｡Д｡🍍)⊃\n\nHopefully I'll be able to properly resolve this in time.\n\n---\n\n## Regarding piracy…\n\n**Please do NOT use AppSync Unified for piracy.**\n\nAppSync Unified is a development tool designed for app developers first and foremost, alongside other valid legal uses that I support — a few of which are outlined above.\n\n**Software piracy is illegal.** Please support the developers of the iOS software you use, whether they be app developers on the App Store or tweak developers on Chariz/Dynastic/etc.\n\nThey're just trying to make a living too, much like you and I.\n\n---\n\n## How do I build AppSync Unified?\n\nFirst, make sure you have [Theos](https://github.com/theos/theos) installed. If you don't, [please refer to the official documentation](https://theos.dev/docs/installation) on how to set up Theos on your operating system of choice.\n\nOnce you've confirmed that you have Theos installed, open up Terminal and run the following commands:\n\n```shell\ngit clone https://github.com/akemin-dayo/AppSync.git\ncd AppSync/\nmake\nmake package\n```\n\nAnd you should have a freshly built *.deb package file of AppSync Unified!\n\n---\n\n## Do I need to do anything in order to use Xcode with AppSync Unified?\n\nNo, not unless you're using Xcode 6 or below.\n\nAs long as you're using a … _reasonably_ modern version of Xcode (7 or above, really), just use Xcode with your iOS device as you would normally!\n\nThat being said, if for some reason you _are_ using Xcode 6 or below, please follow this old tutorial I wrote up all the way back in 2014: [Tutorial: How to use AppSync Unified for development with Xcode 6 or below](https://akemi.ai/?page/how2asu)\n\n---\n\n## I'm a developer — do you have a rough high-level explanation as to how this all works?\n\nAs of AppSync Unified 90.0, ASU is split into two separate dynamic libraries — `AppSyncUnified-installd` and `AppSyncUnified-FrontBoard`.\n\n### `AppSyncUnified-installd`\n\n`AppSyncUnified-installd` injects into — you guessed it — `installd`, which is where the vast majority of ASU's functionality resides in.\n\nAppSync Unified utilises Cydia Substrate's dynamic hooking function `MSHookFunction()` (which is also shimmed appropriately for systems that use Substitute as their code injection platform instead) to bypass `installd`'s signature checks. For iOS 13 and below, the main function being modified is `MISValidateSignatureAndCopyInfo()`, while on iOS 14 and above, it is `MISValidateSignatureAndCopyInfoWithProgress()`.\n\nUsing `MSFindSymbol()`, AppSync Unified determines which function is present on the system it's currently running on and appropriately hooks the correct one.\n\nWhen iOS makes a request to install an app, one of the two functions mentioned above will be called, and AppSync Unified's injected `ASU_MISValidateSignatureAndCopyInfo()` function will take over.\n\nIf the app in question has valid signing information, AppSync Unified will not make any modifications to it, and simply pass the information along to the original Apple-implemented function, letting the app installation process carry on as if the system was not modified at all.\n\nOn the other hand, if the app contains invalid signing information, AppSync Unified will generate the appropriate signing information required and pass it along to the system. As of AppSync Unified 90.0, this process also includes code directory hash value (`cdhash`) computation.\n\nAppSync Unified also hooks two other functions — `SecCertificateCreateWithData()` and `SecCertificateCopySubjectSummary()`. The modifications work in pretty much the same way as above — if the original certificate is valid, don't touch anything at all. If it isn't valid, then just… present a valid certificate to iOS.\n\n### `AppSyncUnified-FrontBoard`\n\nAppSync Unified 90.0 introduced a second dynamic library that injects into the `FrontBoard` and `FrontBoardServices` private frameworks. This is done in order to bypass a set of signature verifications that are performed at app runtime, generally used for timed app expirations.\n\nThat being said, the modifications are actually… incredibly simple.\n\nOn iOS 9.3.x to iOS 13, AppSync Unified hooks the Objective-C methods `-(NSUInteger) trustStateWithTrustRequiredReasons:(NSUInteger *)reasons` and `-(NSUInteger) trustState` found in the class `FBApplicationTrustData`, and forces both methods to always return the value used to signal to iOS that the app that the user is attempting to launch is valid and trusted.\n\nOn iOS 14 and above, it's… basically the same thing, but targetting a different method — `-(NSUInteger) trustStateForApplication:(id)application` found in the class `FBSSignatureValidationService` — since Apple moved the relevant functionality from `FrontBoard` to `FrontBoardServices`.\n\n…\n\nAnd that's about it! This explanation is obviously _incredibly_ simplified (the best explanation is just to read the code!), but hopefully it gives you a grasp on how everything works. c:\n\n---\n\n## License\n\nLicensed under [GPLv3](http://www.gnu.org/copyleft/gpl.html).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakemin-dayo%2Fappsync","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fakemin-dayo%2Fappsync","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakemin-dayo%2Fappsync/lists"}