Files
proton-stream/ios/project.yml
T
nvrl d4e9628199 feat(ios): notify when a show gains episodes
A BGProcessingTask runs the same crawl_for_news no sooner than every six
hours, when iOS chooses. A processing task rather than an app refresh,
since a crawl of a large share does not fit in thirty seconds.
2026-10-13 21:26:15 +02:00

108 lines
4.1 KiB
YAML

# XcodeGen spec for the iOS client. The .xcodeproj and Info.plist are generated
# from this by scripts/build-ios.sh and are not committed.
name: ProtonStream
options:
bundleIdPrefix: io.narl
deploymentTarget:
iOS: "17.0"
packages:
MPVKit:
url: https://github.com/mpvkit/MPVKit
exactVersion: 1.0.0
targets:
ProtonStream:
type: application
platform: iOS
sources:
- path: ProtonStream
excludes:
# The icon's source; the asset catalog holds what it renders to.
- Resources/AppIcon.svg
- Resources/THIRD_PARTY_NOTICES.md
- path: ProtonStream/Resources/THIRD_PARTY_NOTICES.md
buildPhase: resources
# UniFFI output, written by `scripts/build-ios.sh bindings`.
- path: build/generated/PstrBridge.swift
# Shared with the Android client rather than copied: Inter, and the
# licence texts the About page shows.
- path: ../android/app/src/main/res/font/inter_regular.ttf
buildPhase: resources
- path: ../android/app/src/main/res/font/inter_semibold.ttf
buildPhase: resources
- path: ../android/app/src/main/assets/licenses/GPL-3.0.txt
buildPhase: resources
- path: ../android/app/src/main/assets/licenses/Inter-OFL.txt
buildPhase: resources
dependencies:
# The GPL build is the one with libass and every demuxer; the app is
# sideloaded, never distributed through the App Store.
- package: MPVKit
product: MPVKit-GPL
- sdk: Security.framework
- sdk: SystemConfiguration.framework
scheme:
testTargets:
- ProtonStreamTests
settings:
base:
PRODUCT_BUNDLE_IDENTIFIER: io.narl.protonstream
MARKETING_VERSION: ${PSTR_VERSION}
CURRENT_PROJECT_VERSION: ${PSTR_BUILD}
SWIFT_VERSION: "5.0"
TARGETED_DEVICE_FAMILY: "1,2"
ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon
SWIFT_OBJC_BRIDGING_HEADER: ProtonStream/Bridge/ProtonStream-Bridging-Header.h
HEADER_SEARCH_PATHS: $(PROJECT_DIR)/build/generated
"LIBRARY_SEARCH_PATHS[sdk=iphoneos*]": $(PROJECT_DIR)/../target/aarch64-apple-ios/release
"LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*]": $(PROJECT_DIR)/../target/aarch64-apple-ios-sim/release
OTHER_LDFLAGS: -lpstr_android
info:
path: ProtonStream/Info.plist
properties:
CFBundleDisplayName: Proton Stream
LSRequiresIPhoneOS: true
ITSAppUsesNonExemptEncryption: false
UIBackgroundModes: [audio, processing]
BGTaskSchedulerPermittedIdentifiers:
- io.narl.protonstream.new-episodes
# The Proton palette's page colour, so a dark app does not open on white.
UILaunchScreen:
UIColorName: LaunchBackground
UIRequiresFullScreen: false
UIAppFonts:
- inter_regular.ttf
- inter_semibold.ttf
# A share link handed over from elsewhere: protonstream://add?url=…,
# or the link with its scheme swapped (IncomingShareLink.swift).
CFBundleURLTypes:
- CFBundleURLName: io.narl.protonstream.share-link
CFBundleURLSchemes: [protonstream]
UISupportedInterfaceOrientations:
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
UISupportedInterfaceOrientations~ipad:
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationPortraitUpsideDown
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
# The pure logic the Android unit tests pin, pinned again here: hosted in the
# app, so `@testable import` reaches it, on the simulator.
ProtonStreamTests:
type: bundle.unit-test
platform: iOS
sources:
- path: ProtonStreamTests
dependencies:
- target: ProtonStream
settings:
base:
SWIFT_VERSION: "5.0"
GENERATE_INFOPLIST_FILE: YES
# `@testable import ProtonStream` pulls in the app's bridging header,
# which includes the generated FFI header.
HEADER_SEARCH_PATHS: $(PROJECT_DIR)/build/generated