Compare commits

..

2 Commits

Author SHA1 Message Date
Joseph Mattello
93b1c4d834 WireGuard add extra source files
Signed-off-by: Joseph Mattello <mail@joemattiello.com>
2023-01-04 09:56:43 -05:00
Joseph Mattello
e96245b9d8 WireGuard extension
Signed-off-by: Joseph Mattello <mail@joemattiello.com>
2023-01-04 09:56:22 -05:00
128 changed files with 2901 additions and 1874 deletions

34
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@@ -0,0 +1,34 @@
---
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.

View File

@@ -1,40 +0,0 @@
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.

View File

@@ -1,10 +0,0 @@
# 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.

View File

@@ -1,33 +0,0 @@
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.

View File

@@ -1,15 +0,0 @@
### 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

View File

@@ -1,22 +0,0 @@
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

View File

@@ -1,12 +1,16 @@
name: Beta SideStore build name: Beta SideStore build
on: on:
push: push:
tags: branches:
- '[0-9]+.[0-9]+.[0-9]+-beta.[0-9]+' # example: 1.0.0-beta.1 - develop
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:
@@ -21,11 +25,63 @@ 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: Change version to tag - name: Install rustup
run: sed -e '/MARKETING_VERSION = .*/s/= .*/= ${{ github.ref_name }}/' -i '' Build.xcconfig uses: actions-rs/toolchain@v1
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
@@ -33,13 +89,29 @@ jobs:
xcode-version: ${{ matrix.version }} xcode-version: ${{ matrix.version }}
- name: Build SideStore - name: Build SideStore
run: make build | xcpretty && exit ${PIPESTATUS[0]} run: |
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: make fakesign run: |
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: make ipa run: |
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
@@ -59,22 +131,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 new beta release - name: Upload to beta release
uses: softprops/action-gh-release@v1 uses: IsaacShelton/update-existing-release@v1.3.1
with: with:
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
name: ${{ steps.version.outputs.version }} release: "Beta"
tag_name: ${{ github.ref_name }} tag: "beta"
draft: true
prerelease: true prerelease: 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. --> This is an ⚠️ **EXPERIMENTAL** ⚠️ beta build for commit [${{ github.sha }}](https://github.com/${{ github.repository }}/commit/${{ github.sha }}).
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!**
## Changelog 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**.
- TODO 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**.
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

View File

@@ -1,13 +0,0 @@
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 }}

View File

@@ -1,28 +0,0 @@
#!/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

View File

@@ -24,17 +24,63 @@ 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: Cache .nightly-build-num - name: Install rustup
uses: actions/cache@v3 uses: actions-rs/toolchain@v1
with: with:
path: .nightly-build-num toolchain: stable
key: nightly-build-num override: true
target: aarch64-apple-ios
- name: Increase nightly build number and set as version # - name: Create emotional damage
run: bash .github/workflows/increase-nightly-build-num.sh # 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 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
@@ -42,13 +88,29 @@ jobs:
xcode-version: ${{ matrix.version }} xcode-version: ${{ matrix.version }}
- name: Build SideStore - name: Build SideStore
run: make build | xcpretty && exit ${PIPESTATUS[0]} run: |
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: make fakesign run: |
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: make ipa run: |
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
@@ -79,9 +141,11 @@ 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 **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!** 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**.
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 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 use the `SideStore (Nightly)` app, it will use the latest nightly build (make sure to update it in "My Apps").
## Build Info ## Build Info
@@ -89,6 +153,3 @@ 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 }}

View File

@@ -19,11 +19,60 @@ 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: Add PR suffix to version - name: Install rustup
run: sed -e '/MARKETING_VERSION = .*/s/$/-pr.${{ github.event.pull_request.number }}/' -i '' Build.xcconfig uses: actions-rs/toolchain@v1
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
@@ -31,13 +80,29 @@ jobs:
xcode-version: ${{ matrix.version }} xcode-version: ${{ matrix.version }}
- name: Build SideStore - name: Build SideStore
run: make build | xcpretty && exit ${PIPESTATUS[0]} run: |
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: make fakesign run: |
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: make ipa run: |
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

View File

@@ -2,7 +2,7 @@ name: Stable SideStore build
on: on:
push: push:
tags: tags:
- '[0-9]+.[0-9]+.[0-9]+' # example: 1.0.0 - '[0-9]+.[0-9]+.[0-9]+*'
jobs: jobs:
build: build:
@@ -21,11 +21,60 @@ 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: Change version to tag - name: Install rustup
run: sed -e '/MARKETING_VERSION = .*/s/= .*/= ${{ github.ref_name }}/' -i '' Build.xcconfig uses: actions-rs/toolchain@v1
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
@@ -33,13 +82,29 @@ jobs:
xcode-version: ${{ matrix.version }} xcode-version: ${{ matrix.version }}
- name: Build SideStore - name: Build SideStore
run: make build | xcpretty && exit ${PIPESTATUS[0]} run: |
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: make fakesign run: |
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: make ipa run: |
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
@@ -64,11 +129,10 @@ 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_name }} tag_name: ${{ github.ref }}
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

11
.gitignore vendored
View File

@@ -34,13 +34,4 @@ xcuserdata
## AppCode specific ## AppCode specific
.idea/ .idea/
/.build
.build
Payload/
SideStore.ipa
Dependencies/.*-prebuilt-fetch-*
Dependencies/minimuxer/*
Dependencies/em_proxy/*
!Dependencies/**/.gitkeep
.nightly-build-num

6
.gitmodules vendored
View File

