Skip to content

ThePalaceProject/ios-core

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7,138 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Palace Build License

The Palace Project

This repository contains the client-side code for The Palace Project Palace application.

System Requirements

  • Install Xcode 26 in /Applications, open it and install additional components if it prompts. iOS 26 SDK is required for App Store submission as of April 2026; CI builds release artifacts on Xcode 26 / macos-26.
  • Install Carthage if you haven't already. brew install carthage is recommended.

The DRM build runs natively on Apple Silicon — no Rosetta needed. (If you hit Adobe RMSDK linker errors on Apple Silicon you may need to toggle "Open using Rosetta" on Xcode.app as a fallback, but the default path no longer requires it.)

Building without Adobe DRM nor Private Repos

git clone git@github.com:ThePalaceProject/ios-core.git
cd ios-core

# one-time set-up
./scripts/setup-repo-nodrm.sh

# idempotent script to rebuild all dependencies
./scripts/build-3rd-party-dependencies.sh --no-private

Open Palace.xcodeproj and build the Palace-noDRM target.

Building With Adobe DRM

Building the Application from Scratch

  1. Contact project lead and ensure you have access to all the required private repos.
  2. Make sure you have git-lfs installed. Installation instructions. To install with brew:
    brew install git-lfs
    git lfs install
  3. Then run:
    git clone git@github.com:ThePalaceProject/ios-core.git
    cd ios-core
    ./scripts/bootstrap-drm.sh
  4. Open Palace.xcodeproj and build the Palace target.

Building Dependencies Individually

Unless the DRM dependencies change (which is very seldom) you shouldn't need to run the bootstrap-drm.sh script more than once.

Other 3rd party dependencies come from a mix of Swift Package Manager (Readium 3.x, Firebase, SQLite.swift, PureLayout, snapshot-testing, ULID, std-uritemplate, transifex), git submodules (ios-audiobooktoolkit, ios-tenprintcover, plus DRM-only submodules), and local Swift packages under Palace/Packages/ (PalaceAuth, PalaceCatalog, PalaceKeychain, PalaceLogging, PalaceNetwork).

To rebuild non-SPM dependencies use the idempotent script:

cd ios-core
./scripts/build-3rd-party-dependencies.sh

The scripts directory contains other scripts for granular dependency, archive, and test runs. These scripts are the same ones CI uses. All must be run from the root of ios-core, not from the scripts directory. See scripts/README.md for a categorized reference.

Branching and CI

develop is the main development branch.

Release branch names follow the convention: release/<version>. For example, release/1.0.0.

Feature branch names (for features whose development is a month or more): feature/<feature-name>, e.g. feature/my-new-screen.

Continuous integration is enabled on merge events on develop branch. Palace device builds are uploaded to ios-binaries.

Support tooling

Helping a patron whose Palace app is in a stuck state that sign-out + uninstall + reinstall does not clear? See the Reset Library Account support workflow — an interactive console with the recovery steps, an inline Device-ID → Firebase Remote Config parameter generator, and a sysdiagnose log verifier. Ships in Palace iOS 3.1.0+.

Contributing

Tests are required for production changes. The full workflow — TDD discipline, the local self-check, and the public/private boundary between outside contributors and maintainer-internal agent tooling — is documented in CONTRIBUTING.md.

CI enforces coverage floors, snapshot tests, build for both Palace and Palace-noDRM targets, and a chaos-replay regression suite. Run scripts/verify-pr.sh --quick locally before opening a PR to catch failures before CI does.

Palace License

Copyright © 2021 LYRASIS

Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.