mirror of
https://github.com/SideStore/SideStore.git
synced 2026-04-08 03:35:40 +02:00
Compare commits
66 Commits
feature/Wi
...
feature/Da
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e9d3060df7 | ||
|
|
c59043068e | ||
|
|
65c43d683c | ||
|
|
9e6147c860 | ||
|
|
b3074cadf9 | ||
|
|
9c5c597ce6 | ||
|
|
977a452605 | ||
|
|
17640fe6cf | ||
|
|
2e4f6ee420 | ||
|
|
a3768d9221 | ||
|
|
80c3390363 | ||
|
|
a5e3869d8f | ||
|
|
aa7d7c2d02 | ||
|
|
015f205569 | ||
|
|
e59fb15926 | ||
|
|
173c585f2d | ||
|
|
6f8c27793e | ||
|
|
332b81c803 | ||
|
|
4b343b500d | ||
|
|
e87c537642 | ||
|
|
2e6300cce2 | ||
|
|
09514d15a6 | ||
|
|
0de23dcba0 | ||
|
|
bacb153151 | ||
|
|
a01aa299d8 | ||
|
|
44edbddbd8 | ||
|
|
79d677cf3c | ||
|
|
be39b6512f | ||
|
|
fcfeea35da | ||
|
|
7d0eb8c61e | ||
|
|
4d8438a6b6 | ||
|
|
f611244e35 | ||
|
|
546a978d3b | ||
|
|
70b23fb073 | ||
|
|
a56ca597d6 | ||
|
|
679e0228a8 | ||
|
|
e153394323 | ||
|
|
5bd1fcfcfd | ||
|
|
2a392ddc44 | ||
|
|
b5cb8bc0d9 | ||
|
|
fa170bcf98 | ||
|
|
7939d46949 | ||
|
|
ab9df8201a | ||
|
|
4a670ec091 | ||
|
|
10e57e59c4 | ||
|
|
b9ec43ef34 | ||
|
|
42197cd375 | ||
|
|
704852973b | ||
|
|
056b4200df | ||
|
|
250a7d8627 | ||
|
|
1ba51e161e | ||
|
|
32e58af896 | ||
|
|
312fa6fe76 | ||
|
|
afbe0837ba | ||
|
|
36ad2a720f | ||
|
|
901e3b14bb | ||
|
|
588d209f7b | ||
|
|
b0fac34ffc | ||
|
|
5ede9f7c6b | ||
|
|
c7254fd23e | ||
|
|
55fcea04af | ||
|
|
c212c0a6b2 | ||
|
|
a31fd6709a | ||
|
|
e367fd2b73 | ||
|
|
1ca67d0241 | ||
|
|
8ffa952ff9 |
34
.github/ISSUE_TEMPLATE/bug_report.md
vendored
34
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -1,34 +0,0 @@
|
|||||||
---
|
|
||||||
name: Bug report
|
|
||||||
about: Create a report to help us improve
|
|
||||||
title: "[BUG]"
|
|
||||||
labels: bug
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Describe the bug**
|
|
||||||
A clear and concise description of what the bug is.
|
|
||||||
|
|
||||||
**To Reproduce**
|
|
||||||
Steps to reproduce the behavior:
|
|
||||||
1. Go to '...'
|
|
||||||
2. Click on '....'
|
|
||||||
3. Scroll down to '....'
|
|
||||||
4. See error
|
|
||||||
|
|
||||||
**Expected behavior**
|
|
||||||
A clear and concise description of what you expected to happen.
|
|
||||||
|
|
||||||
**Screenshots**
|
|
||||||
If applicable, add screenshots to help explain your problem.
|
|
||||||
|
|
||||||
**Logs**
|
|
||||||
Please send logs generated with [idevicedebug](https://github.com/libimobiledevice/libimobiledevice) or Xcode. We will close the issue if a log is missing.
|
|
||||||
|
|
||||||
**iDevice (please complete the following information):**
|
|
||||||
- Device: [e.g. iPhone6]
|
|
||||||
- OS: [e.g. iOS8.1]
|
|
||||||
|
|
||||||
**Additional context**
|
|
||||||
Add any other context about the problem here.
|
|
||||||
40
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
40
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
name: Bug Report
|
||||||
|
description: Report a bug
|
||||||
|
title: "[BUG] "
|
||||||
|
labels: ["bug"]
|
||||||
|
assignees:
|
||||||
|
- naturecodevoid
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
Thanks for taking the time to fill out this bug report! Before you continue filling out the report, please **[search in GitHub Issues](https://github.com/SideStore/SideStore/issues?q=is%3Aissue+is%3Aopen) for the bug you are experiencing** in case it has already been reported.
|
||||||
|
|
||||||
|
**Please use [Discord](https://discord.gg/RgpFBX3Q3k) or [GitHub Discussions](https://github.com/SideStore/SideStore/discussions) for support.**
|
||||||
|
- type: textarea
|
||||||
|
id: description
|
||||||
|
attributes:
|
||||||
|
label: Describe the bug
|
||||||
|
description: What is the bug and how did you discover it?
|
||||||
|
placeholder: Please be clear and concise with your description.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: how-to-reproduce
|
||||||
|
attributes:
|
||||||
|
label: Instructions to reproduce
|
||||||
|
description: Please include clear and consistent instructions for reproducing the bug to make it easier for us to fix it.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: input
|
||||||
|
id: app-version
|
||||||
|
attributes:
|
||||||
|
label: What version of SideStore are you using?
|
||||||
|
description: To retrieve this, go to `Settings` in the SideStore app and scroll down to the bottom.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: other-info
|
||||||
|
attributes:
|
||||||
|
label: Other info
|
||||||
|
description: If you have any other comments, other info that might be useful, or if you found a workaround, please put it here.
|
||||||
10
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
10
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# force issue template usage
|
||||||
|
blank_issues_enabled: false
|
||||||
|
|
||||||
|
contact_links:
|
||||||
|
- name: Discord
|
||||||
|
url: https://discord.gg/RgpFBX3Q3k
|
||||||
|
about: If you need support, please go here first instead of making an issue!
|
||||||
|
- name: GitHub Discussions
|
||||||
|
url: https://github.com/SideStore/SideStore/discussions
|
||||||
|
about: As an alternative to Discord, you can also make a new GitHub discussion.
|
||||||
33
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
33
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
name: Feature Request
|
||||||
|
description: Suggest a feature
|
||||||
|
title: "[FEATURE REQUEST] "
|
||||||
|
labels: ["enhancement"]
|
||||||
|
assignees:
|
||||||
|
- naturecodevoid
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
Thanks for taking the time to fill out this feature request! Before you continue filling out the form, please **[search in GitHub Issues](https://github.com/SideStore/SideStore/issues?q=is%3Aissue+is%3Aopen) for the feature you are suggestion** in case it has already been suggested.
|
||||||
|
|
||||||
|
**Please use [Discord](https://discord.gg/RgpFBX3Q3k) or [GitHub Discussions](https://github.com/SideStore/SideStore/discussions) for support.**
|
||||||
|
- type: textarea
|
||||||
|
id: description
|
||||||
|
attributes:
|
||||||
|
label: Describe the feature
|
||||||
|
description: What is the feature? How would it work?
|
||||||
|
placeholder: Please be clear and concise with your description.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: use-cases
|
||||||
|
attributes:
|
||||||
|
label: Use cases
|
||||||
|
description: Please include multiple use cases where this feature would be useful.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: alternatives
|
||||||
|
attributes:
|
||||||
|
label: Alternatives
|
||||||
|
description: If you have alternative ideas of how this feature could work, you can put them here.
|
||||||
15
.github/pull_request_template.md
vendored
Normal file
15
.github/pull_request_template.md
vendored
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
### Changes
|
||||||
|
|
||||||
|
<!-- Fill this list with what your PR changes. Example: -->
|
||||||
|
- Fix bug
|
||||||
|
- Change UI for QOL
|
||||||
|
|
||||||
|
<!-- If your PR is ready to be merged, you can remove this section. -->
|
||||||
|
### Todo before merge
|
||||||
|
|
||||||
|
<!-- Example: -->
|
||||||
|
- [x] Finish UI changes
|
||||||
|
- [ ] Test
|
||||||
|
|
||||||
|
<!-- If your PR doesn't close an issue, you can remove the next line. -->
|
||||||
|
Closes #1234
|
||||||
22
.github/workflows/attach_build_products.yml
vendored
Normal file
22
.github/workflows/attach_build_products.yml
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
name: Add artifact links to pull request and related issues
|
||||||
|
on:
|
||||||
|
workflow_run:
|
||||||
|
workflows: [Pull Request SideStore build]
|
||||||
|
types: [completed]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
artifacts-url-comments:
|
||||||
|
name: add artifact links to pull request and related issues job
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
||||||
|
steps:
|
||||||
|
- name: add artifact links to pull request and related issues step
|
||||||
|
uses: tonyhallett/artifacts-url-comments@v1.1.0
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
with:
|
||||||
|
prefix: Builds for this Pull Request are available at
|
||||||
|
suffix: Have a nice day.
|
||||||
|
format: name
|
||||||
|
addTo: pull
|
||||||
|
# addTo: pullandissues
|
||||||
104
.github/workflows/beta.yml
vendored
104
.github/workflows/beta.yml
vendored
@@ -1,16 +1,12 @@
|
|||||||
name: Beta SideStore build
|
name: Beta SideStore build
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
tags:
|
||||||
- develop
|
- '[0-9]+.[0-9]+.[0-9]+-beta.[0-9]+' # example: 1.0.0-beta.1
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
name: Build and upload SideStore Beta
|
name: Build and upload SideStore Beta
|
||||||
if: startsWith(github.event.head_commit.message, '[beta]')
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.ref }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
@@ -25,63 +21,11 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
|
|
||||||
# - name: Cache rust cargo
|
|
||||||
# id: cache-rust-cargo
|
|
||||||
# uses: actions/cache@v3
|
|
||||||
# env:
|
|
||||||
# cache-name: cache-rust-cargo
|
|
||||||
# with:
|
|
||||||
# path: ~/.cargo
|
|
||||||
# key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
|
|
||||||
# restore-keys: |
|
|
||||||
# ${{ runner.os }}-build-${{ env.cache-name }}-
|
|
||||||
# ${{ runner.os }}-build-
|
|
||||||
# ${{ runner.os }}-
|
|
||||||
|
|
||||||
# - name: Cache rust minimuxer
|
|
||||||
# id: cache-rust-minimuxer
|
|
||||||
# uses: actions/cache@v3
|
|
||||||
# env:
|
|
||||||
# cache-name: cache-rust-minimuxer
|
|
||||||
# with:
|
|
||||||
# path: ./Dependencies/minimuxer/target
|
|
||||||
# key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
|
|
||||||
# restore-keys: |
|
|
||||||
# ${{ runner.os }}-build-${{ env.cache-name }}-
|
|
||||||
# ${{ runner.os }}-build-
|
|
||||||
# ${{ runner.os }}-
|
|
||||||
|
|
||||||
# - name: Cache rust em_proxy
|
|
||||||
# id: cache-rust-em_proxy
|
|
||||||
# uses: actions/cache@v3
|
|
||||||
# env:
|
|
||||||
# cache-name: cache-rust-em_proxy
|
|
||||||
# with:
|
|
||||||
# path: ./Dependencies/em_proxy/target
|
|
||||||
# key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
|
|
||||||
# restore-keys: |
|
|
||||||
# ${{ runner.os }}-build-${{ env.cache-name }}-
|
|
||||||
# ${{ runner.os }}-build-
|
|
||||||
# ${{ runner.os }}-
|
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: brew install ldid
|
run: brew install ldid
|
||||||
|
|
||||||
- name: Install rustup
|
- name: Change version to tag
|
||||||
uses: actions-rs/toolchain@v1
|
run: sed -e '/MARKETING_VERSION = .*/s/= .*/= ${{ github.ref_name }}/' -i '' Build.xcconfig
|
||||||
with:
|
|
||||||
toolchain: stable
|
|
||||||
override: true
|
|
||||||
target: aarch64-apple-ios
|
|
||||||
|
|
||||||
# - name: Create emotional damage
|
|
||||||
# run: cd Dependencies/em_proxy && cargo build --release --target aarch64-apple-ios
|
|
||||||
|
|
||||||
# - name: Build minimuxer
|
|
||||||
# run: cd Dependencies/minimuxer && cargo build --release --target aarch64-apple-ios
|
|
||||||
|
|
||||||
- name: Add beta suffix to version
|
|
||||||
run: sed -e '/MARKETING_VERSION = .*/s/$/-beta.${{ github.run_number }}/' -i '' Build.xcconfig
|
|
||||||
|
|
||||||
- name: Setup Xcode
|
- name: Setup Xcode
|
||||||
uses: maxim-lobanov/setup-xcode@v1.4.1
|
uses: maxim-lobanov/setup-xcode@v1.4.1
|
||||||
@@ -89,29 +33,13 @@ jobs:
|
|||||||
xcode-version: ${{ matrix.version }}
|
xcode-version: ${{ matrix.version }}
|
||||||
|
|
||||||
- name: Build SideStore
|
- name: Build SideStore
|
||||||
run: |
|
run: make build | xcpretty && exit ${PIPESTATUS[0]}
|
||||||
xcodebuild -project AltStore.xcodeproj \
|
|
||||||
-scheme AltStore \
|
|
||||||
-sdk iphoneos \
|
|
||||||
archive -archivePath ./archive \
|
|
||||||
CODE_SIGNING_REQUIRED=NO \
|
|
||||||
AD_HOC_CODE_SIGNING_ALLOWED=YES \
|
|
||||||
CODE_SIGNING_ALLOWED=NO \
|
|
||||||
DEVELOPMENT_TEAM=XYZ0123456 \
|
|
||||||
ORG_IDENTIFIER=com.SideStore \
|
|
||||||
| xcpretty && exit ${PIPESTATUS[0]}
|
|
||||||
|
|
||||||
- name: Fakesign app
|
- name: Fakesign app
|
||||||
run: |
|
run: make fakesign
|
||||||
rm -rf archive.xcarchive/Products/Applications/SideStore.app/Frameworks/AltStoreCore.framework/Frameworks/
|
|
||||||
ldid -SAltStore/Resources/tempEnt.plist archive.xcarchive/Products/Applications/SideStore.app/SideStore
|
|
||||||
|
|
||||||
- name: Convert to IPA
|
- name: Convert to IPA
|
||||||
run: |
|
run: make ipa
|
||||||
mkdir Payload
|
|
||||||
mkdir Payload/SideStore.app
|
|
||||||
cp -R archive.xcarchive/Products/Applications/SideStore.app/ Payload/SideStore.app/
|
|
||||||
zip -r SideStore.ipa Payload
|
|
||||||
|
|
||||||
- name: Upload Artifact
|
- name: Upload Artifact
|
||||||
uses: actions/upload-artifact@v3.1.0
|
uses: actions/upload-artifact@v3.1.0
|
||||||
@@ -131,22 +59,22 @@ jobs:
|
|||||||
id: date_altstore
|
id: date_altstore
|
||||||
run: echo "date=$(date -u +'%Y-%m-%d')" >> $GITHUB_OUTPUT
|
run: echo "date=$(date -u +'%Y-%m-%d')" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Upload to beta release
|
- name: Upload to new beta release
|
||||||
uses: IsaacShelton/update-existing-release@v1.3.1
|
uses: softprops/action-gh-release@v1
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
release: "Beta"
|
name: ${{ steps.version.outputs.version }}
|
||||||
tag: "beta"
|
tag_name: ${{ github.ref_name }}
|
||||||
|
draft: true
|
||||||
prerelease: true
|
prerelease: true
|
||||||
files: SideStore.ipa
|
files: SideStore.ipa
|
||||||
body: |
|
body: |
|
||||||
This is an ⚠️ **EXPERIMENTAL** ⚠️ beta build for commit [${{ github.sha }}](https://github.com/${{ github.repository }}/commit/${{ github.sha }}).
|
<!-- NOTE: to reset SideSource cache, go to `https://apps.sidestore.io/reset-cache/nightly/<sidesource key>`. This is not included in the GitHub Action since it makes draft releases so they can be edited and have a changelog. -->
|
||||||
|
Beta builds are hand-picked builds from development commits that will allow you to try out new features earlier than normal. However, **they might contain bugs and other issues. Use at your own risk!**
|
||||||
|
|
||||||
Beta builds are hand-picked builds from development commits that will allow you to try out new features earlier than normal, but with a lower chance of bugs than if you used nightly builds. However, since these changes are newer and less tested, they still have a good chance of bugs, so **use at your own risk**.
|
## Changelog
|
||||||
|
|
||||||
If you want to be on the bleeding edge and use the latest development builds, you can look at [SideStore Nightly](https://github.com/${{ github.repository }}/releases/tag/nightly). **Please be aware that these builds have a much higher chance of bugs than beta or stable**.
|
- TODO
|
||||||
|
|
||||||
If you use the `SideStore (Beta)` app, it will use the latest beta build (make sure to update it in "My Apps").
|
|
||||||
|
|
||||||
## Build Info
|
## Build Info
|
||||||
|
|
||||||
|
|||||||
13
.github/workflows/danger.yml
vendored
Normal file
13
.github/workflows/danger.yml
vendored
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
name: "Danger Swift"
|
||||||
|
on: [pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: Danger JS
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v1
|
||||||
|
- name: Danger Swift
|
||||||
|
uses: danger/swift@2.0.3
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
28
.github/workflows/increase-nightly-build-num.sh
vendored
Normal file
28
.github/workflows/increase-nightly-build-num.sh
vendored
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Ensure we are in root directory
|
||||||
|
cd "$(dirname "$0")/../.."
|
||||||
|
|
||||||
|
DATE=`date -u +'%Y.%m.%d'`
|
||||||
|
BUILD_NUM=1
|
||||||
|
|
||||||
|
write() {
|
||||||
|
sed -e "/MARKETING_VERSION = .*/s/$/-nightly.$DATE.$BUILD_NUM/" -i '' Build.xcconfig
|
||||||
|
echo "$DATE,$BUILD_NUM" > .nightly-build-num
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ ! -f ".nightly-build-num" ]; then
|
||||||
|
write
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
LAST_DATE=`cat .nightly-build-num | perl -n -e '/([^,]*),([^ ]*)$/ && print $1'`
|
||||||
|
LAST_BUILD_NUM=`cat .nightly-build-num | perl -n -e '/([^,]*),([^ ]*)$/ && print $2'`
|
||||||
|
|
||||||
|
if [[ "$DATE" != "$LAST_DATE" ]]; then
|
||||||
|
write
|
||||||
|
else
|
||||||
|
BUILD_NUM=`expr $LAST_BUILD_NUM + 1`
|
||||||
|
write
|
||||||
|
fi
|
||||||
|
|
||||||
89
.github/workflows/nightly.yml
vendored
89
.github/workflows/nightly.yml
vendored
@@ -24,63 +24,17 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
|
|
||||||
# - name: Cache rust cargo
|
|
||||||
# id: cache-rust-cargo
|
|
||||||
# uses: actions/cache@v3
|
|
||||||
# env:
|
|
||||||
# cache-name: cache-rust-cargo
|
|
||||||
# with:
|
|
||||||
# path: ~/.cargo
|
|
||||||
# key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
|
|
||||||
# restore-keys: |
|
|
||||||
# ${{ runner.os }}-build-${{ env.cache-name }}-
|
|
||||||
# ${{ runner.os }}-build-
|
|
||||||
# ${{ runner.os }}-
|
|
||||||
|
|
||||||
# - name: Cache rust minimuxer
|
|
||||||
# id: cache-rust-minimuxer
|
|
||||||
# uses: actions/cache@v3
|
|
||||||
# env:
|
|
||||||
# cache-name: cache-rust-minimuxer
|
|
||||||
# with:
|
|
||||||
# path: ./Dependencies/minimuxer/target
|
|
||||||
# key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
|
|
||||||
# restore-keys: |
|
|
||||||
# ${{ runner.os }}-build-${{ env.cache-name }}-
|
|
||||||
# ${{ runner.os }}-build-
|
|
||||||
# ${{ runner.os }}-
|
|
||||||
|
|
||||||
# - name: Cache rust em_proxy
|
|
||||||
# id: cache-rust-em_proxy
|
|
||||||
# uses: actions/cache@v3
|
|
||||||
# env:
|
|
||||||
# cache-name: cache-rust-em_proxy
|
|
||||||
# with:
|
|
||||||
# path: ./Dependencies/em_proxy/target
|
|
||||||
# key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
|
|
||||||
# restore-keys: |
|
|
||||||
# ${{ runner.os }}-build-${{ env.cache-name }}-
|
|
||||||
# ${{ runner.os }}-build-
|
|
||||||
# ${{ runner.os }}-
|
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: brew install ldid
|
run: brew install ldid
|
||||||
|
|
||||||
- name: Install rustup
|
- name: Cache .nightly-build-num
|
||||||
uses: actions-rs/toolchain@v1
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
toolchain: stable
|
path: .nightly-build-num
|
||||||
override: true
|
key: nightly-build-num
|
||||||
target: aarch64-apple-ios
|
|
||||||
|
|
||||||
# - name: Create emotional damage
|
- name: Increase nightly build number and set as version
|
||||||
# run: cd Dependencies/em_proxy && cargo build --release --target aarch64-apple-ios
|
run: bash .github/workflows/increase-nightly-build-num.sh
|
||||||
|
|
||||||
# - name: Build minimuxer
|
|
||||||
# run: cd Dependencies/minimuxer && cargo build --release --target aarch64-apple-ios
|
|
||||||
|
|
||||||
- name: Add nightly suffix to version
|
|
||||||
run: sed -e '/MARKETING_VERSION = .*/s/$/-nightly.${{ github.run_number }}/' -i '' Build.xcconfig
|
|
||||||
|
|
||||||
- name: Setup Xcode
|
- name: Setup Xcode
|
||||||
uses: maxim-lobanov/setup-xcode@v1.4.1
|
uses: maxim-lobanov/setup-xcode@v1.4.1
|
||||||
@@ -88,29 +42,13 @@ jobs:
|
|||||||
xcode-version: ${{ matrix.version }}
|
xcode-version: ${{ matrix.version }}
|
||||||
|
|
||||||
- name: Build SideStore
|
- name: Build SideStore
|
||||||
run: |
|
run: make build | xcpretty && exit ${PIPESTATUS[0]}
|
||||||
xcodebuild -project AltStore.xcodeproj \
|
|
||||||
-scheme AltStore \
|
|
||||||
-sdk iphoneos \
|
|
||||||
archive -archivePath ./archive \
|
|
||||||
CODE_SIGNING_REQUIRED=NO \
|
|
||||||
AD_HOC_CODE_SIGNING_ALLOWED=YES \
|
|
||||||
CODE_SIGNING_ALLOWED=NO \
|
|
||||||
DEVELOPMENT_TEAM=XYZ0123456 \
|
|
||||||
ORG_IDENTIFIER=com.SideStore \
|
|
||||||
| xcpretty && exit ${PIPESTATUS[0]}
|
|
||||||
|
|
||||||
- name: Fakesign app
|
- name: Fakesign app
|
||||||
run: |
|
run: make fakesign
|
||||||
rm -rf archive.xcarchive/Products/Applications/SideStore.app/Frameworks/AltStoreCore.framework/Frameworks/
|
|
||||||
ldid -SAltStore/Resources/tempEnt.plist archive.xcarchive/Products/Applications/SideStore.app/SideStore
|
|
||||||
|
|
||||||
- name: Convert to IPA
|
- name: Convert to IPA
|
||||||
run: |
|
run: make ipa
|
||||||
mkdir Payload
|
|
||||||
mkdir Payload/SideStore.app
|
|
||||||
cp -R archive.xcarchive/Products/Applications/SideStore.app/ Payload/SideStore.app/
|
|
||||||
zip -r SideStore.ipa Payload
|
|
||||||
|
|
||||||
- name: Upload Artifact
|
- name: Upload Artifact
|
||||||
uses: actions/upload-artifact@v3.1.0
|
uses: actions/upload-artifact@v3.1.0
|
||||||
@@ -141,11 +79,9 @@ jobs:
|
|||||||
body: |
|
body: |
|
||||||
This is an ⚠️ **EXPERIMENTAL** ⚠️ nightly build for commit [${{ github.sha }}](https://github.com/${{ github.repository }}/commit/${{ github.sha }}).
|
This is an ⚠️ **EXPERIMENTAL** ⚠️ nightly build for commit [${{ github.sha }}](https://github.com/${{ github.repository }}/commit/${{ github.sha }}).
|
||||||
|
|
||||||
Nightly builds are built from the most recent commit which means you'll be able to try out new features very early. However, since these changes are much newer and less tested, they have a much higher chance of bugs, so **use at your own risk**.
|
Nightly builds are **extremely experimental builds only meant to be used by developers and alpha testers. They often contain bugs and experimental features. Use at your own risk!**
|
||||||
|
|
||||||
If you want to try out new features early but want a lower chance of bugs, you can look at [SideStore Beta](https://github.com/${{ github.repository }}/releases/tag/beta).
|
If you want to try out new features early but want a lower chance of bugs, you can look at [SideStore Beta](https://github.com/${{ github.repository }}/releases?q=beta).
|
||||||
|
|
||||||
If you use the `SideStore (Nightly)` app, it will use the latest nightly build (make sure to update it in "My Apps").
|
|
||||||
|
|
||||||
## Build Info
|
## Build Info
|
||||||
|
|
||||||
@@ -153,3 +89,6 @@ jobs:
|
|||||||
Built at (UTC date): `${{ steps.date_altstore.outputs.date }}`
|
Built at (UTC date): `${{ steps.date_altstore.outputs.date }}`
|
||||||
Commit SHA: `${{ github.sha }}`
|
Commit SHA: `${{ github.sha }}`
|
||||||
Version: `${{ steps.version.outputs.version }}`
|
Version: `${{ steps.version.outputs.version }}`
|
||||||
|
|
||||||
|
- name: Reset cache for apps.sidestore.io/nightly
|
||||||
|
run: sleep 10 && curl https://apps.sidestore.io/reset-cache/nightly/${{ secrets.SIDESOURCE_KEY }}
|
||||||
|
|||||||
75
.github/workflows/pr.yml
vendored
75
.github/workflows/pr.yml
vendored
@@ -19,60 +19,11 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
|
|
||||||
# - name: Cache rust cargo
|
|
||||||
# id: cache-rust-cargo
|
|
||||||
# uses: actions/cache@v3
|
|
||||||
# env:
|
|
||||||
# cache-name: cache-rust-cargo
|
|
||||||
# with:
|
|
||||||
# path: ~/.cargo
|
|
||||||
# key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
|
|
||||||
# restore-keys: |
|
|
||||||
# ${{ runner.os }}-build-${{ env.cache-name }}-
|
|
||||||
# ${{ runner.os }}-build-
|
|
||||||
# ${{ runner.os }}-
|
|
||||||
|
|
||||||
# - name: Cache rust minimuxer
|
|
||||||
# id: cache-rust-minimuxer
|
|
||||||
# uses: actions/cache@v3
|
|
||||||
# env:
|
|
||||||
# cache-name: cache-rust-minimuxer
|
|
||||||
# with:
|
|
||||||
# path: ./Dependencies/minimuxer/target
|
|
||||||
# key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
|
|
||||||
# restore-keys: |
|
|
||||||
# ${{ runner.os }}-build-${{ env.cache-name }}-
|
|
||||||
# ${{ runner.os }}-build-
|
|
||||||
# ${{ runner.os }}-
|
|
||||||
|
|
||||||
# - name: Cache rust em_proxy
|
|
||||||
# id: cache-rust-em_proxy
|
|
||||||
# uses: actions/cache@v3
|
|
||||||
# env:
|
|
||||||
# cache-name: cache-rust-em_proxy
|
|
||||||
# with:
|
|
||||||
# path: ./Dependencies/em_proxy/target
|
|
||||||
# key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
|
|
||||||
# restore-keys: |
|
|
||||||
# ${{ runner.os }}-build-${{ env.cache-name }}-
|
|
||||||
# ${{ runner.os }}-build-
|
|
||||||
# ${{ runner.os }}-
|
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: brew install ldid
|
run: brew install ldid
|
||||||
|
|
||||||
- name: Install rustup
|
- name: Add PR suffix to version
|
||||||
uses: actions-rs/toolchain@v1
|
run: sed -e '/MARKETING_VERSION = .*/s/$/-pr.${{ github.event.pull_request.number }}/' -i '' Build.xcconfig
|
||||||
with:
|
|
||||||
toolchain: stable
|
|
||||||
override: true
|
|
||||||
target: aarch64-apple-ios
|
|
||||||
|
|
||||||
# - name: Create emotional damage
|
|
||||||
# run: cd Dependencies/em_proxy && cargo build --release --target aarch64-apple-ios
|
|
||||||
|
|
||||||
# - name: Build minimuxer
|
|
||||||
# run: cd Dependencies/minimuxer && cargo build --release --target aarch64-apple-ios
|
|
||||||
|
|
||||||
- name: Setup Xcode
|
- name: Setup Xcode
|
||||||
uses: maxim-lobanov/setup-xcode@v1.4.1
|
uses: maxim-lobanov/setup-xcode@v1.4.1
|
||||||
@@ -80,29 +31,13 @@ jobs:
|
|||||||
xcode-version: ${{ matrix.version }}
|
xcode-version: ${{ matrix.version }}
|
||||||
|
|
||||||
- name: Build SideStore
|
- name: Build SideStore
|
||||||
run: |
|
run: make build | xcpretty && exit ${PIPESTATUS[0]}
|
||||||
xcodebuild -project AltStore.xcodeproj \
|
|
||||||
-scheme AltStore \
|
|
||||||
-sdk iphoneos \
|
|
||||||
archive -archivePath ./archive \
|
|
||||||
CODE_SIGNING_REQUIRED=NO \
|
|
||||||
AD_HOC_CODE_SIGNING_ALLOWED=YES \
|
|
||||||
CODE_SIGNING_ALLOWED=NO \
|
|
||||||
DEVELOPMENT_TEAM=XYZ0123456 \
|
|
||||||
ORG_IDENTIFIER=com.SideStore \
|
|
||||||
| xcpretty && exit ${PIPESTATUS[0]}
|
|
||||||
|
|
||||||
- name: Fakesign app
|
- name: Fakesign app
|
||||||
run: |
|
run: make fakesign
|
||||||
rm -rf archive.xcarchive/Products/Applications/SideStore.app/Frameworks/AltStoreCore.framework/Frameworks/
|
|
||||||
ldid -SAltStore/Resources/tempEnt.plist archive.xcarchive/Products/Applications/SideStore.app/SideStore
|
|
||||||
|
|
||||||
- name: Convert to IPA
|
- name: Convert to IPA
|
||||||
run: |
|
run: make ipa
|
||||||
mkdir Payload
|
|
||||||
mkdir Payload/SideStore.app
|
|
||||||
cp -R archive.xcarchive/Products/Applications/SideStore.app/ Payload/SideStore.app/
|
|
||||||
zip -r SideStore.ipa Payload
|
|
||||||
|
|
||||||
- name: Upload Artifact
|
- name: Upload Artifact
|
||||||
uses: actions/upload-artifact@v3.1.0
|
uses: actions/upload-artifact@v3.1.0
|
||||||
|
|||||||
80
.github/workflows/stable.yml
vendored
80
.github/workflows/stable.yml
vendored
@@ -2,7 +2,7 @@ name: Stable SideStore build
|
|||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
tags:
|
tags:
|
||||||
- '[0-9]+.[0-9]+.[0-9]+*'
|
- '[0-9]+.[0-9]+.[0-9]+' # example: 1.0.0
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
@@ -21,60 +21,11 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
|
|
||||||
# - name: Cache rust cargo
|
|
||||||
# id: cache-rust-cargo
|
|
||||||
# uses: actions/cache@v3
|
|
||||||
# env:
|
|
||||||
# cache-name: cache-rust-cargo
|
|
||||||
# with:
|
|
||||||
# path: ~/.cargo
|
|
||||||
# key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
|
|
||||||
# restore-keys: |
|
|
||||||
# ${{ runner.os }}-build-${{ env.cache-name }}-
|
|
||||||
# ${{ runner.os }}-build-
|
|
||||||
# ${{ runner.os }}-
|
|
||||||
|
|
||||||
# - name: Cache rust minimuxer
|
|
||||||
# id: cache-rust-minimuxer
|
|
||||||
# uses: actions/cache@v3
|
|
||||||
# env:
|
|
||||||
# cache-name: cache-rust-minimuxer
|
|
||||||
# with:
|
|
||||||
# path: ./Dependencies/minimuxer/target
|
|
||||||
# key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
|
|
||||||
# restore-keys: |
|
|
||||||
# ${{ runner.os }}-build-${{ env.cache-name }}-
|
|
||||||
# ${{ runner.os }}-build-
|
|
||||||
# ${{ runner.os }}-
|
|
||||||
|
|
||||||
# - name: Cache rust em_proxy
|
|
||||||
# id: cache-rust-em_proxy
|
|
||||||
# uses: actions/cache@v3
|
|
||||||
# env:
|
|
||||||
# cache-name: cache-rust-em_proxy
|
|
||||||
# with:
|
|
||||||
# path: ./Dependencies/em_proxy/target
|
|
||||||
# key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
|
|
||||||
# restore-keys: |
|
|
||||||
# ${{ runner.os }}-build-${{ env.cache-name }}-
|
|
||||||
# ${{ runner.os }}-build-
|
|
||||||
# ${{ runner.os }}-
|
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: brew install ldid
|
run: brew install ldid
|
||||||
|
|
||||||
- name: Install rustup
|
- name: Change version to tag
|
||||||
uses: actions-rs/toolchain@v1
|
run: sed -e '/MARKETING_VERSION = .*/s/= .*/= ${{ github.ref_name }}/' -i '' Build.xcconfig
|
||||||
with:
|
|
||||||
toolchain: stable
|
|
||||||
override: true
|
|
||||||
target: aarch64-apple-ios
|
|
||||||
|
|
||||||
# - name: Create emotional damage
|
|
||||||
# run: cd Dependencies/em_proxy && cargo build --release --target aarch64-apple-ios
|
|
||||||
|
|
||||||
# - name: Build minimuxer
|
|
||||||
# run: cd Dependencies/minimuxer && cargo build --release --target aarch64-apple-ios
|
|
||||||
|
|
||||||
- name: Setup Xcode
|
- name: Setup Xcode
|
||||||
uses: maxim-lobanov/setup-xcode@v1.4.1
|
uses: maxim-lobanov/setup-xcode@v1.4.1
|
||||||
@@ -82,29 +33,13 @@ jobs:
|
|||||||
xcode-version: ${{ matrix.version }}
|
xcode-version: ${{ matrix.version }}
|
||||||
|
|
||||||
- name: Build SideStore
|
- name: Build SideStore
|
||||||
run: |
|
run: make build | xcpretty && exit ${PIPESTATUS[0]}
|
||||||
xcodebuild -project AltStore.xcodeproj \
|
|
||||||
-scheme AltStore \
|
|
||||||
-sdk iphoneos \
|
|
||||||
archive -archivePath ./archive \
|
|
||||||
CODE_SIGNING_REQUIRED=NO \
|
|
||||||
AD_HOC_CODE_SIGNING_ALLOWED=YES \
|
|
||||||
CODE_SIGNING_ALLOWED=NO \
|
|
||||||
DEVELOPMENT_TEAM=XYZ0123456 \
|
|
||||||
ORG_IDENTIFIER=com.SideStore \
|
|
||||||
| xcpretty && exit ${PIPESTATUS[0]}
|
|
||||||
|
|
||||||
- name: Fakesign app
|
- name: Fakesign app
|
||||||
run: |
|
run: make fakesign
|
||||||
rm -rf archive.xcarchive/Products/Applications/SideStore.app/Frameworks/AltStoreCore.framework/Frameworks/
|
|
||||||
ldid -SAltStore/Resources/tempEnt.plist archive.xcarchive/Products/Applications/SideStore.app/SideStore
|
|
||||||
|
|
||||||
- name: Convert to IPA
|
- name: Convert to IPA
|
||||||
run: |
|
run: make ipa
|
||||||
mkdir Payload
|
|
||||||
mkdir Payload/SideStore.app
|
|
||||||
cp -R archive.xcarchive/Products/Applications/SideStore.app/ Payload/SideStore.app/
|
|
||||||
zip -r SideStore.ipa Payload
|
|
||||||
|
|
||||||
- name: Upload Artifact
|
- name: Upload Artifact
|
||||||
uses: actions/upload-artifact@v3.1.0
|
uses: actions/upload-artifact@v3.1.0
|
||||||
@@ -129,10 +64,11 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
name: ${{ steps.version.outputs.version }}
|
name: ${{ steps.version.outputs.version }}
|
||||||
tag_name: ${{ github.ref }}
|
tag_name: ${{ github.ref_name }}
|
||||||
draft: true
|
draft: true
|
||||||
files: SideStore.ipa
|
files: SideStore.ipa
|
||||||
body: |
|
body: |
|
||||||
|
<!-- NOTE: to reset SideSource cache, go to `https://apps.sidestore.io/reset-cache/nightly/<sidesource key>`. This is not included in the GitHub Action since it makes draft releases so they can be edited and have a changelog. -->
|
||||||
## Changelog
|
## Changelog
|
||||||
|
|
||||||
- TODO
|
- TODO
|
||||||
|
|||||||
10
.gitignore
vendored
10
.gitignore
vendored
@@ -34,3 +34,13 @@ xcuserdata
|
|||||||
|
|
||||||
## AppCode specific
|
## AppCode specific
|
||||||
.idea/
|
.idea/
|
||||||
|
|
||||||
|
.build
|
||||||
|
|
||||||
|
Payload/
|
||||||
|
SideStore.ipa
|
||||||
|
Dependencies/.*-prebuilt-fetch-*
|
||||||
|
Dependencies/minimuxer/*
|
||||||
|
Dependencies/em_proxy/*
|
||||||
|
!Dependencies/**/.gitkeep
|
||||||
|
.nightly-build-num
|
||||||
|
|||||||
6
.gitmodules
vendored
6
.gitmodules
vendored
@@ -13,15 +13,9 @@
|
|||||||
[submodule "Dependencies/MarkdownAttributedString"]
|
[submodule "Dependencies/MarkdownAttributedString"]
|
||||||
path = Dependencies/MarkdownAttributedString
|
path = Dependencies/MarkdownAttributedString
|
||||||
url = https://github.com/chockenberry/MarkdownAttributedString.git
|
url = https://github.com/chockenberry/MarkdownAttributedString.git
|
||||||
[submodule "Dependencies/em_proxy"]
|
|
||||||
path = Dependencies/em_proxy
|
|
||||||
url = https://github.com/jkcoxson/em_proxy
|
|
||||||
[submodule "Dependencies/libimobiledevice-glue"]
|
[submodule "Dependencies/libimobiledevice-glue"]
|
||||||
path = Dependencies/libimobiledevice-glue
|
path = Dependencies/libimobiledevice-glue
|
||||||
url = https://github.com/libimobiledevice/libimobiledevice-glue
|
url = https://github.com/libimobiledevice/libimobiledevice-glue
|
||||||
[submodule "Dependencies/minimuxer"]
|
|
||||||
path = Dependencies/minimuxer
|
|
||||||
url = https://github.com/jkcoxson/minimuxer
|
|
||||||
[submodule "Dependencies/libfragmentzip"]
|
[submodule "Dependencies/libfragmentzip"]
|
||||||
path = Dependencies/libfragmentzip
|
path = Dependencies/libfragmentzip
|
||||||
url = https://github.com/SideStore/libfragmentzip.git
|
url = https://github.com/SideStore/libfragmentzip.git
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
19B9B7452845E6DF0076EF69 /* SelectTeamViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19B9B7442845E6DF0076EF69 /* SelectTeamViewController.swift */; };
|
19B9B7452845E6DF0076EF69 /* SelectTeamViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19B9B7442845E6DF0076EF69 /* SelectTeamViewController.swift */; };
|
||||||
4879A95F2861046500FC1BBD /* AltSign in Frameworks */ = {isa = PBXBuildFile; productRef = 4879A95E2861046500FC1BBD /* AltSign */; };
|
4879A95F2861046500FC1BBD /* AltSign in Frameworks */ = {isa = PBXBuildFile; productRef = 4879A95E2861046500FC1BBD /* AltSign */; };
|
||||||
4879A9622861049C00FC1BBD /* OpenSSL in Frameworks */ = {isa = PBXBuildFile; productRef = 4879A9612861049C00FC1BBD /* OpenSSL */; };
|
4879A9622861049C00FC1BBD /* OpenSSL in Frameworks */ = {isa = PBXBuildFile; productRef = 4879A9612861049C00FC1BBD /* OpenSSL */; };
|
||||||
|
99C4EF4D2979132100CB538D /* SemanticVersion in Frameworks */ = {isa = PBXBuildFile; productRef = 99C4EF4C2979132100CB538D /* SemanticVersion */; };
|
||||||
B3146ED2284F581E00BBC3FD /* Roxas.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3146ECD284F580500BBC3FD /* Roxas.framework */; };
|
B3146ED2284F581E00BBC3FD /* Roxas.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3146ECD284F580500BBC3FD /* Roxas.framework */; };
|
||||||
B3146ED3284F581E00BBC3FD /* Roxas.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = B3146ECD284F580500BBC3FD /* Roxas.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
B3146ED3284F581E00BBC3FD /* Roxas.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = B3146ECD284F580500BBC3FD /* Roxas.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||||
B33FFBA8295F8E98002259E6 /* libfragmentzip.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B343F894295F7F9B002B1159 /* libfragmentzip.a */; };
|
B33FFBA8295F8E98002259E6 /* libfragmentzip.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B343F894295F7F9B002B1159 /* libfragmentzip.a */; };
|
||||||
@@ -500,7 +501,6 @@
|
|||||||
/* End PBXCopyFilesBuildPhase section */
|
/* End PBXCopyFilesBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
19104DA92909BC7100C49C7B /* em_proxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = em_proxy.h; sourceTree = "<group>"; };
|
|
||||||
19104DB22909C06C00C49C7B /* libEmotionalDamage.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libEmotionalDamage.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
19104DB22909C06C00C49C7B /* libEmotionalDamage.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libEmotionalDamage.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
19104DB42909C06D00C49C7B /* EmotionalDamage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmotionalDamage.swift; sourceTree = "<group>"; };
|
19104DB42909C06D00C49C7B /* EmotionalDamage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmotionalDamage.swift; sourceTree = "<group>"; };
|
||||||
191E5FAB290A5D92001A3B7C /* libminimuxer.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libminimuxer.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
191E5FAB290A5D92001A3B7C /* libminimuxer.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libminimuxer.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
@@ -509,7 +509,6 @@
|
|||||||
191E5FCF290A651D001A3B7C /* jplist.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jplist.c; path = Dependencies/libplist/src/jplist.c; sourceTree = SOURCE_ROOT; };
|
191E5FCF290A651D001A3B7C /* jplist.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jplist.c; path = Dependencies/libplist/src/jplist.c; sourceTree = SOURCE_ROOT; };
|
||||||
191E5FD0290A651D001A3B7C /* jsmn.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jsmn.c; path = Dependencies/libplist/src/jsmn.c; sourceTree = SOURCE_ROOT; };
|
191E5FD0290A651D001A3B7C /* jsmn.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jsmn.c; path = Dependencies/libplist/src/jsmn.c; sourceTree = SOURCE_ROOT; };
|
||||||
191E5FD1290A651D001A3B7C /* jsmn.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jsmn.h; path = Dependencies/libplist/src/jsmn.h; sourceTree = SOURCE_ROOT; };
|
191E5FD1290A651D001A3B7C /* jsmn.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jsmn.h; path = Dependencies/libplist/src/jsmn.h; sourceTree = SOURCE_ROOT; };
|
||||||
191E5FD7290A6EFB001A3B7C /* minimuxer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = minimuxer.h; path = ../Dependencies/minimuxer/minimuxer.h; sourceTree = "<group>"; };
|
|
||||||
1920B04E2924AC8300744F60 /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = "<group>"; };
|
1920B04E2924AC8300744F60 /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = "<group>"; };
|
||||||
19B9B7442845E6DF0076EF69 /* SelectTeamViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectTeamViewController.swift; sourceTree = "<group>"; };
|
19B9B7442845E6DF0076EF69 /* SelectTeamViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectTeamViewController.swift; sourceTree = "<group>"; };
|
||||||
B3146EC6284F580500BBC3FD /* Roxas.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Roxas.xcodeproj; path = Dependencies/Roxas/Roxas.xcodeproj; sourceTree = "<group>"; };
|
B3146EC6284F580500BBC3FD /* Roxas.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Roxas.xcodeproj; path = Dependencies/Roxas/Roxas.xcodeproj; sourceTree = "<group>"; };
|
||||||
@@ -896,6 +895,7 @@
|
|||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
B3C395F1284F2DE700DA9E2F /* KeychainAccess in Frameworks */,
|
B3C395F1284F2DE700DA9E2F /* KeychainAccess in Frameworks */,
|
||||||
|
99C4EF4D2979132100CB538D /* SemanticVersion in Frameworks */,
|
||||||
4879A95F2861046500FC1BBD /* AltSign in Frameworks */,
|
4879A95F2861046500FC1BBD /* AltSign in Frameworks */,
|
||||||
B39575F5284F29E20080B4FF /* Roxas.framework in Frameworks */,
|
B39575F5284F29E20080B4FF /* Roxas.framework in Frameworks */,
|
||||||
);
|
);
|
||||||
@@ -937,7 +937,6 @@
|
|||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
B343F84D295F6323002B1159 /* em_proxy.xcodeproj */,
|
B343F84D295F6323002B1159 /* em_proxy.xcodeproj */,
|
||||||
19104DA92909BC7100C49C7B /* em_proxy.h */,
|
|
||||||
19104DB42909C06D00C49C7B /* EmotionalDamage.swift */,
|
19104DB42909C06D00C49C7B /* EmotionalDamage.swift */,
|
||||||
);
|
);
|
||||||
path = EmotionalDamage;
|
path = EmotionalDamage;
|
||||||
@@ -947,7 +946,6 @@
|
|||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
B343F847295F6321002B1159 /* minimuxer.xcodeproj */,
|
B343F847295F6321002B1159 /* minimuxer.xcodeproj */,
|
||||||
191E5FD7290A6EFB001A3B7C /* minimuxer.h */,
|
|
||||||
191E5FAD290A5D92001A3B7C /* minimuxer.swift */,
|
191E5FAD290A5D92001A3B7C /* minimuxer.swift */,
|
||||||
);
|
);
|
||||||
path = minimuxer;
|
path = minimuxer;
|
||||||
@@ -1937,11 +1935,13 @@
|
|||||||
buildRules = (
|
buildRules = (
|
||||||
);
|
);
|
||||||
dependencies = (
|
dependencies = (
|
||||||
|
99C4EF51297994E200CB538D /* PBXTargetDependency */,
|
||||||
);
|
);
|
||||||
name = AltStoreCore;
|
name = AltStoreCore;
|
||||||
packageProductDependencies = (
|
packageProductDependencies = (
|
||||||
B3C395F0284F2DE700DA9E2F /* KeychainAccess */,
|
B3C395F0284F2DE700DA9E2F /* KeychainAccess */,
|
||||||
4879A95E2861046500FC1BBD /* AltSign */,
|
4879A95E2861046500FC1BBD /* AltSign */,
|
||||||
|
99C4EF4C2979132100CB538D /* SemanticVersion */,
|
||||||
);
|
);
|
||||||
productName = AltStoreCore;
|
productName = AltStoreCore;
|
||||||
productReference = BF66EE7E2501AE50007EE018 /* AltStoreCore.framework */;
|
productReference = BF66EE7E2501AE50007EE018 /* AltStoreCore.framework */;
|
||||||
@@ -2060,6 +2060,7 @@
|
|||||||
B3C395FD284F3C0900DA9E2F /* XCRemoteSwiftPackageReference "STPrivilegedTask" */,
|
B3C395FD284F3C0900DA9E2F /* XCRemoteSwiftPackageReference "STPrivilegedTask" */,
|
||||||
4879A95D2861046500FC1BBD /* XCRemoteSwiftPackageReference "AltSign" */,
|
4879A95D2861046500FC1BBD /* XCRemoteSwiftPackageReference "AltSign" */,
|
||||||
4879A9602861049C00FC1BBD /* XCRemoteSwiftPackageReference "OpenSSL" */,
|
4879A9602861049C00FC1BBD /* XCRemoteSwiftPackageReference "OpenSSL" */,
|
||||||
|
99C4EF472978D52400CB538D /* XCRemoteSwiftPackageReference "SemanticVersion" */,
|
||||||
);
|
);
|
||||||
productRefGroup = BFD2476B2284B9A500981D42 /* Products */;
|
productRefGroup = BFD2476B2284B9A500981D42 /* Products */;
|
||||||
projectDirPath = "";
|
projectDirPath = "";
|
||||||
@@ -2543,6 +2544,10 @@
|
|||||||
isa = PBXTargetDependency;
|
isa = PBXTargetDependency;
|
||||||
productRef = 191E5FD9290AFA49001A3B7C /* OpenSSL */;
|
productRef = 191E5FD9290AFA49001A3B7C /* OpenSSL */;
|
||||||
};
|
};
|
||||||
|
99C4EF51297994E200CB538D /* PBXTargetDependency */ = {
|
||||||
|
isa = PBXTargetDependency;
|
||||||
|
productRef = 99C4EF50297994E200CB538D /* SemanticVersion */;
|
||||||
|
};
|
||||||
B343F86F295F76FD002B1159 /* PBXTargetDependency */ = {
|
B343F86F295F76FD002B1159 /* PBXTargetDependency */ = {
|
||||||
isa = PBXTargetDependency;
|
isa = PBXTargetDependency;
|
||||||
name = "minimuxer-staticlib";
|
name = "minimuxer-staticlib";
|
||||||
@@ -2610,15 +2615,14 @@
|
|||||||
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
||||||
LIBRARY_SEARCH_PATHS = (
|
LIBRARY_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)/Dependencies/em_proxy/target/aarch64-apple-ios/release",
|
"$(PROJECT_DIR)/Dependencies/em_proxy",
|
||||||
"$(PROJECT_DIR)/Dependencies/em_proxy/target/aarch64-apple-ios/debug",
|
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
|
MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
|
||||||
OTHER_LDFLAGS = "-ObjC";
|
OTHER_LDFLAGS = "-ObjC";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = EmotionalDamage/em_proxy.h;
|
SWIFT_OBJC_BRIDGING_HEADER = Dependencies/em_proxy/em_proxy.h;
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
TVOS_DEPLOYMENT_TARGET = 14.0;
|
TVOS_DEPLOYMENT_TARGET = 14.0;
|
||||||
@@ -2637,14 +2641,13 @@
|
|||||||
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
||||||
LIBRARY_SEARCH_PATHS = (
|
LIBRARY_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)/Dependencies/em_proxy/target/aarch64-apple-ios/release",
|
"$(PROJECT_DIR)/Dependencies/em_proxy",
|
||||||
"$(PROJECT_DIR)/Dependencies/em_proxy/target/aarch64-apple-ios/debug",
|
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
|
MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
|
||||||
OTHER_LDFLAGS = "-ObjC";
|
OTHER_LDFLAGS = "-ObjC";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = EmotionalDamage/em_proxy.h;
|
SWIFT_OBJC_BRIDGING_HEADER = Dependencies/em_proxy/em_proxy.h;
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
TVOS_DEPLOYMENT_TARGET = 14.0;
|
TVOS_DEPLOYMENT_TARGET = 14.0;
|
||||||
@@ -2664,14 +2667,13 @@
|
|||||||
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
||||||
LIBRARY_SEARCH_PATHS = (
|
LIBRARY_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)/Dependencies/minimuxer/target/aarch64-apple-ios/release",
|
"$(PROJECT_DIR)/Dependencies/minimuxer",
|
||||||
"$(PROJECT_DIR)/Dependencies/minimuxer/target/aarch64-apple-ios/debug",
|
|
||||||
);
|
);
|
||||||
OTHER_LDFLAGS = "-ObjC";
|
OTHER_LDFLAGS = "-ObjC";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = minimuxer/minimuxer.h;
|
SWIFT_OBJC_BRIDGING_HEADER = Dependencies/minimuxer/minimuxer.h;
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
};
|
};
|
||||||
@@ -2688,13 +2690,12 @@
|
|||||||
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
||||||
LIBRARY_SEARCH_PATHS = (
|
LIBRARY_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)/Dependencies/minimuxer/target/aarch64-apple-ios/release",
|
"$(PROJECT_DIR)/Dependencies/minimuxer",
|
||||||
"$(PROJECT_DIR)/Dependencies/minimuxer/target/aarch64-apple-ios/debug",
|
|
||||||
);
|
);
|
||||||
OTHER_LDFLAGS = "-ObjC";
|
OTHER_LDFLAGS = "-ObjC";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = minimuxer/minimuxer.h;
|
SWIFT_OBJC_BRIDGING_HEADER = Dependencies/minimuxer/minimuxer.h;
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
};
|
};
|
||||||
@@ -3194,8 +3195,6 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)/Dependencies/fragmentzip",
|
"$(PROJECT_DIR)/Dependencies/fragmentzip",
|
||||||
"$(PROJECT_DIR)/Dependencies/libcurl",
|
"$(PROJECT_DIR)/Dependencies/libcurl",
|
||||||
"$(PROJECT_DIR)/Dependencies/minimuxer/target/aarch64-apple-ios/debug",
|
|
||||||
"$(PROJECT_DIR)/Dependencies/minimuxer/target/aarch64-apple-ios/release",
|
|
||||||
);
|
);
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER)";
|
PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER)";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
@@ -3230,8 +3229,6 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)/Dependencies/fragmentzip",
|
"$(PROJECT_DIR)/Dependencies/fragmentzip",
|
||||||
"$(PROJECT_DIR)/Dependencies/libcurl",
|
"$(PROJECT_DIR)/Dependencies/libcurl",
|
||||||
"$(PROJECT_DIR)/Dependencies/minimuxer/target/aarch64-apple-ios/debug",
|
|
||||||
"$(PROJECT_DIR)/Dependencies/minimuxer/target/aarch64-apple-ios/release",
|
|
||||||
);
|
);
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER)";
|
PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER)";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
@@ -3346,6 +3343,14 @@
|
|||||||
minimumVersion = 1.1.180;
|
minimumVersion = 1.1.180;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
99C4EF472978D52400CB538D /* XCRemoteSwiftPackageReference "SemanticVersion" */ = {
|
||||||
|
isa = XCRemoteSwiftPackageReference;
|
||||||
|
repositoryURL = "https://github.com/SwiftPackageIndex/SemanticVersion.git";
|
||||||
|
requirement = {
|
||||||
|
kind = upToNextMajorVersion;
|
||||||
|
minimumVersion = 0.3.5;
|
||||||
|
};
|
||||||
|
};
|
||||||
B3C395EF284F2DE700DA9E2F /* XCRemoteSwiftPackageReference "KeychainAccess" */ = {
|
B3C395EF284F2DE700DA9E2F /* XCRemoteSwiftPackageReference "KeychainAccess" */ = {
|
||||||
isa = XCRemoteSwiftPackageReference;
|
isa = XCRemoteSwiftPackageReference;
|
||||||
repositoryURL = "https://github.com/kishikawakatsumi/KeychainAccess.git";
|
repositoryURL = "https://github.com/kishikawakatsumi/KeychainAccess.git";
|
||||||
@@ -3417,6 +3422,16 @@
|
|||||||
package = 4879A9602861049C00FC1BBD /* XCRemoteSwiftPackageReference "OpenSSL" */;
|
package = 4879A9602861049C00FC1BBD /* XCRemoteSwiftPackageReference "OpenSSL" */;
|
||||||
productName = OpenSSL;
|
productName = OpenSSL;
|
||||||
};
|
};
|
||||||
|
99C4EF4C2979132100CB538D /* SemanticVersion */ = {
|
||||||
|
isa = XCSwiftPackageProductDependency;
|
||||||
|
package = 99C4EF472978D52400CB538D /* XCRemoteSwiftPackageReference "SemanticVersion" */;
|
||||||
|
productName = SemanticVersion;
|
||||||
|
};
|
||||||
|
99C4EF50297994E200CB538D /* SemanticVersion */ = {
|
||||||
|
isa = XCSwiftPackageProductDependency;
|
||||||
|
package = 99C4EF472978D52400CB538D /* XCRemoteSwiftPackageReference "SemanticVersion" */;
|
||||||
|
productName = SemanticVersion;
|
||||||
|
};
|
||||||
B3C395F0284F2DE700DA9E2F /* KeychainAccess */ = {
|
B3C395F0284F2DE700DA9E2F /* KeychainAccess */ = {
|
||||||
isa = XCSwiftPackageProductDependency;
|
isa = XCSwiftPackageProductDependency;
|
||||||
package = B3C395EF284F2DE700DA9E2F /* XCRemoteSwiftPackageReference "KeychainAccess" */;
|
package = B3C395EF284F2DE700DA9E2F /* XCRemoteSwiftPackageReference "KeychainAccess" */;
|
||||||
|
|||||||
@@ -63,6 +63,15 @@
|
|||||||
"version" : "1.10.1"
|
"version" : "1.10.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"identity" : "semanticversion",
|
||||||
|
"kind" : "remoteSourceControl",
|
||||||
|
"location" : "https://github.com/SwiftPackageIndex/SemanticVersion.git",
|
||||||
|
"state" : {
|
||||||
|
"revision" : "fc670910dc0903cc269b3d0b776cda5703979c4e",
|
||||||
|
"version" : "0.3.5"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"identity" : "sparkle",
|
"identity" : "sparkle",
|
||||||
"kind" : "remoteSourceControl",
|
"kind" : "remoteSourceControl",
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ extension AnalyticsManager
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class AnalyticsManager
|
final class AnalyticsManager
|
||||||
{
|
{
|
||||||
static let shared = AnalyticsManager()
|
static let shared = AnalyticsManager()
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ extension AppContentViewController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class AppContentViewController: UITableViewController
|
final class AppContentViewController: UITableViewController
|
||||||
{
|
{
|
||||||
var app: StoreApp!
|
var app: StoreApp!
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class PermissionCollectionViewCell: UICollectionViewCell
|
final class PermissionCollectionViewCell: UICollectionViewCell
|
||||||
{
|
{
|
||||||
@IBOutlet var button: UIButton!
|
@IBOutlet var button: UIButton!
|
||||||
@IBOutlet var textLabel: UILabel!
|
@IBOutlet var textLabel: UILabel!
|
||||||
@@ -29,7 +29,7 @@ class PermissionCollectionViewCell: UICollectionViewCell
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class AppContentTableViewCell: UITableViewCell
|
final class AppContentTableViewCell: UITableViewCell
|
||||||
{
|
{
|
||||||
override func systemLayoutSizeFitting(_ targetSize: CGSize, withHorizontalFittingPriority horizontalFittingPriority: UILayoutPriority, verticalFittingPriority: UILayoutPriority) -> CGSize
|
override func systemLayoutSizeFitting(_ targetSize: CGSize, withHorizontalFittingPriority horizontalFittingPriority: UILayoutPriority, verticalFittingPriority: UILayoutPriority) -> CGSize
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import Roxas
|
|||||||
|
|
||||||
import Nuke
|
import Nuke
|
||||||
|
|
||||||
class AppViewController: UIViewController
|
final class AppViewController: UIViewController
|
||||||
{
|
{
|
||||||
var app: StoreApp!
|
var app: StoreApp!
|
||||||
|
|
||||||
@@ -352,7 +352,7 @@ class AppViewController: UIViewController
|
|||||||
|
|
||||||
extension AppViewController
|
extension AppViewController
|
||||||
{
|
{
|
||||||
class func makeAppViewController(app: StoreApp) -> AppViewController
|
final class func makeAppViewController(app: StoreApp) -> AppViewController
|
||||||
{
|
{
|
||||||
let storyboard = UIStoryboard(name: "Main", bundle: nil)
|
let storyboard = UIStoryboard(name: "Main", bundle: nil)
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import UIKit
|
|||||||
|
|
||||||
import AltStoreCore
|
import AltStoreCore
|
||||||
|
|
||||||
class PermissionPopoverViewController: UIViewController
|
final class PermissionPopoverViewController: UIViewController
|
||||||
{
|
{
|
||||||
var permission: AppPermission!
|
var permission: AppPermission!
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import UIKit
|
|||||||
import AltStoreCore
|
import AltStoreCore
|
||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
class AppIDsViewController: UICollectionViewController
|
final class AppIDsViewController: UICollectionViewController
|
||||||
{
|
{
|
||||||
private lazy var dataSource = self.makeDataSource()
|
private lazy var dataSource = self.makeDataSource()
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ extension AppDelegate
|
|||||||
}
|
}
|
||||||
|
|
||||||
@UIApplicationMain
|
@UIApplicationMain
|
||||||
class AppDelegate: UIResponder, UIApplicationDelegate {
|
final class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||||
|
|
||||||
var window: UIWindow?
|
var window: UIWindow?
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import UIKit
|
|||||||
|
|
||||||
import AltSign
|
import AltSign
|
||||||
|
|
||||||
class AuthenticationViewController: UIViewController
|
final class AuthenticationViewController: UIViewController
|
||||||
{
|
{
|
||||||
var authenticationHandler: ((String, String, @escaping (Result<(ALTAccount, ALTAppleAPISession), Error>) -> Void) -> Void)?
|
var authenticationHandler: ((String, String, @escaping (Result<(ALTAccount, ALTAppleAPISession), Error>) -> Void) -> Void)?
|
||||||
var completionHandler: (((ALTAccount, ALTAppleAPISession, String)?) -> Void)?
|
var completionHandler: (((ALTAccount, ALTAppleAPISession, String)?) -> Void)?
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class InstructionsViewController: UIViewController
|
final class InstructionsViewController: UIViewController
|
||||||
{
|
{
|
||||||
var completionHandler: (() -> Void)?
|
var completionHandler: (() -> Void)?
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import AltStoreCore
|
|||||||
import AltSign
|
import AltSign
|
||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
class RefreshAltStoreViewController: UIViewController
|
final class RefreshAltStoreViewController: UIViewController
|
||||||
{
|
{
|
||||||
var context: AuthenticatedOperationContext!
|
var context: AuthenticatedOperationContext!
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import IntentsUI
|
|||||||
|
|
||||||
import AltSign
|
import AltSign
|
||||||
|
|
||||||
class SelectTeamViewController: UITableViewController
|
final class SelectTeamViewController: UITableViewController
|
||||||
{
|
{
|
||||||
public var teams: [ALTTeam]?
|
public var teams: [ALTTeam]?
|
||||||
public var completionHandler: ((Result<ALTTeam, Swift.Error>) -> Void)?
|
public var completionHandler: ((Result<ALTTeam, Swift.Error>) -> Void)?
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import Roxas
|
|||||||
|
|
||||||
import Nuke
|
import Nuke
|
||||||
|
|
||||||
@objc class BrowseCollectionViewCell: UICollectionViewCell
|
@objc final class BrowseCollectionViewCell: UICollectionViewCell
|
||||||
{
|
{
|
||||||
var imageURLs: [URL] = [] {
|
var imageURLs: [URL] = [] {
|
||||||
didSet {
|
didSet {
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class AppIconImageView: UIImageView
|
final class AppIconImageView: UIImageView
|
||||||
{
|
{
|
||||||
override func awakeFromNib()
|
override func awakeFromNib()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import AVFoundation
|
import AVFoundation
|
||||||
|
|
||||||
class BackgroundTaskManager
|
final class BackgroundTaskManager
|
||||||
{
|
{
|
||||||
static let shared = BackgroundTaskManager()
|
static let shared = BackgroundTaskManager()
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class BannerCollectionViewCell: UICollectionViewCell
|
final class BannerCollectionViewCell: UICollectionViewCell
|
||||||
{
|
{
|
||||||
private(set) var errorBadge: UIView?
|
private(set) var errorBadge: UIView?
|
||||||
@IBOutlet private(set) var bannerView: AppBannerView!
|
@IBOutlet private(set) var bannerView: AppBannerView!
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class Button: UIButton
|
final class Button: UIButton
|
||||||
{
|
{
|
||||||
override var intrinsicContentSize: CGSize {
|
override var intrinsicContentSize: CGSize {
|
||||||
var size = super.intrinsicContentSize
|
var size = super.intrinsicContentSize
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class CollapsingTextView: UITextView
|
final class CollapsingTextView: UITextView
|
||||||
{
|
{
|
||||||
var isCollapsed = true {
|
var isCollapsed = true {
|
||||||
didSet {
|
didSet {
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class ForwardingNavigationController: UINavigationController
|
final class ForwardingNavigationController: UINavigationController
|
||||||
{
|
{
|
||||||
override var childForStatusBarStyle: UIViewController? {
|
override var childForStatusBarStyle: UIViewController? {
|
||||||
return self.topViewController
|
return self.topViewController
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import UIKit
|
|||||||
|
|
||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
class NavigationBar: UINavigationBar
|
final class NavigationBar: UINavigationBar
|
||||||
{
|
{
|
||||||
@IBInspectable var automaticallyAdjustsItemPositions: Bool = true
|
@IBInspectable var automaticallyAdjustsItemPositions: Bool = true
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class PillButton: UIButton
|
final class PillButton: UIButton
|
||||||
{
|
{
|
||||||
override var accessibilityValue: String? {
|
override var accessibilityValue: String? {
|
||||||
get {
|
get {
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ extension TimeInterval
|
|||||||
static let longToastViewDuration = 8.0
|
static let longToastViewDuration = 8.0
|
||||||
}
|
}
|
||||||
|
|
||||||
class ToastView: RSTToastView
|
final class ToastView: RSTToastView
|
||||||
{
|
{
|
||||||
var preferredDuration: TimeInterval
|
var preferredDuration: TimeInterval
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
import OSLog
|
import OSLog
|
||||||
|
|
||||||
let customLog = OSLog(subsystem: "org.sidestore.sidestore",
|
public let customLog = OSLog(subsystem: "org.sidestore.sidestore",
|
||||||
category: "ios")
|
category: "ios")
|
||||||
|
|
||||||
|
|
||||||
@@ -18,6 +18,7 @@ public extension OSLog {
|
|||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - message: String or format string
|
/// - message: String or format string
|
||||||
/// - args: optional args for format string
|
/// - args: optional args for format string
|
||||||
|
@inlinable
|
||||||
static func error(_ message: StaticString, _ args: CVarArg...) {
|
static func error(_ message: StaticString, _ args: CVarArg...) {
|
||||||
os_log(message, log: customLog, type: .error, args)
|
os_log(message, log: customLog, type: .error, args)
|
||||||
}
|
}
|
||||||
@@ -26,6 +27,7 @@ public extension OSLog {
|
|||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - message: String or format string
|
/// - message: String or format string
|
||||||
/// - args: optional args for format string
|
/// - args: optional args for format string
|
||||||
|
@inlinable
|
||||||
static func info(_ message: StaticString, _ args: CVarArg...) {
|
static func info(_ message: StaticString, _ args: CVarArg...) {
|
||||||
os_log(message, log: customLog, type: .info, args)
|
os_log(message, log: customLog, type: .info, args)
|
||||||
}
|
}
|
||||||
@@ -34,6 +36,7 @@ public extension OSLog {
|
|||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - message: String or format string
|
/// - message: String or format string
|
||||||
/// - args: optional args for format string
|
/// - args: optional args for format string
|
||||||
|
@inlinable
|
||||||
static func debug(_ message: StaticString, _ args: CVarArg...) {
|
static func debug(_ message: StaticString, _ args: CVarArg...) {
|
||||||
os_log(message, log: customLog, type: .debug, args)
|
os_log(message, log: customLog, type: .debug, args)
|
||||||
}
|
}
|
||||||
@@ -45,6 +48,7 @@ public extension OSLog {
|
|||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - message: String or format string
|
/// - message: String or format string
|
||||||
/// - args: optional args for format string
|
/// - args: optional args for format string
|
||||||
|
@inlinable
|
||||||
public func ELOG(_ message: StaticString, file: StaticString = #file, function: StaticString = #function, line: UInt = #line, _ args: CVarArg...) {
|
public func ELOG(_ message: StaticString, file: StaticString = #file, function: StaticString = #function, line: UInt = #line, _ args: CVarArg...) {
|
||||||
OSLog.error(message, args)
|
OSLog.error(message, args)
|
||||||
}
|
}
|
||||||
@@ -53,6 +57,7 @@ public func ELOG(_ message: StaticString, file: StaticString = #file, function:
|
|||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - message: String or format string
|
/// - message: String or format string
|
||||||
/// - args: optional args for format string
|
/// - args: optional args for format string
|
||||||
|
@inlinable
|
||||||
public func ILOG(_ message: StaticString, file: StaticString = #file, function: StaticString = #function, line: UInt = #line, _ args: CVarArg...) {
|
public func ILOG(_ message: StaticString, file: StaticString = #file, function: StaticString = #function, line: UInt = #line, _ args: CVarArg...) {
|
||||||
OSLog.info(message, args)
|
OSLog.info(message, args)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -204,5 +204,7 @@
|
|||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
</array>
|
</array>
|
||||||
|
<key>UIFileSharingEnabled</key>
|
||||||
|
<true/>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import Foundation
|
|||||||
import AltStoreCore
|
import AltStoreCore
|
||||||
|
|
||||||
@available(iOS 14, *)
|
@available(iOS 14, *)
|
||||||
class IntentHandler: NSObject, RefreshAllIntentHandling
|
final class IntentHandler: NSObject, RefreshAllIntentHandling
|
||||||
{
|
{
|
||||||
private let queue = DispatchQueue(label: "io.altstore.IntentHandler")
|
private let queue = DispatchQueue(label: "io.altstore.IntentHandler")
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import minimuxer
|
|||||||
import AltStoreCore
|
import AltStoreCore
|
||||||
import UniformTypeIdentifiers
|
import UniformTypeIdentifiers
|
||||||
|
|
||||||
class LaunchViewController: RSTLaunchViewController, UIDocumentPickerDelegate
|
final class LaunchViewController: RSTLaunchViewController, UIDocumentPickerDelegate
|
||||||
{
|
{
|
||||||
private var didFinishLaunching = false
|
private var didFinishLaunching = false
|
||||||
|
|
||||||
@@ -47,6 +47,7 @@ class LaunchViewController: RSTLaunchViewController, UIDocumentPickerDelegate
|
|||||||
|
|
||||||
override func viewDidAppear(_ animated: Bool) {
|
override func viewDidAppear(_ animated: Bool) {
|
||||||
super.viewDidAppear(true)
|
super.viewDidAppear(true)
|
||||||
|
#if !targetEnvironment(simulator)
|
||||||
start_em_proxy(bind_addr: Consts.Proxy.serverURL)
|
start_em_proxy(bind_addr: Consts.Proxy.serverURL)
|
||||||
|
|
||||||
guard let pf = fetchPairingFile() else {
|
guard let pf = fetchPairingFile() else {
|
||||||
@@ -54,6 +55,7 @@ class LaunchViewController: RSTLaunchViewController, UIDocumentPickerDelegate
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
start_minimuxer_threads(pf)
|
start_minimuxer_threads(pf)
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
func fetchPairingFile() -> String? {
|
func fetchPairingFile() -> String? {
|
||||||
@@ -77,7 +79,7 @@ class LaunchViewController: RSTLaunchViewController, UIDocumentPickerDelegate
|
|||||||
} else {
|
} else {
|
||||||
// Show an alert explaining the pairing file
|
// Show an alert explaining the pairing file
|
||||||
// Create new Alert
|
// Create new Alert
|
||||||
let dialogMessage = UIAlertController(title: "Pairing File", message: "Select the pairing file for your device. For more information, go to https://youtu.be/dQw4w9WgXcQ", preferredStyle: .alert)
|
let dialogMessage = UIAlertController(title: "Pairing File", message: "Select the pairing file for your device. For more information, go to https://wiki.sidestore.io/guides/install#pairing-process", preferredStyle: .alert)
|
||||||
|
|
||||||
// Create OK button with action handler
|
// Create OK button with action handler
|
||||||
let ok = UIAlertAction(title: "OK", style: .default, handler: { (action) -> Void in
|
let ok = UIAlertAction(title: "OK", style: .default, handler: { (action) -> Void in
|
||||||
@@ -147,7 +149,17 @@ class LaunchViewController: RSTLaunchViewController, UIDocumentPickerDelegate
|
|||||||
|
|
||||||
func start_minimuxer_threads(_ pairing_file: String) {
|
func start_minimuxer_threads(_ pairing_file: String) {
|
||||||
set_usbmuxd_socket()
|
set_usbmuxd_socket()
|
||||||
|
#if false // Retries
|
||||||
|
var res = start_minimuxer(pairing_file: pairing_file)
|
||||||
|
var attempts = 10
|
||||||
|
while (attempts != 0 && res != 0) {
|
||||||
|
print("start_minimuxer `res` != 0, retry #\(attempts)")
|
||||||
|
res = start_minimuxer(pairing_file: pairing_file)
|
||||||
|
attempts -= 1
|
||||||
|
}
|
||||||
|
#else
|
||||||
let res = start_minimuxer(pairing_file: pairing_file)
|
let res = start_minimuxer(pairing_file: pairing_file)
|
||||||
|
#endif
|
||||||
if res != 0 {
|
if res != 0 {
|
||||||
displayError("minimuxer failed to start. Incorrect arguments were passed.")
|
displayError("minimuxer failed to start. Incorrect arguments were passed.")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ extension AppManager
|
|||||||
}
|
}
|
||||||
|
|
||||||
@available(iOS 13, *)
|
@available(iOS 13, *)
|
||||||
class AppManagerPublisher: ObservableObject
|
final class AppManagerPublisher: ObservableObject
|
||||||
{
|
{
|
||||||
@Published
|
@Published
|
||||||
fileprivate(set) var installationProgress = [String: Progress]()
|
fileprivate(set) var installationProgress = [String: Progress]()
|
||||||
@@ -42,7 +42,7 @@ private func ==(lhs: OperatingSystemVersion, rhs: OperatingSystemVersion) -> Boo
|
|||||||
return (lhs.majorVersion == rhs.majorVersion && lhs.minorVersion == rhs.minorVersion && lhs.patchVersion == rhs.patchVersion)
|
return (lhs.majorVersion == rhs.majorVersion && lhs.minorVersion == rhs.minorVersion && lhs.patchVersion == rhs.patchVersion)
|
||||||
}
|
}
|
||||||
|
|
||||||
class AppManager
|
final class AppManager
|
||||||
{
|
{
|
||||||
static let shared = AppManager()
|
static let shared = AppManager()
|
||||||
|
|
||||||
@@ -392,7 +392,8 @@ extension AppManager
|
|||||||
func fetchAppIDs(completionHandler: @escaping (Result<([AppID], NSManagedObjectContext), Error>) -> Void)
|
func fetchAppIDs(completionHandler: @escaping (Result<([AppID], NSManagedObjectContext), Error>) -> Void)
|
||||||
{
|
{
|
||||||
let authenticationOperation = self.authenticate(presentingViewController: nil) { (result) in
|
let authenticationOperation = self.authenticate(presentingViewController: nil) { (result) in
|
||||||
print("Authenticated for fetching App IDs with result:", result)
|
// result contains name, email, auth token, OTP and other possibly personal/account specific info. we don't want this logged
|
||||||
|
//print("Authenticated for fetching App IDs with result:", result)
|
||||||
}
|
}
|
||||||
|
|
||||||
let fetchAppIDsOperation = FetchAppIDsOperation(context: authenticationOperation.context)
|
let fetchAppIDsOperation = FetchAppIDsOperation(context: authenticationOperation.context)
|
||||||
@@ -664,7 +665,7 @@ extension AppManager
|
|||||||
@available(iOS 14, *)
|
@available(iOS 14, *)
|
||||||
func enableJIT(for installedApp: InstalledApp, completionHandler: @escaping (Result<Void, Error>) -> Void)
|
func enableJIT(for installedApp: InstalledApp, completionHandler: @escaping (Result<Void, Error>) -> Void)
|
||||||
{
|
{
|
||||||
class Context: OperationContext, EnableJITContext
|
final class Context: OperationContext, EnableJITContext
|
||||||
{
|
{
|
||||||
var installedApp: InstalledApp?
|
var installedApp: InstalledApp?
|
||||||
}
|
}
|
||||||
@@ -684,7 +685,7 @@ extension AppManager
|
|||||||
@available(iOS 14.0, *)
|
@available(iOS 14.0, *)
|
||||||
func patch(resignedApp: ALTApplication, presentingViewController: UIViewController, context authContext: AuthenticatedOperationContext, completionHandler: @escaping (Result<InstalledApp, Error>) -> Void) -> PatchAppOperation
|
func patch(resignedApp: ALTApplication, presentingViewController: UIViewController, context authContext: AuthenticatedOperationContext, completionHandler: @escaping (Result<InstalledApp, Error>) -> Void) -> PatchAppOperation
|
||||||
{
|
{
|
||||||
class Context: InstallAppOperationContext, PatchAppContext
|
final class Context: InstallAppOperationContext, PatchAppContext
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class InstalledAppsCollectionHeaderView: UICollectionReusableView
|
final class InstalledAppsCollectionHeaderView: UICollectionReusableView
|
||||||
{
|
{
|
||||||
let textLabel: UILabel
|
let textLabel: UILabel
|
||||||
let button: UIButton
|
let button: UIButton
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
import UIKit
|
import UIKit
|
||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
class InstalledAppCollectionViewCell: UICollectionViewCell
|
final class InstalledAppCollectionViewCell: UICollectionViewCell
|
||||||
{
|
{
|
||||||
private(set) var deactivateBadge: UIView?
|
private(set) var deactivateBadge: UIView?
|
||||||
|
|
||||||
@@ -55,13 +55,13 @@ class InstalledAppCollectionViewCell: UICollectionViewCell
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class InstalledAppsCollectionFooterView: UICollectionReusableView
|
final class InstalledAppsCollectionFooterView: UICollectionReusableView
|
||||||
{
|
{
|
||||||
@IBOutlet var textLabel: UILabel!
|
@IBOutlet var textLabel: UILabel!
|
||||||
@IBOutlet var button: UIButton!
|
@IBOutlet var button: UIButton!
|
||||||
}
|
}
|
||||||
|
|
||||||
class NoUpdatesCollectionViewCell: UICollectionViewCell
|
final class NoUpdatesCollectionViewCell: UICollectionViewCell
|
||||||
{
|
{
|
||||||
@IBOutlet var blurView: UIVisualEffectView!
|
@IBOutlet var blurView: UIVisualEffectView!
|
||||||
|
|
||||||
@@ -73,7 +73,7 @@ class NoUpdatesCollectionViewCell: UICollectionViewCell
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class UpdatesCollectionHeaderView: UICollectionReusableView
|
final class UpdatesCollectionHeaderView: UICollectionReusableView
|
||||||
{
|
{
|
||||||
let button = PillButton(type: .system)
|
let button = PillButton(type: .system)
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ extension MyAppsViewController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class MyAppsViewController: UICollectionViewController
|
final class MyAppsViewController: UICollectionViewController
|
||||||
{
|
{
|
||||||
private let coordinator = NSFileCoordinator()
|
private let coordinator = NSFileCoordinator()
|
||||||
private let operationQueue = OperationQueue()
|
private let operationQueue = OperationQueue()
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ extension UpdateCollectionViewCell
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc class UpdateCollectionViewCell: UICollectionViewCell
|
@objc final class UpdateCollectionViewCell: UICollectionViewCell
|
||||||
{
|
{
|
||||||
var mode: Mode = .expanded {
|
var mode: Mode = .expanded {
|
||||||
didSet {
|
didSet {
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class NewsCollectionViewCell: UICollectionViewCell
|
final class NewsCollectionViewCell: UICollectionViewCell
|
||||||
{
|
{
|
||||||
@IBOutlet var titleLabel: UILabel!
|
@IBOutlet var titleLabel: UILabel!
|
||||||
@IBOutlet var captionLabel: UILabel!
|
@IBOutlet var captionLabel: UILabel!
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import Roxas
|
|||||||
|
|
||||||
import Nuke
|
import Nuke
|
||||||
|
|
||||||
private class AppBannerFooterView: UICollectionReusableView
|
private final class AppBannerFooterView: UICollectionReusableView
|
||||||
{
|
{
|
||||||
let bannerView = AppBannerView(frame: .zero)
|
let bannerView = AppBannerView(frame: .zero)
|
||||||
let tapGestureRecognizer = UITapGestureRecognizer(target: nil, action: nil)
|
let tapGestureRecognizer = UITapGestureRecognizer(target: nil, action: nil)
|
||||||
@@ -41,7 +41,7 @@ private class AppBannerFooterView: UICollectionReusableView
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class NewsViewController: UICollectionViewController
|
final class NewsViewController: UICollectionViewController
|
||||||
{
|
{
|
||||||
private lazy var dataSource = self.makeDataSource()
|
private lazy var dataSource = self.makeDataSource()
|
||||||
private lazy var placeholderView = RSTPlaceholderView(frame: .zero)
|
private lazy var placeholderView = RSTPlaceholderView(frame: .zero)
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ enum AuthenticationError: LocalizedError
|
|||||||
}
|
}
|
||||||
|
|
||||||
@objc(AuthenticationOperation)
|
@objc(AuthenticationOperation)
|
||||||
class AuthenticationOperation: ResultOperation<(ALTTeam, ALTCertificate, ALTAppleAPISession)>
|
final class AuthenticationOperation: ResultOperation<(ALTTeam, ALTCertificate, ALTAppleAPISession)>
|
||||||
{
|
{
|
||||||
let context: AuthenticatedOperationContext
|
let context: AuthenticatedOperationContext
|
||||||
|
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ private let ReceivedApplicationState: @convention(c) (CFNotificationCenter?, Uns
|
|||||||
}
|
}
|
||||||
|
|
||||||
@objc(BackgroundRefreshAppsOperation)
|
@objc(BackgroundRefreshAppsOperation)
|
||||||
class BackgroundRefreshAppsOperation: ResultOperation<[String: Result<InstalledApp, Error>]>
|
final class BackgroundRefreshAppsOperation: ResultOperation<[String: Result<InstalledApp, Error>]>
|
||||||
{
|
{
|
||||||
let installedApps: [InstalledApp]
|
let installedApps: [InstalledApp]
|
||||||
private let managedObjectContext: NSManagedObjectContext
|
private let managedObjectContext: NSManagedObjectContext
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import Roxas
|
|||||||
import minimuxer
|
import minimuxer
|
||||||
|
|
||||||
@objc(DeactivateAppOperation)
|
@objc(DeactivateAppOperation)
|
||||||
class DeactivateAppOperation: ResultOperation<InstalledApp>
|
final class DeactivateAppOperation: ResultOperation<InstalledApp>
|
||||||
{
|
{
|
||||||
let app: InstalledApp
|
let app: InstalledApp
|
||||||
let context: OperationContext
|
let context: OperationContext
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ private extension DownloadAppOperation
|
|||||||
}
|
}
|
||||||
|
|
||||||
@objc(DownloadAppOperation)
|
@objc(DownloadAppOperation)
|
||||||
class DownloadAppOperation: ResultOperation<ALTApplication>
|
final class DownloadAppOperation: ResultOperation<ALTApplication>
|
||||||
{
|
{
|
||||||
let app: AppProtocol
|
let app: AppProtocol
|
||||||
let context: AppOperationContext
|
let context: AppOperationContext
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ protocol EnableJITContext
|
|||||||
}
|
}
|
||||||
|
|
||||||
@available(iOS 14, *)
|
@available(iOS 14, *)
|
||||||
class EnableJITOperation<Context: EnableJITContext>: ResultOperation<Void>
|
final class EnableJITOperation<Context: EnableJITContext>: ResultOperation<Void>
|
||||||
{
|
{
|
||||||
let context: Context
|
let context: Context
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import AltSign
|
|||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
@objc(FetchAnisetteDataOperation)
|
@objc(FetchAnisetteDataOperation)
|
||||||
class FetchAnisetteDataOperation: ResultOperation<ALTAnisetteData>
|
final class FetchAnisetteDataOperation: ResultOperation<ALTAnisetteData>
|
||||||
{
|
{
|
||||||
let context: OperationContext
|
let context: OperationContext
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import AltSign
|
|||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
@objc(FetchAppIDsOperation)
|
@objc(FetchAppIDsOperation)
|
||||||
class FetchAppIDsOperation: ResultOperation<([AppID], NSManagedObjectContext)>
|
final class FetchAppIDsOperation: ResultOperation<([AppID], NSManagedObjectContext)>
|
||||||
{
|
{
|
||||||
let context: AuthenticatedOperationContext
|
let context: AuthenticatedOperationContext
|
||||||
let managedObjectContext: NSManagedObjectContext
|
let managedObjectContext: NSManagedObjectContext
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import AltSign
|
|||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
@objc(FetchProvisioningProfilesOperation)
|
@objc(FetchProvisioningProfilesOperation)
|
||||||
class FetchProvisioningProfilesOperation: ResultOperation<[String: ALTProvisioningProfile]>
|
final class FetchProvisioningProfilesOperation: ResultOperation<[String: ALTProvisioningProfile]>
|
||||||
{
|
{
|
||||||
let context: AppOperationContext
|
let context: AppOperationContext
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import AltStoreCore
|
|||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
@objc(FetchSourceOperation)
|
@objc(FetchSourceOperation)
|
||||||
class FetchSourceOperation: ResultOperation<Source>
|
final class FetchSourceOperation: ResultOperation<Source>
|
||||||
{
|
{
|
||||||
let sourceURL: URL
|
let sourceURL: URL
|
||||||
let managedObjectContext: NSManagedObjectContext
|
let managedObjectContext: NSManagedObjectContext
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ extension FetchTrustedSourcesOperation
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class FetchTrustedSourcesOperation: ResultOperation<[FetchTrustedSourcesOperation.TrustedSource]>
|
final class FetchTrustedSourcesOperation: ResultOperation<[FetchTrustedSourcesOperation.TrustedSource]>
|
||||||
{
|
{
|
||||||
override func main()
|
override func main()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import AltSign
|
|||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
@objc(InstallAppOperation)
|
@objc(InstallAppOperation)
|
||||||
class InstallAppOperation: ResultOperation<InstalledApp>
|
final class InstallAppOperation: ResultOperation<InstalledApp>
|
||||||
{
|
{
|
||||||
let context: InstallAppOperationContext
|
let context: InstallAppOperationContext
|
||||||
|
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ class OperationContext
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class AuthenticatedOperationContext: OperationContext
|
final class AuthenticatedOperationContext: OperationContext
|
||||||
{
|
{
|
||||||
var session: ALTAppleAPISession?
|
var session: ALTAppleAPISession?
|
||||||
|
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ private struct OTAUpdate
|
|||||||
}
|
}
|
||||||
|
|
||||||
@available(iOS 14, *)
|
@available(iOS 14, *)
|
||||||
class PatchAppOperation: ResultOperation<Void>
|
final class PatchAppOperation: ResultOperation<Void>
|
||||||
{
|
{
|
||||||
let context: PatchAppContext
|
let context: PatchAppContext
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ extension PatchViewController
|
|||||||
}
|
}
|
||||||
|
|
||||||
@available(iOS 14.0, *)
|
@available(iOS 14.0, *)
|
||||||
class PatchViewController: UIViewController
|
final class PatchViewController: UIViewController
|
||||||
{
|
{
|
||||||
var patchApp: AnyApp?
|
var patchApp: AnyApp?
|
||||||
var installedApp: InstalledApp?
|
var installedApp: InstalledApp?
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import Roxas
|
|||||||
import minimuxer
|
import minimuxer
|
||||||
|
|
||||||
@objc(RefreshAppOperation)
|
@objc(RefreshAppOperation)
|
||||||
class RefreshAppOperation: ResultOperation<InstalledApp>
|
final class RefreshAppOperation: ResultOperation<InstalledApp>
|
||||||
{
|
{
|
||||||
let context: AppOperationContext
|
let context: AppOperationContext
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import CoreData
|
|||||||
import AltStoreCore
|
import AltStoreCore
|
||||||
import AltSign
|
import AltSign
|
||||||
|
|
||||||
class RefreshGroup: NSObject
|
final class RefreshGroup: NSObject
|
||||||
{
|
{
|
||||||
let context: AuthenticatedOperationContext
|
let context: AuthenticatedOperationContext
|
||||||
let progress = Progress.discreteProgress(totalUnitCount: 0)
|
let progress = Progress.discreteProgress(totalUnitCount: 0)
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
@objc(RemoveAppBackupOperation)
|
@objc(RemoveAppBackupOperation)
|
||||||
class RemoveAppBackupOperation: ResultOperation<Void>
|
final class RemoveAppBackupOperation: ResultOperation<Void>
|
||||||
{
|
{
|
||||||
let context: InstallAppOperationContext
|
let context: InstallAppOperationContext
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import AltStoreCore
|
|||||||
import minimuxer
|
import minimuxer
|
||||||
|
|
||||||
@objc(RemoveAppOperation)
|
@objc(RemoveAppOperation)
|
||||||
class RemoveAppOperation: ResultOperation<InstalledApp>
|
final class RemoveAppOperation: ResultOperation<InstalledApp>
|
||||||
{
|
{
|
||||||
let context: InstallAppOperationContext
|
let context: InstallAppOperationContext
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import AltStoreCore
|
|||||||
import AltSign
|
import AltSign
|
||||||
|
|
||||||
@objc(ResignAppOperation)
|
@objc(ResignAppOperation)
|
||||||
class ResignAppOperation: ResultOperation<ALTApplication>
|
final class ResignAppOperation: ResultOperation<ALTApplication>
|
||||||
{
|
{
|
||||||
let context: InstallAppOperationContext
|
let context: InstallAppOperationContext
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import Network
|
|||||||
import AltStoreCore
|
import AltStoreCore
|
||||||
|
|
||||||
@objc(SendAppOperation)
|
@objc(SendAppOperation)
|
||||||
class SendAppOperation: ResultOperation<()>
|
final class SendAppOperation: ResultOperation<()>
|
||||||
{
|
{
|
||||||
let context: InstallAppOperationContext
|
let context: InstallAppOperationContext
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ extension UpdatePatronsOperation
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class UpdatePatronsOperation: ResultOperation<Void>
|
final class UpdatePatronsOperation: ResultOperation<Void>
|
||||||
{
|
{
|
||||||
let context: NSManagedObjectContext
|
let context: NSManagedObjectContext
|
||||||
|
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ enum VerificationError: ALTLocalizedError
|
|||||||
}
|
}
|
||||||
|
|
||||||
@objc(VerifyAppOperation)
|
@objc(VerifyAppOperation)
|
||||||
class VerifyAppOperation: ResultOperation<Void>
|
final class VerifyAppOperation: ResultOperation<Void>
|
||||||
{
|
{
|
||||||
let context: AppOperationContext
|
let context: AppOperationContext
|
||||||
var verificationHandler: ((VerificationError) -> Bool)?
|
var verificationHandler: ((VerificationError) -> Bool)?
|
||||||
|
|||||||
Binary file not shown.
@@ -11,7 +11,7 @@ import AltStoreCore
|
|||||||
import EmotionalDamage
|
import EmotionalDamage
|
||||||
|
|
||||||
@available(iOS 13, *)
|
@available(iOS 13, *)
|
||||||
class SceneDelegate: UIResponder, UIWindowSceneDelegate
|
final class SceneDelegate: UIResponder, UIWindowSceneDelegate
|
||||||
{
|
{
|
||||||
var window: UIWindow?
|
var window: UIWindow?
|
||||||
|
|
||||||
|
|||||||
@@ -16,9 +16,10 @@
|
|||||||
<key>Key</key>
|
<key>Key</key>
|
||||||
<string>customAnisetteURL</string>
|
<string>customAnisetteURL</string>
|
||||||
<key>DefaultValue</key>
|
<key>DefaultValue</key>
|
||||||
<string>http://191.101.206.188:6969</string>
|
<string>http://ani.sidestore.io</string>
|
||||||
<key>Titles</key>
|
<key>Titles</key>
|
||||||
<array>
|
<array>
|
||||||
|
<string>SideStore</string>
|
||||||
<string>Macley (US)</string>
|
<string>Macley (US)</string>
|
||||||
<string>Macley (DE)</string>
|
<string>Macley (DE)</string>
|
||||||
<string>DrPudding</string>
|
<string>DrPudding</string>
|
||||||
@@ -31,6 +32,7 @@
|
|||||||
</array>
|
</array>
|
||||||
<key>Values</key>
|
<key>Values</key>
|
||||||
<array>
|
<array>
|
||||||
|
<string>http://ani.sidestore.io</string>
|
||||||
<string>http://us1.sternserv.tech</string>
|
<string>http://us1.sternserv.tech</string>
|
||||||
<string>http://de1.sternserv.tech</string>
|
<string>http://de1.sternserv.tech</string>
|
||||||
<string>https://sign.rheaa.xyz</string>
|
<string>https://sign.rheaa.xyz</string>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
@objc(ErrorLogTableViewCell)
|
@objc(ErrorLogTableViewCell)
|
||||||
class ErrorLogTableViewCell: UITableViewCell
|
final class ErrorLogTableViewCell: UITableViewCell
|
||||||
{
|
{
|
||||||
@IBOutlet var appIconImageView: AppIconImageView!
|
@IBOutlet var appIconImageView: AppIconImageView!
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,9 @@ import Roxas
|
|||||||
|
|
||||||
import Nuke
|
import Nuke
|
||||||
|
|
||||||
class ErrorLogViewController: UITableViewController
|
import QuickLook
|
||||||
|
|
||||||
|
final class ErrorLogViewController: UITableViewController
|
||||||
{
|
{
|
||||||
private lazy var dataSource = self.makeDataSource()
|
private lazy var dataSource = self.makeDataSource()
|
||||||
private var expandedErrorIDs = Set<NSManagedObjectID>()
|
private var expandedErrorIDs = Set<NSManagedObjectID>()
|
||||||
@@ -176,6 +178,15 @@ private extension ErrorLogViewController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@IBAction func showMinimuxerLogs(_ sender: UIBarButtonItem)
|
||||||
|
{
|
||||||
|
// Show minimuxer.log
|
||||||
|
let previewController = QLPreviewController()
|
||||||
|
previewController.dataSource = self
|
||||||
|
let navigationController = UINavigationController(rootViewController: previewController)
|
||||||
|
present(navigationController, animated: true, completion: nil)
|
||||||
|
}
|
||||||
|
|
||||||
@IBAction func clearLoggedErrors(_ sender: UIBarButtonItem)
|
@IBAction func clearLoggedErrors(_ sender: UIBarButtonItem)
|
||||||
{
|
{
|
||||||
let alertController = UIAlertController(title: NSLocalizedString("Are you sure you want to clear the error log?", comment: ""), message: nil, preferredStyle: .actionSheet)
|
let alertController = UIAlertController(title: NSLocalizedString("Are you sure you want to clear the error log?", comment: ""), message: nil, preferredStyle: .actionSheet)
|
||||||
@@ -299,3 +310,14 @@ extension ErrorLogViewController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extension ErrorLogViewController: QLPreviewControllerDataSource {
|
||||||
|
func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
|
||||||
|
let fileURL = FileManager.default.documentsDirectory.appendingPathComponent("minimuxer.log")
|
||||||
|
return fileURL as QLPreviewItem
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ extension InsetGroupTableViewCell
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class InsetGroupTableViewCell: UITableViewCell
|
final class InsetGroupTableViewCell: UITableViewCell
|
||||||
{
|
{
|
||||||
#if !TARGET_INTERFACE_BUILDER
|
#if !TARGET_INTERFACE_BUILDER
|
||||||
@IBInspectable var style: Style = .single {
|
@IBInspectable var style: Style = .single {
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class LicensesViewController: UIViewController
|
final class LicensesViewController: UIViewController
|
||||||
{
|
{
|
||||||
private var _didAppear = false
|
private var _didAppear = false
|
||||||
|
|
||||||
|
|||||||
@@ -8,12 +8,12 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class PatronCollectionViewCell: UICollectionViewCell
|
final class PatronCollectionViewCell: UICollectionViewCell
|
||||||
{
|
{
|
||||||
@IBOutlet var textLabel: UILabel!
|
@IBOutlet var textLabel: UILabel!
|
||||||
}
|
}
|
||||||
|
|
||||||
class PatronsHeaderView: UICollectionReusableView
|
final class PatronsHeaderView: UICollectionReusableView
|
||||||
{
|
{
|
||||||
let textLabel = UILabel()
|
let textLabel = UILabel()
|
||||||
|
|
||||||
@@ -31,7 +31,7 @@ class PatronsHeaderView: UICollectionReusableView
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class PatronsFooterView: UICollectionReusableView
|
final class PatronsFooterView: UICollectionReusableView
|
||||||
{
|
{
|
||||||
let button = UIButton(type: .system)
|
let button = UIButton(type: .system)
|
||||||
|
|
||||||
@@ -53,7 +53,7 @@ class PatronsFooterView: UICollectionReusableView
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class AboutPatreonHeaderView: UICollectionReusableView
|
final class AboutPatreonHeaderView: UICollectionReusableView
|
||||||
{
|
{
|
||||||
@IBOutlet var supportButton: UIButton!
|
@IBOutlet var supportButton: UIButton!
|
||||||
@IBOutlet var accountButton: UIButton!
|
@IBOutlet var accountButton: UIButton!
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ extension PatreonViewController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class PatreonViewController: UICollectionViewController
|
final class PatreonViewController: UICollectionViewController
|
||||||
{
|
{
|
||||||
private lazy var dataSource = self.makeDataSource()
|
private lazy var dataSource = self.makeDataSource()
|
||||||
private lazy var patronsDataSource = self.makePatronsDataSource()
|
private lazy var patronsDataSource = self.makePatronsDataSource()
|
||||||
@@ -173,8 +173,7 @@ private extension PatreonViewController
|
|||||||
|
|
||||||
@objc func openPatreonURL(_ sender: UIButton)
|
@objc func openPatreonURL(_ sender: UIButton)
|
||||||
{
|
{
|
||||||
// TODO: Is this the final URL? @JoeMatt
|
let patreonURL = URL(string: "https://www.patreon.com/SideStore")!
|
||||||
let patreonURL = URL(string: "https://www.patreon.com/JitStreamer")!
|
|
||||||
|
|
||||||
let safariViewController = SFSafariViewController(url: patreonURL)
|
let safariViewController = SFSafariViewController(url: patreonURL)
|
||||||
safariViewController.preferredControlTintColor = self.view.tintColor
|
safariViewController.preferredControlTintColor = self.view.tintColor
|
||||||
|
|||||||
@@ -12,14 +12,14 @@ import AltStoreCore
|
|||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
@objc(RefreshAttemptTableViewCell)
|
@objc(RefreshAttemptTableViewCell)
|
||||||
private class RefreshAttemptTableViewCell: UITableViewCell
|
private final class RefreshAttemptTableViewCell: UITableViewCell
|
||||||
{
|
{
|
||||||
@IBOutlet var successLabel: UILabel!
|
@IBOutlet var successLabel: UILabel!
|
||||||
@IBOutlet var dateLabel: UILabel!
|
@IBOutlet var dateLabel: UILabel!
|
||||||
@IBOutlet var errorDescriptionLabel: UILabel!
|
@IBOutlet var errorDescriptionLabel: UILabel!
|
||||||
}
|
}
|
||||||
|
|
||||||
class RefreshAttemptsViewController: UITableViewController
|
final class RefreshAttemptsViewController: UITableViewController
|
||||||
{
|
{
|
||||||
private lazy var dataSource = self.makeDataSource()
|
private lazy var dataSource = self.makeDataSource()
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
<color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
<color key="separatorColor" white="1" alpha="0.25" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
<color key="separatorColor" white="1" alpha="0.25" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
<label key="tableFooterView" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="SideStore 1.0" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="bUR-rp-Nw2">
|
<label key="tableFooterView" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="SideStore 1.0" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="bUR-rp-Nw2">
|
||||||
<rect key="frame" x="0.0" y="1092" width="375" height="25"/>
|
<rect key="frame" x="0.0" y="1082" width="375" height="25"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
<color key="textColor" white="1" alpha="0.69999999999999996" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
<color key="textColor" white="1" alpha="0.69999999999999996" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
@@ -577,7 +577,7 @@
|
|||||||
<edgeInsets key="layoutMargins" top="8" left="30" bottom="8" right="30"/>
|
<edgeInsets key="layoutMargins" top="8" left="30" bottom="8" right="30"/>
|
||||||
<userDefinedRuntimeAttributes>
|
<userDefinedRuntimeAttributes>
|
||||||
<userDefinedRuntimeAttribute type="number" keyPath="style">
|
<userDefinedRuntimeAttribute type="number" keyPath="style">
|
||||||
<integer key="value" value="3"/>
|
<integer key="value" value="2"/>
|
||||||
</userDefinedRuntimeAttribute>
|
</userDefinedRuntimeAttribute>
|
||||||
<userDefinedRuntimeAttribute type="boolean" keyPath="isSelectable" value="YES"/>
|
<userDefinedRuntimeAttribute type="boolean" keyPath="isSelectable" value="YES"/>
|
||||||
</userDefinedRuntimeAttributes>
|
</userDefinedRuntimeAttributes>
|
||||||
@@ -585,9 +585,42 @@
|
|||||||
<segue destination="g8a-Rf-zWa" kind="show" identifier="showErrorLog" id="SSW-vL-86I"/>
|
<segue destination="g8a-Rf-zWa" kind="show" identifier="showErrorLog" id="SSW-vL-86I"/>
|
||||||
</connections>
|
</connections>
|
||||||
</tableViewCell>
|
</tableViewCell>
|
||||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" rowHeight="51" id="fj2-EJ-Z98" customClass="InsetGroupTableViewCell" customModule="SideStore" customModuleProvider="target">
|
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" rowHeight="51" id="VNn-u4-cN8" customClass="InsetGroupTableViewCell" customModule="SideStore" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="1023" width="375" height="51"/>
|
<rect key="frame" x="0.0" y="1023" width="375" height="51"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="VNn-u4-cN8" id="4bh-qe-l2N">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="375" height="51"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Reset Pairing File" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ysS-9s-dXm">
|
||||||
|
<rect key="frame" x="30" y="15.5" width="140" height="20.5"/>
|
||||||
|
<fontDescription key="fontDescription" type="boldSystem" pointSize="17"/>
|
||||||
|
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="Next" translatesAutoresizingMaskIntoConstraints="NO" id="r09-mH-pOD">
|
||||||
|
<rect key="frame" x="327" y="16.5" width="18" height="18"/>
|
||||||
|
</imageView>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="r09-mH-pOD" firstAttribute="centerY" secondItem="4bh-qe-l2N" secondAttribute="centerY" id="02u-Os-L7r"/>
|
||||||
|
<constraint firstItem="ysS-9s-dXm" firstAttribute="centerY" secondItem="4bh-qe-l2N" secondAttribute="centerY" id="QOA-3E-85e"/>
|
||||||
|
<constraint firstItem="ysS-9s-dXm" firstAttribute="leading" secondItem="4bh-qe-l2N" secondAttribute="leadingMargin" id="gRE-CM-w21"/>
|
||||||
|
<constraint firstAttribute="trailingMargin" secondItem="r09-mH-pOD" secondAttribute="trailing" id="udf-VS-o6t"/>
|
||||||
|
</constraints>
|
||||||
|
</tableViewCellContentView>
|
||||||
|
<color key="backgroundColor" white="1" alpha="0.14999999999999999" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<edgeInsets key="layoutMargins" top="8" left="30" bottom="8" right="30"/>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="number" keyPath="style">
|
||||||
|
<integer key="value" value="2"/>
|
||||||
|
</userDefinedRuntimeAttribute>
|
||||||
|
<userDefinedRuntimeAttribute type="boolean" keyPath="isSelectable" value="YES"/>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
|
</tableViewCell>
|
||||||
|
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" rowHeight="51" id="fj2-EJ-Z98" customClass="InsetGroupTableViewCell" customModule="SideStore" customModuleProvider="target">
|
||||||
|
<rect key="frame" x="0.0" y="1074" width="375" height="51"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="fj2-EJ-Z98" id="BcT-Fs-KNg">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="fj2-EJ-Z98" id="BcT-Fs-KNg">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="375" height="51"/>
|
<rect key="frame" x="0.0" y="0.0" width="375" height="51"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
@@ -1018,11 +1051,18 @@ Settings by i cons from the Noun Project</string>
|
|||||||
</connections>
|
</connections>
|
||||||
</tableView>
|
</tableView>
|
||||||
<navigationItem key="navigationItem" title="Error Log" largeTitleDisplayMode="never" id="a1p-3W-bSi">
|
<navigationItem key="navigationItem" title="Error Log" largeTitleDisplayMode="never" id="a1p-3W-bSi">
|
||||||
<barButtonItem key="rightBarButtonItem" systemItem="trash" id="BnQ-Eh-1gC">
|
<rightBarButtonItems>
|
||||||
|
<barButtonItem systemItem="trash" id="BnQ-Eh-1gC">
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="clearLoggedErrors:" destination="g8a-Rf-zWa" id="faq-89-H5j"/>
|
<action selector="clearLoggedErrors:" destination="g8a-Rf-zWa" id="faq-89-H5j"/>
|
||||||
</connections>
|
</connections>
|
||||||
</barButtonItem>
|
</barButtonItem>
|
||||||
|
<barButtonItem image="ladybug" catalog="system" id="1cD-4y-vTJ" userLabel="Share">
|
||||||
|
<connections>
|
||||||
|
<action selector="showMinimuxerLogs:" destination="g8a-Rf-zWa" id="V0f-0y-C6C"/>
|
||||||
|
</connections>
|
||||||
|
</barButtonItem>
|
||||||
|
</rightBarButtonItems>
|
||||||
</navigationItem>
|
</navigationItem>
|
||||||
</tableViewController>
|
</tableViewController>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="rU1-TZ-TD8" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="rU1-TZ-TD8" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
@@ -1033,6 +1073,7 @@ Settings by i cons from the Noun Project</string>
|
|||||||
<resources>
|
<resources>
|
||||||
<image name="Next" width="18" height="18"/>
|
<image name="Next" width="18" height="18"/>
|
||||||
<image name="Settings" width="20" height="20"/>
|
<image name="Settings" width="20" height="20"/>
|
||||||
|
<image name="ladybug" catalog="system" width="128" height="122"/>
|
||||||
<namedColor name="SettingsBackground">
|
<namedColor name="SettingsBackground">
|
||||||
<color red="0.45098039215686275" green="0.015686274509803921" blue="0.68627450980392157" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color red="0.45098039215686275" green="0.015686274509803921" blue="0.68627450980392157" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
</namedColor>
|
</namedColor>
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import UIKit
|
|||||||
|
|
||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
class SettingsHeaderFooterView: UITableViewHeaderFooterView
|
final class SettingsHeaderFooterView: UITableViewHeaderFooterView
|
||||||
{
|
{
|
||||||
@IBOutlet var primaryLabel: UILabel!
|
@IBOutlet var primaryLabel: UILabel!
|
||||||
@IBOutlet var secondaryLabel: UILabel!
|
@IBOutlet var secondaryLabel: UILabel!
|
||||||
|
|||||||
@@ -53,11 +53,12 @@ extension SettingsViewController
|
|||||||
case sendFeedback
|
case sendFeedback
|
||||||
case refreshAttempts
|
case refreshAttempts
|
||||||
case errorLog
|
case errorLog
|
||||||
|
case resetPairingFile
|
||||||
case advancedSettings
|
case advancedSettings
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class SettingsViewController: UITableViewController
|
final class SettingsViewController: UITableViewController
|
||||||
{
|
{
|
||||||
private var activeTeam: Team?
|
private var activeTeam: Team?
|
||||||
|
|
||||||
@@ -268,6 +269,8 @@ private extension SettingsViewController
|
|||||||
let alertController = UIAlertController(title: NSLocalizedString("Are you sure you want to sign out?", comment: ""), message: NSLocalizedString("You will no longer be able to install or refresh apps once you sign out.", comment: ""), preferredStyle: .actionSheet)
|
let alertController = UIAlertController(title: NSLocalizedString("Are you sure you want to sign out?", comment: ""), message: NSLocalizedString("You will no longer be able to install or refresh apps once you sign out.", comment: ""), preferredStyle: .actionSheet)
|
||||||
alertController.addAction(UIAlertAction(title: NSLocalizedString("Sign Out", comment: ""), style: .destructive) { _ in signOut() })
|
alertController.addAction(UIAlertAction(title: NSLocalizedString("Sign Out", comment: ""), style: .destructive) { _ in signOut() })
|
||||||
alertController.addAction(.cancel)
|
alertController.addAction(.cancel)
|
||||||
|
//Fix crash on iPad
|
||||||
|
alertController.popoverPresentationController?.barButtonItem = sender
|
||||||
self.present(alertController, animated: true, completion: nil)
|
self.present(alertController, animated: true, completion: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -503,6 +506,30 @@ extension SettingsViewController
|
|||||||
let toastView = ToastView(text: NSLocalizedString("Cannot Send Mail", comment: ""), detailText: nil)
|
let toastView = ToastView(text: NSLocalizedString("Cannot Send Mail", comment: ""), detailText: nil)
|
||||||
toastView.show(in: self)
|
toastView.show(in: self)
|
||||||
}
|
}
|
||||||
|
case .resetPairingFile:
|
||||||
|
let filename = "ALTPairingFile.mobiledevicepairing"
|
||||||
|
let fm = FileManager.default
|
||||||
|
let documentsPath = fm.documentsDirectory.appendingPathComponent("/\(filename)")
|
||||||
|
let alertController = UIAlertController(
|
||||||
|
title: NSLocalizedString("Are you sure to reset the pairing file?", comment: ""),
|
||||||
|
message: NSLocalizedString("You can reset the pairing file when you cannot sideload apps or enable JIT. You need to restart SideStore.", comment: ""),
|
||||||
|
preferredStyle: UIAlertController.Style.actionSheet)
|
||||||
|
|
||||||
|
alertController.addAction(UIAlertAction(title: NSLocalizedString("Delete and Reset", comment: ""), style: .destructive){ _ in
|
||||||
|
if fm.fileExists(atPath: documentsPath.path), let contents = try? String(contentsOf: documentsPath), !contents.isEmpty {
|
||||||
|
try? fm.removeItem(atPath: documentsPath.path)
|
||||||
|
NSLog("Pairing File Reseted")
|
||||||
|
}
|
||||||
|
self.tableView.deselectRow(at: indexPath, animated: true)
|
||||||
|
let dialogMessage = UIAlertController(title: NSLocalizedString("Pairing File Reseted", comment: ""), message: NSLocalizedString("Please restart SideStore", comment: ""), preferredStyle: .alert)
|
||||||
|
self.present(dialogMessage, animated: true, completion: nil)
|
||||||
|
})
|
||||||
|
alertController.addAction(.cancel)
|
||||||
|
//Fix crash on iPad
|
||||||
|
alertController.popoverPresentationController?.sourceView = self.tableView
|
||||||
|
alertController.popoverPresentationController?.sourceRect = self.tableView.rectForRow(at: indexPath)
|
||||||
|
self.present(alertController, animated: true)
|
||||||
|
self.tableView.deselectRow(at: indexPath, animated: true)
|
||||||
case .advancedSettings:
|
case .advancedSettings:
|
||||||
// Create the URL that deep links to your app's custom settings.
|
// Create the URL that deep links to your app's custom settings.
|
||||||
if let url = URL(string: UIApplication.openSettingsURLString) {
|
if let url = URL(string: UIApplication.openSettingsURLString) {
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ struct SourceError: LocalizedError
|
|||||||
}
|
}
|
||||||
|
|
||||||
@objc(SourcesFooterView)
|
@objc(SourcesFooterView)
|
||||||
private class SourcesFooterView: TextCollectionReusableView
|
private final class SourcesFooterView: TextCollectionReusableView
|
||||||
{
|
{
|
||||||
@IBOutlet var activityIndicatorView: UIActivityIndicatorView!
|
@IBOutlet var activityIndicatorView: UIActivityIndicatorView!
|
||||||
@IBOutlet var textView: UITextView!
|
@IBOutlet var textView: UITextView!
|
||||||
@@ -46,7 +46,7 @@ extension SourcesViewController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class SourcesViewController: UICollectionViewController
|
final class SourcesViewController: UICollectionViewController
|
||||||
{
|
{
|
||||||
var deepLinkSourceURL: URL? {
|
var deepLinkSourceURL: URL? {
|
||||||
didSet {
|
didSet {
|
||||||
@@ -381,17 +381,16 @@ private extension SourcesViewController
|
|||||||
dispatchGroup.notify(queue: .main) {
|
dispatchGroup.notify(queue: .main) {
|
||||||
if let error = fetchError
|
if let error = fetchError
|
||||||
{
|
{
|
||||||
finish(.failure(error))
|
print(error)
|
||||||
|
// 1 error doesn't mean all trusted sources failed to load! Riley, why did you do this???????
|
||||||
|
// finish(.failure(error))
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
let sources = featuredSourceURLs.compactMap { sourcesByURL[$0] }
|
let sources = featuredSourceURLs.compactMap { sourcesByURL[$0] }
|
||||||
finish(.success(sources))
|
finish(.success(sources))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@IBAction func addTrustedSource(_ sender: PillButton)
|
@IBAction func addTrustedSource(_ sender: PillButton)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ extension TabBarController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class TabBarController: UITabBarController
|
final class TabBarController: UITabBarController
|
||||||
{
|
{
|
||||||
private var initialSegue: (identifier: String, sender: Any?)?
|
private var initialSegue: (identifier: String, sender: Any?)?
|
||||||
|
|
||||||
|
|||||||
@@ -56,6 +56,7 @@
|
|||||||
<attribute name="certificateSerialNumber" optional="YES" attributeType="String"/>
|
<attribute name="certificateSerialNumber" optional="YES" attributeType="String"/>
|
||||||
<attribute name="expirationDate" attributeType="Date" usesScalarValueType="NO"/>
|
<attribute name="expirationDate" attributeType="Date" usesScalarValueType="NO"/>
|
||||||
<attribute name="hasAlternateIcon" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
|
<attribute name="hasAlternateIcon" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
|
||||||
|
<attribute name="hasUpdate" optional="YES" attributeType="Boolean" usesScalarValueType="YES"/>
|
||||||
<attribute name="installedDate" attributeType="Date" usesScalarValueType="NO"/>
|
<attribute name="installedDate" attributeType="Date" usesScalarValueType="NO"/>
|
||||||
<attribute name="isActive" attributeType="Boolean" defaultValueString="YES" usesScalarValueType="YES"/>
|
<attribute name="isActive" attributeType="Boolean" defaultValueString="YES" usesScalarValueType="YES"/>
|
||||||
<attribute name="isRefreshing" transient="YES" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
|
<attribute name="isRefreshing" transient="YES" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import Foundation
|
|||||||
import CoreData
|
import CoreData
|
||||||
|
|
||||||
import AltSign
|
import AltSign
|
||||||
|
import SemanticVersion
|
||||||
|
|
||||||
// Free developer accounts are limited to only 3 active sideloaded apps at a time as of iOS 13.3.1.
|
// Free developer accounts are limited to only 3 active sideloaded apps at a time as of iOS 13.3.1.
|
||||||
public let ALTActiveAppsLimit = 3
|
public let ALTActiveAppsLimit = 3
|
||||||
@@ -59,6 +60,21 @@ public class InstalledApp: NSManagedObject, InstalledAppProtocol
|
|||||||
return self.storeApp == nil
|
return self.storeApp == nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@objc public var hasUpdate: Bool {
|
||||||
|
if self.storeApp == nil { return false }
|
||||||
|
if self.storeApp!.latestVersion == nil { return false }
|
||||||
|
|
||||||
|
let currentVersion = SemanticVersion(self.version)
|
||||||
|
let latestVersion = SemanticVersion(self.storeApp!.latestVersion!.version)
|
||||||
|
|
||||||
|
if currentVersion == nil || latestVersion == nil {
|
||||||
|
// One of the versions is not valid SemVer, fall back to comparing the version strings by character
|
||||||
|
return self.version < self.storeApp!.latestVersion!.version
|
||||||
|
}
|
||||||
|
|
||||||
|
return currentVersion! < latestVersion!
|
||||||
|
}
|
||||||
|
|
||||||
public var appIDCount: Int {
|
public var appIDCount: Int {
|
||||||
return 1 + self.appExtensions.count
|
return 1 + self.appExtensions.count
|
||||||
}
|
}
|
||||||
@@ -147,8 +163,8 @@ public extension InstalledApp
|
|||||||
class func updatesFetchRequest() -> NSFetchRequest<InstalledApp>
|
class func updatesFetchRequest() -> NSFetchRequest<InstalledApp>
|
||||||
{
|
{
|
||||||
let fetchRequest = InstalledApp.fetchRequest() as NSFetchRequest<InstalledApp>
|
let fetchRequest = InstalledApp.fetchRequest() as NSFetchRequest<InstalledApp>
|
||||||
fetchRequest.predicate = NSPredicate(format: "%K == YES AND %K != nil AND %K != %K",
|
fetchRequest.predicate = NSPredicate(format: "%K == YES AND %K == YES",
|
||||||
#keyPath(InstalledApp.isActive), #keyPath(InstalledApp.storeApp), #keyPath(InstalledApp.version), #keyPath(InstalledApp.storeApp.latestVersion.version))
|
#keyPath(InstalledApp.isActive), #keyPath(InstalledApp.hasUpdate))
|
||||||
return fetchRequest
|
return fetchRequest
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
import CoreData
|
import CoreData
|
||||||
|
import UIKit
|
||||||
|
|
||||||
public extension Source
|
public extension Source
|
||||||
{
|
{
|
||||||
@@ -35,6 +36,146 @@ public extension Source
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public struct AppPermissionFeed: Codable {
|
||||||
|
let type: String // ALTAppPermissionType
|
||||||
|
let usageDescription: String
|
||||||
|
|
||||||
|
enum CodingKeys: String, CodingKey
|
||||||
|
{
|
||||||
|
case type
|
||||||
|
case usageDescription
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public struct AppVersionFeed: Codable {
|
||||||
|
/* Properties */
|
||||||
|
let version: String
|
||||||
|
let date: Date
|
||||||
|
let localizedDescription: String?
|
||||||
|
|
||||||
|
let downloadURL: URL
|
||||||
|
let size: Int64
|
||||||
|
|
||||||
|
enum CodingKeys: String, CodingKey
|
||||||
|
{
|
||||||
|
case version
|
||||||
|
case date
|
||||||
|
case localizedDescription
|
||||||
|
case downloadURL
|
||||||
|
case size
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public struct PlatformURLFeed: Codable {
|
||||||
|
/* Properties */
|
||||||
|
let platform: Platform
|
||||||
|
let downloadURL: URL
|
||||||
|
|
||||||
|
|
||||||
|
private enum CodingKeys: String, CodingKey
|
||||||
|
{
|
||||||
|
case platform
|
||||||
|
case downloadURL
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public struct StoreAppFeed: Codable {
|
||||||
|
let name: String
|
||||||
|
let bundleIdentifier: String
|
||||||
|
let subtitle: String?
|
||||||
|
|
||||||
|
let developerName: String
|
||||||
|
let localizedDescription: String
|
||||||
|
let size: Int64
|
||||||
|
|
||||||
|
let iconURL: URL
|
||||||
|
let screenshotURLs: [URL]
|
||||||
|
|
||||||
|
let version: String
|
||||||
|
let versionDate: Date
|
||||||
|
let versionDescription: String?
|
||||||
|
let downloadURL: URL
|
||||||
|
let platformURLs: [PlatformURLFeed]?
|
||||||
|
|
||||||
|
let tintColor: String? // UIColor?
|
||||||
|
let isBeta: Bool
|
||||||
|
|
||||||
|
// let source: Source?
|
||||||
|
let appPermission: [AppPermissionFeed]
|
||||||
|
let versions: [AppVersionFeed]
|
||||||
|
|
||||||
|
enum CodingKeys: String, CodingKey
|
||||||
|
{
|
||||||
|
case bundleIdentifier
|
||||||
|
case developerName
|
||||||
|
case downloadURL
|
||||||
|
case iconURL
|
||||||
|
case isBeta = "beta"
|
||||||
|
case localizedDescription
|
||||||
|
case name
|
||||||
|
case appPermission = "permissions"
|
||||||
|
case platformURLs
|
||||||
|
case screenshotURLs
|
||||||
|
case size
|
||||||
|
case subtitle
|
||||||
|
case tintColor
|
||||||
|
case version
|
||||||
|
case versionDate
|
||||||
|
case versionDescription
|
||||||
|
case versions
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public struct NewsItemFeed: Codable {
|
||||||
|
let identifier: String
|
||||||
|
let date: Date
|
||||||
|
|
||||||
|
let title: String
|
||||||
|
let caption: String
|
||||||
|
let tintColor: String //UIColor
|
||||||
|
let notify: Bool
|
||||||
|
|
||||||
|
let imageURL: URL?
|
||||||
|
let externalURL: URL?
|
||||||
|
|
||||||
|
let appID: String?
|
||||||
|
|
||||||
|
private enum CodingKeys: String, CodingKey
|
||||||
|
{
|
||||||
|
case identifier
|
||||||
|
case date
|
||||||
|
case title
|
||||||
|
case caption
|
||||||
|
case tintColor
|
||||||
|
case imageURL
|
||||||
|
case externalURL = "url"
|
||||||
|
case appID
|
||||||
|
case notify
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public struct SourceJSON: Codable {
|
||||||
|
let name: String
|
||||||
|
let identifier: String
|
||||||
|
let sourceURL: URL
|
||||||
|
let userInfo: [String:String]? //[ALTSourceUserInfoKey:String]?
|
||||||
|
let apps: [StoreAppFeed]
|
||||||
|
let news: [NewsItemFeed]
|
||||||
|
|
||||||
|
enum CodingKeys: String, CodingKey
|
||||||
|
{
|
||||||
|
case name
|
||||||
|
case identifier
|
||||||
|
case sourceURL
|
||||||
|
case userInfo
|
||||||
|
case apps
|
||||||
|
case news
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@objc(Source)
|
@objc(Source)
|
||||||
public class Source: NSManagedObject, Fetchable, Decodable
|
public class Source: NSManagedObject, Fetchable, Decodable
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -26,14 +26,12 @@ public extension StoreApp
|
|||||||
}
|
}
|
||||||
|
|
||||||
@objc
|
@objc
|
||||||
public enum Platform: UInt {
|
public enum Platform: UInt, Codable {
|
||||||
case ios
|
case ios
|
||||||
case tvos
|
case tvos
|
||||||
case macos
|
case macos
|
||||||
}
|
}
|
||||||
|
|
||||||
extension Platform: Decodable {}
|
|
||||||
|
|
||||||
@objc
|
@objc
|
||||||
public final class PlatformURL: NSManagedObject, Decodable {
|
public final class PlatformURL: NSManagedObject, Decodable {
|
||||||
/* Properties */
|
/* Properties */
|
||||||
|
|||||||
61
CONTRIBUTING.md
Normal file
61
CONTRIBUTING.md
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
# Contributing to SideStore
|
||||||
|
|
||||||
|
Thank you for your interest in contributing to SideStore! SideStore is a community driven project, and it's made possible by people like you.
|
||||||
|
|
||||||
|
There are many ways to contribute to SideStore, so if you aren't a developer, there are still many other ways you can help out:
|
||||||
|
|
||||||
|
- [Writing documentation](https://github.com/SideStore/SideStore-Docs)
|
||||||
|
- [Submitting detailed bug reports and suggesting new features](https://github.com/SideStore/SideStore/issues/new/choose)
|
||||||
|
- Helping out with support
|
||||||
|
- [Discord](https://discord.gg/RgpFBX3Q3k)
|
||||||
|
- [GitHub Discussions](https://github.com/SideStore/SideStore/discussions)
|
||||||
|
|
||||||
|
However, this guide will focus on the development side of things. For now, we will only have setup information here, but you can [join our Discord](https://discord.gg/RgpFBX3Q3k) if you need help
|
||||||
|
after setup.
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
This guide assumes you:
|
||||||
|
|
||||||
|
- are on a Mac
|
||||||
|
- have Xcode installed
|
||||||
|
- have basic command line knowledge (know how to run commands, cd into a directory)
|
||||||
|
- have basic Git knowledge ([GitHub Desktop](https://desktop.github.com) is a great tool for beginners, and greatly simplifies working with Git)
|
||||||
|
- have basic Swift/iOS development knowledge
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
1. Fork the SideStore repo on GitHub.
|
||||||
|
2. Clone the fork: `git clone https://github.com/<your github username>/SideStore.git --recurse-submodules`
|
||||||
|
|
||||||
|
If you are using GitHub Desktop, refer to
|
||||||
|
[this guide](https://docs.github.com/en/desktop/contributing-and-collaborating-using-github-desktop/adding-and-cloning-repositories/cloning-and-forking-repositories-from-github-desktop).
|
||||||
|
|
||||||
|
3. Copy `CodeSigning.xcconfig.sample` to `CodeSigning.xcconfig` and fill in the values.
|
||||||
|
4. **(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.
|
||||||
|
5. Finally, open `AltStore.xcodeproj` in Xcode.
|
||||||
|
|
||||||
|
Next, make and test your changes. Then, commit and push your changes using git and make a pull request.
|
||||||
|
|
||||||
|
## Prebuilt binary information
|
||||||
|
|
||||||
|
minimuxer and em_proxy use prebuilt static library binaries built by GitHub Actions to speed up builds and remove the need for Rust to be installed when working on SideStore.
|
||||||
|
[`Dependencies/fetch-prebuilt.sh`](./Dependencies/fetch-prebuilt.sh) will be run before each build by Xcode, and it will check if the downloaded binaries are up-to-date once every 6 hours. If you want
|
||||||
|
to force it to check for new binaries, run `bash ./Dependencies/fetch-prebuilt.sh force`.
|
||||||
|
|
||||||
|
## Building an IPA for distribution
|
||||||
|
|
||||||
|
You can use the Makefile: `make build fakesign ipa`
|
||||||
|
|
||||||
|
This will create SideStore.ipa.
|
||||||
|
|
||||||
|
> **Warning**
|
||||||
|
>
|
||||||
|
> The binary created will contain paths to Xcode's DerivedData, and if you built minimuxer on your machine, paths to $HOME/.cargo. This will include your username. If you want to keep your user's
|
||||||
|
> username private, you might want to get GitHub Actions to build the IPA instead.
|
||||||
|
|
||||||
|
## Developing minimuxer alongside SideStore
|
||||||
|
|
||||||
|
Please see [minimuxer's README](https://github.com/SideStore/minimuxer) for development instructions.
|
||||||
137
Dangerfile.swift
Normal file
137
Dangerfile.swift
Normal file
@@ -0,0 +1,137 @@
|
|||||||
|
import Danger
|
||||||
|
import Foundation
|
||||||
|
// import SwiftLint
|
||||||
|
|
||||||
|
let danger = Danger()
|
||||||
|
|
||||||
|
// fileImport: DangerfileExtensions/ChangelogCheck.swift
|
||||||
|
// checkChangelog()
|
||||||
|
|
||||||
|
// Add a CHANGELOG entry for app changes
|
||||||
|
let hasChangelog = danger.git.modifiedFiles.contains("Changelog.md")
|
||||||
|
let isTrivial = (danger.github.pullRequest.body + danger.github.pullRequest.title).contains("#trivial")
|
||||||
|
|
||||||
|
if (!hasChangelog && !isTrivial) {
|
||||||
|
warn("Please add a changelog entry for your changes.")
|
||||||
|
}
|
||||||
|
|
||||||
|
// PR Too large
|
||||||
|
if danger.git.createdFiles.count + danger.git.modifiedFiles.count - danger.git.deletedFiles.count > 600 {
|
||||||
|
warn("Big PR, try to keep changes smaller if you can")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check copyright
|
||||||
|
let swiftFilesWithCopyright = danger.git.createdFiles.filter {
|
||||||
|
$0.fileType == .swift
|
||||||
|
&& danger.utils.readFile($0).contains("// Created by")
|
||||||
|
}
|
||||||
|
|
||||||
|
if !swiftFilesWithCopyright.isEmpty {
|
||||||
|
let files = swiftFilesWithCopyright.joined(separator: ", ")
|
||||||
|
warn("In Danger JS we don't include copyright headers, found them in: \(files)")
|
||||||
|
}
|
||||||
|
|
||||||
|
// # This is swiftlint plugin. More info: https://github.com/ashfurrow/danger-swiftlint
|
||||||
|
// #
|
||||||
|
// # This lints all Swift files and leave comments in PR if
|
||||||
|
// # there is any issue with linting
|
||||||
|
let filesToLint = (danger.git.modifiedFiles + danger.git.createdFiles) // .filter { !$0.contains("Documentation/") }
|
||||||
|
|
||||||
|
SwiftLint.lint(.files(filesToLint), inline: true)
|
||||||
|
|
||||||
|
// Support running via `danger local`
|
||||||
|
if danger.github != nil {
|
||||||
|
// These checks only happen on a PR
|
||||||
|
if danger.github.pullRequest.title.contains("WIP") {
|
||||||
|
warn("PR is classed as Work in Progress")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if github.pr_title.contains("WIP") {
|
||||||
|
warn("PR is classed as Work in Progress")
|
||||||
|
}
|
||||||
|
|
||||||
|
if git.commits.any {
|
||||||
|
return $0.message.contains("Merge branch '\(github.branch_for_base)'")
|
||||||
|
} {
|
||||||
|
fail("Please rebase to get rid of the merge commits in this PR ")
|
||||||
|
}
|
||||||
|
|
||||||
|
if github.pr_body.length > 1000 {
|
||||||
|
warn("PR body is too long")
|
||||||
|
}
|
||||||
|
|
||||||
|
if github.pr_body.length < 5 {
|
||||||
|
fail("PR body is too short")
|
||||||
|
}
|
||||||
|
|
||||||
|
let has_app_changes = !git.modified_files.any { $0.contains("AltStore") }
|
||||||
|
let has_altstorecore_changes = !git.modified_files.any { $0.contains("AltStoreCore") }
|
||||||
|
// let has_support_test_changes = !git.modified_files.any { $0.contains("AltStoreCore
|
||||||
|
// Tests") }
|
||||||
|
// let has_library_changes = !git.modified_files.any { $0.contains("PVLibrary") }
|
||||||
|
// let has_library_test_changes = !git.modified_files.any { $0.contains("PVLibrary Tests") }
|
||||||
|
|
||||||
|
// If changes are more than 10 lines of code, tests need to be updated too
|
||||||
|
// if (has_core_changes && !has_core_test_changes) ||
|
||||||
|
// (has_coreui_changes && !has_coreui_test_changes)) &&
|
||||||
|
// git.lines_of_code > 10 {
|
||||||
|
// fail("Tests were not updated", sticky: false)
|
||||||
|
// }
|
||||||
|
|
||||||
|
// Info.plist file shouldn't change often. Leave warning if it changes.
|
||||||
|
let is_plist_change = git.modified_files.any { $0.contains("Info.plist") }
|
||||||
|
|
||||||
|
if !is_plist_change
|
||||||
|
// warn "A Plist was changed"
|
||||||
|
warn("Plist changed, don't forget to localize your plist values")
|
||||||
|
end
|
||||||
|
|
||||||
|
// gemfile_updated = !git.modified_files.grep(/Gemfile$/).empty?
|
||||||
|
|
||||||
|
// # Leave warning, if Gemfile changes
|
||||||
|
// if gemfile_updated
|
||||||
|
// warn "The `Gemfile` was updated"
|
||||||
|
// end
|
||||||
|
|
||||||
|
// import xcodebuild
|
||||||
|
// xcodebuild.json_file = "./fastlane/reports/xcpretty-json-formatter-results.json"
|
||||||
|
// xcodebuild.parse_warnings() // returns number of warnings
|
||||||
|
// xcodebuild.parse_errors() // returns number of errors
|
||||||
|
// // xcodebuild.parse_errors(errors: danger.github.pull_request.body)
|
||||||
|
// xcodebuild.parse_tests() // returns number of test failures
|
||||||
|
// xcodebuild.perfect_build() // returns a bool indicating if the build was perfect
|
||||||
|
func checkSwiftVersions() {
|
||||||
|
SwiftChecks.check(
|
||||||
|
files: [
|
||||||
|
VersionFile(
|
||||||
|
path: "./\(projectName).xcodeproj/project.pbxproj",
|
||||||
|
interpreter: .regex("SWIFT_VERSION = (.*);")
|
||||||
|
),
|
||||||
|
VersionFile(
|
||||||
|
path: "./\(projectName).podspec",
|
||||||
|
interpreter: .regex("\\.swift_version\\s*=\\s*\"(.*)\"")
|
||||||
|
),
|
||||||
|
],
|
||||||
|
versionKind: "Swift"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
func checkProjectVersions() {
|
||||||
|
SwiftChecks.check(
|
||||||
|
fileProviders: [
|
||||||
|
InfoPlistFileProvider(
|
||||||
|
discoveryMethod: .searchDirectory("./Sources", fileNames: ["Info.plist"]),
|
||||||
|
plistKey: .versionNumber,
|
||||||
|
projectFilePath: "./\(projectName).xcodeproj"
|
||||||
|
),
|
||||||
|
],
|
||||||
|
files: [
|
||||||
|
VersionFile(path: "./\(projectName).podspec", interpreter: .regex("\\.version\\s*=\\s*\"(.*)\"")),
|
||||||
|
],
|
||||||
|
versionKind: "framework"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// checkProjectVersions()
|
||||||
|
// checkSwiftVersions
|
||||||
2
Dependencies/MarkdownAttributedString
vendored
2
Dependencies/MarkdownAttributedString
vendored
Submodule Dependencies/MarkdownAttributedString updated: 750e8d5cb4...ec0d1eff57
2
Dependencies/Roxas
vendored
2
Dependencies/Roxas
vendored
Submodule Dependencies/Roxas updated: ac906cf490...84645e4318
1
Dependencies/em_proxy
vendored
1
Dependencies/em_proxy
vendored
Submodule Dependencies/em_proxy deleted from c8a280e54c
530
Dependencies/em_proxy.xcodeproj/project.pbxproj
vendored
530
Dependencies/em_proxy.xcodeproj/project.pbxproj
vendored
@@ -1,146 +1,80 @@
|
|||||||
// !$*UTF8*$!
|
// !$*UTF8*$!
|
||||||
{
|
{
|
||||||
/* generated with cargo-xcode 1.5.0 */
|
|
||||||
archiveVersion = 1;
|
archiveVersion = 1;
|
||||||
classes = {
|
classes = {
|
||||||
};
|
};
|
||||||
objectVersion = 53;
|
objectVersion = 53;
|
||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
|
9987603429A4555300818586 /* em_proxy.h in Sources */ = {isa = PBXBuildFile; fileRef = 9999259129A45319005CF020 /* em_proxy.h */; };
|
||||||
CA60E4E02AAAA30E3695DD59 /* Cargo.toml in Sources */ = {
|
|
||||||
isa = PBXBuildFile;
|
|
||||||
fileRef = CA6094FFF6923EF4668187A5 /* Cargo.toml */;
|
|
||||||
settings = {
|
|
||||||
COMPILER_FLAGS = "--lib"; /* == OTHER_INPUT_FILE_FLAGS */
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
CA60E4E02AAA37FC563E4BCC /* Cargo.toml in Sources */ = {
|
|
||||||
isa = PBXBuildFile;
|
|
||||||
fileRef = CA6094FFF6923EF4668187A5 /* Cargo.toml */;
|
|
||||||
settings = {
|
|
||||||
COMPILER_FLAGS = "--bin 'run'"; /* == OTHER_INPUT_FILE_FLAGS */
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXBuildRule section */
|
/* Begin PBXBuildRule section */
|
||||||
CA6094FFF692AC6C1400ACA8 /* PBXBuildRule */ = {
|
CA6094FFF692AC6C1400ACA8 /* PBXBuildRule */ = {
|
||||||
isa = PBXBuildRule;
|
isa = PBXBuildRule;
|
||||||
compilerSpec = com.apple.compilers.proxy.script;
|
compilerSpec = com.apple.compilers.proxy.script;
|
||||||
dependencyFile = "$(DERIVED_FILE_DIR)/$(CARGO_XCODE_TARGET_ARCH)-$(EXECUTABLE_NAME).d";
|
filePatterns = "*/em_proxy.h";
|
||||||
filePatterns = "*/Cargo.toml"; /* must contain asterisk */
|
|
||||||
fileType = pattern.proxy;
|
fileType = pattern.proxy;
|
||||||
inputFiles = ();
|
inputFiles = (
|
||||||
|
);
|
||||||
isEditable = 0;
|
isEditable = 0;
|
||||||
name = "Cargo project build";
|
name = "Cargo project build";
|
||||||
outputFiles = (
|
outputFiles = (
|
||||||
"$(OBJECT_FILE_DIR)/$(CARGO_XCODE_TARGET_ARCH)-$(EXECUTABLE_NAME)",
|
"$(OBJECT_FILE_DIR)/$(CARGO_XCODE_TARGET_ARCH)-$(EXECUTABLE_NAME)",
|
||||||
);
|
);
|
||||||
script = "# generated with cargo-xcode 1.5.0\n\nset -eu; export PATH=\"$PATH:$HOME/.cargo/bin:/usr/local/bin\";\nif [ \"${IS_MACCATALYST-NO}\" = YES ]; then\n CARGO_XCODE_TARGET_TRIPLE=\"${CARGO_XCODE_TARGET_ARCH}-apple-ios-macabi\"\nelse\n CARGO_XCODE_TARGET_TRIPLE=\"${CARGO_XCODE_TARGET_ARCH}-apple-${CARGO_XCODE_TARGET_OS}\"\nfi\nif [ \"$CARGO_XCODE_TARGET_OS\" != \"darwin\" ]; then\n PATH=\"${PATH/\\/Contents\\/Developer\\/Toolchains\\/XcodeDefault.xctoolchain\\/usr\\/bin:/xcode-provided-ld-cant-link-lSystem-for-the-host-build-script:}\"\nfi\nPATH=\"$PATH:/opt/homebrew/bin\" # Rust projects often depend on extra tools like nasm, which Xcode lacks\nif [ \"$CARGO_XCODE_BUILD_MODE\" == release ]; then\n OTHER_INPUT_FILE_FLAGS=\"${OTHER_INPUT_FILE_FLAGS} --release\"\nfi\nif command -v rustup &> /dev/null; then\n if ! rustup target list --installed | egrep -q \"${CARGO_XCODE_TARGET_TRIPLE}\"; then\n echo \"warning: this build requires rustup toolchain for $CARGO_XCODE_TARGET_TRIPLE, but it isn\'t installed\"\n rustup target add \"${CARGO_XCODE_TARGET_TRIPLE}\" || echo >&2 \"warning: can\'t install $CARGO_XCODE_TARGET_TRIPLE\"\n fi\nfi\nif [ \"$ACTION\" = clean ]; then\n ( set -x; cargo clean --manifest-path=\"$SCRIPT_INPUT_FILE\" ${OTHER_INPUT_FILE_FLAGS} --target=\"${CARGO_XCODE_TARGET_TRIPLE}\"; );\nelse\n ( set -x; cargo build --manifest-path=\"$SCRIPT_INPUT_FILE\" --features=\"${CARGO_XCODE_FEATURES:-}\" ${OTHER_INPUT_FILE_FLAGS} --target=\"${CARGO_XCODE_TARGET_TRIPLE}\"; );\nfi\n# it\'s too hard to explain Cargo\'s actual exe path to Xcode build graph, so hardlink to a known-good path instead\nBUILT_SRC=\"${CARGO_TARGET_DIR}/${CARGO_XCODE_TARGET_TRIPLE}/${CARGO_XCODE_BUILD_MODE}/${CARGO_XCODE_CARGO_FILE_NAME}\"\nln -f -- \"$BUILT_SRC\" \"$SCRIPT_OUTPUT_FILE_0\"\n\n# xcode generates dep file, but for its own path, so append our rename to it\nDEP_FILE_SRC=\"${CARGO_TARGET_DIR}/${CARGO_XCODE_TARGET_TRIPLE}/${CARGO_XCODE_BUILD_MODE}/${CARGO_XCODE_CARGO_DEP_FILE_NAME}\"\nif [ -f \"$DEP_FILE_SRC\" ]; then\n DEP_FILE_DST=\"${DERIVED_FILE_DIR}/${CARGO_XCODE_TARGET_ARCH}-${EXECUTABLE_NAME}.d\"\n cp -f \"$DEP_FILE_SRC\" \"$DEP_FILE_DST\"\n echo >> \"$DEP_FILE_DST\" \"$SCRIPT_OUTPUT_FILE_0: $BUILT_SRC\"\nfi\n\n# lipo script needs to know all the platform-specific files that have been built\n# archs is in the file name, so that paths don\'t stay around after archs change\n# must match input for LipoScript\nFILE_LIST=\"${DERIVED_FILE_DIR}/${ARCHS}-${EXECUTABLE_NAME}.xcfilelist\"\ntouch \"$FILE_LIST\"\nif ! egrep -q \"$SCRIPT_OUTPUT_FILE_0\" \"$FILE_LIST\" ; then\n echo >> \"$FILE_LIST\" \"$SCRIPT_OUTPUT_FILE_0\"\nfi\n";
|
script = "# generated with cargo-xcode 1.5.0\n# modified to use prebuilt binaries\n\nset -eu;\n\nBUILT_SRC=\"./em_proxy/$LIB_FILE_NAME.a\"\nln -f -- \"$BUILT_SRC\" \"$TARGET_BUILD_DIR/$EXECUTABLE_PATH\" || cp \"$BUILT_SRC\" \"$TARGET_BUILD_DIR/$EXECUTABLE_PATH\"\necho \"$BUILT_SRC -> $TARGET_BUILD_DIR/$EXECUTABLE_PATH\"\n\n# xcode generates dep file, but for its own path, so append our rename to it\n#DEP_FILE_SRC=\"minimuxer/target/${CARGO_XCODE_TARGET_TRIPLE}/release/${CARGO_XCODE_CARGO_DEP_FILE_NAME}\"\n#if [ -f \"$DEP_FILE_SRC\" ]; then\n# DEP_FILE_DST=\"${DERIVED_FILE_DIR}/${CARGO_XCODE_TARGET_ARCH}-${EXECUTABLE_NAME}.d\"\n# cp -f \"$DEP_FILE_SRC\" \"$DEP_FILE_DST\"\n# echo >> \"$DEP_FILE_DST\" \"$SCRIPT_OUTPUT_FILE_0: $BUILT_SRC\"\n#fi\n\n# lipo script needs to know all the platform-specific files that have been built\n# archs is in the file name, so that paths don't stay around after archs change\n# must match input for LipoScript\n#FILE_LIST=\"${DERIVED_FILE_DIR}/${ARCHS}-${EXECUTABLE_NAME}.xcfilelist\"\n#touch \"$FILE_LIST\"\n#if ! egrep -q \"$SCRIPT_OUTPUT_FILE_0\" \"$FILE_LIST\" ; then\n# echo >> \"$FILE_LIST\" \"$SCRIPT_OUTPUT_FILE_0\"\n#fi\n";
|
||||||
};
|
};
|
||||||
/* End PBXBuildRule section */
|
/* End PBXBuildRule section */
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
|
9999259129A45319005CF020 /* em_proxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = em_proxy.h; path = em_proxy/em_proxy.h; sourceTree = "<group>"; };
|
||||||
CA60C44C93D7916DE57E6EBD /* staticlib */ = {
|
ADDEDBA66A6E1 /* libresolv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libresolv.tbd; path = usr/lib/libresolv.tbd; sourceTree = SDKROOT; };
|
||||||
isa = PBXFileReference;
|
CA60058A9FBE4D17AF51A7D5 /* run */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = run; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
explicitFileType = "archive.ar";
|
CA60C44C93D7916DE57E6EBD /* libem_proxy_static.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libem_proxy_static.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
includeInIndex = 0;
|
|
||||||
name = "libem_proxy_static.a";
|
|
||||||
sourceTree = TARGET_BUILD_DIR;
|
|
||||||
};
|
|
||||||
CA60058A9FBE4D17AF51A7D5 /* bin */ = {
|
|
||||||
isa = PBXFileReference;
|
|
||||||
explicitFileType = "compiled.mach-o.executable";
|
|
||||||
includeInIndex = 0;
|
|
||||||
name = "run";
|
|
||||||
sourceTree = TARGET_BUILD_DIR;
|
|
||||||
};
|
|
||||||
CA6094FFF6923EF4668187A5 /* Cargo.toml */ = {
|
|
||||||
isa = PBXFileReference;
|
|
||||||
lastKnownFileType = text;
|
|
||||||
fileEncoding = 4;
|
|
||||||
name = "Cargo.toml";
|
|
||||||
path = "em_proxy/Cargo.toml";
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
/* Rust needs libresolv */
|
|
||||||
ADDEDBA66A6E1 = {
|
|
||||||
isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition";
|
|
||||||
name = libresolv.tbd; path = usr/lib/libresolv.tbd; sourceTree = SDKROOT;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXGroup section */
|
/* Begin PBXGroup section */
|
||||||
CA6094FFF69298AF0B5890DB /* Frameworks */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
ADDEDBA66A6E2,
|
|
||||||
|
|
||||||
);
|
|
||||||
name = Frameworks;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
ADDEDBA66A6E2 /* Required for static linking */ = {
|
ADDEDBA66A6E2 /* Required for static linking */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
ADDEDBA66A6E1
|
ADDEDBA66A6E1 /* libresolv.tbd */,
|
||||||
);
|
);
|
||||||
name = "Required for static linking";
|
name = "Required for static linking";
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
|
||||||
CA6094FFF69222869D176AE5 /* Products */ = {
|
CA6094FFF69222869D176AE5 /* Products */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
CA60C44C93D7916DE57E6EBD,
|
CA60C44C93D7916DE57E6EBD /* libem_proxy_static.a */,
|
||||||
CA60058A9FBE4D17AF51A7D5,
|
CA60058A9FBE4D17AF51A7D5 /* run */,
|
||||||
|
|
||||||
);
|
);
|
||||||
name = Products;
|
name = Products;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
CA6094FFF69298AF0B5890DB /* Frameworks */ = {
|
||||||
CA6094FFF692D65BC3C892A8 /* Main */ = {
|
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
CA6094FFF6923EF4668187A5,
|
ADDEDBA66A6E2 /* Required for static linking */,
|
||||||
CA6094FFF69222869D176AE5,
|
);
|
||||||
CA6094FFF69298AF0B5890DB,
|
name = Frameworks;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
CA6094FFF692D65BC3C892A8 = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
9999259129A45319005CF020 /* em_proxy.h */,
|
||||||
|
CA6094FFF69222869D176AE5 /* Products */,
|
||||||
|
CA6094FFF69298AF0B5890DB /* Frameworks */,
|
||||||
);
|
);
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
|
||||||
/* End PBXGroup section */
|
/* End PBXGroup section */
|
||||||
|
|
||||||
/* Begin PBXNativeTarget section */
|
/* Begin PBXNativeTarget section */
|
||||||
CA60C44C93D7A30E3695DD59 /* em_proxy-staticlib */ = {
|
|
||||||
isa = PBXNativeTarget;
|
|
||||||
buildConfigurationList = CA603DD75FB4A30E3695DD59;
|
|
||||||
buildPhases = (
|
|
||||||
CA60445C3036A30E3695DD59 /* Sources */,
|
|
||||||
CA6094FFF692AF6EBB7F357C /* Universal Binary lipo */,
|
|
||||||
);
|
|
||||||
buildRules = (
|
|
||||||
CA6094FFF692AC6C1400ACA8 /* PBXBuildRule */,
|
|
||||||
);
|
|
||||||
dependencies = (
|
|
||||||
);
|
|
||||||
name = "em_proxy-staticlib";
|
|
||||||
productName = "libem_proxy_static.a";
|
|
||||||
productReference = CA60C44C93D7916DE57E6EBD;
|
|
||||||
productType = "com.apple.product-type.library.static";
|
|
||||||
};
|
|
||||||
CA60058A9FBE37FC563E4BCC /* run-bin */ = {
|
CA60058A9FBE37FC563E4BCC /* run-bin */ = {
|
||||||
isa = PBXNativeTarget;
|
isa = PBXNativeTarget;
|
||||||
buildConfigurationList = CA603DD75FB437FC563E4BCC;
|
buildConfigurationList = CA603DD75FB437FC563E4BCC /* Build configuration list for PBXNativeTarget "run-bin" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
CA60445C303637FC563E4BCC /* Sources */,
|
CA60445C303637FC563E4BCC /* Sources */,
|
||||||
CA6094FFF692AF6EBB7F357C /* Universal Binary lipo */,
|
CA6094FFF692AF6EBB7F357C /* Universal Binary lipo */,
|
||||||
@@ -151,202 +85,47 @@ CA6094FFF69298AF0B5890DB,
|
|||||||
dependencies = (
|
dependencies = (
|
||||||
);
|
);
|
||||||
name = "run-bin";
|
name = "run-bin";
|
||||||
productName = "run";
|
productName = run;
|
||||||
productReference = CA60058A9FBE4D17AF51A7D5;
|
productReference = CA60058A9FBE4D17AF51A7D5 /* run */;
|
||||||
productType = "com.apple.product-type.tool";
|
productType = "com.apple.product-type.tool";
|
||||||
};
|
};
|
||||||
|
CA60C44C93D7A30E3695DD59 /* em_proxy-staticlib */ = {
|
||||||
|
isa = PBXNativeTarget;
|
||||||
|
buildConfigurationList = CA603DD75FB4A30E3695DD59 /* Build configuration list for PBXNativeTarget "em_proxy-staticlib" */;
|
||||||
|
buildPhases = (
|
||||||
|
9987603529A4610700818586 /* ShellScript */,
|
||||||
|
CA60445C3036A30E3695DD59 /* Sources */,
|
||||||
|
CA6094FFF692AF6EBB7F357C /* Universal Binary lipo */,
|
||||||
|
);
|
||||||
|
buildRules = (
|
||||||
|
CA6094FFF692AC6C1400ACA8 /* PBXBuildRule */,
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
);
|
||||||
|
name = "em_proxy-staticlib";
|
||||||
|
productName = libem_proxy_static.a;
|
||||||
|
productReference = CA60C44C93D7916DE57E6EBD /* libem_proxy_static.a */;
|
||||||
|
productType = "com.apple.product-type.library.static";
|
||||||
|
};
|
||||||
/* End PBXNativeTarget section */
|
/* End PBXNativeTarget section */
|
||||||
|
|
||||||
CA60445C3036A30E3695DD59 = {
|
/* Begin PBXProject section */
|
||||||
isa = PBXSourcesBuildPhase;
|
CA6094FFF692E04653AD465F /* Project object */ = {
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
CA60E4E02AAAA30E3695DD59
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
CA603DD75FB4A30E3695DD59 /* staticlib */ = {
|
|
||||||
isa = XCConfigurationList;
|
|
||||||
buildConfigurations = (
|
|
||||||
CA604DFE779BA30E3695DD59 /* Release */,
|
|
||||||
CA60DE07A83FA30E3695DD59 /* Debug */,
|
|
||||||
);
|
|
||||||
defaultConfigurationIsVisible = 0;
|
|
||||||
defaultConfigurationName = Release;
|
|
||||||
};
|
|
||||||
CA604DFE779BA30E3695DD59 /* staticlib */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
PRODUCT_NAME = "em_proxy_static";
|
|
||||||
"CARGO_XCODE_CARGO_FILE_NAME" = "libem_proxy.a";
|
|
||||||
"CARGO_XCODE_CARGO_DEP_FILE_NAME" = "libem_proxy.d";
|
|
||||||
SUPPORTED_PLATFORMS = "macosx iphonesimulator iphoneos appletvsimulator appletvos";
|
|
||||||
SKIP_INSTALL = YES;
|
|
||||||
INSTALL_GROUP = "";
|
|
||||||
INSTALL_MODE_FLAG = "";
|
|
||||||
INSTALL_OWNER = "";
|
|
||||||
|
|
||||||
};
|
|
||||||
name = Release;
|
|
||||||
};
|
|
||||||
CA60DE07A83FA30E3695DD59 /* staticlib */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
PRODUCT_NAME = "em_proxy_static";
|
|
||||||
"CARGO_XCODE_CARGO_FILE_NAME" = "libem_proxy.a";
|
|
||||||
"CARGO_XCODE_CARGO_DEP_FILE_NAME" = "libem_proxy.d";
|
|
||||||
SUPPORTED_PLATFORMS = "macosx iphonesimulator iphoneos appletvsimulator appletvos";
|
|
||||||
SKIP_INSTALL = YES;
|
|
||||||
INSTALL_GROUP = "";
|
|
||||||
INSTALL_MODE_FLAG = "";
|
|
||||||
INSTALL_OWNER = "";
|
|
||||||
|
|
||||||
};
|
|
||||||
name = Debug;
|
|
||||||
};CA60445C303637FC563E4BCC = {
|
|
||||||
isa = PBXSourcesBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
CA60E4E02AAA37FC563E4BCC
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
CA603DD75FB437FC563E4BCC /* bin */ = {
|
|
||||||
isa = XCConfigurationList;
|
|
||||||
buildConfigurations = (
|
|
||||||
CA604DFE779B37FC563E4BCC /* Release */,
|
|
||||||
CA60DE07A83F37FC563E4BCC /* Debug */,
|
|
||||||
);
|
|
||||||
defaultConfigurationIsVisible = 0;
|
|
||||||
defaultConfigurationName = Release;
|
|
||||||
};
|
|
||||||
CA604DFE779B37FC563E4BCC /* bin */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
PRODUCT_NAME = "run";
|
|
||||||
"CARGO_XCODE_CARGO_FILE_NAME" = "run";
|
|
||||||
"CARGO_XCODE_CARGO_DEP_FILE_NAME" = "run.d";
|
|
||||||
SUPPORTED_PLATFORMS = "macosx";
|
|
||||||
|
|
||||||
|
|
||||||
};
|
|
||||||
name = Release;
|
|
||||||
};
|
|
||||||
CA60DE07A83F37FC563E4BCC /* bin */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
PRODUCT_NAME = "run";
|
|
||||||
"CARGO_XCODE_CARGO_FILE_NAME" = "run";
|
|
||||||
"CARGO_XCODE_CARGO_DEP_FILE_NAME" = "run.d";
|
|
||||||
SUPPORTED_PLATFORMS = "macosx";
|
|
||||||
|
|
||||||
|
|
||||||
};
|
|
||||||
name = Debug;
|
|
||||||
};
|
|
||||||
|
|
||||||
CA6094FFF692AF6EBB7F357C /* LipoScript */ = {
|
|
||||||
name = "Universal Binary lipo";
|
|
||||||
isa = PBXShellScriptBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = ();
|
|
||||||
inputFileListPaths = ();
|
|
||||||
inputPaths = (
|
|
||||||
"$(DERIVED_FILE_DIR)/$(ARCHS)-$(EXECUTABLE_NAME).xcfilelist",
|
|
||||||
);
|
|
||||||
outputFileListPaths = ();
|
|
||||||
outputPaths = (
|
|
||||||
"$(TARGET_BUILD_DIR)/$(EXECUTABLE_PATH)"
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
shellPath = /bin/sh;
|
|
||||||
shellScript = "# generated with cargo-xcode 1.5.0\n\n set -eux; cat \"$DERIVED_FILE_DIR/$ARCHS-$EXECUTABLE_NAME.xcfilelist\" | tr \'\\n\' \'\\0\' | xargs -0 lipo -create -output \"$TARGET_BUILD_DIR/$EXECUTABLE_PATH\"\n if [ ${LD_DYLIB_INSTALL_NAME:+1} ]; then\n install_name_tool -id \"$LD_DYLIB_INSTALL_NAME\" \"$TARGET_BUILD_DIR/$EXECUTABLE_PATH\"\n fi\n ";
|
|
||||||
};
|
|
||||||
|
|
||||||
CA6094FFF69280E02D6C7F57 = {
|
|
||||||
isa = XCConfigurationList;
|
|
||||||
buildConfigurations = (
|
|
||||||
CA609A5173513CC16B37690B /* Release */,
|
|
||||||
CA609A517351228BE02872F8 /* Debug */,
|
|
||||||
);
|
|
||||||
defaultConfigurationIsVisible = 0;
|
|
||||||
defaultConfigurationName = Release;
|
|
||||||
};
|
|
||||||
|
|
||||||
CA609A5173513CC16B37690B = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
|
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
|
||||||
SUPPORTS_MACCATALYST = YES;
|
|
||||||
CARGO_TARGET_DIR = "$(PROJECT_TEMP_DIR)/cargo_target"; /* for cargo */
|
|
||||||
CARGO_XCODE_FEATURES = ""; /* configure yourself */
|
|
||||||
"CARGO_XCODE_TARGET_ARCH[arch=arm64*]" = "aarch64";
|
|
||||||
"CARGO_XCODE_TARGET_ARCH[arch=x86_64*]" = "x86_64"; /* catalyst adds h suffix */
|
|
||||||
"CARGO_XCODE_TARGET_ARCH[arch=i386]" = "i686";
|
|
||||||
"CARGO_XCODE_TARGET_OS[sdk=macosx*]" = "darwin";
|
|
||||||
"CARGO_XCODE_TARGET_OS[sdk=iphonesimulator*]" = "ios-sim";
|
|
||||||
"CARGO_XCODE_TARGET_OS[sdk=iphonesimulator*][arch=x86_64*]" = "ios";
|
|
||||||
"CARGO_XCODE_TARGET_OS[sdk=iphoneos*]" = "ios";
|
|
||||||
"CARGO_XCODE_TARGET_OS[sdk=appletvsimulator*]" = "tvos";
|
|
||||||
"CARGO_XCODE_TARGET_OS[sdk=appletvos*]" = "tvos";
|
|
||||||
PRODUCT_NAME = "em_proxy";
|
|
||||||
MARKETING_VERSION = "0.1.0";
|
|
||||||
CURRENT_PROJECT_VERSION = "0.1";
|
|
||||||
SDKROOT = macosx;
|
|
||||||
|
|
||||||
"CARGO_XCODE_BUILD_MODE" = "release"; /* for xcode scripts */
|
|
||||||
};
|
|
||||||
name = Release;
|
|
||||||
};
|
|
||||||
|
|
||||||
CA609A517351228BE02872F8 = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
|
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
|
||||||
SUPPORTS_MACCATALYST = YES;
|
|
||||||
CARGO_TARGET_DIR = "$(PROJECT_TEMP_DIR)/cargo_target"; /* for cargo */
|
|
||||||
CARGO_XCODE_FEATURES = ""; /* configure yourself */
|
|
||||||
"CARGO_XCODE_TARGET_ARCH[arch=arm64*]" = "aarch64";
|
|
||||||
"CARGO_XCODE_TARGET_ARCH[arch=x86_64*]" = "x86_64"; /* catalyst adds h suffix */
|
|
||||||
"CARGO_XCODE_TARGET_ARCH[arch=i386]" = "i686";
|
|
||||||
"CARGO_XCODE_TARGET_OS[sdk=macosx*]" = "darwin";
|
|
||||||
"CARGO_XCODE_TARGET_OS[sdk=iphonesimulator*]" = "ios-sim";
|
|
||||||
"CARGO_XCODE_TARGET_OS[sdk=iphonesimulator*][arch=x86_64*]" = "ios";
|
|
||||||
"CARGO_XCODE_TARGET_OS[sdk=iphoneos*]" = "ios";
|
|
||||||
"CARGO_XCODE_TARGET_OS[sdk=appletvsimulator*]" = "tvos";
|
|
||||||
"CARGO_XCODE_TARGET_OS[sdk=appletvos*]" = "tvos";
|
|
||||||
PRODUCT_NAME = "em_proxy";
|
|
||||||
MARKETING_VERSION = "0.1.0";
|
|
||||||
CURRENT_PROJECT_VERSION = "0.1";
|
|
||||||
SDKROOT = macosx;
|
|
||||||
|
|
||||||
"CARGO_XCODE_BUILD_MODE" = "debug"; /* for xcode scripts */
|
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
|
||||||
};
|
|
||||||
name = Debug;
|
|
||||||
};
|
|
||||||
|
|
||||||
CA6094FFF692E04653AD465F = {
|
|
||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastUpgradeCheck = 1300;
|
LastUpgradeCheck = 1300;
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
CA60C44C93D7A30E3695DD59 = {
|
|
||||||
CreatedOnToolsVersion = 9.2;
|
|
||||||
ProvisioningStyle = Automatic;
|
|
||||||
};
|
|
||||||
CA60058A9FBE37FC563E4BCC = {
|
CA60058A9FBE37FC563E4BCC = {
|
||||||
CreatedOnToolsVersion = 9.2;
|
CreatedOnToolsVersion = 9.2;
|
||||||
ProvisioningStyle = Automatic;
|
ProvisioningStyle = Automatic;
|
||||||
};
|
};
|
||||||
|
CA60C44C93D7A30E3695DD59 = {
|
||||||
|
CreatedOnToolsVersion = 9.2;
|
||||||
|
ProvisioningStyle = Automatic;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
buildConfigurationList = CA6094FFF69280E02D6C7F57;
|
};
|
||||||
|
buildConfigurationList = CA6094FFF69280E02D6C7F57 /* Build configuration list for PBXProject "em_proxy" */;
|
||||||
compatibilityVersion = "Xcode 11.4";
|
compatibilityVersion = "Xcode 11.4";
|
||||||
developmentRegion = en;
|
developmentRegion = en;
|
||||||
hasScannedForEncodings = 0;
|
hasScannedForEncodings = 0;
|
||||||
@@ -359,13 +138,206 @@ CA6094FFF69298AF0B5890DB,
|
|||||||
projectDirPath = "";
|
projectDirPath = "";
|
||||||
projectRoot = "";
|
projectRoot = "";
|
||||||
targets = (
|
targets = (
|
||||||
CA60C44C93D7A30E3695DD59,
|
CA60C44C93D7A30E3695DD59 /* em_proxy-staticlib */,
|
||||||
CA60058A9FBE37FC563E4BCC,
|
CA60058A9FBE37FC563E4BCC /* run-bin */,
|
||||||
|
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
/* End PBXProject section */
|
||||||
|
|
||||||
|
/* Begin PBXShellScriptBuildPhase section */
|
||||||
|
9987603529A4610700818586 /* ShellScript */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputFileListPaths = (
|
||||||
|
);
|
||||||
|
inputPaths = (
|
||||||
|
);
|
||||||
|
outputFileListPaths = (
|
||||||
|
);
|
||||||
|
outputPaths = (
|
||||||
|
./em_proxy/em_proxy.h,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
shellPath = /bin/sh;
|
||||||
|
shellScript = "bash ./fetch-prebuilt.sh em_proxy\n";
|
||||||
};
|
};
|
||||||
rootObject = CA6094FFF692E04653AD465F;
|
CA6094FFF692AF6EBB7F357C /* Universal Binary lipo */ = {
|
||||||
}
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputFileListPaths = (
|
||||||
|
);
|
||||||
|
inputPaths = (
|
||||||
|
"$(DERIVED_FILE_DIR)/$(ARCHS)-$(EXECUTABLE_NAME).xcfilelist",
|
||||||
|
);
|
||||||
|
name = "Universal Binary lipo";
|
||||||
|
outputFileListPaths = (
|
||||||
|
);
|
||||||
|
outputPaths = (
|
||||||
|
"$(TARGET_BUILD_DIR)/$(EXECUTABLE_PATH)",
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
shellPath = /bin/sh;
|
||||||
|
shellScript = "# generated with cargo-xcode 1.5.0\n\n#set -eux; cat \"$DERIVED_FILE_DIR/$ARCHS-$EXECUTABLE_NAME.xcfilelist\" | tr '\\n' '\\0' | xargs -0 lipo -create -output \"$TARGET_BUILD_DIR/$EXECUTABLE_PATH\"\n#if [ ${LD_DYLIB_INSTALL_NAME:+1} ]; then\n# install_name_tool -id \"$LD_DYLIB_INSTALL_NAME\" \"$TARGET_BUILD_DIR/$EXECUTABLE_PATH\"\n#fi\n";
|
||||||
|
};
|
||||||
|
/* End PBXShellScriptBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXSourcesBuildPhase section */
|
||||||
|
CA60445C303637FC563E4BCC /* Sources */ = {
|
||||||
|
isa = PBXSourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
CA60445C3036A30E3695DD59 /* Sources */ = {
|
||||||
|
isa = PBXSourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
9987603429A4555300818586 /* em_proxy.h in Sources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXSourcesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin XCBuildConfiguration section */
|
||||||
|
CA604DFE779B37FC563E4BCC /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
CARGO_XCODE_CARGO_DEP_FILE_NAME = run.d;
|
||||||
|
CARGO_XCODE_CARGO_FILE_NAME = run;
|
||||||
|
PRODUCT_NAME = run;
|
||||||
|
SUPPORTED_PLATFORMS = macosx;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
CA604DFE779BA30E3695DD59 /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
CARGO_XCODE_CARGO_DEP_FILE_NAME = libem_proxy.d;
|
||||||
|
CARGO_XCODE_CARGO_FILE_NAME = libem_proxy.a;
|
||||||
|
INSTALL_GROUP = "";
|
||||||
|
INSTALL_MODE_FLAG = "";
|
||||||
|
INSTALL_OWNER = "";
|
||||||
|
LIB_FILE_NAME = "";
|
||||||
|
"LIB_FILE_NAME[sdk=iphoneos*]" = libem_proxy;
|
||||||
|
"LIB_FILE_NAME[sdk=iphonesimulator*]" = "libem_proxy-sim";
|
||||||
|
PRODUCT_NAME = em_proxy_static;
|
||||||
|
SKIP_INSTALL = YES;
|
||||||
|
SUPPORTED_PLATFORMS = "macosx iphonesimulator iphoneos appletvsimulator appletvos";
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
CA609A517351228BE02872F8 /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
CARGO_TARGET_DIR = "$(PROJECT_TEMP_DIR)/cargo_target";
|
||||||
|
CARGO_XCODE_BUILD_MODE = debug;
|
||||||
|
CARGO_XCODE_FEATURES = "";
|
||||||
|
"CARGO_XCODE_TARGET_ARCH[arch=arm64*]" = aarch64;
|
||||||
|
"CARGO_XCODE_TARGET_ARCH[arch=i386]" = i686;
|
||||||
|
"CARGO_XCODE_TARGET_ARCH[arch=x86_64*]" = x86_64;
|
||||||
|
"CARGO_XCODE_TARGET_OS[sdk=appletvos*]" = tvos;
|
||||||
|
"CARGO_XCODE_TARGET_OS[sdk=appletvsimulator*]" = tvos;
|
||||||
|
"CARGO_XCODE_TARGET_OS[sdk=iphoneos*]" = ios;
|
||||||
|
"CARGO_XCODE_TARGET_OS[sdk=iphonesimulator*]" = "ios-sim";
|
||||||
|
"CARGO_XCODE_TARGET_OS[sdk=iphonesimulator*][arch=x86_64*]" = ios;
|
||||||
|
"CARGO_XCODE_TARGET_OS[sdk=macosx*]" = darwin;
|
||||||
|
CURRENT_PROJECT_VERSION = 0.1;
|
||||||
|
MARKETING_VERSION = 0.1.0;
|
||||||
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
|
PRODUCT_NAME = em_proxy;
|
||||||
|
SDKROOT = macosx;
|
||||||
|
SUPPORTS_MACCATALYST = YES;
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
CA609A5173513CC16B37690B /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
CARGO_TARGET_DIR = "$(PROJECT_TEMP_DIR)/cargo_target";
|
||||||
|
CARGO_XCODE_BUILD_MODE = release;
|
||||||
|
CARGO_XCODE_FEATURES = "";
|
||||||
|
"CARGO_XCODE_TARGET_ARCH[arch=arm64*]" = aarch64;
|
||||||
|
"CARGO_XCODE_TARGET_ARCH[arch=i386]" = i686;
|
||||||
|
"CARGO_XCODE_TARGET_ARCH[arch=x86_64*]" = x86_64;
|
||||||
|
"CARGO_XCODE_TARGET_OS[sdk=appletvos*]" = tvos;
|
||||||
|
"CARGO_XCODE_TARGET_OS[sdk=appletvsimulator*]" = tvos;
|
||||||
|
"CARGO_XCODE_TARGET_OS[sdk=iphoneos*]" = ios;
|
||||||
|
"CARGO_XCODE_TARGET_OS[sdk=iphonesimulator*]" = "ios-sim";
|
||||||
|
"CARGO_XCODE_TARGET_OS[sdk=iphonesimulator*][arch=x86_64*]" = ios;
|
||||||
|
"CARGO_XCODE_TARGET_OS[sdk=macosx*]" = darwin;
|
||||||
|
CURRENT_PROJECT_VERSION = 0.1;
|
||||||
|
MARKETING_VERSION = 0.1.0;
|
||||||
|
PRODUCT_NAME = em_proxy;
|
||||||
|
SDKROOT = macosx;
|
||||||
|
SUPPORTS_MACCATALYST = YES;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
CA60DE07A83F37FC563E4BCC /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
CARGO_XCODE_CARGO_DEP_FILE_NAME = run.d;
|
||||||
|
CARGO_XCODE_CARGO_FILE_NAME = run;
|
||||||
|
PRODUCT_NAME = run;
|
||||||
|
SUPPORTED_PLATFORMS = macosx;
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
CA60DE07A83FA30E3695DD59 /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
CARGO_XCODE_CARGO_DEP_FILE_NAME = libem_proxy.d;
|
||||||
|
CARGO_XCODE_CARGO_FILE_NAME = libem_proxy.a;
|
||||||
|
INSTALL_GROUP = "";
|
||||||
|
INSTALL_MODE_FLAG = "";
|
||||||
|
INSTALL_OWNER = "";
|
||||||
|
LIB_FILE_NAME = "";
|
||||||
|
"LIB_FILE_NAME[sdk=iphoneos*]" = libem_proxy;
|
||||||
|
"LIB_FILE_NAME[sdk=iphonesimulator*]" = "libem_proxy-sim";
|
||||||
|
PRODUCT_NAME = em_proxy_static;
|
||||||
|
SKIP_INSTALL = YES;
|
||||||
|
SUPPORTED_PLATFORMS = "macosx iphonesimulator iphoneos appletvsimulator appletvos";
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
/* End XCBuildConfiguration section */
|
||||||
|
|
||||||
|
/* Begin XCConfigurationList section */
|
||||||
|
CA603DD75FB437FC563E4BCC /* Build configuration list for PBXNativeTarget "run-bin" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
CA604DFE779B37FC563E4BCC /* Release */,
|
||||||
|
CA60DE07A83F37FC563E4BCC /* Debug */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
CA603DD75FB4A30E3695DD59 /* Build configuration list for PBXNativeTarget "em_proxy-staticlib" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
CA604DFE779BA30E3695DD59 /* Release */,
|
||||||
|
CA60DE07A83FA30E3695DD59 /* Debug */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
CA6094FFF69280E02D6C7F57 /* Build configuration list for PBXProject "em_proxy" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
CA609A5173513CC16B37690B /* Release */,
|
||||||
|
CA609A517351228BE02872F8 /* Debug */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
/* End XCConfigurationList section */
|
||||||
|
};
|
||||||
|
rootObject = CA6094FFF692E04653AD465F /* Project object */;
|
||||||
|
}
|
||||||
|
|||||||
1
Dependencies/em_proxy/.gitkeep
vendored
Normal file
1
Dependencies/em_proxy/.gitkeep
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Use ../fetch-prebuilt.sh to fetch prebuilt Rust dependencies
|
||||||
52
Dependencies/fetch-prebuilt.sh
vendored
Normal file
52
Dependencies/fetch-prebuilt.sh
vendored
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Ensure we are in Dependencies directory
|
||||||
|
cd "$(dirname "$0")"
|
||||||
|
|
||||||
|
check_for_update() {
|
||||||
|
if [ -f ".skip-prebuilt-fetch-$1" ]; then
|
||||||
|
echo "Skipping prebuilt fetch for $1 since .skip-prebuilt-fetch-$1 exists. If you are developing $1 alongside SideStore, don't remove this file, or this script will replace your locally built binaries with the ones built by GitHub Actions."
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f ".last-prebuilt-fetch-$1" ]; then
|
||||||
|
echo "0,none" > ".last-prebuilt-fetch-$1"
|
||||||
|
fi
|
||||||
|
|
||||||
|
LAST_FETCH=`cat .last-prebuilt-fetch-$1 | perl -n -e '/([0-9]*),([^ ]*)$/ && print $1'`
|
||||||
|
LAST_COMMIT=`cat .last-prebuilt-fetch-$1 | perl -n -e '/([0-9]*),([^ ]*)$/ && print $2'`
|
||||||
|
|
||||||
|
# fetch if last fetch was over 6 hours ago
|
||||||
|
if [[ $LAST_FETCH -lt $(expr $(date +%s) - 21600) ]] || [[ "$2" == "force" ]]; then
|
||||||
|
echo "Checking $1 for update"
|
||||||
|
echo
|
||||||
|
LATEST_COMMIT=`curl https://api.github.com/repos/SideStore/$1/releases/latest | perl -n -e '/Commit: https:\\/\\/github\\.com\\/[^\\/]*\\/[^\\/]*\\/commit\\/([^"]*)/ && print $1'`
|
||||||
|
echo
|
||||||
|
echo "Last commit: $LAST_COMMIT"
|
||||||
|
echo "Latest commit: $LATEST_COMMIT"
|
||||||
|
if [[ "$LAST_COMMIT" != "$LATEST_COMMIT" ]]; then
|
||||||
|
echo "Found update, downloading binaries"
|
||||||
|
echo
|
||||||
|
wget -O "$1/lib$1.a" "https://github.com/SideStore/$1/releases/latest/download/lib$1.a"
|
||||||
|
wget -O "$1/lib$1-sim.a" "https://github.com/SideStore/$1/releases/latest/download/lib$1-sim.a"
|
||||||
|
wget -O "$1/$1.h" "https://github.com/SideStore/$1/releases/latest/download/$1.h"
|
||||||
|
echo
|
||||||
|
else
|
||||||
|
echo "Up-to-date"
|
||||||
|
fi
|
||||||
|
echo "$(date +%s),$LATEST_COMMIT" > ".last-prebuilt-fetch-$1"
|
||||||
|
else
|
||||||
|
echo "It hasn't been 6 hours and force was not specified, skipping update check for $1"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Allow for Xcode to check minimuxer and em_proxy separately by skipping the update check if the other one is specified as an argument
|
||||||
|
if [[ "$1" != "em_proxy" ]]; then
|
||||||
|
check_for_update minimuxer "$1"
|
||||||
|
if [[ "$1" != "minimuxer" ]]; then
|
||||||
|
echo
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [[ "$1" != "minimuxer" ]]; then
|
||||||
|
check_for_update em_proxy "$1"
|
||||||
|
fi
|
||||||
2
Dependencies/libimobiledevice
vendored
2
Dependencies/libimobiledevice
vendored
Submodule Dependencies/libimobiledevice updated: b314f04bd7...7a8e432e9b
2
Dependencies/libplist
vendored
2
Dependencies/libplist
vendored
Submodule Dependencies/libplist updated: c3af449543...17546f53ac
2
Dependencies/libusbmuxd
vendored
2
Dependencies/libusbmuxd
vendored
Submodule Dependencies/libusbmuxd updated: 6426362e5c...8b82ef166e
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user