@@ -13,9 +13,15 @@
[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

View File

@@ -21,9 +21,23 @@
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, ); }; };
B355DFB129209C6900E4C858 /* WireGuardKit in Frameworks */ = {isa = PBXBuildFile; productRef = B355DFB029209C6900E4C858 /* WireGuardKit */; };
B355DFC029209E2400E4C858 /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B355DFBF29209E2400E4C858 /* NetworkExtension.framework */; };
B355DFC329209E2500E4C858 /* AppProxyProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = B355DFC229209E2500E4C858 /* AppProxyProvider.swift */; };
B355DFC829209E2500E4C858 /* WireguardNetworkExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = B355DFBE29209E2400E4C858 /* WireguardNetworkExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
B355DFCF29209E4C00E4C858 /* WireGuardKit in Frameworks */ = {isa = PBXBuildFile; productRef = B355DFCE29209E4C00E4C858 /* WireGuardKit */; };
B355DFEF2920A75E00E4C858 /* ringlogger.c in Sources */ = {isa = PBXBuildFile; fileRef = B355DFE42920A75D00E4C858 /* ringlogger.c */; };
B355DFF02920A75E00E4C858 /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = B355DFE52920A75D00E4C858 /* Logger.swift */; };
B355DFF12920A75E00E4C858 /* test_ringlogger.c in Sources */ = {isa = PBXBuildFile; fileRef = B355DFE62920A75D00E4C858 /* test_ringlogger.c */; };
B355DFF22920A75E00E4C858 /* Keychain.swift in Sources */ = {isa = PBXBuildFile; fileRef = B355DFE82920A75D00E4C858 /* Keychain.swift */; };
B355DFF32920A75E00E4C858 /* FileManager+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = B355DFE92920A75D00E4C858 /* FileManager+Extension.swift */; };
B355DFF42920A75E00E4C858 /* TunnelConfiguration+WgQuickConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = B355DFEB2920A75D00E4C858 /* TunnelConfiguration+WgQuickConfig.swift */; };
B355DFF52920A75E00E4C858 /* NETunnelProviderProtocol+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = B355DFEC2920A75D00E4C858 /* NETunnelProviderProtocol+Extension.swift */; };
B355DFF62920A75E00E4C858 /* String+ArrayConversion.swift in Sources */ = {isa = PBXBuildFile; fileRef = B355DFED2920A75D00E4C858 /* String+ArrayConversion.swift */; };
B355DFF72920A75E00E4C858 /* NotificationToken.swift in Sources */ = {isa = PBXBuildFile; fileRef = B355DFEE2920A75E00E4C858 /* NotificationToken.swift */; };
B355DFF92920A79E00E4C858 /* ErrorNotifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = B355DFF82920A79E00E4C858 /* ErrorNotifier.swift */; };
B33FFBA8295F8E98002259E6 /* libfragmentzip.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B343F894295F7F9B002B1159 /* libfragmentzip.a */; }; B33FFBA8295F8E98002259E6 /* libfragmentzip.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B343F894295F7F9B002B1159 /* libfragmentzip.a */; };
B33FFBAA295F8F78002259E6 /* preboard.c in Sources */ = {isa = PBXBuildFile; fileRef = B33FFBA9295F8F78002259E6 /* preboard.c */; }; B33FFBAA295F8F78002259E6 /* preboard.c in Sources */ = {isa = PBXBuildFile; fileRef = B33FFBA9295F8F78002259E6 /* preboard.c */; };
B33FFBAC295F8F98002259E6 /* companion_proxy.c in Sources */ = {isa = PBXBuildFile; fileRef = B33FFBAB295F8F98002259E6 /* companion_proxy.c */; }; B33FFBAC295F8F98002259E6 /* companion_proxy.c in Sources */ = {isa = PBXBuildFile; fileRef = B33FFBAB295F8F98002259E6 /* companion_proxy.c */; };
@@ -387,6 +401,26 @@
remoteGlobalIDString = BFADB00319AE7BB80050CF31; remoteGlobalIDString = BFADB00319AE7BB80050CF31;
remoteInfo = RoxasTests; remoteInfo = RoxasTests;
}; };
B355DFC629209E2500E4C858 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFD247622284B9A500981D42 /* Project object */;
proxyType = 1;
remoteGlobalIDString = B355DFBD29209E2400E4C858;
remoteInfo = WireguardNetworkExtension;
};
B355DFCC29209E3F00E4C858 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFD247622284B9A500981D42 /* Project object */;
proxyType = 1;
remoteGlobalIDString = B355DFB229209DB000E4C858;
remoteInfo = WireGuardGoBridgeiOS;
};
BF4588442298D48B00BD7491 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFD247622284B9A500981D42 /* Project object */;
proxyType = 1;
remoteGlobalIDString = BF45872A2298D31600BD7491;
remoteInfo = libimobiledevice;
B343F84B295F6321002B1159 /* PBXContainerItemProxy */ = { B343F84B295F6321002B1159 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy; isa = PBXContainerItemProxy;
containerPortal = B343F847295F6321002B1159 /* minimuxer.xcodeproj */; containerPortal = B343F847295F6321002B1159 /* minimuxer.xcodeproj */;
@@ -493,6 +527,7 @@
dstPath = ""; dstPath = "";
dstSubfolderSpec = 13; dstSubfolderSpec = 13;
files = ( files = (
B355DFC829209E2500E4C858 /* WireguardNetworkExtension.appex in Embed App Extensions */,
BF989177250AABF4002ACF50 /* AltWidgetExtension.appex in Embed App Extensions */, BF989177250AABF4002ACF50 /* AltWidgetExtension.appex in Embed App Extensions */,
); );
name = "Embed App Extensions"; name = "Embed App Extensions";
@@ -501,6 +536,7 @@
/* 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,9 +545,27 @@
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>"; };
B355DFBE29209E2400E4C858 /* WireguardNetworkExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = WireguardNetworkExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
B355DFBF29209E2400E4C858 /* NetworkExtension.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NetworkExtension.framework; path = System/Library/Frameworks/NetworkExtension.framework; sourceTree = SDKROOT; };
B355DFC229209E2500E4C858 /* AppProxyProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppProxyProvider.swift; sourceTree = "<group>"; };
B355DFC429209E2500E4C858 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
B355DFC529209E2500E4C858 /* WireguardNetworkExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = WireguardNetworkExtension.entitlements; sourceTree = "<group>"; };
B355DFE22920A6C200E4C858 /* WireguardNetworkExtension-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "WireguardNetworkExtension-Bridging-Header.h"; sourceTree = "<group>"; };
B355DFE42920A75D00E4C858 /* ringlogger.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ringlogger.c; sourceTree = "<group>"; };
B355DFE52920A75D00E4C858 /* Logger.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Logger.swift; sourceTree = "<group>"; };
B355DFE62920A75D00E4C858 /* test_ringlogger.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = test_ringlogger.c; sourceTree = "<group>"; };
B355DFE72920A75D00E4C858 /* ringlogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ringlogger.h; sourceTree = "<group>"; };
B355DFE82920A75D00E4C858 /* Keychain.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Keychain.swift; sourceTree = "<group>"; };
B355DFE92920A75D00E4C858 /* FileManager+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "FileManager+Extension.swift"; sourceTree = "<group>"; };
B355DFEB2920A75D00E4C858 /* TunnelConfiguration+WgQuickConfig.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "TunnelConfiguration+WgQuickConfig.swift"; sourceTree = "<group>"; };
B355DFEC2920A75D00E4C858 /* NETunnelProviderProtocol+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NETunnelProviderProtocol+Extension.swift"; sourceTree = "<group>"; };
B355DFED2920A75D00E4C858 /* String+ArrayConversion.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+ArrayConversion.swift"; sourceTree = "<group>"; };
B355DFEE2920A75E00E4C858 /* NotificationToken.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NotificationToken.swift; sourceTree = "<group>"; };
B355DFF82920A79E00E4C858 /* ErrorNotifier.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ErrorNotifier.swift; sourceTree = "<group>"; };
B33FFBA9295F8F78002259E6 /* preboard.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = preboard.c; path = src/preboard.c; sourceTree = "<group>"; }; B33FFBA9295F8F78002259E6 /* preboard.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = preboard.c; path = src/preboard.c; sourceTree = "<group>"; };
B33FFBAB295F8F98002259E6 /* companion_proxy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = companion_proxy.c; path = src/companion_proxy.c; sourceTree = "<group>"; }; B33FFBAB295F8F98002259E6 /* companion_proxy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = companion_proxy.c; path = src/companion_proxy.c; sourceTree = "<group>"; };
B343F847295F6321002B1159 /* minimuxer.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = minimuxer.xcodeproj; path = Dependencies/minimuxer.xcodeproj; sourceTree = SOURCE_ROOT; }; B343F847295F6321002B1159 /* minimuxer.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = minimuxer.xcodeproj; path = Dependencies/minimuxer.xcodeproj; sourceTree = SOURCE_ROOT; };
@@ -875,6 +929,15 @@
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
B355DFBB29209E2400E4C858 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
B355DFCF29209E4C00E4C858 /* WireGuardKit in Frameworks */,
B355DFC029209E2400E4C858 /* NetworkExtension.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
BF18BFE424857D7900DD5981 /* Frameworks */ = { BF18BFE424857D7900DD5981 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
@@ -895,7 +958,6 @@
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 */,
); );
@@ -922,6 +984,7 @@
D533E8B72727841800A9B5DD /* libAppleArchive.tbd in Frameworks */, D533E8B72727841800A9B5DD /* libAppleArchive.tbd in Frameworks */,
B3C395F9284F362400DA9E2F /* AppCenterCrashes in Frameworks */, B3C395F9284F362400DA9E2F /* AppCenterCrashes in Frameworks */,
D533E8BE2727BBF800A9B5DD /* libcurl.a in Frameworks */, D533E8BE2727BBF800A9B5DD /* libcurl.a in Frameworks */,
B355DFB129209C6900E4C858 /* WireGuardKit in Frameworks */,
4879A9622861049C00FC1BBD /* OpenSSL in Frameworks */, 4879A9622861049C00FC1BBD /* OpenSSL in Frameworks */,
B3C395F4284F35DD00DA9E2F /* Nuke in Frameworks */, B3C395F4284F35DD00DA9E2F /* Nuke in Frameworks */,
BF1614F1250822F100767AEA /* Roxas.framework in Frameworks */, BF1614F1250822F100767AEA /* Roxas.framework in Frameworks */,
@@ -937,6 +1000,7 @@
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;
@@ -946,6 +1010,7 @@
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;
@@ -978,6 +1043,44 @@
name = Products; name = Products;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
B355DFC129209E2500E4C858 /* WireguardNetworkExtension */ = {
isa = PBXGroup;
children = (
B355DFC529209E2500E4C858 /* WireguardNetworkExtension.entitlements */,
B355DFE22920A6C200E4C858 /* WireguardNetworkExtension-Bridging-Header.h */,
B355DFC429209E2500E4C858 /* Info.plist */,
B355DFC229209E2500E4C858 /* AppProxyProvider.swift */,
B355DFF82920A79E00E4C858 /* ErrorNotifier.swift */,
B355DFE92920A75D00E4C858 /* FileManager+Extension.swift */,
B355DFE82920A75D00E4C858 /* Keychain.swift */,
B355DFEE2920A75E00E4C858 /* NotificationToken.swift */,
B355DFE32920A75D00E4C858 /* Logging */,
B355DFEA2920A75D00E4C858 /* Model */,
);
path = WireguardNetworkExtension;
sourceTree = "<group>";
};
B355DFE32920A75D00E4C858 /* Logging */ = {
isa = PBXGroup;
children = (
B355DFE42920A75D00E4C858 /* ringlogger.c */,
B355DFE52920A75D00E4C858 /* Logger.swift */,
B355DFE62920A75D00E4C858 /* test_ringlogger.c */,
B355DFE72920A75D00E4C858 /* ringlogger.h */,
);
path = Logging;
sourceTree = "<group>";
};
B355DFEA2920A75D00E4C858 /* Model */ = {
isa = PBXGroup;
children = (
B355DFEB2920A75D00E4C858 /* TunnelConfiguration+WgQuickConfig.swift */,
B355DFEC2920A75D00E4C858 /* NETunnelProviderProtocol+Extension.swift */,
B355DFED2920A75D00E4C858 /* String+ArrayConversion.swift */,
);
path = Model;
sourceTree = "<group>";
};
B33FFB8F295F8CF2002259E6 /* Recovered References */ = { B33FFB8F295F8CF2002259E6 /* Recovered References */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
@@ -1507,6 +1610,7 @@
BF98916C250AABF3002ACF50 /* AltWidget */, BF98916C250AABF3002ACF50 /* AltWidget */,
19104DB32909C06D00C49C7B /* EmotionalDamage */, 19104DB32909C06D00C49C7B /* EmotionalDamage */,
191E5FAC290A5D92001A3B7C /* minimuxer */, 191E5FAC290A5D92001A3B7C /* minimuxer */,
B355DFC129209E2500E4C858 /* WireguardNetworkExtension */,
B343F886295F7F9B002B1159 /* libfragmentzip.xcodeproj */, B343F886295F7F9B002B1159 /* libfragmentzip.xcodeproj */,
BFD247852284BB3300981D42 /* Frameworks */, BFD247852284BB3300981D42 /* Frameworks */,
B3146EC6284F580500BBC3FD /* Roxas.xcodeproj */, B3146EC6284F580500BBC3FD /* Roxas.xcodeproj */,
@@ -1526,6 +1630,7 @@
BF989167250AABF3002ACF50 /* AltWidgetExtension.appex */, BF989167250AABF3002ACF50 /* AltWidgetExtension.appex */,
19104DB22909C06C00C49C7B /* libEmotionalDamage.a */, 19104DB22909C06C00C49C7B /* libEmotionalDamage.a */,
191E5FAB290A5D92001A3B7C /* libminimuxer.a */, 191E5FAB290A5D92001A3B7C /* libminimuxer.a */,
B355DFBE29209E2400E4C858 /* WireguardNetworkExtension.appex */,
); );
name = Products; name = Products;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -1573,6 +1678,7 @@
BF580497246A3D19008AE704 /* UIKit.framework */, BF580497246A3D19008AE704 /* UIKit.framework */,
BF4588872298DD3F00BD7491 /* libxml2.tbd */, BF4588872298DD3F00BD7491 /* libxml2.tbd */,
BFD247862284BB3B00981D42 /* Roxas.framework */, BFD247862284BB3B00981D42 /* Roxas.framework */,
B355DFBF29209E2400E4C858 /* NetworkExtension.framework */,
); );
name = Frameworks; name = Frameworks;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -1831,6 +1937,37 @@
}; };
/* End PBXHeadersBuildPhase section */ /* End PBXHeadersBuildPhase section */
/* Begin PBXLegacyTarget section */
B355DFB229209DB000E4C858 /* WireGuardGoBridgeiOS */ = {
isa = PBXLegacyTarget;
buildArgumentsString = "$(ACTION)";
buildConfigurationList = B355DFB329209DB000E4C858 /* Build configuration list for PBXLegacyTarget "WireGuardGoBridgeiOS" */;
buildPhases = (
);
buildToolPath = /usr/bin/make;
buildWorkingDirectory = "${BUILD_DIR}/../../SourcePackages/checkouts/wireguard-apple/Sources/WireGuardKitGo";
dependencies = (
);
name = WireGuardGoBridgeiOS;
passBuildSettingsInEnvironment = 1;
productName = WireGuardGoBridgeiOS;
};
B355DFB629209DD200E4C858 /* WireGuardGoBridgemacOS */ = {
isa = PBXLegacyTarget;
buildArgumentsString = "$(ACTION)";
buildConfigurationList = B355DFB729209DD200E4C858 /* Build configuration list for PBXLegacyTarget "WireGuardGoBridgemacOS" */;
buildPhases = (
);
buildToolPath = /usr/bin/make;
buildWorkingDirectory = "${BUILD_DIR%Build/*}SourcePackages/checkouts/wireguard-apple/Sources/WireGuardKitGo";
dependencies = (
);
name = WireGuardGoBridgemacOS;
passBuildSettingsInEnvironment = 1;
productName = WireGuardGoBridgeiOS;
};
/* End PBXLegacyTarget section */
/* Begin PBXNativeTarget section */ /* Begin PBXNativeTarget section */
19104DB12909C06C00C49C7B /* EmotionalDamage */ = { 19104DB12909C06C00C49C7B /* EmotionalDamage */ = {
isa = PBXNativeTarget; isa = PBXNativeTarget;
@@ -1867,6 +2004,27 @@
productReference = 191E5FAB290A5D92001A3B7C /* libminimuxer.a */; productReference = 191E5FAB290A5D92001A3B7C /* libminimuxer.a */;
productType = "com.apple.product-type.library.static"; productType = "com.apple.product-type.library.static";
}; };
B355DFBD29209E2400E4C858 /* WireguardNetworkExtension */ = {
isa = PBXNativeTarget;
buildConfigurationList = B355DFC929209E2600E4C858 /* Build configuration list for PBXNativeTarget "WireguardNetworkExtension" */;
buildPhases = (
B355DFBA29209E2400E4C858 /* Sources */,
B355DFBB29209E2400E4C858 /* Frameworks */,
B355DFBC29209E2400E4C858 /* Resources */,
);
buildRules = (
);
dependencies = (
B355DFCD29209E3F00E4C858 /* PBXTargetDependency */,
);
name = WireguardNetworkExtension;
packageProductDependencies = (
B355DFCE29209E4C00E4C858 /* WireGuardKit */,
);
productName = WireguardNetworkExtension;
productReference = B355DFBE29209E2400E4C858 /* WireguardNetworkExtension.appex */;
productType = "com.apple.product-type.app-extension";
};
BF18BFE624857D7900DD5981 /* AltDaemon */ = { BF18BFE624857D7900DD5981 /* AltDaemon */ = {
isa = PBXNativeTarget; isa = PBXNativeTarget;
buildConfigurationList = BF18BFEB24857D7900DD5981 /* Build configuration list for PBXNativeTarget "AltDaemon" */; buildConfigurationList = BF18BFEB24857D7900DD5981 /* Build configuration list for PBXNativeTarget "AltDaemon" */;
@@ -1935,13 +2093,11 @@
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 */;
@@ -1983,6 +2139,7 @@
19104D942909BADB00C49C7B /* PBXTargetDependency */, 19104D942909BADB00C49C7B /* PBXTargetDependency */,
BF66EE842501AE50007EE018 /* PBXTargetDependency */, BF66EE842501AE50007EE018 /* PBXTargetDependency */,
BF989176250AABF4002ACF50 /* PBXTargetDependency */, BF989176250AABF4002ACF50 /* PBXTargetDependency */,
B355DFC729209E2500E4C858 /* PBXTargetDependency */,
); );
name = SideStore; name = SideStore;
packageProductDependencies = ( packageProductDependencies = (
@@ -1990,6 +2147,7 @@
B3C395F6284F362400DA9E2F /* AppCenterAnalytics */, B3C395F6284F362400DA9E2F /* AppCenterAnalytics */,
B3C395F8284F362400DA9E2F /* AppCenterCrashes */, B3C395F8284F362400DA9E2F /* AppCenterCrashes */,
4879A9612861049C00FC1BBD /* OpenSSL */, 4879A9612861049C00FC1BBD /* OpenSSL */,
B355DFB029209C6900E4C858 /* WireGuardKit */,
); );
productName = AltStore; productName = AltStore;
productReference = BFD2476A2284B9A500981D42 /* SideStore.app */; productReference = BFD2476A2284B9A500981D42 /* SideStore.app */;
@@ -2001,7 +2159,7 @@
BFD247622284B9A500981D42 /* Project object */ = { BFD247622284B9A500981D42 /* Project object */ = {
isa = PBXProject; isa = PBXProject;
attributes = { attributes = {
LastSwiftUpdateCheck = 1400; LastSwiftUpdateCheck = 1410;
LastUpgradeCheck = 1020; LastUpgradeCheck = 1020;
ORGANIZATIONNAME = SideStore; ORGANIZATIONNAME = SideStore;
TargetAttributes = { TargetAttributes = {
@@ -2011,6 +2169,12 @@
191E5FAA290A5D92001A3B7C = { 191E5FAA290A5D92001A3B7C = {
CreatedOnToolsVersion = 14.0; CreatedOnToolsVersion = 14.0;
}; };
B355DFB229209DB000E4C858 = {
CreatedOnToolsVersion = 14.1;
};
B355DFBD29209E2400E4C858 = {
CreatedOnToolsVersion = 14.1;
};
BF18BFE624857D7900DD5981 = { BF18BFE624857D7900DD5981 = {
CreatedOnToolsVersion = 11.5; CreatedOnToolsVersion = 11.5;
LastSwiftMigration = 1150; LastSwiftMigration = 1150;
@@ -2060,7 +2224,7 @@
B3C395FD284F3C0900DA9E2F /* XCRemoteSwiftPackageReference "STPrivilegedTask" */, B3C395FD284F3C0900DA9E2F /* XCRemoteSwiftPackageReference "STPrivilegedTask" */,
4879A95D2861046500FC1BBD /* XCRemoteSwiftPackageReference "AltSign" */, 4879A95D2861046500FC1BBD /* XCRemoteSwiftPackageReference "AltSign" */,
4879A9602861049C00FC1BBD /* XCRemoteSwiftPackageReference "OpenSSL" */, 4879A9602861049C00FC1BBD /* XCRemoteSwiftPackageReference "OpenSSL" */,
99C4EF472978D52400CB538D /* XCRemoteSwiftPackageReference "SemanticVersion" */, B355DFAF29209C6900E4C858 /* XCRemoteSwiftPackageReference "wireguard-apple" */,
); );
productRefGroup = BFD2476B2284B9A500981D42 /* Products */; productRefGroup = BFD2476B2284B9A500981D42 /* Products */;
projectDirPath = ""; projectDirPath = "";
@@ -2092,6 +2256,9 @@
BF989166250AABF3002ACF50 /* AltWidgetExtension */, BF989166250AABF3002ACF50 /* AltWidgetExtension */,
19104DB12909C06C00C49C7B /* EmotionalDamage */, 19104DB12909C06C00C49C7B /* EmotionalDamage */,
191E5FAA290A5D92001A3B7C /* minimuxer */, 191E5FAA290A5D92001A3B7C /* minimuxer */,
B355DFB229209DB000E4C858 /* WireGuardGoBridgeiOS */,
B355DFB629209DD200E4C858 /* WireGuardGoBridgemacOS */,
B355DFBD29209E2400E4C858 /* WireguardNetworkExtension */,
); );
}; };
/* End PBXProject section */ /* End PBXProject section */
@@ -2170,6 +2337,23 @@
/* End PBXReferenceProxy section */ /* End PBXReferenceProxy section */
/* Begin PBXResourcesBuildPhase section */ /* Begin PBXResourcesBuildPhase section */
B355DFBC29209E2400E4C858 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
BF45868B229872EA00BD7491 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
BFE4FFB6251BF7BA0018CF9B /* AltPlugin.zip in Resources */,
BF458694229872EA00BD7491 /* Assets.xcassets in Resources */,
BF458697229872EA00BD7491 /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
BF580479246A28F7008AE704 /* Resources */ = { BF580479246A28F7008AE704 /* Resources */ = {
isa = PBXResourcesBuildPhase; isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
@@ -2237,6 +2421,24 @@
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
B355DFBA29209E2400E4C858 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
B355DFC329209E2500E4C858 /* AppProxyProvider.swift in Sources */,
B355DFF52920A75E00E4C858 /* NETunnelProviderProtocol+Extension.swift in Sources */,
B355DFF42920A75E00E4C858 /* TunnelConfiguration+WgQuickConfig.swift in Sources */,
B355DFF12920A75E00E4C858 /* test_ringlogger.c in Sources */,
B355DFF92920A79E00E4C858 /* ErrorNotifier.swift in Sources */,
B355DFF02920A75E00E4C858 /* Logger.swift in Sources */,
B355DFEF2920A75E00E4C858 /* ringlogger.c in Sources */,
B355DFF72920A75E00E4C858 /* NotificationToken.swift in Sources */,
B355DFF22920A75E00E4C858 /* Keychain.swift in Sources */,
B355DFF32920A75E00E4C858 /* FileManager+Extension.swift in Sources */,
B355DFF62920A75E00E4C858 /* String+ArrayConversion.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
BF18BFE324857D7900DD5981 /* Sources */ = { BF18BFE324857D7900DD5981 /* Sources */ = {
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
@@ -2544,10 +2746,20 @@
isa = PBXTargetDependency; isa = PBXTargetDependency;
productRef = 191E5FD9290AFA49001A3B7C /* OpenSSL */; productRef = 191E5FD9290AFA49001A3B7C /* OpenSSL */;
}; };
99C4EF51297994E200CB538D /* PBXTargetDependency */ = { B355DFC729209E2500E4C858 /* PBXTargetDependency */ = {
isa = PBXTargetDependency; isa = PBXTargetDependency;
productRef = 99C4EF50297994E200CB538D /* SemanticVersion */; target = B355DFBD29209E2400E4C858 /* WireguardNetworkExtension */;
targetProxy = B355DFC629209E2500E4C858 /* PBXContainerItemProxy */;
}; };
B355DFCD29209E3F00E4C858 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = B355DFB229209DB000E4C858 /* WireGuardGoBridgeiOS */;
targetProxy = B355DFCC29209E3F00E4C858 /* PBXContainerItemProxy */;
};
BF4588452298D48B00BD7491 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = BF45872A2298D31600BD7491 /* libimobiledevice */;
targetProxy = BF4588442298D48B00BD7491 /* PBXContainerItemProxy */;
B343F86F295F76FD002B1159 /* PBXTargetDependency */ = { B343F86F295F76FD002B1159 /* PBXTargetDependency */ = {
isa = PBXTargetDependency; isa = PBXTargetDependency;
name = "minimuxer-staticlib"; name = "minimuxer-staticlib";
@@ -2615,14 +2827,15 @@
IPHONEOS_DEPLOYMENT_TARGET = 14.0; IPHONEOS_DEPLOYMENT_TARGET = 14.0;
LIBRARY_SEARCH_PATHS = ( LIBRARY_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
"$(PROJECT_DIR)/Dependencies/em_proxy", "$(PROJECT_DIR)/Dependencies/em_proxy/target/aarch64-apple-ios/release",
"$(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 = Dependencies/em_proxy/em_proxy.h; SWIFT_OBJC_BRIDGING_HEADER = EmotionalDamage/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;
@@ -2641,13 +2854,14 @@
IPHONEOS_DEPLOYMENT_TARGET = 14.0; IPHONEOS_DEPLOYMENT_TARGET = 14.0;
LIBRARY_SEARCH_PATHS = ( LIBRARY_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
"$(PROJECT_DIR)/Dependencies/em_proxy", "$(PROJECT_DIR)/Dependencies/em_proxy/target/aarch64-apple-ios/release",
"$(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 = Dependencies/em_proxy/em_proxy.h; SWIFT_OBJC_BRIDGING_HEADER = EmotionalDamage/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;
@@ -2667,13 +2881,14 @@
IPHONEOS_DEPLOYMENT_TARGET = 14.0; IPHONEOS_DEPLOYMENT_TARGET = 14.0;
LIBRARY_SEARCH_PATHS = ( LIBRARY_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
"$(PROJECT_DIR)/Dependencies/minimuxer", "$(PROJECT_DIR)/Dependencies/minimuxer/target/aarch64-apple-ios/release",
"$(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 = Dependencies/minimuxer/minimuxer.h; SWIFT_OBJC_BRIDGING_HEADER = minimuxer/minimuxer.h;
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2"; TARGETED_DEVICE_FAMILY = "1,2";
}; };
@@ -2690,12 +2905,145 @@
IPHONEOS_DEPLOYMENT_TARGET = 14.0; IPHONEOS_DEPLOYMENT_TARGET = 14.0;
LIBRARY_SEARCH_PATHS = ( LIBRARY_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
"$(PROJECT_DIR)/Dependencies/minimuxer", "$(PROJECT_DIR)/Dependencies/minimuxer/target/aarch64-apple-ios/release",
"$(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 = Dependencies/minimuxer/minimuxer.h; SWIFT_OBJC_BRIDGING_HEADER = minimuxer/minimuxer.h;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Release;
};
B355DFB429209DB000E4C858 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CODE_SIGN_STYLE = Automatic;
DEBUGGING_SYMBOLS = YES;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = S32Z3HMYVQ;
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
OTHER_CFLAGS = "";
OTHER_LDFLAGS = "";
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Debug;
};
B355DFB529209DB000E4C858 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CODE_SIGN_STYLE = Automatic;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = S32Z3HMYVQ;
OTHER_CFLAGS = "";
OTHER_LDFLAGS = "";
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Release;
};
B355DFB829209DD200E4C858 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CODE_SIGN_STYLE = Automatic;
DEBUGGING_SYMBOLS = YES;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = S32Z3HMYVQ;
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
OTHER_CFLAGS = "";
OTHER_LDFLAGS = "";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macos;
};
name = Debug;
};
B355DFB929209DD200E4C858 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CODE_SIGN_STYLE = Automatic;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = S32Z3HMYVQ;
OTHER_CFLAGS = "";
OTHER_LDFLAGS = "";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macos;
};
name = Release;
};
B355DFCA29209E2600E4C858 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CODE_SIGN_ENTITLEMENTS = WireguardNetworkExtension/WireguardNetworkExtension.entitlements;
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = "$(DEVELOPMENT_TEAM)";
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = WireguardNetworkExtension/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = WireguardNetworkExtension;
INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 Riley Testut. All rights reserved.";
IPHONEOS_DEPLOYMENT_TARGET = 16.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.joemattiello.AltStore.WireguardNetworkExtension;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
B355DFCB29209E2600E4C858 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CODE_SIGN_ENTITLEMENTS = WireguardNetworkExtension/WireguardNetworkExtension.entitlements;
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = "$(DEVELOPMENT_TEAM)";
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = WireguardNetworkExtension/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = WireguardNetworkExtension;
INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 Riley Testut. All rights reserved.";
IPHONEOS_DEPLOYMENT_TARGET = 16.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.joemattiello.AltStore.WireguardNetworkExtension;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2"; TARGETED_DEVICE_FAMILY = "1,2";
}; };
@@ -3195,6 +3543,8 @@
"$(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)";
@@ -3229,6 +3579,8 @@
"$(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)";
@@ -3261,6 +3613,33 @@
defaultConfigurationIsVisible = 0; defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release; defaultConfigurationName = Release;
}; };
B355DFB329209DB000E4C858 /* Build configuration list for PBXLegacyTarget "WireGuardGoBridgeiOS" */ = {
isa = XCConfigurationList;
buildConfigurations = (
B355DFB429209DB000E4C858 /* Debug */,
B355DFB529209DB000E4C858 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
B355DFB729209DD200E4C858 /* Build configuration list for PBXLegacyTarget "WireGuardGoBridgemacOS" */ = {
isa = XCConfigurationList;
buildConfigurations = (
B355DFB829209DD200E4C858 /* Debug */,
B355DFB929209DD200E4C858 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
B355DFC929209E2600E4C858 /* Build configuration list for PBXNativeTarget "WireguardNetworkExtension" */ = {
isa = XCConfigurationList;
buildConfigurations = (
B355DFCA29209E2600E4C858 /* Debug */,
B355DFCB29209E2600E4C858 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
BF18BFEB24857D7900DD5981 /* Build configuration list for PBXNativeTarget "AltDaemon" */ = { BF18BFEB24857D7900DD5981 /* Build configuration list for PBXNativeTarget "AltDaemon" */ = {
isa = XCConfigurationList; isa = XCConfigurationList;
buildConfigurations = ( buildConfigurations = (
@@ -3343,12 +3722,12 @@
minimumVersion = 1.1.180; minimumVersion = 1.1.180;
}; };
}; };
99C4EF472978D52400CB538D /* XCRemoteSwiftPackageReference "SemanticVersion" */ = { B355DFAF29209C6900E4C858 /* XCRemoteSwiftPackageReference "wireguard-apple" */ = {
isa = XCRemoteSwiftPackageReference; isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/SwiftPackageIndex/SemanticVersion.git"; repositoryURL = "https://github.com/WireGuard/wireguard-apple";
requirement = { requirement = {
kind = upToNextMajorVersion; branch = master;
minimumVersion = 0.3.5; kind = branch;
}; };
}; };
B3C395EF284F2DE700DA9E2F /* XCRemoteSwiftPackageReference "KeychainAccess" */ = { B3C395EF284F2DE700DA9E2F /* XCRemoteSwiftPackageReference "KeychainAccess" */ = {
@@ -3422,15 +3801,15 @@
package = 4879A9602861049C00FC1BBD /* XCRemoteSwiftPackageReference "OpenSSL" */; package = 4879A9602861049C00FC1BBD /* XCRemoteSwiftPackageReference "OpenSSL" */;
productName = OpenSSL; productName = OpenSSL;
}; };
99C4EF4C2979132100CB538D /* SemanticVersion */ = { B355DFB029209C6900E4C858 /* WireGuardKit */ = {
isa = XCSwiftPackageProductDependency; isa = XCSwiftPackageProductDependency;
package = 99C4EF472978D52400CB538D /* XCRemoteSwiftPackageReference "SemanticVersion" */; package = B355DFAF29209C6900E4C858 /* XCRemoteSwiftPackageReference "wireguard-apple" */;
productName = SemanticVersion; productName = WireGuardKit;
}; };
99C4EF50297994E200CB538D /* SemanticVersion */ = { B355DFCE29209E4C00E4C858 /* WireGuardKit */ = {
isa = XCSwiftPackageProductDependency; isa = XCSwiftPackageProductDependency;
package = 99C4EF472978D52400CB538D /* XCRemoteSwiftPackageReference "SemanticVersion" */; package = B355DFAF29209C6900E4C858 /* XCRemoteSwiftPackageReference "wireguard-apple" */;
productName = SemanticVersion; productName = WireGuardKit;
}; };
B3C395F0284F2DE700DA9E2F /* KeychainAccess */ = { B3C395F0284F2DE700DA9E2F /* KeychainAccess */ = {
isa = XCSwiftPackageProductDependency; isa = XCSwiftPackageProductDependency;

View File

@@ -1,95 +0,0 @@
{
"pins" : [
{
"identity" : "altsign",
"kind" : "remoteSourceControl",
"location" : "https://github.com/SideStore/AltSign",
"state" : {
"branch" : "master",
"revision" : "7e0e7edcf8fbc44ac1e35da3e9030a297aa18b84"
}
},
{
"identity" : "appcenter-sdk-apple",
"kind" : "remoteSourceControl",
"location" : "https://github.com/microsoft/appcenter-sdk-apple.git",
"state" : {
"revision" : "8354a50fe01a7e54e196d3b5493b5ab53dd5866a",
"version" : "4.4.2"
}
},
{
"identity" : "keychainaccess",
"kind" : "remoteSourceControl",
"location" : "https://github.com/kishikawakatsumi/KeychainAccess.git",
"state" : {
"revision" : "84e546727d66f1adc5439debad16270d0fdd04e7",
"version" : "4.2.2"
}
},
{
"identity" : "launchatlogin",
"kind" : "remoteSourceControl",
"location" : "https://github.com/sindresorhus/LaunchAtLogin.git",
"state" : {
"revision" : "e8171b3e38a2816f579f58f3dac1522aa39efe41",
"version" : "4.2.0"
}
},
{
"identity" : "nuke",
"kind" : "remoteSourceControl",
"location" : "https://github.com/kean/Nuke.git",
"state" : {
"revision" : "9318d02a8a6d20af56505c9673261c1fd3b3aebe",
"version" : "7.6.3"
}
},
{
"identity" : "openssl",
"kind" : "remoteSourceControl",
"location" : "https://github.com/krzyzanowskim/OpenSSL",
"state" : {
"revision" : "033fcb41dac96b1b6effa945ca1f9ade002370b2",
"version" : "1.1.1501"
}
},
{
"identity" : "plcrashreporter",
"kind" : "remoteSourceControl",
"location" : "https://github.com/microsoft/PLCrashReporter.git",
"state" : {
"revision" : "6b27393cad517c067dceea85fadf050e70c4ceaa",
"version" : "1.10.1"
}
},
{
"identity" : "semanticversion",
"kind" : "remoteSourceControl",
"location" : "https://github.com/SwiftPackageIndex/SemanticVersion.git",
"state" : {
"revision" : "fc670910dc0903cc269b3d0b776cda5703979c4e",
"version" : "0.3.5"
}
},
{
"identity" : "sparkle",
"kind" : "remoteSourceControl",
"location" : "https://github.com/sparkle-project/Sparkle.git",
"state" : {
"revision" : "286edd1fa22505a9e54d170e9fd07d775ea233f2",
"version" : "2.1.0"
}
},
{
"identity" : "stprivilegedtask",
"kind" : "remoteSourceControl",
"location" : "https://github.com/JoeMatt/STPrivilegedTask.git",
"state" : {
"branch" : "master",
"revision" : "10a9150ef32d444af326beba76356ae9af95a3e7"
}
}
],
"version" : 2
}

View File

@@ -4,11 +4,35 @@
<dict> <dict>
<key>aps-environment</key> <key>aps-environment</key>
<string>development</string> <string>development</string>
<key>com.apple.developer.associated-domains</key>
<array>
<string>webcredentials:sidestore.io</string>
</array>
<key>com.apple.developer.icloud-container-identifiers</key>
<array/>
<key>com.apple.developer.kernel.increased-memory-limit</key>
<true/>
<key>com.apple.developer.networking.multipath</key>
<true/>
<key>com.apple.developer.networking.vpn.api</key>
<array>
<string>allow-vpn</string>
</array>
<key>com.apple.developer.networking.wifi-info</key>
<true/>
<key>com.apple.developer.shared-with-you</key>
<true/>
<key>com.apple.developer.siri</key> <key>com.apple.developer.siri</key>
<true/> <true/>
<key>com.apple.developer.ubiquity-kvstore-identifier</key>
<string>$(TeamIdentifierPrefix)$(CFBundleIdentifier)</string>
<key>com.apple.security.application-groups</key> <key>com.apple.security.application-groups</key>
<array> <array>
<string>group.$(APP_GROUP_IDENTIFIER)</string> <string>group.$(APP_GROUP_IDENTIFIER)</string>
</array> </array>
<key>keychain-access-groups</key>
<array>
<string>$(AppIdentifierPrefix)$(PRODUCT_BUNDLE_IDENTIFIER)</string>
</array>
</dict> </dict>
</plist> </plist>

View File

@@ -71,7 +71,7 @@ extension AnalyticsManager
} }
} }
final class AnalyticsManager class AnalyticsManager
{ {
static let shared = AnalyticsManager() static let shared = AnalyticsManager()

View File

@@ -25,7 +25,7 @@ extension AppContentViewController
} }
} }
final class AppContentViewController: UITableViewController class AppContentViewController: UITableViewController
{ {
var app: StoreApp! var app: StoreApp!

View File

@@ -8,7 +8,7 @@
import UIKit import UIKit
final class PermissionCollectionViewCell: UICollectionViewCell class PermissionCollectionViewCell: UICollectionViewCell
{ {
@IBOutlet var button: UIButton! @IBOutlet var button: UIButton!
@IBOutlet var textLabel: UILabel! @IBOutlet var textLabel: UILabel!
@@ -29,7 +29,7 @@ final class PermissionCollectionViewCell: UICollectionViewCell
} }
} }
final class AppContentTableViewCell: UITableViewCell 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
{ {

View File

@@ -13,7 +13,7 @@ import Roxas
import Nuke import Nuke
final class AppViewController: UIViewController class AppViewController: UIViewController
{ {
var app: StoreApp! var app: StoreApp!
@@ -352,7 +352,7 @@ final class AppViewController: UIViewController
extension AppViewController extension AppViewController
{ {
final class func makeAppViewController(app: StoreApp) -> AppViewController class func makeAppViewController(app: StoreApp) -> AppViewController
{ {
let storyboard = UIStoryboard(name: "Main", bundle: nil) let storyboard = UIStoryboard(name: "Main", bundle: nil)

View File

@@ -10,7 +10,7 @@ import UIKit
import AltStoreCore import AltStoreCore
final class PermissionPopoverViewController: UIViewController class PermissionPopoverViewController: UIViewController
{ {
var permission: AppPermission! var permission: AppPermission!

View File

@@ -11,7 +11,7 @@ import UIKit
import AltStoreCore import AltStoreCore
import Roxas import Roxas
final class AppIDsViewController: UICollectionViewController class AppIDsViewController: UICollectionViewController
{ {
private lazy var dataSource = self.makeDataSource() private lazy var dataSource = self.makeDataSource()

View File

@@ -30,7 +30,7 @@ extension AppDelegate
} }
@UIApplicationMain @UIApplicationMain
final class AppDelegate: UIResponder, UIApplicationDelegate { class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow? var window: UIWindow?

View File

@@ -10,7 +10,7 @@ import UIKit
import AltSign import AltSign
final class AuthenticationViewController: UIViewController 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)?

View File

@@ -8,7 +8,7 @@
import UIKit import UIKit
final class InstructionsViewController: UIViewController class InstructionsViewController: UIViewController
{ {
var completionHandler: (() -> Void)? var completionHandler: (() -> Void)?

View File

@@ -12,7 +12,7 @@ import AltStoreCore
import AltSign import AltSign
import Roxas import Roxas
final class RefreshAltStoreViewController: UIViewController class RefreshAltStoreViewController: UIViewController
{ {
var context: AuthenticatedOperationContext! var context: AuthenticatedOperationContext!

View File

@@ -14,7 +14,7 @@ import IntentsUI
import AltSign import AltSign
final class SelectTeamViewController: UITableViewController 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)?

View File

@@ -12,7 +12,7 @@ import Roxas
import Nuke import Nuke
@objc final class BrowseCollectionViewCell: UICollectionViewCell @objc class BrowseCollectionViewCell: UICollectionViewCell
{ {
var imageURLs: [URL] = [] { var imageURLs: [URL] = [] {
didSet { didSet {

View File

@@ -8,7 +8,7 @@
import UIKit import UIKit
final class AppIconImageView: UIImageView class AppIconImageView: UIImageView
{ {
override func awakeFromNib() override func awakeFromNib()
{ {

View File

@@ -8,7 +8,7 @@
import AVFoundation import AVFoundation
final class BackgroundTaskManager class BackgroundTaskManager
{ {
static let shared = BackgroundTaskManager() static let shared = BackgroundTaskManager()

View File

@@ -8,7 +8,7 @@
import UIKit import UIKit
final class BannerCollectionViewCell: UICollectionViewCell 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!

View File

@@ -8,7 +8,7 @@
import UIKit import UIKit
final class Button: UIButton class Button: UIButton
{ {
override var intrinsicContentSize: CGSize { override var intrinsicContentSize: CGSize {
var size = super.intrinsicContentSize var size = super.intrinsicContentSize

View File

@@ -8,7 +8,7 @@
import UIKit import UIKit
final class CollapsingTextView: UITextView class CollapsingTextView: UITextView
{ {
var isCollapsed = true { var isCollapsed = true {
didSet { didSet {

View File

@@ -8,7 +8,7 @@
import UIKit import UIKit
final class ForwardingNavigationController: UINavigationController class ForwardingNavigationController: UINavigationController
{ {
override var childForStatusBarStyle: UIViewController? { override var childForStatusBarStyle: UIViewController? {
return self.topViewController return self.topViewController

View File

@@ -10,7 +10,7 @@ import UIKit
import Roxas import Roxas
final class NavigationBar: UINavigationBar class NavigationBar: UINavigationBar
{ {
@IBInspectable var automaticallyAdjustsItemPositions: Bool = true @IBInspectable var automaticallyAdjustsItemPositions: Bool = true

View File

@@ -8,7 +8,7 @@
import UIKit import UIKit
final class PillButton: UIButton class PillButton: UIButton
{ {
override var accessibilityValue: String? { override var accessibilityValue: String? {
get { get {

View File

@@ -16,7 +16,7 @@ extension TimeInterval
static let longToastViewDuration = 8.0 static let longToastViewDuration = 8.0
} }
final class ToastView: RSTToastView class ToastView: RSTToastView
{ {
var preferredDuration: TimeInterval var preferredDuration: TimeInterval

View File

@@ -9,7 +9,7 @@
import Foundation import Foundation
import OSLog import OSLog
public let customLog = OSLog(subsystem: "org.sidestore.sidestore", let customLog = OSLog(subsystem: "org.sidestore.sidestore",
category: "ios") category: "ios")
@@ -18,7 +18,6 @@ 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)
} }
@@ -27,7 +26,6 @@ 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)
} }
@@ -36,7 +34,6 @@ 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)
} }
@@ -48,7 +45,6 @@ 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)
} }
@@ -57,7 +53,6 @@ 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)
} }

View File

@@ -93,6 +93,40 @@
</array> </array>
<key>LSRequiresIPhoneOS</key> <key>LSRequiresIPhoneOS</key>
<true/> <true/>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>127.0.0.1</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
<key>New Exception Domain 1</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
<key>apps.sidestore.io</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
<key>sidestore.io</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
<key>NSBonjourServices</key> <key>NSBonjourServices</key>
<array> <array>
<string>_altserver._tcp</string> <string>_altserver._tcp</string>
@@ -129,6 +163,7 @@
<array> <array>
<string>audio</string> <string>audio</string>
<string>fetch</string> <string>fetch</string>
<string>processing</string>
<string>remote-notification</string> <string>remote-notification</string>
</array> </array>
<key>UILaunchStoryboardName</key> <key>UILaunchStoryboardName</key>
@@ -204,7 +239,5 @@
</dict> </dict>
</dict> </dict>
</array> </array>
<key>UIFileSharingEnabled</key>
<true/>
</dict> </dict>
</plist> </plist>

View File

@@ -11,7 +11,7 @@ import Foundation
import AltStoreCore import AltStoreCore
@available(iOS 14, *) @available(iOS 14, *)
final class IntentHandler: NSObject, RefreshAllIntentHandling class IntentHandler: NSObject, RefreshAllIntentHandling
{ {
private let queue = DispatchQueue(label: "io.altstore.IntentHandler") private let queue = DispatchQueue(label: "io.altstore.IntentHandler")

View File

@@ -14,7 +14,7 @@ import minimuxer
import AltStoreCore import AltStoreCore
import UniformTypeIdentifiers import UniformTypeIdentifiers
final class LaunchViewController: RSTLaunchViewController, UIDocumentPickerDelegate class LaunchViewController: RSTLaunchViewController, UIDocumentPickerDelegate
{ {
private var didFinishLaunching = false private var didFinishLaunching = false
@@ -47,7 +47,6 @@ final class LaunchViewController: RSTLaunchViewController, UIDocumentPickerDeleg
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 {
@@ -55,7 +54,6 @@ final class LaunchViewController: RSTLaunchViewController, UIDocumentPickerDeleg
return return
} }
start_minimuxer_threads(pf) start_minimuxer_threads(pf)
#endif
} }
func fetchPairingFile() -> String? { func fetchPairingFile() -> String? {
@@ -79,7 +77,7 @@ final class LaunchViewController: RSTLaunchViewController, UIDocumentPickerDeleg
} 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://wiki.sidestore.io/guides/install#pairing-process", preferredStyle: .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)
// 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
@@ -149,17 +147,7 @@ final class LaunchViewController: RSTLaunchViewController, UIDocumentPickerDeleg
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.")
} }

View File

@@ -28,7 +28,7 @@ extension AppManager
} }
@available(iOS 13, *) @available(iOS 13, *)
final class AppManagerPublisher: ObservableObject 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)
} }
final class AppManager class AppManager
{ {
static let shared = AppManager() static let shared = AppManager()
@@ -392,8 +392,7 @@ 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
// 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)
//print("Authenticated for fetching App IDs with result:", result)
} }
let fetchAppIDsOperation = FetchAppIDsOperation(context: authenticationOperation.context) let fetchAppIDsOperation = FetchAppIDsOperation(context: authenticationOperation.context)
@@ -665,7 +664,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)
{ {
final class Context: OperationContext, EnableJITContext class Context: OperationContext, EnableJITContext
{ {
var installedApp: InstalledApp? var installedApp: InstalledApp?
} }
@@ -685,7 +684,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
{ {
final class Context: InstallAppOperationContext, PatchAppContext class Context: InstallAppOperationContext, PatchAppContext
{ {
} }

View File

@@ -8,7 +8,7 @@
import UIKit import UIKit
final class InstalledAppsCollectionHeaderView: UICollectionReusableView class InstalledAppsCollectionHeaderView: UICollectionReusableView
{ {
let textLabel: UILabel let textLabel: UILabel
let button: UIButton let button: UIButton

View File

@@ -9,7 +9,7 @@
import UIKit import UIKit
import Roxas import Roxas
final class InstalledAppCollectionViewCell: UICollectionViewCell class InstalledAppCollectionViewCell: UICollectionViewCell
{ {
private(set) var deactivateBadge: UIView? private(set) var deactivateBadge: UIView?
@@ -55,13 +55,13 @@ final class InstalledAppCollectionViewCell: UICollectionViewCell
} }
} }
final class InstalledAppsCollectionFooterView: UICollectionReusableView class InstalledAppsCollectionFooterView: UICollectionReusableView
{ {
@IBOutlet var textLabel: UILabel! @IBOutlet var textLabel: UILabel!
@IBOutlet var button: UIButton! @IBOutlet var button: UIButton!
} }
final class NoUpdatesCollectionViewCell: UICollectionViewCell class NoUpdatesCollectionViewCell: UICollectionViewCell
{ {
@IBOutlet var blurView: UIVisualEffectView! @IBOutlet var blurView: UIVisualEffectView!
@@ -73,7 +73,7 @@ final class NoUpdatesCollectionViewCell: UICollectionViewCell
} }
} }
final class UpdatesCollectionHeaderView: UICollectionReusableView class UpdatesCollectionHeaderView: UICollectionReusableView
{ {
let button = PillButton(type: .system) let button = PillButton(type: .system)

View File

@@ -30,7 +30,7 @@ extension MyAppsViewController
} }
} }
final class MyAppsViewController: UICollectionViewController class MyAppsViewController: UICollectionViewController
{ {
private let coordinator = NSFileCoordinator() private let coordinator = NSFileCoordinator()
private let operationQueue = OperationQueue() private let operationQueue = OperationQueue()

View File

@@ -17,7 +17,7 @@ extension UpdateCollectionViewCell
} }
} }
@objc final class UpdateCollectionViewCell: UICollectionViewCell @objc class UpdateCollectionViewCell: UICollectionViewCell
{ {
var mode: Mode = .expanded { var mode: Mode = .expanded {
didSet { didSet {

View File

@@ -8,7 +8,7 @@
import UIKit import UIKit
final class NewsCollectionViewCell: UICollectionViewCell class NewsCollectionViewCell: UICollectionViewCell
{ {
@IBOutlet var titleLabel: UILabel! @IBOutlet var titleLabel: UILabel!
@IBOutlet var captionLabel: UILabel! @IBOutlet var captionLabel: UILabel!

View File

@@ -14,7 +14,7 @@ import Roxas
import Nuke import Nuke
private final class AppBannerFooterView: UICollectionReusableView private 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 final class AppBannerFooterView: UICollectionReusableView
} }
} }
final class NewsViewController: UICollectionViewController 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)

View File

@@ -34,7 +34,7 @@ enum AuthenticationError: LocalizedError
} }
@objc(AuthenticationOperation) @objc(AuthenticationOperation)
final class AuthenticationOperation: ResultOperation<(ALTTeam, ALTCertificate, ALTAppleAPISession)> class AuthenticationOperation: ResultOperation<(ALTTeam, ALTCertificate, ALTAppleAPISession)>
{ {
let context: AuthenticatedOperationContext let context: AuthenticatedOperationContext

View File

@@ -51,7 +51,7 @@ private let ReceivedApplicationState: @convention(c) (CFNotificationCenter?, Uns
} }
@objc(BackgroundRefreshAppsOperation) @objc(BackgroundRefreshAppsOperation)
final class BackgroundRefreshAppsOperation: ResultOperation<[String: Result<InstalledApp, Error>]> class BackgroundRefreshAppsOperation: ResultOperation<[String: Result<InstalledApp, Error>]>
{ {
let installedApps: [InstalledApp] let installedApps: [InstalledApp]
private let managedObjectContext: NSManagedObjectContext private let managedObjectContext: NSManagedObjectContext

View File

@@ -14,7 +14,7 @@ import Roxas
import minimuxer import minimuxer
@objc(DeactivateAppOperation) @objc(DeactivateAppOperation)
final class DeactivateAppOperation: ResultOperation<InstalledApp> class DeactivateAppOperation: ResultOperation<InstalledApp>
{ {
let app: InstalledApp let app: InstalledApp
let context: OperationContext let context: OperationContext

View File

@@ -30,7 +30,7 @@ private extension DownloadAppOperation
} }
@objc(DownloadAppOperation) @objc(DownloadAppOperation)
final class DownloadAppOperation: ResultOperation<ALTApplication> class DownloadAppOperation: ResultOperation<ALTApplication>
{ {
let app: AppProtocol let app: AppProtocol
let context: AppOperationContext let context: AppOperationContext

View File

@@ -21,7 +21,7 @@ protocol EnableJITContext
} }
@available(iOS 14, *) @available(iOS 14, *)
final class EnableJITOperation<Context: EnableJITContext>: ResultOperation<Void> class EnableJITOperation<Context: EnableJITContext>: ResultOperation<Void>
{ {
let context: Context let context: Context

View File

@@ -13,7 +13,7 @@ import AltSign
import Roxas import Roxas
@objc(FetchAnisetteDataOperation) @objc(FetchAnisetteDataOperation)
final class FetchAnisetteDataOperation: ResultOperation<ALTAnisetteData> class FetchAnisetteDataOperation: ResultOperation<ALTAnisetteData>
{ {
let context: OperationContext let context: OperationContext

View File

@@ -13,7 +13,7 @@ import AltSign
import Roxas import Roxas
@objc(FetchAppIDsOperation) @objc(FetchAppIDsOperation)
final class FetchAppIDsOperation: ResultOperation<([AppID], NSManagedObjectContext)> class FetchAppIDsOperation: ResultOperation<([AppID], NSManagedObjectContext)>
{ {
let context: AuthenticatedOperationContext let context: AuthenticatedOperationContext
let managedObjectContext: NSManagedObjectContext let managedObjectContext: NSManagedObjectContext

View File

@@ -13,7 +13,7 @@ import AltSign
import Roxas import Roxas
@objc(FetchProvisioningProfilesOperation) @objc(FetchProvisioningProfilesOperation)
final class FetchProvisioningProfilesOperation: ResultOperation<[String: ALTProvisioningProfile]> class FetchProvisioningProfilesOperation: ResultOperation<[String: ALTProvisioningProfile]>
{ {
let context: AppOperationContext let context: AppOperationContext

View File

@@ -13,7 +13,7 @@ import AltStoreCore
import Roxas import Roxas
@objc(FetchSourceOperation) @objc(FetchSourceOperation)
final class FetchSourceOperation: ResultOperation<Source> class FetchSourceOperation: ResultOperation<Source>
{ {
let sourceURL: URL let sourceURL: URL
let managedObjectContext: NSManagedObjectContext let managedObjectContext: NSManagedObjectContext

View File

@@ -32,7 +32,7 @@ extension FetchTrustedSourcesOperation
} }
} }
final class FetchTrustedSourcesOperation: ResultOperation<[FetchTrustedSourcesOperation.TrustedSource]> class FetchTrustedSourcesOperation: ResultOperation<[FetchTrustedSourcesOperation.TrustedSource]>
{ {
override func main() override func main()
{ {

View File

@@ -13,7 +13,7 @@ import AltSign
import Roxas import Roxas
@objc(InstallAppOperation) @objc(InstallAppOperation)
final class InstallAppOperation: ResultOperation<InstalledApp> class InstallAppOperation: ResultOperation<InstalledApp>
{ {
let context: InstallAppOperationContext let context: InstallAppOperationContext

View File

@@ -38,7 +38,7 @@ class OperationContext
} }
} }
final class AuthenticatedOperationContext: OperationContext class AuthenticatedOperationContext: OperationContext
{ {
var session: ALTAppleAPISession? var session: ALTAppleAPISession?

View File

@@ -52,7 +52,7 @@ private struct OTAUpdate
} }
@available(iOS 14, *) @available(iOS 14, *)
final class PatchAppOperation: ResultOperation<Void> class PatchAppOperation: ResultOperation<Void>
{ {
let context: PatchAppContext let context: PatchAppContext

View File

@@ -29,7 +29,7 @@ extension PatchViewController
} }
@available(iOS 14.0, *) @available(iOS 14.0, *)
final class PatchViewController: UIViewController class PatchViewController: UIViewController
{ {
var patchApp: AnyApp? var patchApp: AnyApp?
var installedApp: InstalledApp? var installedApp: InstalledApp?

View File

@@ -14,7 +14,7 @@ import Roxas
import minimuxer import minimuxer
@objc(RefreshAppOperation) @objc(RefreshAppOperation)
final class RefreshAppOperation: ResultOperation<InstalledApp> class RefreshAppOperation: ResultOperation<InstalledApp>
{ {
let context: AppOperationContext let context: AppOperationContext

View File

@@ -12,7 +12,7 @@ import CoreData
import AltStoreCore import AltStoreCore
import AltSign import AltSign
final class RefreshGroup: NSObject class RefreshGroup: NSObject
{ {
let context: AuthenticatedOperationContext let context: AuthenticatedOperationContext
let progress = Progress.discreteProgress(totalUnitCount: 0) let progress = Progress.discreteProgress(totalUnitCount: 0)

View File

@@ -9,7 +9,7 @@
import Foundation import Foundation
@objc(RemoveAppBackupOperation) @objc(RemoveAppBackupOperation)
final class RemoveAppBackupOperation: ResultOperation<Void> class RemoveAppBackupOperation: ResultOperation<Void>
{ {
let context: InstallAppOperationContext let context: InstallAppOperationContext

View File

@@ -12,7 +12,7 @@ import AltStoreCore
import minimuxer import minimuxer
@objc(RemoveAppOperation) @objc(RemoveAppOperation)
final class RemoveAppOperation: ResultOperation<InstalledApp> class RemoveAppOperation: ResultOperation<InstalledApp>
{ {
let context: InstallAppOperationContext let context: InstallAppOperationContext

View File

@@ -13,7 +13,7 @@ import AltStoreCore
import AltSign import AltSign
@objc(ResignAppOperation) @objc(ResignAppOperation)
final class ResignAppOperation: ResultOperation<ALTApplication> class ResignAppOperation: ResultOperation<ALTApplication>
{ {
let context: InstallAppOperationContext let context: InstallAppOperationContext

View File

@@ -11,7 +11,7 @@ import Network
import AltStoreCore import AltStoreCore
@objc(SendAppOperation) @objc(SendAppOperation)
final class SendAppOperation: ResultOperation<()> class SendAppOperation: ResultOperation<()>
{ {
let context: InstallAppOperationContext let context: InstallAppOperationContext

View File

@@ -30,7 +30,7 @@ extension UpdatePatronsOperation
} }
} }
final class UpdatePatronsOperation: ResultOperation<Void> class UpdatePatronsOperation: ResultOperation<Void>
{ {
let context: NSManagedObjectContext let context: NSManagedObjectContext

View File

@@ -55,7 +55,7 @@ enum VerificationError: ALTLocalizedError
} }
@objc(VerifyAppOperation) @objc(VerifyAppOperation)
final class VerifyAppOperation: ResultOperation<Void> class VerifyAppOperation: ResultOperation<Void>
{ {
let context: AppOperationContext let context: AppOperationContext
var verificationHandler: ((VerificationError) -> Bool)? var verificationHandler: ((VerificationError) -> Bool)?

Binary file not shown.

View File

@@ -11,7 +11,7 @@ import AltStoreCore
import EmotionalDamage import EmotionalDamage
@available(iOS 13, *) @available(iOS 13, *)
final class SceneDelegate: UIResponder, UIWindowSceneDelegate class SceneDelegate: UIResponder, UIWindowSceneDelegate
{ {
var window: UIWindow? var window: UIWindow?

View File

@@ -16,10 +16,9 @@
<key>Key</key> <key>Key</key>
<string>customAnisetteURL</string> <string>customAnisetteURL</string>
<key>DefaultValue</key> <key>DefaultValue</key>
<string>http://ani.sidestore.io</string> <string>http://191.101.206.188:6969</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>
@@ -32,7 +31,6 @@
</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>

View File

@@ -9,7 +9,7 @@
import UIKit import UIKit
@objc(ErrorLogTableViewCell) @objc(ErrorLogTableViewCell)
final class ErrorLogTableViewCell: UITableViewCell class ErrorLogTableViewCell: UITableViewCell
{ {
@IBOutlet var appIconImageView: AppIconImageView! @IBOutlet var appIconImageView: AppIconImageView!

View File

@@ -14,9 +14,7 @@ import Roxas
import Nuke import Nuke
import QuickLook class ErrorLogViewController: UITableViewController
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>()
@@ -178,15 +176,6 @@ 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)
@@ -310,14 +299,3 @@ 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
}
}

View File

@@ -19,7 +19,7 @@ extension InsetGroupTableViewCell
} }
} }
final class InsetGroupTableViewCell: UITableViewCell class InsetGroupTableViewCell: UITableViewCell
{ {
#if !TARGET_INTERFACE_BUILDER #if !TARGET_INTERFACE_BUILDER
@IBInspectable var style: Style = .single { @IBInspectable var style: Style = .single {

View File

@@ -8,7 +8,7 @@
import UIKit import UIKit
final class LicensesViewController: UIViewController class LicensesViewController: UIViewController
{ {
private var _didAppear = false private var _didAppear = false

View File

@@ -8,12 +8,12 @@
import UIKit import UIKit
final class PatronCollectionViewCell: UICollectionViewCell class PatronCollectionViewCell: UICollectionViewCell
{ {
@IBOutlet var textLabel: UILabel! @IBOutlet var textLabel: UILabel!
} }
final class PatronsHeaderView: UICollectionReusableView class PatronsHeaderView: UICollectionReusableView
{ {
let textLabel = UILabel() let textLabel = UILabel()
@@ -31,7 +31,7 @@ final class PatronsHeaderView: UICollectionReusableView
} }
} }
final class PatronsFooterView: UICollectionReusableView class PatronsFooterView: UICollectionReusableView
{ {
let button = UIButton(type: .system) let button = UIButton(type: .system)
@@ -53,7 +53,7 @@ final class PatronsFooterView: UICollectionReusableView
} }
} }
final class AboutPatreonHeaderView: UICollectionReusableView class AboutPatreonHeaderView: UICollectionReusableView
{ {
@IBOutlet var supportButton: UIButton! @IBOutlet var supportButton: UIButton!
@IBOutlet var accountButton: UIButton! @IBOutlet var accountButton: UIButton!

View File

@@ -22,7 +22,7 @@ extension PatreonViewController
} }
} }
final class PatreonViewController: UICollectionViewController 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,7 +173,8 @@ private extension PatreonViewController
@objc func openPatreonURL(_ sender: UIButton) @objc func openPatreonURL(_ sender: UIButton)
{ {
let patreonURL = URL(string: "https://www.patreon.com/SideStore")! // TODO: Is this the final URL? @JoeMatt
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

View File

@@ -12,14 +12,14 @@ import AltStoreCore
import Roxas import Roxas
@objc(RefreshAttemptTableViewCell) @objc(RefreshAttemptTableViewCell)
private final class RefreshAttemptTableViewCell: UITableViewCell private 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!
} }
final class RefreshAttemptsViewController: UITableViewController class RefreshAttemptsViewController: UITableViewController
{ {
private lazy var dataSource = self.makeDataSource() private lazy var dataSource = self.makeDataSource()

View File

@@ -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="1082" width="375" height="25"/> <rect key="frame" x="0.0" y="1092" 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="2"/> <integer key="value" value="3"/>
</userDefinedRuntimeAttribute> </userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="boolean" keyPath="isSelectable" value="YES"/> <userDefinedRuntimeAttribute type="boolean" keyPath="isSelectable" value="YES"/>
</userDefinedRuntimeAttributes> </userDefinedRuntimeAttributes>
@@ -585,41 +585,8 @@
<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="VNn-u4-cN8" customClass="InsetGroupTableViewCell" customModule="SideStore" customModuleProvider="target">
<rect key="frame" x="0.0" y="1023" width="375" height="51"/>
<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"> <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"/> <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="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"/>
@@ -1051,18 +1018,11 @@ 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">
<rightBarButtonItems> <barButtonItem key="rightBarButtonItem" systemItem="trash" id="BnQ-Eh-1gC">
<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"/>
@@ -1073,7 +1033,6 @@ 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>

View File

@@ -10,7 +10,7 @@ import UIKit
import Roxas import Roxas
final class SettingsHeaderFooterView: UITableViewHeaderFooterView class SettingsHeaderFooterView: UITableViewHeaderFooterView
{ {
@IBOutlet var primaryLabel: UILabel! @IBOutlet var primaryLabel: UILabel!
@IBOutlet var secondaryLabel: UILabel! @IBOutlet var secondaryLabel: UILabel!

View File

@@ -53,12 +53,11 @@ extension SettingsViewController
case sendFeedback case sendFeedback
case refreshAttempts case refreshAttempts
case errorLog case errorLog
case resetPairingFile
case advancedSettings case advancedSettings
} }
} }
final class SettingsViewController: UITableViewController class SettingsViewController: UITableViewController
{ {
private var activeTeam: Team? private var activeTeam: Team?
@@ -269,8 +268,6 @@ 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)
} }
@@ -506,30 +503,6 @@ 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) {

View File

@@ -31,7 +31,7 @@ struct SourceError: LocalizedError
} }
@objc(SourcesFooterView) @objc(SourcesFooterView)
private final class SourcesFooterView: TextCollectionReusableView private 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
} }
} }
final class SourcesViewController: UICollectionViewController class SourcesViewController: UICollectionViewController
{ {
var deepLinkSourceURL: URL? { var deepLinkSourceURL: URL? {
didSet { didSet {
@@ -381,16 +381,17 @@ private extension SourcesViewController
dispatchGroup.notify(queue: .main) { dispatchGroup.notify(queue: .main) {
if let error = fetchError if let error = fetchError
{ {
print(error) finish(.failure(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)
{ {

View File

@@ -20,7 +20,7 @@ extension TabBarController
} }
} }
final class TabBarController: UITabBarController class TabBarController: UITabBarController
{ {
private var initialSegue: (identifier: String, sender: Any?)? private var initialSegue: (identifier: String, sender: Any?)?

View File

@@ -56,7 +56,6 @@
<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"/>

View File

@@ -10,7 +10,6 @@ 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
@@ -60,21 +59,6 @@ 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
} }
@@ -163,8 +147,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 == YES", fetchRequest.predicate = NSPredicate(format: "%K == YES AND %K != nil AND %K != %K",
#keyPath(InstalledApp.isActive), #keyPath(InstalledApp.hasUpdate)) #keyPath(InstalledApp.isActive), #keyPath(InstalledApp.storeApp), #keyPath(InstalledApp.version), #keyPath(InstalledApp.storeApp.latestVersion.version))
return fetchRequest return fetchRequest
} }

View File

@@ -7,7 +7,6 @@
// //
import CoreData import CoreData
import UIKit
public extension Source public extension Source
{ {
@@ -36,146 +35,6 @@ 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
{ {

View File

@@ -26,12 +26,14 @@ public extension StoreApp
} }
@objc @objc
public enum Platform: UInt, Codable { public enum Platform: UInt {
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 */

View File

@@ -1,61 +0,0 @@
# 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.

View File

@@ -1,137 +0,0 @@
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

1
Dependencies/em_proxy vendored Submodule

Submodule Dependencies/em_proxy added at c8a280e54c

View File

@@ -1,80 +1,146 @@
// !$*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;
filePatterns = "*/em_proxy.h"; dependencyFile = "$(DERIVED_FILE_DIR)/$(CARGO_XCODE_TARGET_ARCH)-$(EXECUTABLE_NAME).d";
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# 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"; 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";
}; };
/* 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>"; };
ADDEDBA66A6E1 /* libresolv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libresolv.tbd; path = usr/lib/libresolv.tbd; sourceTree = SDKROOT; }; CA60C44C93D7916DE57E6EBD /* staticlib */ = {
CA60058A9FBE4D17AF51A7D5 /* run */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = run; sourceTree = BUILT_PRODUCTS_DIR; }; isa = PBXFileReference;
CA60C44C93D7916DE57E6EBD /* libem_proxy_static.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libem_proxy_static.a; sourceTree = BUILT_PRODUCTS_DIR; }; explicitFileType = "archive.ar";
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 */
ADDEDBA66A6E2 /* Required for static linking */ = {
isa = PBXGroup;
children = (
ADDEDBA66A6E1 /* libresolv.tbd */,
);
name = "Required for static linking";
sourceTree = "<group>";
};
CA6094FFF69222869D176AE5 /* Products */ = {
isa = PBXGroup;
children = (
CA60C44C93D7916DE57E6EBD /* libem_proxy_static.a */,
CA60058A9FBE4D17AF51A7D5 /* run */,
);
name = Products;
sourceTree = "<group>";
};
CA6094FFF69298AF0B5890DB /* Frameworks */ = { CA6094FFF69298AF0B5890DB /* Frameworks */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
ADDEDBA66A6E2 /* Required for static linking */, ADDEDBA66A6E2,
); );
name = Frameworks; name = Frameworks;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
CA6094FFF692D65BC3C892A8 = {
ADDEDBA66A6E2 /* Required for static linking */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
9999259129A45319005CF020 /* em_proxy.h */, ADDEDBA66A6E1
CA6094FFF69222869D176AE5 /* Products */, );
CA6094FFF69298AF0B5890DB /* Frameworks */, name = "Required for static linking";
sourceTree = "<group>";
};
CA6094FFF69222869D176AE5 /* Products */ = {
isa = PBXGroup;
children = (
CA60C44C93D7916DE57E6EBD,
CA60058A9FBE4D17AF51A7D5,
);
name = Products;
sourceTree = "<group>";
};
CA6094FFF692D65BC3C892A8 /* Main */ = {
isa = PBXGroup;
children = (
CA6094FFF6923EF4668187A5,
CA6094FFF69222869D176AE5,
CA6094FFF69298AF0B5890DB,
); );
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 /* Build configuration list for PBXNativeTarget "run-bin" */; buildConfigurationList = CA603DD75FB437FC563E4BCC;
buildPhases = ( buildPhases = (
CA60445C303637FC563E4BCC /* Sources */, CA60445C303637FC563E4BCC /* Sources */,
CA6094FFF692AF6EBB7F357C /* Universal Binary lipo */, CA6094FFF692AF6EBB7F357C /* Universal Binary lipo */,
@@ -85,47 +151,202 @@
dependencies = ( dependencies = (
); );
name = "run-bin"; name = "run-bin";
productName = run; productName = "run";
productReference = CA60058A9FBE4D17AF51A7D5 /* run */; productReference = CA60058A9FBE4D17AF51A7D5;
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 */
/* Begin PBXProject section */ CA60445C3036A30E3695DD59 = {
CA6094FFF692E04653AD465F /* Project object */ = { isa = PBXSourcesBuildPhase;
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 = {
CA60058A9FBE37FC563E4BCC = {
CreatedOnToolsVersion = 9.2;
ProvisioningStyle = Automatic;
};
CA60C44C93D7A30E3695DD59 = { CA60C44C93D7A30E3695DD59 = {
CreatedOnToolsVersion = 9.2; CreatedOnToolsVersion = 9.2;
ProvisioningStyle = Automatic; ProvisioningStyle = Automatic;
}; };
CA60058A9FBE37FC563E4BCC = {
CreatedOnToolsVersion = 9.2;
ProvisioningStyle = Automatic;
}; };
}; };
buildConfigurationList = CA6094FFF69280E02D6C7F57 /* Build configuration list for PBXProject "em_proxy" */; };
buildConfigurationList = CA6094FFF69280E02D6C7F57;
compatibilityVersion = "Xcode 11.4"; compatibilityVersion = "Xcode 11.4";
developmentRegion = en; developmentRegion = en;
hasScannedForEncodings = 0; hasScannedForEncodings = 0;
@@ -138,206 +359,13 @@
projectDirPath = ""; projectDirPath = "";
projectRoot = ""; projectRoot = "";
targets = ( targets = (
CA60C44C93D7A30E3695DD59 /* em_proxy-staticlib */, CA60C44C93D7A30E3695DD59,
CA60058A9FBE37FC563E4BCC /* run-bin */, CA60058A9FBE37FC563E4BCC,
);
};
/* 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";
}; };
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 */ = { rootObject = CA6094FFF692E04653AD465F;
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 */;
} }

View File

@@ -1 +0,0 @@
Use ../fetch-prebuilt.sh to fetch prebuilt Rust dependencies

View File

@@ -1,52 +0,0 @@
#!/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

Some files were not shown because too many files have changed in this diff Show More