mirror of
https://github.com/SideStore/SideStore.git
synced 2026-03-27 04:45:39 +01:00
Compare commits
38 Commits
191ce15d55
...
develop
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
75edfad132 | ||
|
|
84c5bf40ca | ||
|
|
01e73328f8 | ||
|
|
a1f71a8149 | ||
|
|
8624a8e919 | ||
|
|
6e9e0aee0a | ||
|
|
a505d04215 | ||
|
|
95953ca0e9 | ||
|
|
3b9b45a06f | ||
|
|
ac277aa6eb | ||
|
|
7926452661 | ||
|
|
dfb01c2ae5 | ||
|
|
bff192be4e | ||
|
|
a863b2f39a | ||
|
|
bf72a0edfc | ||
|
|
06ad6488cc | ||
|
|
12f84b2365 | ||
|
|
118f64de8a | ||
|
|
555bb3d985 | ||
|
|
25925aceef | ||
|
|
5444fdd9bb | ||
|
|
f91e0a6295 | ||
|
|
4e4f0f6a3f | ||
|
|
9706a43bc1 | ||
|
|
d748a89b47 | ||
|
|
f412f6df23 | ||
|
|
b8354d3d0e | ||
|
|
625389ab96 | ||
|
|
f7e34cbbe9 | ||
|
|
0fe8d7fed9 | ||
|
|
1a1aa42e02 | ||
|
|
7ff4b48223 | ||
|
|
4801f6e8f2 | ||
|
|
ff28f6fa8f | ||
|
|
2d141afbaf | ||
|
|
06e38aae00 | ||
|
|
d8783230a7 | ||
|
|
6c479bfede |
41
.github/workflows/alpha.yml
vendored
41
.github/workflows/alpha.yml
vendored
@@ -28,7 +28,7 @@ jobs:
|
|||||||
- name: Find Last Successful commit
|
- name: Find Last Successful commit
|
||||||
run: |
|
run: |
|
||||||
LAST_SUCCESSFUL_COMMIT=$(python3 scripts/ci/workflow.py last-successful-commit \
|
LAST_SUCCESSFUL_COMMIT=$(python3 scripts/ci/workflow.py last-successful-commit \
|
||||||
"${{ github.workflow }}" "${{ env.CHANNEL }}" || echo "")
|
"false" "${{ env.CHANNEL }}" || echo "")
|
||||||
echo "LAST_SUCCESSFUL_COMMIT=$LAST_SUCCESSFUL_COMMIT" | tee -a $GITHUB_ENV
|
echo "LAST_SUCCESSFUL_COMMIT=$LAST_SUCCESSFUL_COMMIT" | tee -a $GITHUB_ENV
|
||||||
|
|
||||||
- run: brew install ldid xcbeautify
|
- run: brew install ldid xcbeautify
|
||||||
@@ -143,24 +143,24 @@ jobs:
|
|||||||
# --------------------------------------------------
|
# --------------------------------------------------
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: encrypted-build-logs-${{ env.MARKETING_VERSION }}.zip
|
name: build-logs-${{ env.MARKETING_VERSION }}.zip
|
||||||
path: encrypted-build-logs.zip
|
path: build-logs.zip
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
if: >
|
if: >
|
||||||
vars.ENABLE_TESTS == '1' &&
|
vars.ENABLE_TESTS == '1' &&
|
||||||
vars.ENABLE_TESTS_BUILD == '1'
|
vars.ENABLE_TESTS_BUILD == '1'
|
||||||
with:
|
with:
|
||||||
name: encrypted-tests-build-logs-${{ env.SHORT_COMMIT }}.zip
|
name: tests-build-logs-${{ env.SHORT_COMMIT }}.zip
|
||||||
path: encrypted-tests-build-logs.zip
|
path: tests-build-logs.zip
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
if: >
|
if: >
|
||||||
vars.ENABLE_TESTS == '1' &&
|
vars.ENABLE_TESTS == '1' &&
|
||||||
vars.ENABLE_TESTS_RUN == '1'
|
vars.ENABLE_TESTS_RUN == '1'
|
||||||
with:
|
with:
|
||||||
name: encrypted-tests-run-logs-${{ env.SHORT_COMMIT }}.zip
|
name: tests-run-logs-${{ env.SHORT_COMMIT }}.zip
|
||||||
path: encrypted-tests-run-logs.zip
|
path: tests-run-logs.zip
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
@@ -179,21 +179,14 @@ jobs:
|
|||||||
token: ${{ secrets.CROSS_REPO_PUSH_KEY }}
|
token: ${{ secrets.CROSS_REPO_PUSH_KEY }}
|
||||||
path: "SideStore/apps-v2.json"
|
path: "SideStore/apps-v2.json"
|
||||||
|
|
||||||
# --------------------------------------------------
|
- name: Generate Metadata
|
||||||
# deploy
|
|
||||||
# --------------------------------------------------
|
|
||||||
- name: Deploy
|
|
||||||
if: env.DEPLOY_KEY != ''
|
|
||||||
run: |
|
run: |
|
||||||
python3 scripts/ci/workflow.py dump-project-settings
|
python3 scripts/ci/workflow.py dump-project-settings
|
||||||
PRODUCT_NAME=$(python3 scripts/ci/workflow.py read-product-name)
|
PRODUCT_NAME=$(python3 scripts/ci/workflow.py read-product-name)
|
||||||
BUNDLE_ID=$(python3 scripts/ci/workflow.py read-bundle-id)
|
BUNDLE_ID=$(python3 scripts/ci/workflow.py read-bundle-id)
|
||||||
SOURCE_JSON="_includes/source.json"
|
|
||||||
IPA_NAME="$PRODUCT_NAME.ipa"
|
IPA_NAME="$PRODUCT_NAME.ipa"
|
||||||
|
|
||||||
python3 scripts/ci/workflow.py deploy \
|
python3 scripts/ci/workflow.py generate-metadata \
|
||||||
SideStore/apps-v2.json \
|
|
||||||
"$SOURCE_JSON" \
|
|
||||||
"$CHANNEL" \
|
"$CHANNEL" \
|
||||||
"$SHORT_COMMIT" \
|
"$SHORT_COMMIT" \
|
||||||
"$MARKETING_VERSION" \
|
"$MARKETING_VERSION" \
|
||||||
@@ -202,8 +195,20 @@ jobs:
|
|||||||
"$IPA_NAME" \
|
"$IPA_NAME" \
|
||||||
"$LAST_SUCCESSFUL_COMMIT"
|
"$LAST_SUCCESSFUL_COMMIT"
|
||||||
|
|
||||||
|
- name: Deploy
|
||||||
|
if: env.DEPLOY_KEY != ''
|
||||||
|
run: |
|
||||||
|
SOURCE_JSON="_includes/source.json"
|
||||||
|
|
||||||
|
python3 scripts/ci/workflow.py deploy \
|
||||||
|
SideStore/apps-v2.json \
|
||||||
|
"$SOURCE_JSON" \
|
||||||
|
"$CHANNEL" \
|
||||||
|
"$MARKETING_VERSION"
|
||||||
|
|
||||||
|
|
||||||
# --------------------------------------------------
|
# --------------------------------------------------
|
||||||
# upload release
|
# upload release to GH
|
||||||
# --------------------------------------------------
|
# --------------------------------------------------
|
||||||
- name: Upload Release
|
- name: Upload Release
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
42
.github/workflows/nightly.yml
vendored
42
.github/workflows/nightly.yml
vendored
@@ -30,7 +30,7 @@ jobs:
|
|||||||
- name: Find Last Successful commit
|
- name: Find Last Successful commit
|
||||||
run: |
|
run: |
|
||||||
LAST_SUCCESSFUL_COMMIT=$(python3 scripts/ci/workflow.py last-successful-commit \
|
LAST_SUCCESSFUL_COMMIT=$(python3 scripts/ci/workflow.py last-successful-commit \
|
||||||
"${{ github.workflow }}" "${{ env.CHANNEL }}" || echo "")
|
"false" "${{ env.CHANNEL }}" || echo "")
|
||||||
echo "LAST_SUCCESSFUL_COMMIT=$LAST_SUCCESSFUL_COMMIT" | tee -a $GITHUB_ENV
|
echo "LAST_SUCCESSFUL_COMMIT=$LAST_SUCCESSFUL_COMMIT" | tee -a $GITHUB_ENV
|
||||||
|
|
||||||
- name: Check for new changes (on schedule)
|
- name: Check for new changes (on schedule)
|
||||||
@@ -177,8 +177,8 @@ jobs:
|
|||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
if: steps.build_gate.outputs.should_skip != 'true'
|
if: steps.build_gate.outputs.should_skip != 'true'
|
||||||
with:
|
with:
|
||||||
name: encrypted-build-logs-${{ env.MARKETING_VERSION }}.zip
|
name: build-logs-${{ env.MARKETING_VERSION }}.zip
|
||||||
path: encrypted-build-logs.zip
|
path: build-logs.zip
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
if: >
|
if: >
|
||||||
@@ -186,8 +186,8 @@ jobs:
|
|||||||
vars.ENABLE_TESTS == '1' &&
|
vars.ENABLE_TESTS == '1' &&
|
||||||
vars.ENABLE_TESTS_BUILD == '1'
|
vars.ENABLE_TESTS_BUILD == '1'
|
||||||
with:
|
with:
|
||||||
name: encrypted-tests-build-logs-${{ env.SHORT_COMMIT }}.zip
|
name: tests-build-logs-${{ env.SHORT_COMMIT }}.zip
|
||||||
path: encrypted-tests-build-logs.zip
|
path: tests-build-logs.zip
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
if: >
|
if: >
|
||||||
@@ -195,8 +195,8 @@ jobs:
|
|||||||
vars.ENABLE_TESTS == '1' &&
|
vars.ENABLE_TESTS == '1' &&
|
||||||
vars.ENABLE_TESTS_RUN == '1'
|
vars.ENABLE_TESTS_RUN == '1'
|
||||||
with:
|
with:
|
||||||
name: encrypted-tests-run-logs-${{ env.SHORT_COMMIT }}.zip
|
name: tests-run-logs-${{ env.SHORT_COMMIT }}.zip
|
||||||
path: encrypted-tests-run-logs.zip
|
path: tests-run-logs.zip
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
if: steps.build_gate.outputs.should_skip != 'true'
|
if: steps.build_gate.outputs.should_skip != 'true'
|
||||||
@@ -217,21 +217,15 @@ jobs:
|
|||||||
token: ${{ secrets.CROSS_REPO_PUSH_KEY }}
|
token: ${{ secrets.CROSS_REPO_PUSH_KEY }}
|
||||||
path: "SideStore/apps-v2.json"
|
path: "SideStore/apps-v2.json"
|
||||||
|
|
||||||
# --------------------------------------------------
|
- name: Generate Metadata
|
||||||
# deploy
|
if: steps.build_gate.outputs.should_skip != 'true'
|
||||||
# --------------------------------------------------
|
|
||||||
- name: Deploy
|
|
||||||
if: steps.build_gate.outputs.should_skip != 'true' && env.DEPLOY_KEY != ''
|
|
||||||
run: |
|
run: |
|
||||||
python3 scripts/ci/workflow.py dump-project-settings
|
python3 scripts/ci/workflow.py dump-project-settings
|
||||||
PRODUCT_NAME=$(python3 scripts/ci/workflow.py read-product-name)
|
PRODUCT_NAME=$(python3 scripts/ci/workflow.py read-product-name)
|
||||||
BUNDLE_ID=$(python3 scripts/ci/workflow.py read-bundle-id)
|
BUNDLE_ID=$(python3 scripts/ci/workflow.py read-bundle-id)
|
||||||
SOURCE_JSON="_includes/source.json"
|
|
||||||
IPA_NAME="$PRODUCT_NAME.ipa"
|
IPA_NAME="$PRODUCT_NAME.ipa"
|
||||||
|
|
||||||
python3 scripts/ci/workflow.py deploy \
|
python3 scripts/ci/workflow.py generate-metadata \
|
||||||
SideStore/apps-v2.json \
|
|
||||||
"$SOURCE_JSON" \
|
|
||||||
"$CHANNEL" \
|
"$CHANNEL" \
|
||||||
"$SHORT_COMMIT" \
|
"$SHORT_COMMIT" \
|
||||||
"$MARKETING_VERSION" \
|
"$MARKETING_VERSION" \
|
||||||
@@ -240,8 +234,20 @@ jobs:
|
|||||||
"$IPA_NAME" \
|
"$IPA_NAME" \
|
||||||
"$LAST_SUCCESSFUL_COMMIT"
|
"$LAST_SUCCESSFUL_COMMIT"
|
||||||
|
|
||||||
|
- name: Deploy
|
||||||
|
if: steps.build_gate.outputs.should_skip != 'true' && env.DEPLOY_KEY != ''
|
||||||
|
run: |
|
||||||
|
SOURCE_JSON="_includes/source.json"
|
||||||
|
|
||||||
|
python3 scripts/ci/workflow.py deploy \
|
||||||
|
SideStore/apps-v2.json \
|
||||||
|
"$SOURCE_JSON" \
|
||||||
|
"$CHANNEL" \
|
||||||
|
"$MARKETING_VERSION"
|
||||||
|
|
||||||
|
|
||||||
# --------------------------------------------------
|
# --------------------------------------------------
|
||||||
# upload release
|
# upload release to GH
|
||||||
# --------------------------------------------------
|
# --------------------------------------------------
|
||||||
- name: Upload Release
|
- name: Upload Release
|
||||||
if: steps.build_gate.outputs.should_skip != 'true'
|
if: steps.build_gate.outputs.should_skip != 'true'
|
||||||
|
|||||||
4
.github/workflows/pr.yml
vendored
4
.github/workflows/pr.yml
vendored
@@ -76,8 +76,8 @@ jobs:
|
|||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: encrypted-build-logs-${{ env.MARKETING_VERSION }}.zip
|
name: build-logs-${{ env.MARKETING_VERSION }}.zip
|
||||||
path: encrypted-build-logs.zip
|
path: build-logs.zip
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
|
|||||||
33
.github/workflows/stable.yml
vendored
33
.github/workflows/stable.yml
vendored
@@ -16,7 +16,7 @@ jobs:
|
|||||||
runs-on: macos-26
|
runs-on: macos-26
|
||||||
|
|
||||||
env:
|
env:
|
||||||
RELEASE_NAME: Stable
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
CHANNEL: stable
|
CHANNEL: stable
|
||||||
UPSTREAM_CHANNEL: ""
|
UPSTREAM_CHANNEL: ""
|
||||||
|
|
||||||
@@ -26,6 +26,12 @@ jobs:
|
|||||||
submodules: recursive
|
submodules: recursive
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Find Last Successful commit
|
||||||
|
run: |
|
||||||
|
LAST_SUCCESSFUL_COMMIT=$(python3 scripts/ci/workflow.py last-successful-commit \
|
||||||
|
"true" || echo "")
|
||||||
|
echo "LAST_SUCCESSFUL_COMMIT=$LAST_SUCCESSFUL_COMMIT" | tee -a $GITHUB_ENV
|
||||||
|
|
||||||
- run: brew install ldid xcbeautify
|
- run: brew install ldid xcbeautify
|
||||||
|
|
||||||
- name: Setup Env
|
- name: Setup Env
|
||||||
@@ -67,9 +73,6 @@ jobs:
|
|||||||
~/Library/Caches/org.swift.swiftpm
|
~/Library/Caches/org.swift.swiftpm
|
||||||
key: xcode-build-cache-stable-
|
key: xcode-build-cache-stable-
|
||||||
|
|
||||||
- name: Clean
|
|
||||||
run: python3 scripts/ci/workflow.py clean
|
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
id: build
|
id: build
|
||||||
env:
|
env:
|
||||||
@@ -90,8 +93,8 @@ jobs:
|
|||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: encrypted-build-logs-${{ env.MARKETING_VERSION }}.zip
|
name: build-logs-${{ env.MARKETING_VERSION }}.zip
|
||||||
path: encrypted-build-logs.zip
|
path: build-logs.zip
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
@@ -103,12 +106,28 @@ jobs:
|
|||||||
name: SideStore-${{ env.MARKETING_VERSION }}-dSYMs.zip
|
name: SideStore-${{ env.MARKETING_VERSION }}-dSYMs.zip
|
||||||
path: SideStore.dSYMs.zip
|
path: SideStore.dSYMs.zip
|
||||||
|
|
||||||
|
- name: Generate Metadata
|
||||||
|
run: |
|
||||||
|
python3 scripts/ci/workflow.py dump-project-settings
|
||||||
|
PRODUCT_NAME=$(python3 scripts/ci/workflow.py read-product-name)
|
||||||
|
BUNDLE_ID=$(python3 scripts/ci/workflow.py read-bundle-id)
|
||||||
|
IPA_NAME="$PRODUCT_NAME.ipa"
|
||||||
|
|
||||||
|
python3 scripts/ci/workflow.py generate-metadata \
|
||||||
|
"${{ github.ref_name }}" \
|
||||||
|
"$SHORT_COMMIT" \
|
||||||
|
"$MARKETING_VERSION" \
|
||||||
|
"$CHANNEL" \
|
||||||
|
"$BUNDLE_ID" \
|
||||||
|
"$IPA_NAME" \
|
||||||
|
"$LAST_SUCCESSFUL_COMMIT"
|
||||||
|
|
||||||
- name: Upload to releases
|
- name: Upload to releases
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
run: |
|
run: |
|
||||||
python3 scripts/ci/workflow.py upload-release \
|
python3 scripts/ci/workflow.py upload-release \
|
||||||
"$RELEASE_NAME" \
|
"${{ github.ref_name }}" \
|
||||||
"${{ github.ref_name }}" \
|
"${{ github.ref_name }}" \
|
||||||
"$GITHUB_SHA" \
|
"$GITHUB_SHA" \
|
||||||
"$GITHUB_REPOSITORY" \
|
"$GITHUB_REPOSITORY" \
|
||||||
|
|||||||
@@ -48,6 +48,90 @@
|
|||||||
remoteGlobalIDString = BF58047A246A28F7008AE704;
|
remoteGlobalIDString = BF58047A246A28F7008AE704;
|
||||||
remoteInfo = AltBackup;
|
remoteInfo = AltBackup;
|
||||||
};
|
};
|
||||||
|
A802C9F82F525C030049FE2B /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A802C5DA2F525B910049FE2B /* libfragmentzip.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 87B8C3401E0E9C37002F817D;
|
||||||
|
remoteInfo = "fragmentzip-cli-macOS";
|
||||||
|
};
|
||||||
|
A802C9FA2F525C030049FE2B /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A802C5DA2F525B910049FE2B /* libfragmentzip.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = B315FDB02866CCF8002E243C;
|
||||||
|
remoteInfo = "fragmentzip-cli-iOS";
|
||||||
|
};
|
||||||
|
A802C9FC2F525C030049FE2B /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A802C5DA2F525B910049FE2B /* libfragmentzip.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = B315FDB52866CD91002E243C;
|
||||||
|
remoteInfo = "fragmentzip-macOS";
|
||||||
|
};
|
||||||
|
A802C9FE2F525C030049FE2B /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A802C5DA2F525B910049FE2B /* libfragmentzip.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = B315FDCE2866CDD3002E243C;
|
||||||
|
remoteInfo = "fragmentzip-iOS";
|
||||||
|
};
|
||||||
|
A802CA012F525C030049FE2B /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A802C5B62F525B910049FE2B /* libgeneral.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 87977F6F227C4B71004F31DA;
|
||||||
|
remoteInfo = libgeneral;
|
||||||
|
};
|
||||||
|
A802CA062F525C030049FE2B /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A802C95A2F525B910049FE2B /* Roxas.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = BFADAFF819AE7BB70050CF31;
|
||||||
|
remoteInfo = Roxas;
|
||||||
|
};
|
||||||
|
A802CA082F525C030049FE2B /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A802C95A2F525B910049FE2B /* Roxas.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = BF8624801BB742E700C12EEE;
|
||||||
|
remoteInfo = RoxasTV;
|
||||||
|
};
|
||||||
|
A802CA0A2F525C030049FE2B /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A802C95A2F525B910049FE2B /* Roxas.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = BFADB00319AE7BB80050CF31;
|
||||||
|
remoteInfo = RoxasTests;
|
||||||
|
};
|
||||||
|
A802CA0E2F525C030049FE2B /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A802C8B62F525B910049FE2B /* SampleApp.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 44B1EE7C23DB90D5004E2E29;
|
||||||
|
remoteInfo = SampleApp;
|
||||||
|
};
|
||||||
|
A802CA102F525C030049FE2B /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A802C8B62F525B910049FE2B /* SampleApp.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 445A906A2400612800B487B4;
|
||||||
|
remoteInfo = "NSAttributedString+MarkdownTests";
|
||||||
|
};
|
||||||
|
A802CA132F525C030049FE2B /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A802C8CF2F525B910049FE2B /* SampleApp.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 44E8FA8923D90632009E1D13;
|
||||||
|
remoteInfo = SampleApp;
|
||||||
|
};
|
||||||
|
A802CA162F525C030049FE2B /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A802C8DB2F525B910049FE2B /* SwiftSampleApp.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 44962FDA23E7A54A00E2A598;
|
||||||
|
remoteInfo = SwiftSampleApp;
|
||||||
|
};
|
||||||
A81173222F4B8DBD0013ABD0 /* PBXContainerItemProxy */ = {
|
A81173222F4B8DBD0013ABD0 /* PBXContainerItemProxy */ = {
|
||||||
isa = PBXContainerItemProxy;
|
isa = PBXContainerItemProxy;
|
||||||
containerPortal = A811720B2F4B8BA80013ABD0 /* em_proxy.xcodeproj */;
|
containerPortal = A811720B2F4B8BA80013ABD0 /* em_proxy.xcodeproj */;
|
||||||
@@ -1819,6 +1903,174 @@
|
|||||||
remoteGlobalIDString = 44962FDA23E7A54A00E2A598;
|
remoteGlobalIDString = 44962FDA23E7A54A00E2A598;
|
||||||
remoteInfo = SwiftSampleApp;
|
remoteInfo = SwiftSampleApp;
|
||||||
};
|
};
|
||||||
|
A8F3C1312F4E37A5006BC252 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A8F3BD152F4E3794006BC252 /* libfragmentzip.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 87B8C3401E0E9C37002F817D;
|
||||||
|
remoteInfo = "fragmentzip-cli-macOS";
|
||||||
|
};
|
||||||
|
A8F3C1332F4E37A5006BC252 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A8F3BD152F4E3794006BC252 /* libfragmentzip.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = B315FDB02866CCF8002E243C;
|
||||||
|
remoteInfo = "fragmentzip-cli-iOS";
|
||||||
|
};
|
||||||
|
A8F3C1352F4E37A5006BC252 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A8F3BD152F4E3794006BC252 /* libfragmentzip.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = B315FDB52866CD91002E243C;
|
||||||
|
remoteInfo = "fragmentzip-macOS";
|
||||||
|
};
|
||||||
|
A8F3C1372F4E37A5006BC252 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A8F3BD152F4E3794006BC252 /* libfragmentzip.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = B315FDCE2866CDD3002E243C;
|
||||||
|
remoteInfo = "fragmentzip-iOS";
|
||||||
|
};
|
||||||
|
A8F3C13A2F4E37A5006BC252 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A8F3BCF12F4E3794006BC252 /* libgeneral.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 87977F6F227C4B71004F31DA;
|
||||||
|
remoteInfo = libgeneral;
|
||||||
|
};
|
||||||
|
A8F3C13F2F4E37A5006BC252 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A8F3C0952F4E3794006BC252 /* Roxas.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = BFADAFF819AE7BB70050CF31;
|
||||||
|
remoteInfo = Roxas;
|
||||||
|
};
|
||||||
|
A8F3C1412F4E37A5006BC252 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A8F3C0952F4E3794006BC252 /* Roxas.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = BF8624801BB742E700C12EEE;
|
||||||
|
remoteInfo = RoxasTV;
|
||||||
|
};
|
||||||
|
A8F3C1432F4E37A5006BC252 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A8F3C0952F4E3794006BC252 /* Roxas.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = BFADB00319AE7BB80050CF31;
|
||||||
|
remoteInfo = RoxasTests;
|
||||||
|
};
|
||||||
|
A8F3C1472F4E37A5006BC252 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A8F3BFF12F4E3794006BC252 /* SampleApp.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 44B1EE7C23DB90D5004E2E29;
|
||||||
|
remoteInfo = SampleApp;
|
||||||
|
};
|
||||||
|
A8F3C1492F4E37A5006BC252 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A8F3BFF12F4E3794006BC252 /* SampleApp.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 445A906A2400612800B487B4;
|
||||||
|
remoteInfo = "NSAttributedString+MarkdownTests";
|
||||||
|
};
|
||||||
|
A8F3C14C2F4E37A5006BC252 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A8F3C00A2F4E3794006BC252 /* SampleApp.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 44E8FA8923D90632009E1D13;
|
||||||
|
remoteInfo = SampleApp;
|
||||||
|
};
|
||||||
|
A8F3C14F2F4E37A5006BC252 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A8F3C0162F4E3794006BC252 /* SwiftSampleApp.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 44962FDA23E7A54A00E2A598;
|
||||||
|
remoteInfo = SwiftSampleApp;
|
||||||
|
};
|
||||||
|
A8F3FC062F4E998F006BC252 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A8F3F7E42F4E96D7006BC252 /* libfragmentzip.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 87B8C3401E0E9C37002F817D;
|
||||||
|
remoteInfo = "fragmentzip-cli-macOS";
|
||||||
|
};
|
||||||
|
A8F3FC082F4E998F006BC252 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A8F3F7E42F4E96D7006BC252 /* libfragmentzip.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = B315FDB02866CCF8002E243C;
|
||||||
|
remoteInfo = "fragmentzip-cli-iOS";
|
||||||
|
};
|
||||||
|
A8F3FC0A2F4E998F006BC252 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A8F3F7E42F4E96D7006BC252 /* libfragmentzip.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = B315FDB52866CD91002E243C;
|
||||||
|
remoteInfo = "fragmentzip-macOS";
|
||||||
|
};
|
||||||
|
A8F3FC0C2F4E998F006BC252 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A8F3F7E42F4E96D7006BC252 /* libfragmentzip.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = B315FDCE2866CDD3002E243C;
|
||||||
|
remoteInfo = "fragmentzip-iOS";
|
||||||
|
};
|
||||||
|
A8F3FC0F2F4E998F006BC252 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A8F3F7C02F4E96D7006BC252 /* libgeneral.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 87977F6F227C4B71004F31DA;
|
||||||
|
remoteInfo = libgeneral;
|
||||||
|
};
|
||||||
|
A8F3FC142F4E998F006BC252 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A8F3FB642F4E96D7006BC252 /* Roxas.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = BFADAFF819AE7BB70050CF31;
|
||||||
|
remoteInfo = Roxas;
|
||||||
|
};
|
||||||
|
A8F3FC162F4E998F006BC252 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A8F3FB642F4E96D7006BC252 /* Roxas.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = BF8624801BB742E700C12EEE;
|
||||||
|
remoteInfo = RoxasTV;
|
||||||
|
};
|
||||||
|
A8F3FC182F4E998F006BC252 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A8F3FB642F4E96D7006BC252 /* Roxas.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = BFADB00319AE7BB80050CF31;
|
||||||
|
remoteInfo = RoxasTests;
|
||||||
|
};
|
||||||
|
A8F3FC1B2F4E998F006BC252 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A8F3FAD92F4E96D7006BC252 /* SampleApp.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 44E8FA8923D90632009E1D13;
|
||||||
|
remoteInfo = SampleApp;
|
||||||
|
};
|
||||||
|
A8F3FC1F2F4E998F006BC252 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A8F3FAC02F4E96D7006BC252 /* SampleApp.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 44B1EE7C23DB90D5004E2E29;
|
||||||
|
remoteInfo = SampleApp;
|
||||||
|
};
|
||||||
|
A8F3FC212F4E998F006BC252 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A8F3FAC02F4E96D7006BC252 /* SampleApp.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 445A906A2400612800B487B4;
|
||||||
|
remoteInfo = "NSAttributedString+MarkdownTests";
|
||||||
|
};
|
||||||
|
A8F3FC242F4E998F006BC252 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = A8F3FAE52F4E96D7006BC252 /* SwiftSampleApp.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 44962FDA23E7A54A00E2A598;
|
||||||
|
remoteInfo = SwiftSampleApp;
|
||||||
|
};
|
||||||
A8FAC1CE2F4B51980061A851 /* PBXContainerItemProxy */ = {
|
A8FAC1CE2F4B51980061A851 /* PBXContainerItemProxy */ = {
|
||||||
isa = PBXContainerItemProxy;
|
isa = PBXContainerItemProxy;
|
||||||
containerPortal = A8FAC0562F4B50D10061A851 /* em_proxy.xcodeproj */;
|
containerPortal = A8FAC0562F4B50D10061A851 /* em_proxy.xcodeproj */;
|
||||||
@@ -2187,6 +2439,12 @@
|
|||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
191E5FAB290A5D92001A3B7C /* libminimuxer_swift.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libminimuxer_swift.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
191E5FAB290A5D92001A3B7C /* libminimuxer_swift.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libminimuxer_swift.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
A802C5B62F525B910049FE2B /* libgeneral.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = libgeneral.xcodeproj; sourceTree = "<group>"; };
|
||||||
|
A802C5DA2F525B910049FE2B /* libfragmentzip.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = libfragmentzip.xcodeproj; sourceTree = "<group>"; };
|
||||||
|
A802C8B62F525B910049FE2B /* SampleApp.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = SampleApp.xcodeproj; sourceTree = "<group>"; };
|
||||||
|
A802C8CF2F525B910049FE2B /* SampleApp.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = SampleApp.xcodeproj; sourceTree = "<group>"; };
|
||||||
|
A802C8DB2F525B910049FE2B /* SwiftSampleApp.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = SwiftSampleApp.xcodeproj; sourceTree = "<group>"; };
|
||||||
|
A802C95A2F525B910049FE2B /* Roxas.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = Roxas.xcodeproj; sourceTree = "<group>"; };
|
||||||
A8116EAD2F4B8BA80013ABD0 /* libgeneral.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = libgeneral.xcodeproj; sourceTree = "<group>"; };
|
A8116EAD2F4B8BA80013ABD0 /* libgeneral.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = libgeneral.xcodeproj; sourceTree = "<group>"; };
|
||||||
A8116ED12F4B8BA80013ABD0 /* libfragmentzip.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = libfragmentzip.xcodeproj; sourceTree = "<group>"; };
|
A8116ED12F4B8BA80013ABD0 /* libfragmentzip.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = libfragmentzip.xcodeproj; sourceTree = "<group>"; };
|
||||||
A81171432F4B8BA80013ABD0 /* SampleApp.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = SampleApp.xcodeproj; sourceTree = "<group>"; };
|
A81171432F4B8BA80013ABD0 /* SampleApp.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = SampleApp.xcodeproj; sourceTree = "<group>"; };
|
||||||
@@ -2375,6 +2633,18 @@
|
|||||||
A8EEDA1E2F4B19B000F2436D /* Roxas.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = Roxas.xcodeproj; sourceTree = "<group>"; };
|
A8EEDA1E2F4B19B000F2436D /* Roxas.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = Roxas.xcodeproj; sourceTree = "<group>"; };
|
||||||
A8EEDA9B2F4B19B000F2436D /* em_proxy.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = em_proxy.xcodeproj; sourceTree = "<group>"; };
|
A8EEDA9B2F4B19B000F2436D /* em_proxy.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = em_proxy.xcodeproj; sourceTree = "<group>"; };
|
||||||
A8EEDA9D2F4B19B000F2436D /* minimuxer.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = minimuxer.xcodeproj; sourceTree = "<group>"; };
|
A8EEDA9D2F4B19B000F2436D /* minimuxer.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = minimuxer.xcodeproj; sourceTree = "<group>"; };
|
||||||
|
A8F3BCF12F4E3794006BC252 /* libgeneral.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = libgeneral.xcodeproj; sourceTree = "<group>"; };
|
||||||
|
A8F3BD152F4E3794006BC252 /* libfragmentzip.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = libfragmentzip.xcodeproj; sourceTree = "<group>"; };
|
||||||
|
A8F3BFF12F4E3794006BC252 /* SampleApp.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = SampleApp.xcodeproj; sourceTree = "<group>"; };
|
||||||
|
A8F3C00A2F4E3794006BC252 /* SampleApp.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = SampleApp.xcodeproj; sourceTree = "<group>"; };
|
||||||
|
A8F3C0162F4E3794006BC252 /* SwiftSampleApp.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = SwiftSampleApp.xcodeproj; sourceTree = "<group>"; };
|
||||||
|
A8F3C0952F4E3794006BC252 /* Roxas.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = Roxas.xcodeproj; sourceTree = "<group>"; };
|
||||||
|
A8F3F7C02F4E96D7006BC252 /* libgeneral.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = libgeneral.xcodeproj; sourceTree = "<group>"; };
|
||||||
|
A8F3F7E42F4E96D7006BC252 /* libfragmentzip.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = libfragmentzip.xcodeproj; sourceTree = "<group>"; };
|
||||||
|
A8F3FAC02F4E96D7006BC252 /* SampleApp.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = SampleApp.xcodeproj; sourceTree = "<group>"; };
|
||||||
|
A8F3FAD92F4E96D7006BC252 /* SampleApp.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = SampleApp.xcodeproj; sourceTree = "<group>"; };
|
||||||
|
A8F3FAE52F4E96D7006BC252 /* SwiftSampleApp.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = SwiftSampleApp.xcodeproj; sourceTree = "<group>"; };
|
||||||
|
A8F3FB642F4E96D7006BC252 /* Roxas.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = Roxas.xcodeproj; sourceTree = "<group>"; };
|
||||||
A8FABA492F4B50D00061A851 /* libimobiledevice.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libimobiledevice.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
A8FABA492F4B50D00061A851 /* libimobiledevice.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libimobiledevice.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
A8FABA4A2F4B50D00061A851 /* libem_proxy_swift.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libem_proxy_swift.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
A8FABA4A2F4B50D00061A851 /* libem_proxy_swift.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libem_proxy_swift.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
A8FABCC32F4B50D10061A851 /* libgeneral.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = libgeneral.xcodeproj; sourceTree = "<group>"; };
|
A8FABCC32F4B50D10061A851 /* libgeneral.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = libgeneral.xcodeproj; sourceTree = "<group>"; };
|
||||||
@@ -2629,6 +2899,7 @@
|
|||||||
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
|
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
|
||||||
membershipExceptions = (
|
membershipExceptions = (
|
||||||
EMProxyWrapper.swift,
|
EMProxyWrapper.swift,
|
||||||
|
IfManager.swift,
|
||||||
MinimuxerWrapper.swift,
|
MinimuxerWrapper.swift,
|
||||||
Utils/common/AbstractClassError.swift,
|
Utils/common/AbstractClassError.swift,
|
||||||
Utils/common/BuildInfo.swift,
|
Utils/common/BuildInfo.swift,
|
||||||
@@ -2666,6 +2937,13 @@
|
|||||||
/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */
|
/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */
|
||||||
|
|
||||||
/* Begin PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet section */
|
/* Begin PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet section */
|
||||||
|
173100732F6E4550001FBB19 /* PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet */ = {
|
||||||
|
isa = PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet;
|
||||||
|
buildPhase = BFD247682284B9A500981D42 /* Resources */;
|
||||||
|
membershipExceptions = (
|
||||||
|
Intents/ViewApp.intentdefinition,
|
||||||
|
);
|
||||||
|
};
|
||||||
A8EEC8CC2F4B146B00F2436D /* PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet */ = {
|
A8EEC8CC2F4B146B00F2436D /* PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet */ = {
|
||||||
isa = PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet;
|
isa = PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet;
|
||||||
buildPhase = BFD247682284B9A500981D42 /* Resources */;
|
buildPhase = BFD247682284B9A500981D42 /* Resources */;
|
||||||
@@ -2688,7 +2966,7 @@
|
|||||||
A8A5AFE32F4C343200572B4A /* .github */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = .github; sourceTree = "<group>"; };
|
A8A5AFE32F4C343200572B4A /* .github */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = .github; sourceTree = "<group>"; };
|
||||||
A8A5AFEA2F4C343200572B4A /* keys */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = keys; sourceTree = "<group>"; };
|
A8A5AFEA2F4C343200572B4A /* keys */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = keys; sourceTree = "<group>"; };
|
||||||
A8A5C85B2F4C68BF00572B4A /* libfragmentzip */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = libfragmentzip; sourceTree = "<group>"; };
|
A8A5C85B2F4C68BF00572B4A /* libfragmentzip */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = libfragmentzip; sourceTree = "<group>"; };
|
||||||
A8EEC0502F4AF7FB00F2436D /* AltStoreCore */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (A8EEC0BF2F4AF7FB00F2436D /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = AltStoreCore; sourceTree = "<group>"; };
|
A8EEC0502F4AF7FB00F2436D /* AltStoreCore */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (173100732F6E4550001FBB19 /* PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet */, A8EEC0BF2F4AF7FB00F2436D /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = AltStoreCore; sourceTree = "<group>"; };
|
||||||
A8EEC3482F4B0D8600F2436D /* Shared */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (A8EEC36A2F4B0D8700F2436D /* PBXFileSystemSynchronizedBuildFileExceptionSet */, A8EEC36C2F4B0D8700F2436D /* PBXFileSystemSynchronizedBuildFileExceptionSet */, A8EEC36B2F4B0D8700F2436D /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = Shared; sourceTree = "<group>"; };
|
A8EEC3482F4B0D8600F2436D /* Shared */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (A8EEC36A2F4B0D8700F2436D /* PBXFileSystemSynchronizedBuildFileExceptionSet */, A8EEC36C2F4B0D8700F2436D /* PBXFileSystemSynchronizedBuildFileExceptionSet */, A8EEC36B2F4B0D8700F2436D /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = Shared; sourceTree = "<group>"; };
|
||||||
A8EEC3B92F4B0EFC00F2436D /* AltWidget */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (A8EEC3CA2F4B0EFC00F2436D /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = AltWidget; sourceTree = "<group>"; };
|
A8EEC3B92F4B0EFC00F2436D /* AltWidget */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (A8EEC3CA2F4B0EFC00F2436D /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = AltWidget; sourceTree = "<group>"; };
|
||||||
A8EEC3D92F4B0FC800F2436D /* AltBackup */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (A8EEC3E22F4B0FC800F2436D /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = AltBackup; sourceTree = "<group>"; };
|
A8EEC3D92F4B0FC800F2436D /* AltBackup */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (A8EEC3E22F4B0FC800F2436D /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = AltBackup; sourceTree = "<group>"; };
|
||||||
@@ -2764,6 +3042,60 @@
|
|||||||
/* End PBXFrameworksBuildPhase section */
|
/* End PBXFrameworksBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXGroup section */
|
/* Begin PBXGroup section */
|
||||||
|
A802C5E12F525B910049FE2B /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
A802C9F92F525C030049FE2B /* libfragmentzip */,
|
||||||
|
A802C9FB2F525C030049FE2B /* libfragmentzip */,
|
||||||
|
A802C9FD2F525C030049FE2B /* libfragmentzip.a */,
|
||||||
|
A802C9FF2F525C030049FE2B /* libfragmentzip.a */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
A802C5E32F525B910049FE2B /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
A802CA022F525C030049FE2B /* libgeneral */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
A802C8E32F525B910049FE2B /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
A802CA142F525C030049FE2B /* SampleApp.app */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
A802C8E52F525B910049FE2B /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
A802CA0F2F525C030049FE2B /* SampleApp.app */,
|
||||||
|
A802CA112F525C030049FE2B /* NSAttributedString+MarkdownTests.xctest */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
A802C8E72F525B910049FE2B /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
A802CA172F525C030049FE2B /* SwiftSampleApp.app */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
A802C95B2F525B910049FE2B /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
A802CA072F525C030049FE2B /* Roxas.framework */,
|
||||||
|
A802CA092F525C030049FE2B /* Roxas.framework */,
|
||||||
|
A802CA0B2F525C030049FE2B /* RoxasTests.xctest */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
A811720E2F4B8BA80013ABD0 /* Products */ = {
|
A811720E2F4B8BA80013ABD0 /* Products */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
@@ -4079,6 +4411,114 @@
|
|||||||
name = Products;
|
name = Products;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
A8F3BD1C2F4E3794006BC252 /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
A8F3C1322F4E37A5006BC252 /* libfragmentzip */,
|
||||||
|
A8F3C1342F4E37A5006BC252 /* libfragmentzip */,
|
||||||
|
A8F3C1362F4E37A5006BC252 /* libfragmentzip.a */,
|
||||||
|
A8F3C1382F4E37A5006BC252 /* libfragmentzip.a */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
A8F3BD1E2F4E3794006BC252 /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
A8F3C13B2F4E37A5006BC252 /* libgeneral */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
A8F3C01E2F4E3794006BC252 /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
A8F3C1482F4E37A5006BC252 /* SampleApp.app */,
|
||||||
|
A8F3C14A2F4E37A5006BC252 /* NSAttributedString+MarkdownTests.xctest */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
A8F3C0202F4E3794006BC252 /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
A8F3C1502F4E37A5006BC252 /* SwiftSampleApp.app */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
A8F3C0222F4E3794006BC252 /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
A8F3C14D2F4E37A5006BC252 /* SampleApp.app */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
A8F3C0962F4E3794006BC252 /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
A8F3C1402F4E37A5006BC252 /* Roxas.framework */,
|
||||||
|
A8F3C1422F4E37A5006BC252 /* Roxas.framework */,
|
||||||
|
A8F3C1442F4E37A5006BC252 /* RoxasTests.xctest */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
A8F3F7EB2F4E96D7006BC252 /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
A8F3FC072F4E998F006BC252 /* libfragmentzip */,
|
||||||
|
A8F3FC092F4E998F006BC252 /* libfragmentzip */,
|
||||||
|
A8F3FC0B2F4E998F006BC252 /* libfragmentzip.a */,
|
||||||
|
A8F3FC0D2F4E998F006BC252 /* libfragmentzip.a */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
A8F3F7ED2F4E96D7006BC252 /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
A8F3FC102F4E998F006BC252 /* libgeneral */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
A8F3FAED2F4E96D7006BC252 /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
A8F3FC1C2F4E998F006BC252 /* SampleApp.app */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
A8F3FAEF2F4E96D7006BC252 /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
A8F3FC252F4E998F006BC252 /* SwiftSampleApp.app */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
A8F3FAF12F4E96D7006BC252 /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
A8F3FC202F4E998F006BC252 /* SampleApp.app */,
|
||||||
|
A8F3FC222F4E998F006BC252 /* NSAttributedString+MarkdownTests.xctest */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
A8F3FB652F4E96D7006BC252 /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
A8F3FC152F4E998F006BC252 /* Roxas.framework */,
|
||||||
|
A8F3FC172F4E998F006BC252 /* Roxas.framework */,
|
||||||
|
A8F3FC192F4E998F006BC252 /* RoxasTests.xctest */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
A8FAC0592F4B50D10061A851 /* Products */ = {
|
A8FAC0592F4B50D10061A851 /* Products */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
@@ -4648,6 +5088,10 @@
|
|||||||
ProductGroup = A8A5B06A2F4C347700572B4A /* Products */;
|
ProductGroup = A8A5B06A2F4C347700572B4A /* Products */;
|
||||||
ProjectRef = A8A5B0622F4C347700572B4A /* libfragmentzip.xcodeproj */;
|
ProjectRef = A8A5B0622F4C347700572B4A /* libfragmentzip.xcodeproj */;
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
ProductGroup = A8F3BD1C2F4E3794006BC252 /* Products */;
|
||||||
|
ProjectRef = A8F3BD152F4E3794006BC252 /* libfragmentzip.xcodeproj */;
|
||||||
|
},
|
||||||
{
|
{
|
||||||
ProductGroup = A8636E9B2F4CF74D00E66784 /* Products */;
|
ProductGroup = A8636E9B2F4CF74D00E66784 /* Products */;
|
||||||
ProjectRef = A8636E922F4CF74D00E66784 /* libfragmentzip.xcodeproj */;
|
ProjectRef = A8636E922F4CF74D00E66784 /* libfragmentzip.xcodeproj */;
|
||||||
@@ -4664,6 +5108,10 @@
|
|||||||
ProductGroup = A85AEC6B2F4B22F6002E2E11 /* Products */;
|
ProductGroup = A85AEC6B2F4B22F6002E2E11 /* Products */;
|
||||||
ProjectRef = A85AE43E2F4B22F6002E2E11 /* libfragmentzip.xcodeproj */;
|
ProjectRef = A85AE43E2F4B22F6002E2E11 /* libfragmentzip.xcodeproj */;
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
ProductGroup = A8F3F7EB2F4E96D7006BC252 /* Products */;
|
||||||
|
ProjectRef = A8F3F7E42F4E96D7006BC252 /* libfragmentzip.xcodeproj */;
|
||||||
|
},
|
||||||
{
|
{
|
||||||
ProductGroup = A8A5B3BA2F4C4C8600572B4A /* Products */;
|
ProductGroup = A8A5B3BA2F4C4C8600572B4A /* Products */;
|
||||||
ProjectRef = A8A5B3B32F4C4C8600572B4A /* libfragmentzip.xcodeproj */;
|
ProjectRef = A8A5B3B32F4C4C8600572B4A /* libfragmentzip.xcodeproj */;
|
||||||
@@ -4692,6 +5140,10 @@
|
|||||||
ProductGroup = A8CCC2482F4B654400B0089A /* Products */;
|
ProductGroup = A8CCC2482F4B654400B0089A /* Products */;
|
||||||
ProjectRef = A8CCBF072F4B654400B0089A /* libfragmentzip.xcodeproj */;
|
ProjectRef = A8CCBF072F4B654400B0089A /* libfragmentzip.xcodeproj */;
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
ProductGroup = A802C5E12F525B910049FE2B /* Products */;
|
||||||
|
ProjectRef = A802C5DA2F525B910049FE2B /* libfragmentzip.xcodeproj */;
|
||||||
|
},
|
||||||
{
|
{
|
||||||
ProductGroup = A811973F2F4C1C710013ABD0 /* Products */;
|
ProductGroup = A811973F2F4C1C710013ABD0 /* Products */;
|
||||||
ProjectRef = A81194062F4C1C710013ABD0 /* libfragmentzip.xcodeproj */;
|
ProjectRef = A81194062F4C1C710013ABD0 /* libfragmentzip.xcodeproj */;
|
||||||
@@ -4744,6 +5196,10 @@
|
|||||||
ProductGroup = A8A5B06C2F4C347700572B4A /* Products */;
|
ProductGroup = A8A5B06C2F4C347700572B4A /* Products */;
|
||||||
ProjectRef = A8A5B03E2F4C347700572B4A /* libgeneral.xcodeproj */;
|
ProjectRef = A8A5B03E2F4C347700572B4A /* libgeneral.xcodeproj */;
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
ProductGroup = A802C5E32F525B910049FE2B /* Products */;
|
||||||
|
ProjectRef = A802C5B62F525B910049FE2B /* libgeneral.xcodeproj */;
|
||||||
|
},
|
||||||
{
|
{
|
||||||
ProductGroup = A8CCD22A2F4B6B0000B0089A /* Products */;
|
ProductGroup = A8CCD22A2F4B6B0000B0089A /* Products */;
|
||||||
ProjectRef = A8CCCEBF2F4B6B0000B0089A /* libgeneral.xcodeproj */;
|
ProjectRef = A8CCCEBF2F4B6B0000B0089A /* libgeneral.xcodeproj */;
|
||||||
@@ -4760,10 +5216,18 @@
|
|||||||
ProductGroup = A8FAD7302F4B61310061A851 /* Products */;
|
ProductGroup = A8FAD7302F4B61310061A851 /* Products */;
|
||||||
ProjectRef = A8FAD38F2F4B61310061A851 /* libgeneral.xcodeproj */;
|
ProjectRef = A8FAD38F2F4B61310061A851 /* libgeneral.xcodeproj */;
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
ProductGroup = A8F3F7ED2F4E96D7006BC252 /* Products */;
|
||||||
|
ProjectRef = A8F3F7C02F4E96D7006BC252 /* libgeneral.xcodeproj */;
|
||||||
|
},
|
||||||
{
|
{
|
||||||
ProductGroup = A8EEDA212F4B19B000F2436D /* Products */;
|
ProductGroup = A8EEDA212F4B19B000F2436D /* Products */;
|
||||||
ProjectRef = A8EED1D72F4B19B000F2436D /* libgeneral.xcodeproj */;
|
ProjectRef = A8EED1D72F4B19B000F2436D /* libgeneral.xcodeproj */;
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
ProductGroup = A8F3BD1E2F4E3794006BC252 /* Products */;
|
||||||
|
ProjectRef = A8F3BCF12F4E3794006BC252 /* libgeneral.xcodeproj */;
|
||||||
|
},
|
||||||
{
|
{
|
||||||
ProductGroup = A8636E992F4CF74D00E66784 /* Products */;
|
ProductGroup = A8636E992F4CF74D00E66784 /* Products */;
|
||||||
ProjectRef = A8636E6E2F4CF74D00E66784 /* libgeneral.xcodeproj */;
|
ProjectRef = A8636E6E2F4CF74D00E66784 /* libgeneral.xcodeproj */;
|
||||||
@@ -4888,6 +5352,10 @@
|
|||||||
ProductGroup = A8A5BE7E2F4C4D6800572B4A /* Products */;
|
ProductGroup = A8A5BE7E2F4C4D6800572B4A /* Products */;
|
||||||
ProjectRef = A8A5BE7D2F4C4D6800572B4A /* Roxas.xcodeproj */;
|
ProjectRef = A8A5BE7D2F4C4D6800572B4A /* Roxas.xcodeproj */;
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
ProductGroup = A8F3FB652F4E96D7006BC252 /* Products */;
|
||||||
|
ProjectRef = A8F3FB642F4E96D7006BC252 /* Roxas.xcodeproj */;
|
||||||
|
},
|
||||||
{
|
{
|
||||||
ProductGroup = A85AEC732F4B22F6002E2E11 /* Products */;
|
ProductGroup = A85AEC732F4B22F6002E2E11 /* Products */;
|
||||||
ProjectRef = A85AEC612F4B22F6002E2E11 /* Roxas.xcodeproj */;
|
ProjectRef = A85AEC612F4B22F6002E2E11 /* Roxas.xcodeproj */;
|
||||||
@@ -4916,6 +5384,10 @@
|
|||||||
ProductGroup = A8FACF9D2F4B5CD40061A851 /* Products */;
|
ProductGroup = A8FACF9D2F4B5CD40061A851 /* Products */;
|
||||||
ProjectRef = A8FACF932F4B5CD40061A851 /* Roxas.xcodeproj */;
|
ProjectRef = A8FACF932F4B5CD40061A851 /* Roxas.xcodeproj */;
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
ProductGroup = A802C95B2F525B910049FE2B /* Products */;
|
||||||
|
ProjectRef = A802C95A2F525B910049FE2B /* Roxas.xcodeproj */;
|
||||||
|
},
|
||||||
{
|
{
|
||||||
ProductGroup = A85A27CA2F4B370D002E2E11 /* Products */;
|
ProductGroup = A85A27CA2F4B370D002E2E11 /* Products */;
|
||||||
ProjectRef = A85A27C02F4B370D002E2E11 /* Roxas.xcodeproj */;
|
ProjectRef = A85A27C02F4B370D002E2E11 /* Roxas.xcodeproj */;
|
||||||
@@ -4936,6 +5408,10 @@
|
|||||||
ProductGroup = A86372122F4CF74D00E66784 /* Products */;
|
ProductGroup = A86372122F4CF74D00E66784 /* Products */;
|
||||||
ProjectRef = A86372112F4CF74D00E66784 /* Roxas.xcodeproj */;
|
ProjectRef = A86372112F4CF74D00E66784 /* Roxas.xcodeproj */;
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
ProductGroup = A8F3C0962F4E3794006BC252 /* Products */;
|
||||||
|
ProjectRef = A8F3C0952F4E3794006BC252 /* Roxas.xcodeproj */;
|
||||||
|
},
|
||||||
{
|
{
|
||||||
ProductGroup = A8EEDA272F4B19B000F2436D /* Products */;
|
ProductGroup = A8EEDA272F4B19B000F2436D /* Products */;
|
||||||
ProjectRef = A8EEDA1E2F4B19B000F2436D /* Roxas.xcodeproj */;
|
ProjectRef = A8EEDA1E2F4B19B000F2436D /* Roxas.xcodeproj */;
|
||||||
@@ -4956,6 +5432,10 @@
|
|||||||
ProductGroup = A8CCE16B2F4B76CF00B0089A /* Products */;
|
ProductGroup = A8CCE16B2F4B76CF00B0089A /* Products */;
|
||||||
ProjectRef = A8CCE15B2F4B76CF00B0089A /* Roxas.xcodeproj */;
|
ProjectRef = A8CCE15B2F4B76CF00B0089A /* Roxas.xcodeproj */;
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
ProductGroup = A8F3C01E2F4E3794006BC252 /* Products */;
|
||||||
|
ProjectRef = A8F3BFF12F4E3794006BC252 /* SampleApp.xcodeproj */;
|
||||||
|
},
|
||||||
{
|
{
|
||||||
ProductGroup = A811973D2F4C1C710013ABD0 /* Products */;
|
ProductGroup = A811973D2F4C1C710013ABD0 /* Products */;
|
||||||
ProjectRef = A81196782F4C1C710013ABD0 /* SampleApp.xcodeproj */;
|
ProjectRef = A81196782F4C1C710013ABD0 /* SampleApp.xcodeproj */;
|
||||||
@@ -5024,6 +5504,10 @@
|
|||||||
ProductGroup = A8A5C5EE2F4C4FEC00572B4A /* Products */;
|
ProductGroup = A8A5C5EE2F4C4FEC00572B4A /* Products */;
|
||||||
ProjectRef = A8A5C5C12F4C4FEC00572B4A /* SampleApp.xcodeproj */;
|
ProjectRef = A8A5C5C12F4C4FEC00572B4A /* SampleApp.xcodeproj */;
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
ProductGroup = A8F3C0222F4E3794006BC252 /* Products */;
|
||||||
|
ProjectRef = A8F3C00A2F4E3794006BC252 /* SampleApp.xcodeproj */;
|
||||||
|
},
|
||||||
{
|
{
|
||||||
ProductGroup = A8118FCC2F4C1C250013ABD0 /* Products */;
|
ProductGroup = A8118FCC2F4C1C250013ABD0 /* Products */;
|
||||||
ProjectRef = A8118F012F4C1C250013ABD0 /* SampleApp.xcodeproj */;
|
ProjectRef = A8118F012F4C1C250013ABD0 /* SampleApp.xcodeproj */;
|
||||||
@@ -5068,6 +5552,14 @@
|
|||||||
ProductGroup = A8FAC0632F4B50D10061A851 /* Products */;
|
ProductGroup = A8FAC0632F4B50D10061A851 /* Products */;
|
||||||
ProjectRef = A8FABF722F4B50D10061A851 /* SampleApp.xcodeproj */;
|
ProjectRef = A8FABF722F4B50D10061A851 /* SampleApp.xcodeproj */;
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
ProductGroup = A802C8E52F525B910049FE2B /* Products */;
|
||||||
|
ProjectRef = A802C8B62F525B910049FE2B /* SampleApp.xcodeproj */;
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ProductGroup = A8F3FAED2F4E96D7006BC252 /* Products */;
|
||||||
|
ProjectRef = A8F3FAD92F4E96D7006BC252 /* SampleApp.xcodeproj */;
|
||||||
|
},
|
||||||
{
|
{
|
||||||
ProductGroup = A8FACFA52F4B5CD40061A851 /* Products */;
|
ProductGroup = A8FACFA52F4B5CD40061A851 /* Products */;
|
||||||
ProjectRef = A8FACE982F4B5CD40061A851 /* SampleApp.xcodeproj */;
|
ProjectRef = A8FACE982F4B5CD40061A851 /* SampleApp.xcodeproj */;
|
||||||
@@ -5088,6 +5580,10 @@
|
|||||||
ProductGroup = A85A11E02F4B34EF002E2E11 /* Products */;
|
ProductGroup = A85A11E02F4B34EF002E2E11 /* Products */;
|
||||||
ProjectRef = A85A10DD2F4B34EF002E2E11 /* SampleApp.xcodeproj */;
|
ProjectRef = A85A10DD2F4B34EF002E2E11 /* SampleApp.xcodeproj */;
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
ProductGroup = A8F3FAF12F4E96D7006BC252 /* Products */;
|
||||||
|
ProjectRef = A8F3FAC02F4E96D7006BC252 /* SampleApp.xcodeproj */;
|
||||||
|
},
|
||||||
{
|
{
|
||||||
ProductGroup = A8CCC24E2F4B654400B0089A /* Products */;
|
ProductGroup = A8CCC24E2F4B654400B0089A /* Products */;
|
||||||
ProjectRef = A8CCC1792F4B654400B0089A /* SampleApp.xcodeproj */;
|
ProjectRef = A8CCC1792F4B654400B0089A /* SampleApp.xcodeproj */;
|
||||||
@@ -5108,6 +5604,10 @@
|
|||||||
ProductGroup = A8CCD2222F4B6B0000B0089A /* Products */;
|
ProductGroup = A8CCD2222F4B6B0000B0089A /* Products */;
|
||||||
ProjectRef = A8CCD1552F4B6B0000B0089A /* SampleApp.xcodeproj */;
|
ProjectRef = A8CCD1552F4B6B0000B0089A /* SampleApp.xcodeproj */;
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
ProductGroup = A802C8E32F525B910049FE2B /* Products */;
|
||||||
|
ProjectRef = A802C8CF2F525B910049FE2B /* SampleApp.xcodeproj */;
|
||||||
|
},
|
||||||
{
|
{
|
||||||
ProductGroup = A8CCC2502F4B654400B0089A /* Products */;
|
ProductGroup = A8CCC2502F4B654400B0089A /* Products */;
|
||||||
ProjectRef = A8CCC1922F4B654400B0089A /* SampleApp.xcodeproj */;
|
ProjectRef = A8CCC1922F4B654400B0089A /* SampleApp.xcodeproj */;
|
||||||
@@ -5144,6 +5644,10 @@
|
|||||||
ProductGroup = A81197392F4C1C710013ABD0 /* Products */;
|
ProductGroup = A81197392F4C1C710013ABD0 /* Products */;
|
||||||
ProjectRef = A811969D2F4C1C710013ABD0 /* SwiftSampleApp.xcodeproj */;
|
ProjectRef = A811969D2F4C1C710013ABD0 /* SwiftSampleApp.xcodeproj */;
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
ProductGroup = A8F3C0202F4E3794006BC252 /* Products */;
|
||||||
|
ProjectRef = A8F3C0162F4E3794006BC252 /* SwiftSampleApp.xcodeproj */;
|
||||||
|
},
|
||||||
{
|
{
|
||||||
ProductGroup = A863719D2F4CF74D00E66784 /* Products */;
|
ProductGroup = A863719D2F4CF74D00E66784 /* Products */;
|
||||||
ProjectRef = A86371932F4CF74D00E66784 /* SwiftSampleApp.xcodeproj */;
|
ProjectRef = A86371932F4CF74D00E66784 /* SwiftSampleApp.xcodeproj */;
|
||||||
@@ -5168,6 +5672,10 @@
|
|||||||
ProductGroup = A85AEC752F4B22F6002E2E11 /* Products */;
|
ProductGroup = A85AEC752F4B22F6002E2E11 /* Products */;
|
||||||
ProjectRef = A85AE6D52F4B22F6002E2E11 /* SwiftSampleApp.xcodeproj */;
|
ProjectRef = A85AE6D52F4B22F6002E2E11 /* SwiftSampleApp.xcodeproj */;
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
ProductGroup = A8F3FAEF2F4E96D7006BC252 /* Products */;
|
||||||
|
ProjectRef = A8F3FAE52F4E96D7006BC252 /* SwiftSampleApp.xcodeproj */;
|
||||||
|
},
|
||||||
{
|
{
|
||||||
ProductGroup = A8FACF9B2F4B5CD40061A851 /* Products */;
|
ProductGroup = A8FACF9B2F4B5CD40061A851 /* Products */;
|
||||||
ProjectRef = A8FACEBD2F4B5CD40061A851 /* SwiftSampleApp.xcodeproj */;
|
ProjectRef = A8FACEBD2F4B5CD40061A851 /* SwiftSampleApp.xcodeproj */;
|
||||||
@@ -5200,6 +5708,10 @@
|
|||||||
ProductGroup = A8A5B6C02F4C4C8600572B4A /* Products */;
|
ProductGroup = A8A5B6C02F4C4C8600572B4A /* Products */;
|
||||||
ProjectRef = A8A5B6B42F4C4C8600572B4A /* SwiftSampleApp.xcodeproj */;
|
ProjectRef = A8A5B6B42F4C4C8600572B4A /* SwiftSampleApp.xcodeproj */;
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
ProductGroup = A802C8E72F525B910049FE2B /* Products */;
|
||||||
|
ProjectRef = A802C8DB2F525B910049FE2B /* SwiftSampleApp.xcodeproj */;
|
||||||
|
},
|
||||||
{
|
{
|
||||||
ProductGroup = A8A5ACE52F4C339400572B4A /* Products */;
|
ProductGroup = A8A5ACE52F4C339400572B4A /* Products */;
|
||||||
ProjectRef = A8A5ACDC2F4C339400572B4A /* SwiftSampleApp.xcodeproj */;
|
ProjectRef = A8A5ACDC2F4C339400572B4A /* SwiftSampleApp.xcodeproj */;
|
||||||
@@ -5223,6 +5735,90 @@
|
|||||||
/* End PBXProject section */
|
/* End PBXProject section */
|
||||||
|
|
||||||
/* Begin PBXReferenceProxy section */
|
/* Begin PBXReferenceProxy section */
|
||||||
|
A802C9F92F525C030049FE2B /* libfragmentzip */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = "compiled.mach-o.executable";
|
||||||
|
path = libfragmentzip;
|
||||||
|
remoteRef = A802C9F82F525C030049FE2B /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A802C9FB2F525C030049FE2B /* libfragmentzip */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = "compiled.mach-o.executable";
|
||||||
|
path = libfragmentzip;
|
||||||
|
remoteRef = A802C9FA2F525C030049FE2B /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A802C9FD2F525C030049FE2B /* libfragmentzip.a */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = archive.ar;
|
||||||
|
path = libfragmentzip.a;
|
||||||
|
remoteRef = A802C9FC2F525C030049FE2B /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A802C9FF2F525C030049FE2B /* libfragmentzip.a */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = archive.ar;
|
||||||
|
path = libfragmentzip.a;
|
||||||
|
remoteRef = A802C9FE2F525C030049FE2B /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A802CA022F525C030049FE2B /* libgeneral */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = "compiled.mach-o.executable";
|
||||||
|
path = libgeneral;
|
||||||
|
remoteRef = A802CA012F525C030049FE2B /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A802CA072F525C030049FE2B /* Roxas.framework */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = wrapper.framework;
|
||||||
|
path = Roxas.framework;
|
||||||
|
remoteRef = A802CA062F525C030049FE2B /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A802CA092F525C030049FE2B /* Roxas.framework */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = wrapper.framework;
|
||||||
|
path = Roxas.framework;
|
||||||
|
remoteRef = A802CA082F525C030049FE2B /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A802CA0B2F525C030049FE2B /* RoxasTests.xctest */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = wrapper.cfbundle;
|
||||||
|
path = RoxasTests.xctest;
|
||||||
|
remoteRef = A802CA0A2F525C030049FE2B /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A802CA0F2F525C030049FE2B /* SampleApp.app */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = wrapper.application;
|
||||||
|
path = SampleApp.app;
|
||||||
|
remoteRef = A802CA0E2F525C030049FE2B /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A802CA112F525C030049FE2B /* NSAttributedString+MarkdownTests.xctest */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = wrapper.cfbundle;
|
||||||
|
path = "NSAttributedString+MarkdownTests.xctest";
|
||||||
|
remoteRef = A802CA102F525C030049FE2B /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A802CA142F525C030049FE2B /* SampleApp.app */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = wrapper.application;
|
||||||
|
path = SampleApp.app;
|
||||||
|
remoteRef = A802CA132F525C030049FE2B /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A802CA172F525C030049FE2B /* SwiftSampleApp.app */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = wrapper.application;
|
||||||
|
path = SwiftSampleApp.app;
|
||||||
|
remoteRef = A802CA162F525C030049FE2B /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
A81173232F4B8DBD0013ABD0 /* libem_proxy_static.a */ = {
|
A81173232F4B8DBD0013ABD0 /* libem_proxy_static.a */ = {
|
||||||
isa = PBXReferenceProxy;
|
isa = PBXReferenceProxy;
|
||||||
fileType = archive.ar;
|
fileType = archive.ar;
|
||||||
@@ -6959,6 +7555,174 @@
|
|||||||
remoteRef = A8EEDAF12F4B1A0700F2436D /* PBXContainerItemProxy */;
|
remoteRef = A8EEDAF12F4B1A0700F2436D /* PBXContainerItemProxy */;
|
||||||
sourceTree = BUILT_PRODUCTS_DIR;
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
};
|
};
|
||||||
|
A8F3C1322F4E37A5006BC252 /* libfragmentzip */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = "compiled.mach-o.executable";
|
||||||
|
path = libfragmentzip;
|
||||||
|
remoteRef = A8F3C1312F4E37A5006BC252 /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A8F3C1342F4E37A5006BC252 /* libfragmentzip */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = "compiled.mach-o.executable";
|
||||||
|
path = libfragmentzip;
|
||||||
|
remoteRef = A8F3C1332F4E37A5006BC252 /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A8F3C1362F4E37A5006BC252 /* libfragmentzip.a */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = archive.ar;
|
||||||
|
path = libfragmentzip.a;
|
||||||
|
remoteRef = A8F3C1352F4E37A5006BC252 /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A8F3C1382F4E37A5006BC252 /* libfragmentzip.a */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = archive.ar;
|
||||||
|
path = libfragmentzip.a;
|
||||||
|
remoteRef = A8F3C1372F4E37A5006BC252 /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A8F3C13B2F4E37A5006BC252 /* libgeneral */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = "compiled.mach-o.executable";
|
||||||
|
path = libgeneral;
|
||||||
|
remoteRef = A8F3C13A2F4E37A5006BC252 /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A8F3C1402F4E37A5006BC252 /* Roxas.framework */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = wrapper.framework;
|
||||||
|
path = Roxas.framework;
|
||||||
|
remoteRef = A8F3C13F2F4E37A5006BC252 /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A8F3C1422F4E37A5006BC252 /* Roxas.framework */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = wrapper.framework;
|
||||||
|
path = Roxas.framework;
|
||||||
|
remoteRef = A8F3C1412F4E37A5006BC252 /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A8F3C1442F4E37A5006BC252 /* RoxasTests.xctest */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = wrapper.cfbundle;
|
||||||
|
path = RoxasTests.xctest;
|
||||||
|
remoteRef = A8F3C1432F4E37A5006BC252 /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A8F3C1482F4E37A5006BC252 /* SampleApp.app */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = wrapper.application;
|
||||||
|
path = SampleApp.app;
|
||||||
|
remoteRef = A8F3C1472F4E37A5006BC252 /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A8F3C14A2F4E37A5006BC252 /* NSAttributedString+MarkdownTests.xctest */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = wrapper.cfbundle;
|
||||||
|
path = "NSAttributedString+MarkdownTests.xctest";
|
||||||
|
remoteRef = A8F3C1492F4E37A5006BC252 /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A8F3C14D2F4E37A5006BC252 /* SampleApp.app */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = wrapper.application;
|
||||||
|
path = SampleApp.app;
|
||||||
|
remoteRef = A8F3C14C2F4E37A5006BC252 /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A8F3C1502F4E37A5006BC252 /* SwiftSampleApp.app */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = wrapper.application;
|
||||||
|
path = SwiftSampleApp.app;
|
||||||
|
remoteRef = A8F3C14F2F4E37A5006BC252 /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A8F3FC072F4E998F006BC252 /* libfragmentzip */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = "compiled.mach-o.executable";
|
||||||
|
path = libfragmentzip;
|
||||||
|
remoteRef = A8F3FC062F4E998F006BC252 /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A8F3FC092F4E998F006BC252 /* libfragmentzip */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = "compiled.mach-o.executable";
|
||||||
|
path = libfragmentzip;
|
||||||
|
remoteRef = A8F3FC082F4E998F006BC252 /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A8F3FC0B2F4E998F006BC252 /* libfragmentzip.a */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = archive.ar;
|
||||||
|
path = libfragmentzip.a;
|
||||||
|
remoteRef = A8F3FC0A2F4E998F006BC252 /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A8F3FC0D2F4E998F006BC252 /* libfragmentzip.a */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = archive.ar;
|
||||||
|
path = libfragmentzip.a;
|
||||||
|
remoteRef = A8F3FC0C2F4E998F006BC252 /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A8F3FC102F4E998F006BC252 /* libgeneral */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = "compiled.mach-o.executable";
|
||||||
|
path = libgeneral;
|
||||||
|
remoteRef = A8F3FC0F2F4E998F006BC252 /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A8F3FC152F4E998F006BC252 /* Roxas.framework */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = wrapper.framework;
|
||||||
|
path = Roxas.framework;
|
||||||
|
remoteRef = A8F3FC142F4E998F006BC252 /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A8F3FC172F4E998F006BC252 /* Roxas.framework */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = wrapper.framework;
|
||||||
|
path = Roxas.framework;
|
||||||
|
remoteRef = A8F3FC162F4E998F006BC252 /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A8F3FC192F4E998F006BC252 /* RoxasTests.xctest */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = wrapper.cfbundle;
|
||||||
|
path = RoxasTests.xctest;
|
||||||
|
remoteRef = A8F3FC182F4E998F006BC252 /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A8F3FC1C2F4E998F006BC252 /* SampleApp.app */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = wrapper.application;
|
||||||
|
path = SampleApp.app;
|
||||||
|
remoteRef = A8F3FC1B2F4E998F006BC252 /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A8F3FC202F4E998F006BC252 /* SampleApp.app */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = wrapper.application;
|
||||||
|
path = SampleApp.app;
|
||||||
|
remoteRef = A8F3FC1F2F4E998F006BC252 /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A8F3FC222F4E998F006BC252 /* NSAttributedString+MarkdownTests.xctest */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = wrapper.cfbundle;
|
||||||
|
path = "NSAttributedString+MarkdownTests.xctest";
|
||||||
|
remoteRef = A8F3FC212F4E998F006BC252 /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
A8F3FC252F4E998F006BC252 /* SwiftSampleApp.app */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = wrapper.application;
|
||||||
|
path = SwiftSampleApp.app;
|
||||||
|
remoteRef = A8F3FC242F4E998F006BC252 /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
A8FAC1CF2F4B51980061A851 /* libem_proxy_static.a */ = {
|
A8FAC1CF2F4B51980061A851 /* libem_proxy_static.a */ = {
|
||||||
isa = PBXReferenceProxy;
|
isa = PBXReferenceProxy;
|
||||||
fileType = archive.ar;
|
fileType = archive.ar;
|
||||||
|
|||||||
@@ -997,6 +997,7 @@ extension AppManager
|
|||||||
case .failure(let error): completionHandler(.failure(error))
|
case .failure(let error): completionHandler(.failure(error))
|
||||||
case .success(let installedApp): completionHandler(.success(installedApp))
|
case .success(let installedApp): completionHandler(.success(installedApp))
|
||||||
}
|
}
|
||||||
|
//UIApplication.shared.open(shortcutURLon, options: [:], completionHandler: nil)
|
||||||
}
|
}
|
||||||
installOperation.addDependency(sendAppOperation)
|
installOperation.addDependency(sendAppOperation)
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,8 @@ import AltStoreCore
|
|||||||
import AltSign
|
import AltSign
|
||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
|
let shortcutURLonDelay = URL(string: "shortcuts://run-shortcut?name=TurnOnDataDelay")!
|
||||||
|
|
||||||
@objc(InstallAppOperation)
|
@objc(InstallAppOperation)
|
||||||
final class InstallAppOperation: ResultOperation<InstalledApp>
|
final class InstallAppOperation: ResultOperation<InstalledApp>
|
||||||
{
|
{
|
||||||
@@ -211,6 +213,11 @@ final class InstallAppOperation: ResultOperation<InstalledApp>
|
|||||||
let alert = UIAlertController(title: "Finish Refresh", message: "Please reopen SideStore after the process is finished.To finish refreshing, SideStore must be moved to the background. To do this, you can either go to the Home Screen manually or by hitting Continue. Please reopen SideStore after doing this.", preferredStyle: .alert)
|
let alert = UIAlertController(title: "Finish Refresh", message: "Please reopen SideStore after the process is finished.To finish refreshing, SideStore must be moved to the background. To do this, you can either go to the Home Screen manually or by hitting Continue. Please reopen SideStore after doing this.", preferredStyle: .alert)
|
||||||
alert.addAction(UIAlertAction(title: NSLocalizedString("Continue", comment: ""), style: .default, handler: { _ in
|
alert.addAction(UIAlertAction(title: NSLocalizedString("Continue", comment: ""), style: .default, handler: { _ in
|
||||||
print("Going home")
|
print("Going home")
|
||||||
|
// Cell Shortcut
|
||||||
|
if self.context.shouldTurnOffData {
|
||||||
|
UIApplication.shared.open(shortcutURLonDelay, options: [:]) { _ in
|
||||||
|
print("Cell OFF Shortcut finished execution.")}
|
||||||
|
}
|
||||||
UIApplication.shared.perform(#selector(NSXPCConnection.suspend))
|
UIApplication.shared.perform(#selector(NSXPCConnection.suspend))
|
||||||
}))
|
}))
|
||||||
|
|
||||||
@@ -227,6 +234,10 @@ final class InstallAppOperation: ResultOperation<InstalledApp>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Cell Shortcut
|
||||||
|
if self.context.shouldTurnOffData {
|
||||||
|
UIApplication.shared.open(shortcutURLonDelay, options: [:]) { _ in print("Cell OFF Shortcut finished execution.")}
|
||||||
|
}
|
||||||
UIApplication.shared.perform(#selector(NSXPCConnection.suspend))
|
UIApplication.shared.perform(#selector(NSXPCConnection.suspend))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -123,6 +123,8 @@ class InstallAppOperationContext: AppOperationContext
|
|||||||
|
|
||||||
var alternateIconURL: URL?
|
var alternateIconURL: URL?
|
||||||
|
|
||||||
|
var shouldTurnOffData: Bool = false
|
||||||
|
|
||||||
// Non-nil when installing from a source.
|
// Non-nil when installing from a source.
|
||||||
@AsyncManaged
|
@AsyncManaged
|
||||||
var appVersion: AppVersion?
|
var appVersion: AppVersion?
|
||||||
|
|||||||
@@ -211,7 +211,6 @@ private extension PatchAppOperation
|
|||||||
#if targetEnvironment(simulator)
|
#if targetEnvironment(simulator)
|
||||||
throw PatchAppError.unsupportedOperatingSystemVersion(ProcessInfo.processInfo.operatingSystemVersion)
|
throw PatchAppError.unsupportedOperatingSystemVersion(ProcessInfo.processInfo.operatingSystemVersion)
|
||||||
#else
|
#else
|
||||||
|
|
||||||
let spotlightPath = "Applications/Spotlight.app/Spotlight"
|
let spotlightPath = "Applications/Spotlight.app/Spotlight"
|
||||||
let spotlightFileURL = self.patchDirectory.appendingPathComponent(spotlightPath)
|
let spotlightFileURL = self.patchDirectory.appendingPathComponent(spotlightPath)
|
||||||
|
|
||||||
|
|||||||
@@ -25,39 +25,63 @@ final class SendAppOperation: ResultOperation<()>
|
|||||||
self.progress.totalUnitCount = 1
|
self.progress.totalUnitCount = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
override func main()
|
override func main() {
|
||||||
{
|
|
||||||
super.main()
|
super.main()
|
||||||
|
|
||||||
if let error = self.context.error
|
if let error = self.context.error {
|
||||||
{
|
|
||||||
return self.finish(.failure(error))
|
return self.finish(.failure(error))
|
||||||
}
|
}
|
||||||
|
|
||||||
guard let resignedApp = self.context.resignedApp else {
|
guard let resignedApp = self.context.resignedApp else {
|
||||||
return self.finish(.failure(OperationError.invalidParameters("SendAppOperation.main: self.resignedApp is nil")))
|
return self.finish(.failure(OperationError.invalidParameters("SendAppOperation.main: self.resignedApp is nil")))
|
||||||
}
|
}
|
||||||
|
|
||||||
// self.context.resignedApp.fileURL points to the app bundle, but we want the .ipa.
|
let shortcutURLoff = URL(string: "shortcuts://run-shortcut?name=TurnOffData")!
|
||||||
|
|
||||||
let app = AnyApp(name: resignedApp.name, bundleIdentifier: self.context.bundleIdentifier, url: resignedApp.fileURL, storeApp: nil)
|
let app = AnyApp(name: resignedApp.name, bundleIdentifier: self.context.bundleIdentifier, url: resignedApp.fileURL, storeApp: nil)
|
||||||
let fileURL = InstalledApp.refreshedIPAURL(for: app)
|
let fileURL = InstalledApp.refreshedIPAURL(for: app)
|
||||||
|
|
||||||
print("AFC App `fileURL`: \(fileURL.absoluteString)")
|
print("AFC App `fileURL`: \(fileURL.absoluteString)")
|
||||||
|
|
||||||
|
// only when minimuxer is not ready and below 26.4 should we turn off data
|
||||||
|
if #available(iOS 26.4, *) {
|
||||||
|
context.shouldTurnOffData = false
|
||||||
|
} else if !isMinimuxerReady {
|
||||||
|
context.shouldTurnOffData = true
|
||||||
|
} else {
|
||||||
|
context.shouldTurnOffData = false
|
||||||
|
}
|
||||||
|
|
||||||
if let data = NSData(contentsOf: fileURL) {
|
if context.shouldTurnOffData {
|
||||||
do {
|
// Wait for Shortcut to Finish Before Proceeding
|
||||||
let bytes = Data(data)
|
UIApplication.shared.open(shortcutURLoff, options: [:]) { _ in
|
||||||
try yeetAppAFC(app.bundleIdentifier, bytes)
|
print("Shortcut finished execution. Proceeding with file transfer.")
|
||||||
self.progress.completedUnitCount += 1
|
|
||||||
self.finish(.success(()))
|
DispatchQueue.global().async {
|
||||||
} catch {
|
self.processFile(at: fileURL, for: app.bundleIdentifier)
|
||||||
self.finish(.failure(MinimuxerError.RwAfc))
|
}
|
||||||
self.progress.completedUnitCount += 1
|
|
||||||
self.finish(.success(()))
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
DispatchQueue.global().async {
|
||||||
|
self.processFile(at: fileURL, for: app.bundleIdentifier)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private func processFile(at fileURL: URL, for bundleIdentifier: String) {
|
||||||
|
guard let data = NSData(contentsOf: fileURL) else {
|
||||||
print("IPA doesn't exist????")
|
print("IPA doesn't exist????")
|
||||||
self.finish(.failure(OperationError(.appNotFound(name: resignedApp.name))))
|
return self.finish(.failure(OperationError(.appNotFound(name: bundleIdentifier))))
|
||||||
|
}
|
||||||
|
|
||||||
|
do {
|
||||||
|
let bytes = Data(data)
|
||||||
|
try yeetAppAFC(bundleIdentifier, bytes)
|
||||||
|
self.progress.completedUnitCount += 1
|
||||||
|
self.finish(.success(()))
|
||||||
|
} catch {
|
||||||
|
self.finish(.failure(MinimuxerError.RwAfc))
|
||||||
|
self.progress.completedUnitCount += 1
|
||||||
|
self.finish(.success(()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
1
AltStore/Resources/AltBackup.ipa
Symbolic link
1
AltStore/Resources/AltBackup.ipa
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../build/AltBackup.ipa
|
||||||
2
Dependencies/AltSign
vendored
2
Dependencies/AltSign
vendored
Submodule Dependencies/AltSign updated: 4819a7984f...7efe511440
2
Dependencies/minimuxer
vendored
2
Dependencies/minimuxer
vendored
Submodule Dependencies/minimuxer updated: 9035aa25ae...f9432a085b
3
Makefile
3
Makefile
@@ -374,8 +374,7 @@ ipa-altbackup: checkPaths copy-altbackup
|
|||||||
@echo " Copying from $(ALT_APP_SRC) into $(ALT_APP_PAYLOAD_DST)"
|
@echo " Copying from $(ALT_APP_SRC) into $(ALT_APP_PAYLOAD_DST)"
|
||||||
@cp -R -f "$(ALT_APP_SRC)/." "$(ALT_APP_PAYLOAD_DST)/$(TARGET_NAME)"
|
@cp -R -f "$(ALT_APP_SRC)/." "$(ALT_APP_PAYLOAD_DST)/$(TARGET_NAME)"
|
||||||
@pushd "$(ALT_APP_DST_ARCHIVE)" && zip -r "../../$(ALT_APP_IPA_DST)" Payload || popd
|
@pushd "$(ALT_APP_DST_ARCHIVE)" && zip -r "../../$(ALT_APP_IPA_DST)" Payload || popd
|
||||||
@cp -f "$(ALT_APP_IPA_DST)" AltStore/Resources
|
@echo " IPA created: build/AltBackup.ipa"
|
||||||
@echo " IPA created: AltStore/Resources/AltBackup.ipa"
|
|
||||||
|
|
||||||
clean-altbackup:
|
clean-altbackup:
|
||||||
@echo ""
|
@echo ""
|
||||||
|
|||||||
132
SideStore/IfManager.swift
Normal file
132
SideStore/IfManager.swift
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
//
|
||||||
|
// IfManager.swift
|
||||||
|
// AltStore
|
||||||
|
//
|
||||||
|
// Created by ny on 2/27/26.
|
||||||
|
// Copyright © 2026 SideStore. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import Network
|
||||||
|
|
||||||
|
fileprivate func uti(_ uint: UInt32) -> String? {
|
||||||
|
var buf = [CChar](repeating: 0, count: Int(NI_MAXHOST))
|
||||||
|
var addr = in_addr(s_addr: uint.bigEndian)
|
||||||
|
guard inet_ntop(AF_INET, &addr, &buf, UInt32(INET_ADDRSTRLEN)) != nil,
|
||||||
|
let str = String(utf8String: buf) else { return nil }
|
||||||
|
return str
|
||||||
|
}
|
||||||
|
|
||||||
|
fileprivate func socktouint(_ sock: inout sockaddr) -> UInt32 {
|
||||||
|
var buf = [CChar](repeating: 0, count: Int(NI_MAXHOST))
|
||||||
|
guard getnameinfo(&sock, socklen_t(sock.sa_len), &buf, socklen_t(buf.count), nil, socklen_t(0), NI_NUMERICHOST) == 0,
|
||||||
|
let name = String(utf8String: buf) else {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
var addr = in_addr()
|
||||||
|
guard name.withCString({ cString in
|
||||||
|
inet_pton(AF_INET, cString, &addr)
|
||||||
|
}) == 1 else { return 0 }
|
||||||
|
return addr.s_addr.bigEndian
|
||||||
|
}
|
||||||
|
|
||||||
|
public struct NetInfo: Hashable, CustomStringConvertible {
|
||||||
|
public let name: String
|
||||||
|
public let hostIP: String
|
||||||
|
public let destIP: String
|
||||||
|
public let maskIP: String
|
||||||
|
|
||||||
|
private let host: UInt32
|
||||||
|
private let dest: UInt32
|
||||||
|
private let mask: UInt32
|
||||||
|
|
||||||
|
init(name: String, host: UInt32, dest: UInt32, mask: UInt32) {
|
||||||
|
self.name = name
|
||||||
|
self.host = host
|
||||||
|
self.dest = dest
|
||||||
|
self.mask = mask
|
||||||
|
self.hostIP = uti(host) ?? "10.7.0.0"
|
||||||
|
self.destIP = uti(dest) ?? "10.7.0.1"
|
||||||
|
self.maskIP = uti(mask) ?? "255.255.255.0"
|
||||||
|
}
|
||||||
|
|
||||||
|
init?(_ ifaddr: ifaddrs) {
|
||||||
|
guard
|
||||||
|
let ianame = String(utf8String: ifaddr.ifa_name)
|
||||||
|
else { return nil }
|
||||||
|
|
||||||
|
let host = socktouint(&ifaddr.ifa_addr.pointee)
|
||||||
|
let dest = socktouint(&ifaddr.ifa_dstaddr.pointee)
|
||||||
|
let mask = socktouint(&ifaddr.ifa_netmask.pointee)
|
||||||
|
|
||||||
|
self.init(name: ianame, host: host, dest: dest, mask: mask)
|
||||||
|
}
|
||||||
|
|
||||||
|
// computed networking values (still numeric internally)
|
||||||
|
public var minIP: UInt32 { host & mask }
|
||||||
|
public var maxIP: UInt32 { host | ~mask }
|
||||||
|
|
||||||
|
public var minIPString: String { uti(minIP) ?? "nil" }
|
||||||
|
public var maxIPString: String { uti(maxIP) ?? "nil" }
|
||||||
|
|
||||||
|
public var description: String {
|
||||||
|
"\(name) | ip=\(hostIP) dest=\(destIP) mask=\(maskIP) range=\(minIPString)-\(maxIPString)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final class IfManager: Sendable {
|
||||||
|
public static let shared = IfManager()
|
||||||
|
nonisolated(unsafe) private(set) var addrs: Set<NetInfo> = Set()
|
||||||
|
|
||||||
|
private init() {
|
||||||
|
self.addrs = IfManager.query()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public func query() {
|
||||||
|
addrs = IfManager.query()
|
||||||
|
}
|
||||||
|
|
||||||
|
private static func query() -> Set<NetInfo> {
|
||||||
|
var addrs = Set<NetInfo>()
|
||||||
|
var head: UnsafeMutablePointer<ifaddrs>? = nil
|
||||||
|
guard getifaddrs(&head) == 0, let first = head else { return addrs }
|
||||||
|
defer { freeifaddrs(head) }
|
||||||
|
|
||||||
|
var cursor: UnsafeMutablePointer<ifaddrs>? = first
|
||||||
|
while let current = cursor {
|
||||||
|
// we only want v4 interfaces that aren't loopback and aren't masked 255.255.255.255
|
||||||
|
let entry = current.pointee
|
||||||
|
let flags = Int32(entry.ifa_flags)
|
||||||
|
|
||||||
|
let isIPv4 = entry.ifa_addr.pointee.sa_family == UInt8(AF_INET)
|
||||||
|
let isActive = (flags & (IFF_UP | IFF_RUNNING | IFF_LOOPBACK)) == (IFF_UP | IFF_RUNNING)
|
||||||
|
|
||||||
|
if isIPv4, isActive, let info = NetInfo(entry), info.maskIP != "255.255.255.255" {
|
||||||
|
addrs.insert(info)
|
||||||
|
}
|
||||||
|
|
||||||
|
cursor = entry.ifa_next
|
||||||
|
}
|
||||||
|
return addrs
|
||||||
|
}
|
||||||
|
|
||||||
|
private var nextLAN: NetInfo? {
|
||||||
|
addrs.first { $0.name.starts(with: "en") }
|
||||||
|
}
|
||||||
|
|
||||||
|
var nextProbableSideVPN: NetInfo? {
|
||||||
|
// try old 10.7.0.1 first, then fallback to next v4
|
||||||
|
// user should only be connected to StosVPN/LocalDevVPN
|
||||||
|
addrs.first {
|
||||||
|
$0.hostIP == "10.7.0.1" ||
|
||||||
|
$0.name.starts(with: "utun")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var sideVPNPatched: Bool {
|
||||||
|
nextLAN?.maskIP == nextProbableSideVPN?.maskIP &&
|
||||||
|
nextLAN?.maxIP == nextProbableSideVPN?.maxIP
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -13,14 +13,21 @@ var isMinimuxerReady: Bool {
|
|||||||
print("isMinimuxerReady property is always true on simulator")
|
print("isMinimuxerReady property is always true on simulator")
|
||||||
return true
|
return true
|
||||||
#else
|
#else
|
||||||
return minimuxer.ready()
|
IfManager.shared.query()
|
||||||
|
if #available(iOS 26.4, *) {
|
||||||
|
print("Running patched check")
|
||||||
|
return minimuxer.ready() && IfManager.shared.sideVPNPatched
|
||||||
|
} else {
|
||||||
|
return minimuxer.ready()
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
func minimuxerStartWithLogger(_ pairingFile: String,_ logPath: String,_ loggingEnabled: Bool) throws {
|
func minimuxerStartWithLogger(_ pairingFile: String, _ logPath: String, _ loggingEnabled: Bool) throws {
|
||||||
#if targetEnvironment(simulator)
|
#if targetEnvironment(simulator)
|
||||||
print("minimuxerStartWithLogger(\(pairingFile), \(logPath), \(loggingEnabled) is no-op on simulator")
|
print("minimuxerStartWithLogger(\(pairingFile), \(logPath), \(loggingEnabled)) is no-op on simulator")
|
||||||
#else
|
#else
|
||||||
|
print("minimuxerStartWithLogger(\(pairingFile), \(logPath), \(loggingEnabled))")
|
||||||
try minimuxer.startWithLogger(pairingFile, logPath, loggingEnabled)
|
try minimuxer.startWithLogger(pairingFile, logPath, loggingEnabled)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -95,6 +95,7 @@ def resolve_start_commit(last_successful: str):
|
|||||||
except Exception:
|
except Exception:
|
||||||
return first_commit()
|
return first_commit()
|
||||||
|
|
||||||
|
|
||||||
def generate_release_notes(last_successful, tag, branch):
|
def generate_release_notes(last_successful, tag, branch):
|
||||||
current = head_commit()
|
current = head_commit()
|
||||||
|
|
||||||
@@ -124,7 +125,12 @@ def generate_release_notes(last_successful, tag, branch):
|
|||||||
for m in messages:
|
for m in messages:
|
||||||
section += f"{fmt_msg(m)}\n"
|
section += f"{fmt_msg(m)}\n"
|
||||||
|
|
||||||
prev_authors = authors(branch)
|
if commit_exists(branch):
|
||||||
|
previous_range = branch
|
||||||
|
else:
|
||||||
|
previous_range = last_successful
|
||||||
|
|
||||||
|
prev_authors = authors(previous_range)
|
||||||
recent_authors = authors(f"{last_successful}..{current}")
|
recent_authors = authors(f"{last_successful}..{current}")
|
||||||
new_authors = recent_authors - prev_authors
|
new_authors = recent_authors - prev_authors
|
||||||
|
|
||||||
@@ -137,13 +143,26 @@ def generate_release_notes(last_successful, tag, branch):
|
|||||||
url = repo_url()
|
url = repo_url()
|
||||||
section += (
|
section += (
|
||||||
f"\n{HEADER_MARKER} Full Changelog: "
|
f"\n{HEADER_MARKER} Full Changelog: "
|
||||||
f"[{last_successful[:8]}...{current[:8]}]"
|
f"[{ref_display(last_successful)}...{ref_display(current)}]"
|
||||||
f"({url}/compare/{last_successful}...{current})\n"
|
f"({url}/compare/{last_successful}...{current})\n"
|
||||||
)
|
)
|
||||||
|
|
||||||
return section
|
return section
|
||||||
|
|
||||||
|
|
||||||
|
def ref_display(ref):
|
||||||
|
try:
|
||||||
|
tag = run(f'git describe --tags --exact-match "{ref}" 2>/dev/null || true').strip()
|
||||||
|
|
||||||
|
# allow only semantic version tags: X.Y.Z
|
||||||
|
if re.fullmatch(r'\d+\.\d+\.\d+', tag):
|
||||||
|
return tag
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
|
return ref[:8]
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------------------------------------
|
# ----------------------------------------------------------
|
||||||
# markdown update
|
# markdown update
|
||||||
# ----------------------------------------------------------
|
# ----------------------------------------------------------
|
||||||
@@ -216,7 +235,7 @@ def retrieve_tag(tag, file_path: Path):
|
|||||||
fr"^{TAG_MARKER} {re.escape(tag)}$",
|
fr"^{TAG_MARKER} {re.escape(tag)}$",
|
||||||
content,
|
content,
|
||||||
re.MULTILINE | re.IGNORECASE,
|
re.MULTILINE | re.IGNORECASE,
|
||||||
)
|
)
|
||||||
|
|
||||||
if not match:
|
if not match:
|
||||||
return ""
|
return ""
|
||||||
@@ -276,4 +295,4 @@ def main():
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|||||||
@@ -107,13 +107,13 @@ def main():
|
|||||||
gen_cmd = (
|
gen_cmd = (
|
||||||
f"python3 {script} "
|
f"python3 {script} "
|
||||||
f"{args.last_successful_commit} {args.release_tag} "
|
f"{args.last_successful_commit} {args.release_tag} "
|
||||||
f"--output-dir \"{notes_dir}\""
|
f'--output-dir "{notes_dir}"'
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
gen_cmd = (
|
gen_cmd = (
|
||||||
f"python3 {script} "
|
f"python3 {script} "
|
||||||
f"{args.short_commit} {args.release_tag} "
|
f"{args.short_commit} {args.release_tag} "
|
||||||
f"--output-dir \"{notes_dir}\""
|
f'--output-dir "{notes_dir}"'
|
||||||
)
|
)
|
||||||
|
|
||||||
sh(gen_cmd, cwd=repo_root)
|
sh(gen_cmd, cwd=repo_root)
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ from pathlib import Path
|
|||||||
import time
|
import time
|
||||||
import json
|
import json
|
||||||
import re
|
import re
|
||||||
|
from posix import getcwd
|
||||||
|
|
||||||
# REPO ROOT relative to script dir
|
# REPO ROOT relative to script dir
|
||||||
ROOT = Path(__file__).resolve().parents[2]
|
ROOT = Path(__file__).resolve().parents[2]
|
||||||
@@ -214,13 +215,13 @@ def tests_run(model):
|
|||||||
# ----------------------------------------------------------
|
# ----------------------------------------------------------
|
||||||
|
|
||||||
def encrypt_logs(name):
|
def encrypt_logs(name):
|
||||||
default_pwd = "12345"
|
pwd = getenv("BUILD_LOG_ZIP_PASSWORD")
|
||||||
pwd = getenv("BUILD_LOG_ZIP_PASSWORD", default_pwd)
|
cwd = getcwd()
|
||||||
|
if not pwd or not pwd.strip():
|
||||||
if pwd == default_pwd:
|
print("BUILD_LOG_ZIP_PASSWORD not set — logs will be uploaded UNENCRYPTED", file=sys.stderr)
|
||||||
print("Warning: BUILD_LOG_ZIP_PASSWORD not set, using fallback password", file=sys.stderr)
|
run(f'cd {cwd}/build/logs && zip -r {cwd}/{name}.zip *')
|
||||||
|
return
|
||||||
run(f'cd build/logs && zip -e -P "{pwd}" ../../{name}.zip *')
|
run(f'cd {cwd}/build/logs && zip -e -P "{pwd}" {cwd}/{name}.zip *')
|
||||||
|
|
||||||
# ----------------------------------------------------------
|
# ----------------------------------------------------------
|
||||||
# RELEASE NOTES
|
# RELEASE NOTES
|
||||||
@@ -244,22 +245,13 @@ def retrieve_release_notes(tag):
|
|||||||
# ----------------------------------------------------------
|
# ----------------------------------------------------------
|
||||||
# DEPLOY SOURCE.JSON
|
# DEPLOY SOURCE.JSON
|
||||||
# ----------------------------------------------------------
|
# ----------------------------------------------------------
|
||||||
|
def generate_metadata(release_tag, short_commit, marketing_version, channel, bundle_id, ipa_name, last_successful_commit=None):
|
||||||
def deploy(repo, source_json, release_tag, short_commit, marketing_version, channel, bundle_id, ipa_name, last_successful_commit=None):
|
|
||||||
repo = (ROOT / repo).resolve()
|
|
||||||
ipa_path = ROOT / ipa_name
|
ipa_path = ROOT / ipa_name
|
||||||
source_json_path = repo / source_json
|
|
||||||
metadata = 'source-metadata.json'
|
metadata = 'source-metadata.json'
|
||||||
|
|
||||||
if not repo.exists():
|
|
||||||
raise SystemExit(f"{repo} repo missing")
|
|
||||||
|
|
||||||
if not ipa_path.exists():
|
if not ipa_path.exists():
|
||||||
raise SystemExit(f"{ipa_path} missing")
|
raise SystemExit(f"{ipa_path} missing")
|
||||||
|
|
||||||
if not source_json_path.exists():
|
|
||||||
raise SystemExit(f"{source_json} missing inside repo")
|
|
||||||
|
|
||||||
cmd = (
|
cmd = (
|
||||||
f"python3 {SCRIPTS}/generate_source_metadata.py "
|
f"python3 {SCRIPTS}/generate_source_metadata.py "
|
||||||
f"--repo-root {ROOT} "
|
f"--repo-root {ROOT} "
|
||||||
@@ -274,12 +266,26 @@ def deploy(repo, source_json, release_tag, short_commit, marketing_version, chan
|
|||||||
f"--bundle-id {bundle_id}"
|
f"--bundle-id {bundle_id}"
|
||||||
)
|
)
|
||||||
|
|
||||||
# pass only if provided
|
|
||||||
if last_successful_commit:
|
if last_successful_commit:
|
||||||
cmd += f" --last-successful-commit {last_successful_commit}"
|
cmd += f" --last-successful-commit {last_successful_commit}"
|
||||||
|
|
||||||
run(cmd)
|
run(cmd)
|
||||||
|
|
||||||
|
def deploy(repo, source_json, release_tag, marketing_version):
|
||||||
|
repo = (ROOT / repo).resolve()
|
||||||
|
source_json_path = repo / source_json
|
||||||
|
metadata = 'source-metadata.json'
|
||||||
|
|
||||||
|
if not repo.exists():
|
||||||
|
raise SystemExit(f"{repo} repo missing")
|
||||||
|
|
||||||
|
if not (repo / ".git").exists():
|
||||||
|
print("Repo is not a git repository, skipping deploy", file=sys.stderr)
|
||||||
|
return
|
||||||
|
|
||||||
|
if not source_json_path.exists():
|
||||||
|
raise SystemExit(f"{source_json} missing inside repo")
|
||||||
|
|
||||||
run("git config user.name 'GitHub Actions'", check=False)
|
run("git config user.name 'GitHub Actions'", check=False)
|
||||||
run("git config user.email 'github-actions@github.com'", check=False)
|
run("git config user.email 'github-actions@github.com'", check=False)
|
||||||
|
|
||||||
@@ -288,7 +294,7 @@ def deploy(repo, source_json, release_tag, short_commit, marketing_version, chan
|
|||||||
run("git switch main || git switch -c main origin/main", cwd=repo)
|
run("git switch main || git switch -c main origin/main", cwd=repo)
|
||||||
run("git reset --hard origin/main", cwd=repo)
|
run("git reset --hard origin/main", cwd=repo)
|
||||||
# ------------------------------------------------------
|
# ------------------------------------------------------
|
||||||
|
|
||||||
max_attempts = 5
|
max_attempts = 5
|
||||||
for attempt in range(1, max_attempts + 1):
|
for attempt in range(1, max_attempts + 1):
|
||||||
if attempt > 1:
|
if attempt > 1:
|
||||||
@@ -311,21 +317,33 @@ def deploy(repo, source_json, release_tag, short_commit, marketing_version, chan
|
|||||||
else:
|
else:
|
||||||
raise SystemExit("Deploy push failed after retries")
|
raise SystemExit("Deploy push failed after retries")
|
||||||
|
|
||||||
def last_successful_commit(workflow, branch):
|
|
||||||
import json
|
def last_successful_commit(is_stable, tag=None):
|
||||||
|
is_stable = str(is_stable).lower() in ("1", "true", "yes")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
out = runAndGet(
|
if is_stable:
|
||||||
f'gh run list '
|
prev_tag = runAndGet(
|
||||||
f'--workflow "{workflow}" '
|
r'git tag --sort=-v:refname '
|
||||||
f'--json headSha,conclusion,headBranch'
|
r'| grep -E "^[0-9]+\.[0-9]+\.[0-9]+$" '
|
||||||
)
|
r'| sed -n "2p" || true'
|
||||||
|
).strip()
|
||||||
|
|
||||||
runs = json.loads(out)
|
if prev_tag:
|
||||||
|
return runAndGet(f'git rev-parse "{prev_tag}^{{commit}}"')
|
||||||
|
|
||||||
for r in runs:
|
return None # ← changed
|
||||||
if r.get("conclusion") == "success" and r.get("headBranch") == branch:
|
|
||||||
return r["headSha"]
|
if tag:
|
||||||
|
exists = subprocess.call(
|
||||||
|
f'git rev-parse -q --verify "refs/tags/{tag}"',
|
||||||
|
shell=True,
|
||||||
|
stdout=subprocess.DEVNULL,
|
||||||
|
stderr=subprocess.DEVNULL,
|
||||||
|
) == 0
|
||||||
|
|
||||||
|
if exists:
|
||||||
|
return runAndGet(f'git rev-parse "{tag}^{{commit}}"')
|
||||||
|
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
@@ -334,15 +352,13 @@ def last_successful_commit(workflow, branch):
|
|||||||
|
|
||||||
def upload_release(release_name, release_tag, commit_sha, repo, upstream_tag_recommended, is_stable=False):
|
def upload_release(release_name, release_tag, commit_sha, repo, upstream_tag_recommended, is_stable=False):
|
||||||
is_stable = str(is_stable).lower() in ("1", "true", "yes")
|
is_stable = str(is_stable).lower() in ("1", "true", "yes")
|
||||||
|
draft = False
|
||||||
|
prerelease = True
|
||||||
|
latest = False
|
||||||
|
|
||||||
if is_stable:
|
if is_stable:
|
||||||
draft = True # always create a draft for stable and let user publish release
|
|
||||||
update_tag = False
|
|
||||||
prerelease = False
|
prerelease = False
|
||||||
else:
|
latest = True
|
||||||
draft = False
|
|
||||||
update_tag = True # update existing
|
|
||||||
prerelease = True
|
|
||||||
|
|
||||||
token = getenv("GH_TOKEN")
|
token = getenv("GH_TOKEN")
|
||||||
if token:
|
if token:
|
||||||
@@ -370,19 +386,20 @@ def upload_release(release_name, release_tag, commit_sha, repo, upstream_tag_rec
|
|||||||
f"--output-dir {ROOT}"
|
f"--output-dir {ROOT}"
|
||||||
)
|
)
|
||||||
|
|
||||||
release_notes = re.sub(
|
if is_stable:
|
||||||
r'^\s*#{1,6}\s*what(?:\'?s|\s+is)?\s+(?:new|changed).*',
|
release_notes = re.sub(
|
||||||
"## What's Changed",
|
r'(?im)^[ \t]*#{1,6}[ \t]*what[’\']?s[ \t]+changed[ \t]*$',
|
||||||
release_notes,
|
"## What's Changed",
|
||||||
flags=re.IGNORECASE | re.MULTILINE,
|
release_notes,
|
||||||
)
|
flags=re.IGNORECASE | re.MULTILINE,
|
||||||
|
)
|
||||||
|
|
||||||
upstream_block = ""
|
upstream_block = ""
|
||||||
if upstream_tag_recommended and upstream_tag_recommended.strip():
|
if upstream_tag_recommended and upstream_tag_recommended.strip():
|
||||||
tag = upstream_tag_recommended.strip()
|
tag = upstream_tag_recommended.strip()
|
||||||
upstream_block = (
|
upstream_block = (
|
||||||
f"If you want to try out new features early but want a lower chance of bugs, "
|
f"If you want to try out new features early but want a lower chance of bugs, "
|
||||||
f"you can look at [SideStore {tag}]"
|
f"you can look at [{repo} {tag}]"
|
||||||
f"(https://github.com/{repo}/releases?q={tag}).\n\n"
|
f"(https://github.com/{repo}/releases?q={tag}).\n\n"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -398,18 +415,35 @@ def upload_release(release_name, release_tag, commit_sha, repo, upstream_tag_rec
|
|||||||
|
|
||||||
draft_flag = "--draft" if draft else ""
|
draft_flag = "--draft" if draft else ""
|
||||||
prerelease_flag = "--prerelease" if prerelease else ""
|
prerelease_flag = "--prerelease" if prerelease else ""
|
||||||
latest_flag = "" if update_tag else "--latest=false"
|
latest_flag = "--latest=true" if latest else ""
|
||||||
|
|
||||||
run(
|
# create release if it doesn't exist
|
||||||
f'gh release edit "{release_tag}" '
|
exists = subprocess.call(
|
||||||
f'--title "{release_name}" '
|
f'gh release view "{release_tag}"',
|
||||||
f'--notes-file "{body_file}" '
|
shell=True,
|
||||||
f'{draft_flag} {prerelease_flag} {latest_flag}'
|
cwd=ROOT,
|
||||||
)
|
stdout=subprocess.DEVNULL,
|
||||||
|
stderr=subprocess.DEVNULL,
|
||||||
|
) == 0
|
||||||
|
|
||||||
|
if exists:
|
||||||
|
run(
|
||||||
|
f'gh release edit "{release_tag}" '
|
||||||
|
f'--title "{release_name}" '
|
||||||
|
f'--notes-file "{body_file}" '
|
||||||
|
f'{draft_flag} {prerelease_flag} {latest_flag}'
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
run(
|
||||||
|
f'gh release create "{release_tag}" '
|
||||||
|
f'--title "{release_name}" '
|
||||||
|
f'--notes-file "{body_file}" '
|
||||||
|
f'{draft_flag} {prerelease_flag} {latest_flag}'
|
||||||
|
)
|
||||||
|
|
||||||
run(
|
run(
|
||||||
f'gh release upload "{release_tag}" '
|
f'gh release upload "{release_tag}" '
|
||||||
f'SideStore.ipa SideStore.dSYMs.zip encrypted-build-logs.zip '
|
f'SideStore.ipa SideStore.dSYMs.zip build-logs.zip '
|
||||||
f'--clobber'
|
f'--clobber'
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -483,20 +517,22 @@ COMMANDS = {
|
|||||||
# ----------------------------------------------------------
|
# ----------------------------------------------------------
|
||||||
# LOG ENCRYPTION
|
# LOG ENCRYPTION
|
||||||
# ----------------------------------------------------------
|
# ----------------------------------------------------------
|
||||||
"encrypt-build" : (lambda: encrypt_logs("encrypted-build-logs"), 0, ""),
|
"encrypt-build" : (lambda: encrypt_logs("build-logs"), 0, ""),
|
||||||
"encrypt-tests-build" : (lambda: encrypt_logs("encrypted-tests-build-logs"), 0, ""),
|
"encrypt-tests-build" : (lambda: encrypt_logs("tests-build-logs"), 0, ""),
|
||||||
"encrypt-tests-run" : (lambda: encrypt_logs("encrypted-tests-run-logs"), 0, ""),
|
"encrypt-tests-run" : (lambda: encrypt_logs("tests-run-logs"), 0, ""),
|
||||||
|
|
||||||
# ----------------------------------------------------------
|
# ----------------------------------------------------------
|
||||||
# RELEASE / DEPLOY
|
# RELEASE / DEPLOY
|
||||||
# ----------------------------------------------------------
|
# ----------------------------------------------------------
|
||||||
"last-successful-commit" : (last_successful_commit, 2, "<workflow_name> <branch>"),
|
"last-successful-commit" : (last_successful_commit, 1, "<is_stable> [tag]"),
|
||||||
"release-notes" : (release_notes, 1, "<tag>"),
|
"release-notes" : (release_notes, 1, "<tag>"),
|
||||||
"retrieve-release-notes" : (retrieve_release_notes, 1, "<tag>"),
|
"retrieve-release-notes" : (retrieve_release_notes, 1, "<tag>"),
|
||||||
"deploy" : (deploy, 9,
|
"generate-metadata" : (generate_metadata, 7,
|
||||||
"<repo> <source_json> <release_tag> <short_commit> <marketing_version> <channel> <bundle_id> <ipa_name> [last_successful_commit]"),
|
"<release_tag> <short_commit> <marketing_version> <channel> <bundle_id> <ipa_name> [last_successful_commit]"),
|
||||||
"upload-release" : (upload_release, 5, "<release_name> <release_tag> <commit_sha> <repo> <upstream_tag_recommended> [is_stable]"),
|
"deploy" : (deploy, 4,
|
||||||
}
|
"<repo> <source_json> <release_tag> <marketing_version>"),
|
||||||
|
"upload-release" : (upload_release, 5,
|
||||||
|
"<release_name> <release_tag> <commit_sha> <repo> <upstream_tag_recommended> [is_stable]"),}
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
def usage():
|
def usage():
|
||||||
@@ -522,9 +558,9 @@ def main():
|
|||||||
suffix = f" {arg_usage}" if arg_usage else ""
|
suffix = f" {arg_usage}" if arg_usage else ""
|
||||||
raise SystemExit(f"Usage: workflow.py {cmd}{suffix}")
|
raise SystemExit(f"Usage: workflow.py {cmd}{suffix}")
|
||||||
|
|
||||||
args = sys.argv[2:2 + argc]
|
args = sys.argv[2:]
|
||||||
|
|
||||||
result = func(*args) if argc else func()
|
result = func(*args) if args else func()
|
||||||
|
|
||||||
# ONLY real outputs go to stdout
|
# ONLY real outputs go to stdout
|
||||||
if result is not None:
|
if result is not None:
|
||||||
|
|||||||
@@ -75,6 +75,10 @@
|
|||||||
{
|
{
|
||||||
"identifier": "thatstel.la.altsource",
|
"identifier": "thatstel.la.altsource",
|
||||||
"sourceURL": "https://alt.thatstel.la/"
|
"sourceURL": "https://alt.thatstel.la/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"identifier": "com.deliacheminot.mona",
|
||||||
|
"sourceURL": "https://raw.githubusercontent.com/delia-cheminot/mona-hrt/refs/heads/main/ios_source.json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"sources": [
|
"sources": [
|
||||||
@@ -148,6 +152,10 @@
|
|||||||
{
|
{
|
||||||
"identifier": "thatstel.la.altsource",
|
"identifier": "thatstel.la.altsource",
|
||||||
"sourceURL": "https://alt.thatstel.la/"
|
"sourceURL": "https://alt.thatstel.la/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"identifier": "com.deliacheminot.mona",
|
||||||
|
"sourceURL": "https://raw.githubusercontent.com/delia-cheminot/mona-hrt/refs/heads/main/ios_source.json"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user