diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..bb8da7f --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,8 @@ +# Weekly updates for the actions CI uses. Chek Reader is pinned in the Xcode +# project, which Dependabot can't update, so its version moves by hand. +version: 2 +updates: + - package-ecosystem: github-actions + directory: / + schedule: + interval: weekly diff --git a/README.md b/README.md index 9999a75..4a49168 100644 --- a/README.md +++ b/README.md @@ -51,9 +51,13 @@ xcodebuild test -project apple/Chek.xcodeproj -scheme Chek \ -destination 'platform=iOS Simulator,name=iPhone 18 Pro' CODE_SIGNING_ALLOWED=NO ``` -Chek Reader comes from its `main` branch through Swift Package Manager, so -**File → Packages → Update to Latest Package Versions** picks up its newest -changes. +Chek Reader comes through Swift Package Manager, pinned to a release +(`0.1.0` up to the next minor), so a build is the same today and next month. +To take a new reader release, raise the version in the project's package +dependency and let **File → Packages → Update to Latest Package Versions** +rewrite `Package.resolved`. To work against unreleased reader changes, add +the package locally with **File → Add Package Dependencies → Add Local**, +which overrides the pinned one until you remove it. ## Repository layout diff --git a/apple/Chek.xcodeproj/project.pbxproj b/apple/Chek.xcodeproj/project.pbxproj index 45ba6a3..5352bd1 100644 --- a/apple/Chek.xcodeproj/project.pbxproj +++ b/apple/Chek.xcodeproj/project.pbxproj @@ -428,8 +428,8 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/readchek/chek-reader"; requirement = { - branch = main; - kind = branch; + kind = upToNextMinorVersion; + minimumVersion = 0.1.0; }; }; /* End XCRemoteSwiftPackageReference section */ diff --git a/apple/Chek.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/apple/Chek.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 51f0ce8..cbe28f7 100644 --- a/apple/Chek.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/apple/Chek.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -5,8 +5,8 @@ "kind": "remoteSourceControl", "location": "https://github.com/readchek/chek-reader", "state": { - "branch": "main", - "revision": "5bac9e855419ae4cf04a1baf14a431c68a0d7499" + "revision": "0abd128d5f8ee1215c4ddf59f755c2621769e7a9", + "version": "0.1.0" } } ], diff --git a/apple/Chek/InfoPlist.xcstrings b/apple/Chek/InfoPlist.xcstrings new file mode 100644 index 0000000..7504fe0 --- /dev/null +++ b/apple/Chek/InfoPlist.xcstrings @@ -0,0 +1,18 @@ +{ + "sourceLanguage": "en", + "strings": { + "NSLocalNetworkUsageDescription": { + "comment": "Shown when iOS asks the reader to let Chek use the local network", + "extractionState": "extracted_with_value", + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "Chek connects to the library servers you add on your home network." + } + } + } + } + }, + "version": "1.0" +} diff --git a/apple/Chek/Localizable.xcstrings b/apple/Chek/Localizable.xcstrings index d1fe347..8f14dbe 100644 --- a/apple/Chek/Localizable.xcstrings +++ b/apple/Chek/Localizable.xcstrings @@ -1,7 +1,341 @@ { - "sourceLanguage" : "en", - "strings" : { - + "sourceLanguage": "en", + "strings": { + "%lld chapters": {}, + "%lld new chapters are out.": {}, + "%lld of %lld": { + "comment": "The reading position and the number of positions, like a page number: 12 of 300" + }, + "1 chapter": {}, + "A friendly name, such as “Home” or “Office”, for telling servers apart.": {}, + "A new chapter is out.": {}, + "Aa": {}, + "About": {}, + "Account": { + "comment": "Section title for a sign-in" + }, + "Actions": {}, + "Add Books": {}, + "Add EPUB, PDF, comics, MOBI, FictionBook, text and Markdown files from Files, or drop them here. They stay on this device.": {}, + "Add books and comics from Files, or connect a Chek server to read from it.": {}, + "Adding %lld books": {}, + "Address": {}, + "All": {}, + "All Unread": {}, + "Another device saved a different place.": {}, + "Appearance": {}, + "Author": {}, + "Automatic": { + "comment": "Lets the file or source decide" + }, + "Automatic scrolls webtoons and other tall-strip comics, and turns pages for the rest.": {}, + "Books": {}, + "Books you finish, or mark as finished, collect here.": {}, + "Books, Comics and Authors": {}, + "Browse": { + "comment": "Tab and section for servers and sources" + }, + "Cancel": {}, + "Cancel Download": {}, + "Cancelled": {}, + "Change in Settings": {}, + "Chapter": {}, + "Chapter %lld": { + "comment": "A chapter known only by its number" + }, + "Chapters": {}, + "Check the address, and that the server is running.": {}, + "Check your connection and the server's address.": {}, + "Check your connection and try again.": {}, + "Chek Demo": {}, + "Chek can't read %@.": {}, + "Chek checks the series you follow a few times a day and tells you when a chapter is out.": {}, + "Chek is the successor to Chibi Manga.": {}, + "Chek signs out and forgets your places in its publications on this device. They stay saved on the server.": {}, + "Clear Server Books and Covers": {}, + "Close": {}, + "Comic Layout": {}, + "Comics": {}, + "Compact": {}, + "Completed": {}, + "Connect": {}, + "Connect a Chek server to read from it without downloading first. Your place follows you between devices.": {}, + "Connect a Server": {}, + "Connect a server of your own to install sources.": {}, + "Contents": {}, + "Continue": { + "comment": "Shelf of books being read" + }, + "Continue %@": { + "comment": "Button that opens a book at the chapter or page named" + }, + "Couldn't check for the next chapter": {}, + "Couldn't download %@.": {}, + "Couldn't download this publication.": {}, + "Couldn't find a Chek server there.": {}, + "Couldn't load %@.": {}, + "Couldn't open %@.": {}, + "Couldn't reach the server.": {}, + "Couldn't start the demo.": {}, + "Covers": {}, + "Curl": { + "comment": "A page turn that curls over like paper" + }, + "Current chapter": {}, + "Dark": {}, + "Date Added": {}, + "Demo": { + "comment": "Badge on the shared demo server account" + }, + "Deselect All": {}, + "Done": {}, + "Download": {}, + "Download All": {}, + "Download ^[%lld Chapter](inflect: true)?": {}, + "Download ^[%lld Comic](inflect: true)?": {}, + "Downloaded": {}, + "Downloaded chapters and comics can be downloaded again from their series.": {}, + "Downloading": {}, + "Downloads": {}, + "Enter an address such as chek.example.com.": {}, + "Exit": {}, + "Exit the Demo": {}, + "Exit the demo": {}, + "Find books and comics on this device, your servers and their sources by title, series or author.": {}, + "Finished": {}, + "Following": { + "comment": "Series the reader follows for new chapters" + }, + "Font": {}, + "For this series. Manga reads right to left; Automatic follows what the file or source says.": {}, + "Get": {}, + "Get Sources": {}, + "Go There": {}, + "Grid": { + "comment": "Library layout: covers in a grid" + }, + "Installed": { + "comment": "Badge on an extension already on the server" + }, + "It doesn't match what its repository lists. Try again after the repository updates.": {}, + "It has no pages to download.": {}, + "It isn't in a format Chek reads.": {}, + "It may be damaged or not a format Chek reads. Removing it from the library leaves the original where you got it.": {}, + "It may be damaged.": {}, + "It's larger than Chek can open on this device.": {}, + "It's protected with DRM, which Chek doesn't open.": {}, + "Its extension may need an update, or may have been removed or turned off. Check Manage Sources.": {}, + "Its file and your place in it are deleted from this device.": {}, + "Its site may be down or slow. Try again in a moment.": {}, + "Larger Text": {}, + "Layout": {}, + "Left to Right": {}, + "Libraries": {}, + "Library": { + "comment": "Tab for the books on this device" + }, + "Light": {}, + "Line Spacing": {}, + "List": { + "comment": "Library layout: one row per book" + }, + "Make sure the address points at a Chek server.": {}, + "Manage Sources": {}, + "Margins": {}, + "Mark All as Seen": {}, + "Mark Previous as Read": {}, + "Mark as Finished": {}, + "Mark as Read": {}, + "Mark as Unread": {}, + "Name": { + "comment": "A server's friendly name, or the account's user name" + }, + "Name in Chek (optional)": {}, + "Narrow": {}, + "New": { + "comment": "Badge on a book or chapter not read yet" + }, + "New Chapter Alerts": {}, + "New York": {}, + "New on %@": {}, + "Newest First": {}, + "Next %lld Unread": { + "comment": "Button that downloads the next unread chapters" + }, + "Next Chapter": {}, + "No Books Yet": {}, + "No Chapters to Read": {}, + "No Contents": {}, + "No Extensions": {}, + "No Servers": {}, + "No repository the server can read offers these now, so they can't be updated, only removed.": {}, + "None shared with you yet. Ask the admin of %@ for access to a library.": {}, + "Not Allowed": {}, + "Not Allowed on This Server": {}, + "Not Now": {}, + "Not Yet Asked": {}, + "Not read yet. Pull down to check it.": {}, + "Nothing Finished Yet": {}, + "Nothing New": {}, + "Nothing to Read Yet": {}, + "OK": {}, + "Off": {}, + "Oldest First": {}, + "On": {}, + "On Hiatus": {}, + "On This Device": {}, + "Ongoing": {}, + "Opening stopped.": {}, + "Order": {}, + "Original": { + "comment": "The publication's own font, colors, line spacing or reading direction" + }, + "Page Turn": {}, + "Pages": { + "comment": "Comic layout: one page at a time" + }, + "Password": {}, + "Position": {}, + "Privacy Policy": {}, + "Read": { + "comment": "Button on a book that opens it" + }, + "Reading": {}, + "Reading Direction": {}, + "Reading Now": {}, + "Reading tips. Tap to dismiss.": {}, + "Recent": { + "comment": "Library order: last read first" + }, + "Recently Added": {}, + "Regular": {}, + "Relaxed": {}, + "Remove": {}, + "Remove %@?": {}, + "Remove All Downloads?": {}, + "Remove All Downloads…": {}, + "Remove Download": {}, + "Remove Server": {}, + "Remove This Book?": {}, + "Remove ^[%lld Book](inflect: true)?": {}, + "Remove ^[%lld Download](inflect: true)": {}, + "Remove from Library": {}, + "Remove “%@”": {}, + "Remove…": {}, + "Removing the server forgets your places in its publications on this device, and deletes what you downloaded from it. Your places stay saved on the server.": {}, + "Rename": {}, + "Rename Server": {}, + "Report a Problem": {}, + "Repositories": {}, + "Reset to Original": {}, + "Right to Left": {}, + "San Francisco": {}, + "Save": {}, + "Saved %@.": {}, + "Search": {}, + "Search %@": { + "comment": "Search field prompt naming the library or source searched" + }, + "Search Everything": {}, + "Select All": {}, + "Select Books": {}, + "Sepia": {}, + "Server": { + "comment": "Section title for a server's address and name" + }, + "Server Books": {}, + "Server Removed": {}, + "Server books and covers come back as you read; your library, places and downloads stay until you remove them.": {}, + "Servers": {}, + "Settings": {}, + "Share": {}, + "Show": {}, + "Sign In": {}, + "Sign In to %@": {}, + "Sign Out": {}, + "Sign in again to keep reading from it.": {}, + "Sign in to %@ again to read from it.": {}, + "Sign in to keep reading.": {}, + "Signed Out": {}, + "Signed out of %@": {}, + "Slide": { + "comment": "A page turn where the next page slides in beside this one" + }, + "Smaller Text": {}, + "Sort By": {}, + "Sources": {}, + "Sources run on the server, which reaches only the sites each lists, so reading from them works the same on all your devices.": {}, + "Started": {}, + "Stay Here": {}, + "Storage": {}, + "Tap the edges to turn pages and the middle for controls. Swipe to turn too.": {}, + "Text": { + "comment": "Plain text files, and the text settings section in the reader" + }, + "That doesn't look like a server address.": {}, + "The demo account can't change its sources.": {}, + "The demo ends on its own when Chek is closed. Exiting now forgets it straight away.": {}, + "The name is only used in Chek on this device.": {}, + "The name or password is wrong.": {}, + "The repository couldn't be reached.": {}, + "The server had a problem (%lld).": {}, + "The server's admin hasn't allowed this repository.": {}, + "The server's answer didn't make sense.": {}, + "The server's repositories don't offer any yet.": {}, + "The source didn't answer.": {}, + "The source didn't list any. It may not be out yet.": {}, + "Their files and your places in them are deleted from this device.": {}, + "They download one after another while Chek is open, and stay on this device until you remove them.": {}, + "This File Can't Be Opened": {}, + "This chapter has no pages.": {}, + "This extension couldn't be installed.": {}, + "This format opens once the whole file is here.": {}, + "This is a shared demo account, so nothing on it can be changed.": {}, + "This isn't on the server anymore.": {}, + "This publication doesn't list its chapters.": {}, + "This server doesn't have sources yet.": {}, + "This source comes from a repository the server's admin hasn't allowed.": {}, + "This source has no chapters it can show for this series. Licensed series are often only on the publisher's own site.": {}, + "This source isn't available on the server.": {}, + "Title": {}, + "Too many attempts.": {}, + "Try Again": {}, + "Try again in a moment.": {}, + "Try the Demo": {}, + "Turn On Alerts": {}, + "Unfollow": {}, + "Update": {}, + "Update the Chek server to add extensions.": {}, + "Updates": {}, + "User Name": {}, + "Uses the server's browser": {}, + "Version": {}, + "Version %@": { + "comment": "An extension's version" + }, + "Version %@ · Not allowed on this server": {}, + "Version %@, %@ available": { + "comment": "An extension's installed version, then the version offered" + }, + "Vertical Scroll": {}, + "View Options": {}, + "Wait a minute and try again.": {}, + "Waiting to download": {}, + "Wide": {}, + "You're at %@ on %@": {}, + "You're at %@ on another device": {}, + "You're signed out of %@.": {}, + "You're signed out of this server.": {}, + "You're somewhere else on %@": {}, + "You're somewhere else on another device": {}, + "You're up to date": {}, + "Your password goes only to this server. Chek keeps the session it gets back in your Keychain.": {}, + "^[%lld Selected](inflect: true)": {}, + "^[%lld item](inflect: true)": {}, + "^[%lld new chapter](inflect: true)": {}, + "^[%lld update](inflect: true)": {}, + "this book": {}, + "this comic": {} }, - "version" : "1.0" + "version": "1.0" }