The iOS client for Library Simplified
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
RDServices.xcodeproj Disable RDServices warnings Dec 29, 2017
Simplified.xcodeproj Defer the creation of a holds notification state until we have a need Jan 8, 2019
Simplified Remove firing of sync on app startup to wait until the user has navig… Jan 21, 2019
SimplifiedTests Move acquisition path to NYPLBook Feb 14, 2018
SimplyETests Added UpdateCheck, associated tests, and new test target Jun 9, 2016
adept-ios @ 00b7831 Update commit to adept-ios for fixed issue re: namespace build error Apr 2, 2018
adobe-content-filter @ 814f4ae Update adobe-content-filter Dec 29, 2017
readium-sdk @ 1a39de5 updated submodules Dec 22, 2016
readium-shared-js @ 7f245be Update to latest tagged release of readium-shared-js: 0.31.1 Nov 30, 2018
tenprintcover-ios @ ef88fb2 Updated tenprintcover-ios submodule and linked static library Dec 9, 2014
.gitattributes Treat .pbxproj as a text file for diff/merge Apr 22, 2016
.gitignore Update build phase to remotely reference a ruby script for Bugnsnag Dec 31, 2018
.gitmodules Removed all traces of preloaded content support May 15, 2016
APIKeys.swift.example add objcMembers to fix swift 4/xcode 10 build errors Nov 23, 2018
Cartfile Add audiobook dependencies Nov 27, 2018
Cartfile.resolved Update NYPLAudiobookToolkit for bug that would prevent progress bar Jan 8, 2019 Add header generation to Dec 26, 2018
Simplified+RMSDK.xcconfig Make CocoaPods not warn about .xcconfig files Mar 19, 2017
Simplified.xcconfig Make CocoaPods not warn about .xcconfig files Mar 19, 2017 Make no longer build book2png Mar 19, 2017

Building With Adobe DRM

Building the Application

  1. git clone or git clone
  2. cd Simplified-iOS
  3. git submodule update --init --recursive
  4. Install Carthage if you haven't already.
  5. carthage bootstrap --platform ios --use-ssh
  6. Symlink the "DRM_Connector_Prerelease" directory to "adobe-rmsdk" within the "Simplified-iOS" directory. (You will need to have obtained the Adobe DRM Connector prerelease from Adobe.)
  7. Build OpenSSL and cURL as described in the following "Building OpenSSL and cURL" section. Ensure you're in the "Simplified-iOS" directory before continuing to the next step.
  8. sh
  9. (cd readium-sdk; sh Apple) (parentheses included) to generate the headers for Readium.
  10. cp APIKeys.swift.example Simplified/APIKeys.swift and edit accordingly.
  11. Copy Accounts.json (obtained elsewhere) to Simplified/Accounts.json.
  12. open Simplified.xcodeproj
  13. Build.

Building OpenSSL and cURL

Follow the instructions in "adobe-rmsdk/RMSDK_User_Manual(obj).pdf" to build OpenSSL (section 12.1) and cURL (section 12.3). Be sure to note the following:

  • You will need to verify and edit the "" scripts for both OpenSSL and cURL to reflect the correct version numbers and local directory names (lines 11–24).
  • You must add --enable-ipv6 to line 80 of Adobe's "" script used for building cURL. This necessary both due to Apple's requirements for IPv6 support and because the library may not build against recent iOS SDKs otherwise.
  • cURL 7.57.0 is known not to work and later versions are unlikely to work either. 7.50.0 is recommended.

Building Without DRM

Note: This configuration is not currently supported. In the interim, you should be able to get it to build via the following steps:

  1. git clone or git clone
  2. cd Simplified-iOS
  3. git submodule deinit adept-ios && git rm -rf adept-ios
  4. git submodule deinit adobe-content-filter && git rm -rf adobe-content-filter
  5. git submodule update --init --recursive
  6. Install Carthage if you haven't already.
  7. carthage bootstrap --platform ios --use-ssh
  8. (cd readium-sdk; sh Apple) (parentheses included) to generate the headers for Readium.
  9. cp APIKeys.swift.example Simplified/APIKeys.swift and edit accordingly.
  10. open Simplified.xcodeproj
  11. Remove "Simplified+RMSDK.xcconfig" from the project.
  12. Delete "libADEPT.a" and "libAdobe Content Filter.a" from "Link Binary with Libraries" for the "SimplyE" target.
  13. Copy Accounts.json (obtained elsewhere) to Simplified/Accounts.json.
  14. Build.


This codebase follows Google's Objective-C Style Guide including the use of two-space indentation. Both Objective-C and Swift may be used for new code.

The primary services/singletons within the program are as follows:

  • NYPLAccount
  • NYPLBookCoverRegistry (used directly only by NYPLBookRegistry)
  • NYPLBookRegistry
  • NYPLConfiguration
  • NYPLKeychain
  • NYPLMyBooksDownloadCenter

All of the above contain appropriate documentation in the header files.

The rest of the program follows Apple's usual pattern of passive views, relatively passive models, and one-off controllers for integrating everything. Immutability is preferred wherever possible.

Questions and suggestions should be submitted as GitHub issues and tagged with the appropriate labels. More in-depth discussion occurs via Slack: Email for access.


Copyright © 2015 The New York Public Library, Astor, Lenox, and Tilden Foundations

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

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.