Compare commits

..

7 Commits

Author SHA1 Message Date
Joseph Mattello
e9d3060df7 Swift PM switch roxas fork
Signed-off-by: Joseph Mattello <mail@joemattiello.com>
2023-02-26 21:27:42 -05:00
Joseph Mattello
c59043068e Package.swift Roxas use SideStore port
Signed-off-by: Joseph Mattello <mail@joemattiello.com>
2023-02-26 21:27:42 -05:00
Joseph Mattello
65c43d683c Package.swift builds but errors
Signed-off-by: Joseph Mattello <mail@joemattiello.com>
2023-02-26 21:27:42 -05:00
Joseph Mattello
9e6147c860 Add Package.swift for Danger
Signed-off-by: Joseph Mattello <mail@joemattiello.com>
2023-02-26 21:27:42 -05:00
Joseph Mattello
b3074cadf9 Add Danger github action
Signed-off-by: Joseph Mattello <mail@joemattiello.com>
2023-02-26 21:27:42 -05:00
Joseph Mattello
9c5c597ce6 Add Dangerfile copied from Provenance 2023-02-26 21:27:42 -05:00
Joseph Mattello
977a452605 Add Dangerfile.swift
Signed-off-by: Joseph Mattello <mail@joemattiello.com>
2023-02-26 21:27:40 -05:00
21 changed files with 467 additions and 67 deletions

View File

