Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 18 additions & 18 deletions .github/workflows/deploy-pre-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,26 @@ on:
workflow_dispatch:
inputs:
versionTag:
description: 'Version tag'
description: "Version tag"
required: true
type: string
releaseTitle:
description: 'Release title'
description: "Release title"
required: true
type: string
releaseDescription:
description: 'Release description'
description: "Release description"
required: true
type: string
env:
DEVELOPER_DIR: /Applications/Xcode_26.0.1.app
SCHEME_NAME: 'EhPanda'
ALTSTORE_JSON_PATH: './AltStore.json'
BUILDS_PATH: '/tmp/action-builds'
PAYLOAD_PATH: '/tmp/action-builds/Payload'
THIN_PAYLOAD_SCRIPT_PATH: './actions-tool/thin-payload.sh'
ARCHIVE_PATH: '/tmp/action-builds/EhPanda.xcarchive'
IPA_OUTPUT_PATH: '/tmp/action-builds/EhPanda.ipa'
SCHEME_NAME: "EhPanda"
ALTSTORE_JSON_PATH: "./AltStore.json"
BUILDS_PATH: "/tmp/action-builds"
PAYLOAD_PATH: "/tmp/action-builds/Payload"
THIN_PAYLOAD_SCRIPT_PATH: "./actions-tool/thin-payload.sh"
ARCHIVE_PATH: "/tmp/action-builds/EhPanda.xcarchive"
IPA_OUTPUT_PATH: "/tmp/action-builds/EhPanda.ipa"

jobs:
Deploy:
Expand All @@ -34,7 +34,7 @@ jobs:
- name: Modify git config
run: |
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git config user.email "272103650+github-actions[bot]@users.noreply.github.com"
- name: Install iOS 26 Platform
uses: nick-fields/retry@v3
with:
Expand Down Expand Up @@ -89,10 +89,10 @@ jobs:
- name: Release to GitHub
uses: softprops/action-gh-release@v2
with:
prerelease: true
fail_on_unmatched_files: true
files: ${{ env.IPA_OUTPUT_PATH }}
token: ${{ secrets.GITHUB_TOKEN }}
name: ${{ inputs.releaseTitle }}
body: ${{ inputs.releaseDescription }}
tag_name: 'v${{ steps.bump-version.outputs.version }}'
prerelease: true
fail_on_unmatched_files: true
files: ${{ env.IPA_OUTPUT_PATH }}
token: ${{ secrets.GITHUB_TOKEN }}
name: ${{ inputs.releaseTitle }}
body: ${{ inputs.releaseDescription }}
tag_name: "v${{ steps.bump-version.outputs.version }}"
57 changes: 30 additions & 27 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,31 +6,32 @@ on:
types: [closed]
env:
DEVELOPER_DIR: /Applications/Xcode_26.0.1.app
APP_VERSION: '2.8.0'
SCHEME_NAME: 'EhPanda'
ALTSTORE_JSON_PATH: './AltStore.json'
BUILDS_PATH: '/tmp/action-builds'
PAYLOAD_PATH: '/tmp/action-builds/Payload'
FILTER_SWIFT_PATH: './actions-tool/ReleaseNotesFilter.swift'
FILTER_PATH: './actions-tool/ReleaseNotesFilter'
THIN_PAYLOAD_SCRIPT_PATH: './actions-tool/thin-payload.sh'
ARCHIVE_PATH: '/tmp/action-builds/EhPanda.xcarchive'
IPA_OUTPUT_PATH: '/tmp/action-builds/EhPanda.ipa'