@@ -41,18 +41,12 @@ jobs:
- name: Convert to IPA - name: Convert to IPA
run: make ipa run: make ipa
- name: Upload SideStore.ipa Artifact - name: Upload Artifact
uses: actions/upload-artifact@v3.1.0 uses: actions/upload-artifact@v3.1.0
with: with:
name: SideStore.ipa name: SideStore.ipa
path: SideStore.ipa path: SideStore.ipa
- name: Upload *.dSYM Artifact
uses: actions/upload-artifact@v3.1.0
with:
name: SideStore-dSYM
path: ./*.dSYM/
- name: Get version - name: Get version
id: version id: version
run: echo "version=$(grep MARKETING_VERSION Build.xcconfig | sed -e "s/MARKETING_VERSION = //g")" >> $GITHUB_OUTPUT run: echo "version=$(grep MARKETING_VERSION Build.xcconfig | sed -e "s/MARKETING_VERSION = //g")" >> $GITHUB_OUTPUT

13
.github/workflows/danger.yml vendored Normal file
View File

@@ -0,0 +1,13 @@
name: "Danger Swift"
on: [pull_request]
jobs:
build:
name: Danger JS
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Danger Swift
uses: danger/swift@2.0.3
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -50,18 +50,12 @@ jobs:
- name: Convert to IPA - name: Convert to IPA
run: make ipa run: make ipa
- name: Upload SideStore.ipa Artifact - name: Upload Artifact
uses: actions/upload-artifact@v3.1.0 uses: actions/upload-artifact@v3.1.0
with: with:
name: SideStore.ipa name: SideStore.ipa
path: SideStore.ipa path: SideStore.ipa
- name: Upload *.dSYM Artifact
uses: actions/upload-artifact@v3.1.0
with:
name: SideStore-dSYM
path: ./*.dSYM/
- name: Get version - name: Get version
id: version id: version
run: echo "version=$(grep MARKETING_VERSION Build.xcconfig | sed -e "s/MARKETING_VERSION = //g")" >> $GITHUB_OUTPUT run: echo "version=$(grep MARKETING_VERSION Build.xcconfig | sed -e "s/MARKETING_VERSION = //g")" >> $GITHUB_OUTPUT

View File

@@ -39,14 +39,8 @@ jobs:
- name: Convert to IPA - name: Convert to IPA
run: make ipa run: make ipa
- name: Upload SideStore.ipa Artifact - name: Upload Artifact
uses: actions/upload-artifact@v3.1.0 uses: actions/upload-artifact@v3.1.0
with: with:
name: SideStore.ipa name: SideStore.ipa
path: SideStore.ipa path: SideStore.ipa
- name: Upload *.dSYM Artifact
uses: actions/upload-artifact@v3.1.0
with:
name: SideStore-dSYM
path: ./*.dSYM/

View File

@@ -41,18 +41,12 @@ jobs:
- name: Convert to IPA - name: Convert to IPA
run: make ipa run: make ipa
- name: Upload SideStore.ipa Artifact - name: Upload Artifact
uses: actions/upload-artifact@v3.1.0 uses: actions/upload-artifact@v3.1.0
with: with:
name: SideStore.ipa name: SideStore.ipa
path: SideStore.ipa path: SideStore.ipa
- name: Upload *.dSYM Artifact
uses: actions/upload-artifact@v3.1.0
with:
name: SideStore-dSYM
path: ./*.dSYM/
- name: Get version - name: Get version
id: version id: version
run: echo "version=$(grep MARKETING_VERSION Build.xcconfig | sed -e "s/MARKETING_VERSION = //g")" >> $GITHUB_OUTPUT run: echo "version=$(grep MARKETING_VERSION Build.xcconfig | sed -e "s/MARKETING_VERSION = //g")" >> $GITHUB_OUTPUT

4
.gitignore vendored
View File

@@ -35,10 +35,10 @@ xcuserdata
## AppCode specific ## AppCode specific
.idea/ .idea/
.build
Payload/ Payload/
SideStore.ipa SideStore.ipa
*.dSYM
Dependencies/.*-prebuilt-fetch-* Dependencies/.*-prebuilt-fetch-*
Dependencies/minimuxer/* Dependencies/minimuxer/*
Dependencies/em_proxy/* Dependencies/em_proxy/*

View File

@@ -1,3 +1,3 @@
#include "Build.xcconfig" #include "Build.xcconfig"
PRODUCT_BUNDLE_IDENTIFIER = $(PRODUCT_BUNDLE_IDENTIFIER) PRODUCT_BUNDLE_IDENTIFIER = $(ORG_PREFIX).$(PRODUCT_NAME)

View File

@@ -14,7 +14,7 @@
<key>ALTPairingFile</key> <key>ALTPairingFile</key>
<string>&lt;insert pairing file here&gt;</string> <string>&lt;insert pairing file here&gt;</string>
<key>ALTAnisetteURL</key> <key>ALTAnisetteURL</key>
<string>https://ani.sidestore.io</string> <string>https://sideloadly.io/anisette/irGb3Quww8zrhgqnzmrx</string>
<key>CFBundleDevelopmentRegion</key> <key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string> <string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDocumentTypes</key> <key>CFBundleDocumentTypes</key>

View File

@@ -120,45 +120,45 @@ enum OperationError: LocalizedError
func minimuxer_to_operation(code: Int32) -> OperationError { func minimuxer_to_operation(code: Int32) -> OperationError {
switch code { switch code {
case 1: case -1:
return OperationError.noDevice return OperationError.noDevice
case 2: case -2:
return OperationError.createService(name: "debug") return OperationError.createService(name: "debug")
case 3: case -3:
return OperationError.createService(name: "instproxy") return OperationError.createService(name: "instproxy")
case 4: case -4:
return OperationError.getFromDevice(name: "installed apps") return OperationError.getFromDevice(name: "installed apps")
case 5: case -5:
return OperationError.getFromDevice(name: "path to the app") return OperationError.getFromDevice(name: "path to the app")
case 6: case -6:
return OperationError.getFromDevice(name: "bundle path") return OperationError.getFromDevice(name: "bundle path")
case 7: case -7:
return OperationError.setArgument(name: "max packet") return OperationError.setArgument(name: "max packet")
case 8: case -8:
return OperationError.setArgument(name: "working directory") return OperationError.setArgument(name: "working directory")
case 9: case -9:
return OperationError.setArgument(name: "argv") return OperationError.setArgument(name: "argv")
case 10: case -10:
return OperationError.getFromDevice(name: "launch success") return OperationError.getFromDevice(name: "launch success")
case 11: case -11:
return OperationError.detach return OperationError.detach
case 12: case -12:
return OperationError.functionArguments return OperationError.functionArguments
case 13: case -13:
return OperationError.createService(name: "AFC") return OperationError.createService(name: "AFC")
case 14: case -14:
return OperationError.afc return OperationError.afc
case 15: case -15:
return OperationError.install return OperationError.install
case 16: case -16:
return OperationError.uninstall return OperationError.uninstall
case 17: case -17:
return OperationError.createService(name: "misagent") return OperationError.createService(name: "misagent")
case 18: case -18:
return OperationError.profileInstall return OperationError.profileInstall
case 19: case -19:
return OperationError.profileInstall return OperationError.profileInstall
case 20: case -20:
return OperationError.noConnection return OperationError.noConnection
default: default:
return OperationError.unknown return OperationError.unknown

View File

@@ -16,13 +16,15 @@
<key>Key</key> <key>Key</key>
<string>customAnisetteURL</string> <string>customAnisetteURL</string>
<key>DefaultValue</key> <key>DefaultValue</key>
<string>https://ani.sidestore.io</string> <string>http://ani.sidestore.io</string>
<key>Titles</key> <key>Titles</key>
<array> <array>
<string>SideStore</string> <string>SideStore</string>
<string>Macley (US)</string> <string>Macley (US)</string>
<string>Macley (DE)</string> <string>Macley (DE)</string>
<string>DrPudding</string> <string>DrPudding</string>
<string>jkcoxson (AltServer)</string>
<string>jkcoxson (Provision)</string>
<string>Sideloadly</string> <string>Sideloadly</string>
<string>Nick</string> <string>Nick</string>
<string>Jawshoeadan</string> <string>Jawshoeadan</string>
@@ -30,10 +32,12 @@
</array> </array>
<key>Values</key> <key>Values</key>
<array> <array>
<string>https://ani.sidestore.io</string> <string>http://ani.sidestore.io</string>
<string>http://us1.sternserv.tech</string> <string>http://us1.sternserv.tech</string>
<string>http://de1.sternserv.tech</string> <string>http://de1.sternserv.tech</string>
<string>https://sign.rheaa.xyz</string> <string>https://sign.rheaa.xyz</string>
<string>http://jkcoxson.com:2095</string>
<string>http://jkcoxson.com:2052</string>
<string>https://sideloadly.io/anisette/irGb3Quww8zrhgqnzmrx</string> <string>https://sideloadly.io/anisette/irGb3Quww8zrhgqnzmrx</string>
<string>http://45.33.29.114</string> <string>http://45.33.29.114</string>
<string>https://anisette.jawshoeadan.me</string> <string>https://anisette.jawshoeadan.me</string>

View File

@@ -1,8 +1,8 @@
// Configuration settings file format documentation can be found at: // Configuration settings file format documentation can be found at:
// https://help.apple.com/xcode/#/dev745c5c974 // https://help.apple.com/xcode/#/dev745c5c974
MARKETING_VERSION = 0.3.2 MARKETING_VERSION = 0.3.0
CURRENT_PROJECT_VERSION = 3050 CURRENT_PROJECT_VERSION = 3020
// Vars to be overwritten by `CodeSigning.xcconfig` if exists // Vars to be overwritten by `CodeSigning.xcconfig` if exists
DEVELOPMENT_TEAM = S32Z3HMYVQ DEVELOPMENT_TEAM = S32Z3HMYVQ

137
Dangerfile.swift Normal file
View File

@@ -0,0 +1,137 @@
import Danger
import Foundation
// import SwiftLint
let danger = Danger()
// fileImport: DangerfileExtensions/ChangelogCheck.swift
// checkChangelog()
// Add a CHANGELOG entry for app changes
let hasChangelog = danger.git.modifiedFiles.contains("Changelog.md")
let isTrivial = (danger.github.pullRequest.body + danger.github.pullRequest.title).contains("#trivial")
if (!hasChangelog && !isTrivial) {
warn("Please add a changelog entry for your changes.")
}
// PR Too large
if danger.git.createdFiles.count + danger.git.modifiedFiles.count - danger.git.deletedFiles.count > 600 {
warn("Big PR, try to keep changes smaller if you can")
}
// Check copyright
let swiftFilesWithCopyright = danger.git.createdFiles.filter {
$0.fileType == .swift
&& danger.utils.readFile($0).contains("// Created by")
}
if !swiftFilesWithCopyright.isEmpty {
let files = swiftFilesWithCopyright.joined(separator: ", ")
warn("In Danger JS we don't include copyright headers, found them in: \(files)")
}
// # This is swiftlint plugin. More info: https://github.com/ashfurrow/danger-swiftlint
// #
// # This lints all Swift files and leave comments in PR if
// # there is any issue with linting
let filesToLint = (danger.git.modifiedFiles + danger.git.createdFiles) // .filter { !$0.contains("Documentation/") }
SwiftLint.lint(.files(filesToLint), inline: true)
// Support running via `danger local`
if danger.github != nil {
// These checks only happen on a PR
if danger.github.pullRequest.title.contains("WIP") {
warn("PR is classed as Work in Progress")
}
}
if github.pr_title.contains("WIP") {
warn("PR is classed as Work in Progress")
}
if git.commits.any {
return $0.message.contains("Merge branch '\(github.branch_for_base)'")
} {
fail("Please rebase to get rid of the merge commits in this PR ")
}
if github.pr_body.length > 1000 {
warn("PR body is too long")
}
if github.pr_body.length < 5 {
fail("PR body is too short")
}
let has_app_changes = !git.modified_files.any { $0.contains("AltStore") }
let has_altstorecore_changes = !git.modified_files.any { $0.contains("AltStoreCore") }
// let has_support_test_changes = !git.modified_files.any { $0.contains("AltStoreCore
// Tests") }
// let has_library_changes = !git.modified_files.any { $0.contains("PVLibrary") }
// let has_library_test_changes = !git.modified_files.any { $0.contains("PVLibrary Tests") }
// If changes are more than 10 lines of code, tests need to be updated too
// if (has_core_changes && !has_core_test_changes) ||
// (has_coreui_changes && !has_coreui_test_changes)) &&
// git.lines_of_code > 10 {
// fail("Tests were not updated", sticky: false)
// }
// Info.plist file shouldn't change often. Leave warning if it changes.
let is_plist_change = git.modified_files.any { $0.contains("Info.plist") }
if !is_plist_change
// warn "A Plist was changed"
warn("Plist changed, don't forget to localize your plist values")
end
// gemfile_updated = !git.modified_files.grep(/Gemfile$/).empty?
// # Leave warning, if Gemfile changes
// if gemfile_updated
// warn "The `Gemfile` was updated"
// end
// import xcodebuild
// xcodebuild.json_file = "./fastlane/reports/xcpretty-json-formatter-results.json"
// xcodebuild.parse_warnings() // returns number of warnings
// xcodebuild.parse_errors() // returns number of errors
// // xcodebuild.parse_errors(errors: danger.github.pull_request.body)
// xcodebuild.parse_tests() // returns number of test failures
// xcodebuild.perfect_build() // returns a bool indicating if the build was perfect
func checkSwiftVersions() {
SwiftChecks.check(
files: [
VersionFile(
path: "./\(projectName).xcodeproj/project.pbxproj",
interpreter: .regex("SWIFT_VERSION = (.*);")
),
VersionFile(
path: "./\(projectName).podspec",
interpreter: .regex("\\.swift_version\\s*=\\s*\"(.*)\"")
),
],
versionKind: "Swift"
)
}
func checkProjectVersions() {
SwiftChecks.check(
fileProviders: [
InfoPlistFileProvider(
discoveryMethod: .searchDirectory("./Sources", fileNames: ["Info.plist"]),
plistKey: .versionNumber,
projectFilePath: "./\(projectName).xcodeproj"
),
],
files: [
VersionFile(path: "./\(projectName).podspec", interpreter: .regex("\\.version\\s*=\\s*\"(.*)\"")),
],
versionKind: "framework"
)
}
// checkProjectVersions()
// checkSwiftVersions

View File

@@ -165,8 +165,7 @@ build:
AD_HOC_CODE_SIGNING_ALLOWED=YES \ AD_HOC_CODE_SIGNING_ALLOWED=YES \
CODE_SIGNING_ALLOWED=NO \ CODE_SIGNING_ALLOWED=NO \
DEVELOPMENT_TEAM=XYZ0123456 \ DEVELOPMENT_TEAM=XYZ0123456 \
ORG_IDENTIFIER=com.SideStore \ ORG_IDENTIFIER=com.SideStore
DWARF_DSYM_FOLDER_PATH="."
fakesign: fakesign:
rm -rf archive.xcarchive/Products/Applications/SideStore.app/Frameworks/AltStoreCore.framework/Frameworks/ rm -rf archive.xcarchive/Products/Applications/SideStore.app/Frameworks/AltStoreCore.framework/Frameworks/

61
Package.resolved Normal file
View File

@@ -0,0 +1,61 @@
{
"object": {
"pins": [
{
"package": "Logger",
"repositoryURL": "https://github.com/shibapm/Logger",
"state": {
"branch": null,
"revision": "53c3ecca5abe8cf46697e33901ee774236d94cce",
"version": "0.2.3"
}
},
{
"package": "OctoKit",
"repositoryURL": "https://github.com/nerdishbynature/octokit.swift",
"state": {
"branch": null,
"revision": "f762f1566f7cd0e683b9329f169c28ab6ef993cc",
"version": "0.12.0"
}
},
{
"package": "RequestKit",
"repositoryURL": "https://github.com/nerdishbynature/RequestKit.git",
"state": {
"branch": null,
"revision": "8b0258ea2a4345cbcac90509b764faacea12efb0",
"version": "3.2.1"
}
},
{
"package": "Roxas",
"repositoryURL": "https://github.com/SideStore/Roxas.git",
"state": {
"branch": "swiftpm",
"revision": "fe142efb8b3e0330802aba3f44f508f712c0679f",
"version": null
}
},
{
"package": "danger-swift",
"repositoryURL": "https://github.com/danger/swift.git",
"state": {
"branch": null,
"revision": "579323889f26e6fb1ddb2cc5d98b1ab698bd2578",
"version": "3.14.2"
}
},
{
"package": "Version",
"repositoryURL": "https://github.com/mxcl/Version",
"state": {
"branch": null,
"revision": "1fe824b80d89201652e7eca7c9252269a1d85e25",
"version": "2.0.1"
}
}
]
},
"version": 1
}

212
Package.swift Normal file
View File

@@ -0,0 +1,212 @@
// swift-tools-version:5.6
import PackageDescription
// Version number can be found in Source/Danger/Danger.swift
// switch to false when release
let isDevelop = true
let devProducts: [Product] = isDevelop
? [
.library(name: "DangerDeps", type: .dynamic, targets: ["Danger-Swift"])
] : []
let devDependencies: [Package.Dependency] = isDevelop
? [
// .package(url: "https://github.com/shibapm/Komondor", from: "1.1.4"),
.package(url: "https://github.com/nicklockwood/SwiftFormat", from: "0.50.7"),
.package(url: "https://github.com/Realm/SwiftLint", branch: "main"),
.package(url: "https://github.com/pointfreeco/swift-snapshot-testing.git", from: "1.10.0"),
// .package(url: "https://github.com/shibapm/Rocket", from: "1.2.1")
] : []
let devTargets: [Target] = isDevelop
? [
.testTarget(name: "DangerTests",
dependencies: [
"Danger",
"DangerFixtures",
.product(name: "SnapshotTesting", package: "swift-snapshot-testing")
]),
.testTarget(name: "RunnerLibTests",
dependencies: [
"RunnerLib",
.product(name: "SnapshotTesting", package: "swift-snapshot-testing")
], exclude: ["__Snapshots__"]),
.testTarget(name: "DangerDependenciesResolverTests",
dependencies: [
"DangerDependenciesResolver",
.product(name: "SnapshotTesting", package: "swift-snapshot-testing")
],
exclude: ["__Snapshots__"]),
]
: []
let package = Package(
name: "danger-swift",
products: [
// .library(name: "DangerDeps[SideStore]", type: .dynamic, targets: ["DangerDependencies"]), // dev
.library(name: "SideStore", targets: ["SideStore", "SideStore-ObjC"]),
.library(name: "AltStoreCore", targets: ["AltStoreCore"]),
.library(name: "libimobiledevice", targets: ["libimobiledevice"]),
.library(name: "EmotionalDamage", targets: ["EmotionalDamage"]),
.library(name: "minimuxer", targets: ["minimuxer"]),
],
.library(name: "Danger", targets: ["Danger"]),
.library(name: "DangerFixtures", targets: ["DangerFixtures"]),
.executable(name: "danger-swift", targets: ["Runner"]),
] + devProducts,
dependencies: [
.package(url: "https://github.com/danger/swift.git", from: "3.0.0"), // dev
.package(url: "https://github.com/SideStore/Roxas.git", branch: "swiftpm"),
// Danger Plugins
// .package(url: "https://github.com/username/DangerPlugin.git", from: "0.1.0") // dev
],
.package(url: "https://github.com/shibapm/Logger", from: "0.1.0"),
.package(url: "https://github.com/mxcl/Version", from: "2.0.1"),
.package(name: "OctoKit", url: "https://github.com/nerdishbynature/octokit.swift", from: "0.12.0"),
] + devDependencies,
targets: [
// .target(name: "DangerDependencies", dependencies: ["Danger", "DangerPlugin"], path: "Dependencies/Danger"), // dev
.target(name: "SideStore",
dependencies: ["SideStore-ObjC", "AltStoreCore", "EmotionalDamage", "libimobiledevice", "minimuxer", "em_proxy"],
path: "AltStore",
exclude: ["Operations/Patch App/ALTAppPatcher.m"]),
.target(name: "SideStore-ObjC",
dependencies: ["Roxas"],
path: "AltStore",
sources: ["Operations/Patch App/ALTAppPatcher.m"],
publicHeadersPath: "Operations/Patch App/"),
.target(name: "AltStoreCore",
dependencies: ["AltStoreCore-ObjC"],
path: "AltStoreCore",
exclude: [
"Types/ALTAppPermission.m",
"Types/ALTPatreonBenefitType.m",
"Types/ALTSourceUserInfoKey.m"
]),
.target(name: "AltStoreCore-ObjC",
dependencies: ["Roxas"],
path: "AltStoreCore",
sources: ["Types/ALTAppPermission.m", "Types/ALTPatreonBenefitType.m", "Types/ALTSourceUserInfoKey.m"],
publicHeadersPath: "Types"),
.target(name: "EmotionalDamage",
dependencies: [""],
path: "EmotionalDamage"),
.target(name: "libimobiledevice",
dependencies: [""],
path: "Dependencies/libimobiledevice/src",
publicHeadersPath: "Dependencies/libimobiledevice/include/libimobiledevice"),
.binaryTarget( name: "minimuxer",
path: "Dependencies/minimuxer/target/release/minimuxer.xcframework"),
.binaryTarget( name: "em_proxy",
path: "Dependencies/em_proxy/target/release/em_proxy.xcframework"),
// name: "SideStore",
// // dependencies: [
// // .product(name: "RxSwift", package: "RxSwift")
// // ],
// path: "AltStore",
// exclude: ["Info.plist", "*.m"],
// cSettings: cSettings,
// cxxSettings: cxxSettings),
// .target(
// name: "PVLibrary-ObjC",
// // dependencies: [
// // .product(name: "RxSwift", package: "RxSwift")
// // ],
// path: "PVLibrary",
// exclude: ["Info.plist", "*.swift"],
// cSettings: cSettings,
// cxxSettings: cxxSettings),
]
.target(name: "Danger-Swift", dependencies: ["Danger"], plugins: [.plugin(name: "SwiftLintPlugin", package: "SwiftLint")]),
.target(name: "DangerShellExecutor"),
.target(name: "DangerDependenciesResolver", dependencies: ["DangerShellExecutor", "Version", "Logger"]),
.target(name: "Danger", dependencies: ["OctoKit", "Logger", "DangerShellExecutor"]),
.target(name: "RunnerLib", dependencies: ["Logger", "DangerShellExecutor", "Version"]),
.executableTarget(name: "Runner", dependencies: ["RunnerLib", "Logger", "DangerDependenciesResolver"]),
.target(name: "DangerFixtures", dependencies: ["Danger"]),
] + devTargets
)
// #if canImport(PackageConfig)
// import PackageConfig
// let config = PackageConfiguration([
// "komondor": [
// "pre-push": "swift test",
// "pre-commit": [
// "swift test",
// "swift test --generate-linuxmain",
// "swift run swiftformat .",
// "swift run swiftlint autocorrect --path Sources/",
// "git add ."
// ]
// ],
// "rocket": [
// "pre_release_checks": [
// "clean_git"
// ],
// "steps": [
// "Scripts/update_makefile.sh",
// "Scripts/update_danger_version.sh",
// "Scripts/update_changelog.sh",
// "Scripts/change_is_develop.sh false",
// "git_add",
// "commit",
// "tag",
// "push",
// "Scripts/change_is_develop.sh true",
// "git_add",
// ["commit": ["message": "Enable dev depdendencies"]],
// "push",
// "Scripts/create_homebrew_tap.sh"
// ]
// ]
// ]).write()
// #endif
// let package = Package(
// name: "SideStore",
// platforms: [
// .iOS(.v13),
// .tvOS(.v13),
// ],
// products: [
// .library(name: "DangerDeps[SideStore]", type: .dynamic, targets: ["DangerDependencies"]) // dev
// ],
// dependencies: [
// .package(url: "https://github.com/danger/swift.git", from: "3.0.0") // dev
// // Danger Plugins
// // .package(url: "https://github.com/username/DangerPlugin.git", from: "0.1.0") // dev
// ],
// targets: [
// .target(name: "DangerDependencies", dependencies: ["Danger", "DangerPlugin"]) // dev
// // name: "SideStore",
// // // dependencies: [
// // // .product(name: "RxSwift", package: "RxSwift")
// // // ],
// // path: "AltStore",
// // exclude: ["Info.plist", "*.m"],
// // cSettings: cSettings,
// // cxxSettings: cxxSettings),
// // .target(
// // name: "PVLibrary-ObjC",
// // // dependencies: [
// // // .product(name: "RxSwift", package: "RxSwift")
// // // ],
// // path: "PVLibrary",
// // exclude: ["Info.plist", "*.swift"],
// // cSettings: cSettings,
// // cxxSettings: cxxSettings),
// ]
// )

View File

@@ -4,10 +4,7 @@
[![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0) [![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://makeapullrequest.com) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://makeapullrequest.com)
[![Nightly SideStore build](https://github.com/SideStore/SideStore/actions/workflows/nightly.yml/badge.svg)](https://github.com/SideStore/SideStore/actions/workflows/nightly.yml) [![Build and Upload SideStore](https://github.com/SideStore/SideStore/actions/workflows/build.yml/badge.svg)](https://github.com/SideStore/SideStore/actions/workflows/build.yml)
[![.github/workflows/beta.yml](https://github.com/SideStore/SideStore/actions/workflows/beta.yml/badge.svg)](https://github.com/SideStore/SideStore/actions/workflows/beta.yml)
![Alt](https://repobeats.axiom.co/api/embed/3a329ce95955690b9a9366f8d5598626a847d96c.svg "Repobeats analytics image")
SideStore is an iOS application that allows you to sideload apps onto your iOS device with just your Apple ID. SideStore resigns apps with your personal development certificate, and then uses a [specially designed VPN](https://github.com/jkcoxson/Secret-Tunnel) in order to trick iOS into installing them. SideStore will periodically "refresh" your apps in the background, to keep their normal 7-day development period from expiring. SideStore is an iOS application that allows you to sideload apps onto your iOS device with just your Apple ID. SideStore resigns apps with your personal development certificate, and then uses a [specially designed VPN](https://github.com/jkcoxson/Secret-Tunnel) in order to trick iOS into installing them. SideStore will periodically "refresh" your apps in the background, to keep their normal 7-day development period from expiring.
@@ -15,6 +12,7 @@ SideStore's goal is to provide an untethered sideloading experience. It's a comm
(Contributions are welcome! 🙂) (Contributions are welcome! 🙂)
## Requirements ## Requirements
- Xcode 14 - Xcode 14
- iOS 14+ - iOS 14+