APP_VERSION: "2.9.0"
SCHEME_NAME: "EhPanda"
ALTSTORE_JSON_PATH: "./AltStore.json"
BUILDS_PATH: "/tmp/action-builds"
PAYLOAD_PATH: "/tmp/action-builds/Payload"
FILTER_SWIFT_PATH: "./actions-tool/ReleaseNotesFilter.swift"
FILTER_PATH: "./actions-tool/ReleaseNotesFilter"
THIN_PAYLOAD_SCRIPT_PATH: "./actions-tool/thin-payload.sh"
ARCHIVE_PATH: "/tmp/action-builds/EhPanda.xcarchive"
IPA_OUTPUT_PATH: "/tmp/action-builds/EhPanda.ipa"
permissions: write-all
jobs:
Deploy:
runs-on: macos-26
if: |
github.event.pull_request.merged == true && (
github.event.pull_request.user.login == 'aalberrty' ||
github.event.pull_request.user.login == 'chihchy')
github.event.pull_request.user.login == 'chihchy' ||
github.event.pull_request.user.login == 'AokazeNozomi')
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Modify git config
run: |
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git config user.email "272103650+github-actions[bot]@users.noreply.github.com"
- name: Install iOS 26 Platform
uses: nick-fields/retry@v3
with:
Expand Down Expand Up @@ -89,12 +90,12 @@ jobs:
- name: Release to GitHub
uses: softprops/action-gh-release@v2
with:
fail_on_unmatched_files: true
files: ${{ env.IPA_OUTPUT_PATH }}
token: ${{ secrets.GITHUB_TOKEN }}
body: ${{ github.event.pull_request.body }}
name: ${{ github.event.pull_request.title }}
tag_name: 'v${{ steps.bump-version.outputs.version }}'
fail_on_unmatched_files: true
files: ${{ env.IPA_OUTPUT_PATH }}
token: ${{ secrets.GITHUB_TOKEN }}
body: ${{ github.event.pull_request.body }}
name: ${{ github.event.pull_request.title }}
tag_name: "v${{ steps.bump-version.outputs.version }}"
- name: Commit bump version
run: |
git add .
Expand All @@ -106,17 +107,19 @@ jobs:
echo "`jq '.apps[0].versions[0].localizedDescription="${{ steps.retrieve-data.outputs.notes }}"' $ALTSTORE_JSON_PATH`" > $ALTSTORE_JSON_PATH
echo "`jq '.apps[0].versions[0].date="${{ steps.retrieve-data.outputs.version_date }}"' $ALTSTORE_JSON_PATH`" > $ALTSTORE_JSON_PATH
echo "`jq '.apps[0].versions[0].version="${{ steps.bump-version.outputs.version }}"' $ALTSTORE_JSON_PATH`" > $ALTSTORE_JSON_PATH
echo "`jq '.apps[0].versions[0].downloadURL="https://github.com/EhPanda-Team/EhPanda/releases/download/v${{ steps.bump-version.outputs.version }}/EhPanda.ipa"' $ALTSTORE_JSON_PATH`" > $ALTSTORE_JSON_PATH
echo "`jq '.apps[0].versions[0].minOSVersion="17.0"' $ALTSTORE_JSON_PATH`" > $ALTSTORE_JSON_PATH
echo "`jq '.apps[0].versions[0].downloadURL="https://github.com/AokazeNozomi/EhPanda17/releases/download/v${{ steps.bump-version.outputs.version }}/EhPanda.ipa"' $ALTSTORE_JSON_PATH`" > $ALTSTORE_JSON_PATH
- name: Commit update AltStore.json
run: |
git add .
git commit -m "Update AltStore.json"
git push origin HEAD
- name: Post release notes
run: |
curl https://api.telegram.org/bot${{ secrets.TELEGRAM_BOT_TOKEN }}/sendMessage \
-d parse_mode=markdown -d chat_id=${{ secrets.TELEGRAM_CHANNEL_ID }} \
-d text='*v${{ steps.bump-version.outputs.version }} Release Notes:*%0A${{ github.event.pull_request.body }}'

curl ${{ secrets.DISCORD_WEBHOOK }} \
-F 'payload_json={"content": "**v${{ steps.bump-version.outputs.version }} Release Notes:**\n${{ steps.retrieve-data.outputs.notes }}"}'
# - name: Post release notes
# run: |
# curl https://api.telegram.org/bot${{ secrets.TELEGRAM_BOT_TOKEN }}/sendMessage \
# -d parse_mode=markdown -d chat_id=${{ secrets.TELEGRAM_CHANNEL_ID }} \
# -d text='*v${{ steps.bump-version.outputs.version }} Release Notes:*%0A${{ github.event.pull_request.body }}'
#
# curl ${{ secrets.DISCORD_WEBHOOK }} \
# -F 'payload_json={"content": "**v${{ steps.bump-version.outputs.version }} Release Notes:**\n${{ steps.retrieve-data.outputs.notes }}"}'
20 changes: 10 additions & 10 deletions AltStore.json
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
{
"name": "EhPanda AltStore Source",
"identifier": "app.ehpanda.altstore",
"identifier": "app.ehpanda17.altstore",
"subtitle": "Unleash your passion for E-Hentai with EhPanda.",
"description": "EhPanda is an unofficial app for iOS and iPadOS that allows users to access and explore adult manga and doujinshi from E-Hentai.\nWith a user-friendly interface, powerful search features, and a vast collection of content, it offers a personalized library and an immersive reading experience.\nNote: EhPanda is not affiliated with or endorsed by E-Hentai.",
"iconURL": "https://github.com/EhPanda-Team/ehpanda-website/raw/main/public/img/appicon/appicon-512.png",
"website": "https://ehpanda.app",
"tintColor": "289979",
"featuredApps": [
"app.ehpanda"
"app.ehpanda17"
],
"apps": [
{
"name": "EhPanda",
"bundleIdentifier": "app.ehpanda",
"bundleIdentifier": "app.ehpanda17",
"developerName": "EhPanda Team",
"subtitle": "Unleash your passion for E-Hentai with EhPanda.",
"localizedDescription": "EhPanda is an unofficial app for iOS and iPadOS that allows users to access and explore adult manga and doujinshi from E-Hentai.\nWith a user-friendly interface, powerful search features, and a vast collection of content, it offers a personalized library and an immersive reading experience.\nNote: EhPanda is not affiliated with or endorsed by E-Hentai.",
Expand All @@ -32,12 +32,12 @@
],
"versions": [
{
"version": "2.8.0",
"date": "2025-10-23T04:23:41",
"localizedDescription": "1. feat: Adapt to the new Liquid Glass design.\n3. fix: Gesture issue in the reading page.\n4. fix: Crash issue in eh setting page.\n5. fix: A minor issue in search page.",
"downloadURL": "https://github.com/EhPanda-Team/EhPanda/releases/download/v2.8.0/EhPanda.ipa",
"size": 7224545,
"minOSVersion": "16.0"
"version": "2.9.0",
"date": "2026-02-07T21:33:03",
"localizedDescription": "1. feat: Added back support for older iOS versions, going back to iOS 17.0",
"downloadURL": "https://github.com/AokazeNozomi/EhPanda17/releases/download/v2.9.0/EhPanda.ipa",
"size": 7285388,
"minOSVersion": "17.0"
}
],
"appPermissions": {
Expand All @@ -60,7 +60,7 @@
"identifier": "ehpanda-now-available",
"caption": "An unofficial E-Hentai App for iOS & iPadOS.",
"tintColor": "289979",
"appID": "app.ehpanda",
"appID": "app.ehpanda17",
"date": "2021-08-19",
"notify": false
}
Expand Down
67 changes: 43 additions & 24 deletions EhPanda.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
objects = {

/* Begin PBXBuildFile section */
7E1F0E7F2ED6ABE4005C6249 /* SwiftUIBackports in Frameworks */ = {isa = PBXBuildFile; productRef = 7E1F0E7E2ED6ABE4005C6249 /* SwiftUIBackports */; };
AB0929B6277F043D00F107CA /* AccountSettingReducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB0929B5277F043D00F107CA /* AccountSettingReducer.swift */; };
AB0929BE2780032400F107CA /* EhSettingReducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB0929BD2780032400F107CA /* EhSettingReducer.swift */; };
AB0929C027805A8200F107CA /* LoginReducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB0929BF27805A8200F107CA /* LoginReducer.swift */; };
Expand Down Expand Up @@ -638,6 +639,7 @@
ABBB2636278FB888007B6149 /* SwiftUINavigation in Frameworks */,
AB1FA94927C62BC80063EF55 /* CommonMark in Frameworks */,
AB17573D27675B1E00FD64E2 /* Colorful in Frameworks */,
7E1F0E7F2ED6ABE4005C6249 /* SwiftUIBackports in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -1590,6 +1592,7 @@
AB2EB9A1280251F600011A8A /* AlertKit */,
AB2EB9A42802521700011A8A /* DeprecatedAPI */,
EAE63E2029E2A6330048C601 /* SwiftyBeaver */,
7E1F0E7E2ED6ABE4005C6249 /* SwiftUIBackports */,
);
productName = EhPanda;
productReference = ABC3C7542593696C00E0C11B /* EhPanda.app */;
Expand Down Expand Up @@ -1668,6 +1671,7 @@
AB2EB9A0280251F600011A8A /* XCRemoteSwiftPackageReference "AlertKit" */,
AB2EB9A32802521700011A8A /* XCRemoteSwiftPackageReference "DeprecatedAPI" */,
EAE63E1F29E2A6330048C601 /* XCRemoteSwiftPackageReference "SwiftyBeaver" */,
7E1F0E7D2ED6A647005C6249 /* XCRemoteSwiftPackageReference "iOS-Backports" */,
);
productRefGroup = ABC3C7552593696C00E0C11B /* Products */;
projectDirPath = "";
Expand Down Expand Up @@ -2088,10 +2092,10 @@
isa = XCBuildConfiguration;
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Manual;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 157;
DEVELOPMENT_TEAM = 9SKQ7QTZ74;
DEVELOPMENT_TEAM = 3H9YQKVXRL;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = ShareExtension/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = ShareExtension;
Expand All @@ -2102,9 +2106,9 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = app.ehpanda.shareExtension;
PRODUCT_BUNDLE_IDENTIFIER = app.ehpanda17.shareExtension;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = ShareExtension_Dev;
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
Expand All @@ -2116,10 +2120,10 @@
isa = XCBuildConfiguration;
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Manual;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 157;
DEVELOPMENT_TEAM = 9SKQ7QTZ74;
DEVELOPMENT_TEAM = 3H9YQKVXRL;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = ShareExtension/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = ShareExtension;
Expand All @@ -2130,9 +2134,9 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = app.ehpanda.shareExtension;
PRODUCT_BUNDLE_IDENTIFIER = app.ehpanda17.shareExtension;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = ShareExtension_Dev;
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
Expand Down Expand Up @@ -2267,22 +2271,23 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = EhPanda/EhPanda.entitlements;
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Manual;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 157;
DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = 9SKQ7QTZ74;
DEVELOPMENT_TEAM = 3H9YQKVXRL;
ENABLE_PREVIEWS = YES;
INFOPLIST_FILE = EhPanda/App/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 26.0;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.entertainment";
IPHONEOS_DEPLOYMENT_TARGET = 17.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
OTHER_LDFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = app.ehpanda;
PRODUCT_BUNDLE_IDENTIFIER = app.ehpanda17;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = App_Dev;
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
Expand All @@ -2296,22 +2301,23 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = EhPanda/EhPanda.entitlements;
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Manual;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 157;
DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = 9SKQ7QTZ74;
DEVELOPMENT_TEAM = 3H9YQKVXRL;
ENABLE_PREVIEWS = YES;
INFOPLIST_FILE = EhPanda/App/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 26.0;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.entertainment";
IPHONEOS_DEPLOYMENT_TARGET = 17.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
OTHER_LDFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = app.ehpanda;
PRODUCT_BUNDLE_IDENTIFIER = app.ehpanda17;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = App_Dev;
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OPTIMIZATION_LEVEL = "-O";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
Expand All @@ -2334,7 +2340,7 @@
"@loader_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = app.ehpanda.tests;
PRODUCT_BUNDLE_IDENTIFIER = app.ehpanda17.tests;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
"PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = "";
Expand All @@ -2361,7 +2367,7 @@
"@loader_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = app.ehpanda.tests;
PRODUCT_BUNDLE_IDENTIFIER = app.ehpanda17.tests;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
"PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = "";
Expand Down Expand Up @@ -2414,6 +2420,14 @@
/* End XCConfigurationList section */

/* Begin XCRemoteSwiftPackageReference section */
7E1F0E7D2ED6A647005C6249 /* XCRemoteSwiftPackageReference "iOS-Backports" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/superwall/iOS-Backports";
requirement = {
kind = upToNextMajorVersion;
minimumVersion = 1.0.5;
};
};
AB17573B27675B1E00FD64E2 /* XCRemoteSwiftPackageReference "Colorful" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/Co2333/Colorful";
Expand Down Expand Up @@ -2545,6 +2559,11 @@
/* End XCRemoteSwiftPackageReference section */

/* Begin XCSwiftPackageProductDependency section */
7E1F0E7E2ED6ABE4005C6249 /* SwiftUIBackports */ = {
isa = XCSwiftPackageProductDependency;
package = 7E1F0E7D2ED6A647005C6249 /* XCRemoteSwiftPackageReference "iOS-Backports" */;
productName = SwiftUIBackports;
};
AB17573C27675B1E00FD64E2 /* Colorful */ = {
isa = XCSwiftPackageProductDependency;
package = AB17573B27675B1E00FD64E2 /* XCRemoteSwiftPackageReference "Colorful" */;
Expand Down
Loading