
* setup * RootView setup * open url * ReadingView * ReadingView * webview delegate * webview outlint * sidebar * buttons * bar buttons * reader view model * reader view model * ReadingView iOS * NavigationTitleSubtitle * map * introspect * content group * setting navigation * WebViewCoordinator * webview state * outline * root view iOS macos * ios buttons * OutlineMenu * OutlineMenu * outlint tree * webview gesture * bookmark button * merge notification * BookmarkMultiButton * ArticleCell * ArticleCell * data model * iOS bookmarks * bookmark loading * search * RandomArticle * MainArticleMenuButton * MoreActionMenu * swiftui4 * BarSetupModifier * RootView_SwiftUI4 * NavigationItem * purge & renaming * bookmarks * welcome no content * welcome no content * file importer * macos library hookup * library iOS setup * Library * Library setup * buttons * library setup * CategoryList * predicates * grid * settings view * RootView_SwiftUI4 * RootView * root view * RootView_iOS * ios reading view model * rootview * onchange * ios bars * reading view iOS 16 button * bookmark sort * mvoe * project setting * focus * NavigationItemButtons * patches * PageZoomButtons * FocusedSceneValue modifier * pagezoom observer * search view * SearchView * dismiss search * min detail view size * search result * SearchView * resrch * dismiss search on url change * search view * ios search setup * search * macos search * ios search * remove old search * use searchbar * searching * ios memory leak * WebViewConfiguration * macOS webview * refactor * SearchBar setup * search bar setup * SearchBar setup * searchbar * ReadingView * webview ref * outline * sheet * toolbar title outline * compact reading view * settings * recent search * reading view * reading view * SearchView * several small changes * shortcuts * commands buttons * macos command * navigation action * patch * revert * webview retention * navigation focused scene value * ipad keyboard shortcut * macos app min fheight * ios sheet action * macOS 13 build * purge * move * move * indent * settings * file import * rename * GridCommon * library views * purge * remove LibraryTopic * LibraryView_iOS * move * coredata context * add url binding * ZimFileSelection * pass url down * ZimFileDetail * load main page * revert * macos 12 compile * reading view empty title * view model * onboarding view * root view iOS 16 * ios search * root view * OutlineTree * search overlay * library view * library refresh views * view model * view model * LibraryViewModel * zim file detail * zim file detail styling * zim file detail * library detail & refresh * ZimFileContextMenu * directory monitor * LibraryOperations * LibraryOperations * reopen * migration * zim file migration * bookmark migration * comments * open zim file via bookmark * welcome view * hide bookmark section when empty * bookmark context menu setup * bookmark add / delete view model * skip notification * refactor view modifier * remove old code * url loading * refactor navigation delegate * safari sheet * safari view sheet * iOS font size * max width welcome view * onboarding view * library view * FileImportButton * FileImportButton * dismiss sheet when loading main page * settings misc * category auto refresh * ios app version
Kiwix for iOS & macOS
This is the home for Kiwix apps on iOS and macOS.
Mobile app for iPads & iPhones
- Download the iOS mobile app on iTunes App Store
Kiwix Desktop for macOS
- Download Kiwix Desktop on iTunes App Store
- Download Kiwix Desktop DMG file
Developers
Dependencies
- An Apple Developer account (doesn't require membership)
- Latest Apple Developers Tools (Xcode)
- Its command-line utilities (
xcode-select --install
) libkiwix.xcframework
(kiwix-lib)
Creating libkiwix.xcframework
Instructions to build kiwix-lib at on the kiwix-build repo.
The xcframework is a bundle of a library for multiple architectures and/or platforms. The libkiwix.xcframework
will contain libkiwix library for macOS arch and for iOS. You don't have to follow steps for other platform/arch if you don't need them.
Following steps are done from kiwix-build root and assume your apple repository is at ../apple
.
Build kiwix-lib
git clone https://github.com/kiwix/kiwix-build.git
cd kiwix-build
# if on macOS mojave (10.14), install headers to standard location
# https://developer.apple.com/documentation/xcode_release_notes/xcode_10_release_notes?language=objc
open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
# make sure xcrun can find SDKs
sudo xcode-select --switch /Applications/Xcode.app
# [iOS] build kiwix-lib
kiwix-build --target-platform iOS_multi kiwix-lib
# [macOS] build kiwix-lib
kiwix-build --target-platform native_static kiwix-lib
Create fat archive with all dependencies
This creates a single .a
archive named libkiwix which contains all libkiwix's dependencies.
If you are to create an xcframework with multiple architectures/platforms, repeat this step for each:
native_static
(for macOS – x86_64)iOS_x86_64
iOS_arm64
You'll have to do it for both iOS archs although you built it using multi
.
libtool -static -o BUILD_<target>/INSTALL/lib/libkiwix.a BUILD_<target>/INSTALL/lib/*.a
Add fat archive to xcframework
xcodebuild -create-xcframework -library BUILD_<target>/INSTALL/lib/libkiwix.a -headers BUILD_<target>/INSTALL/include -output ../apple/Model/libkiwix.xcframework
You can now launch the build from Xcode and use the iOS simulator or your macOS target.
Building Kiwix iOS or Kiwix macOS
- Open project with Xcode
open Kiwix.xcodeproj
- Change the App groups (in Capabilities) and Bundle Identifier for both iOS and Bookmarks targets
- App Group must be different and unique (ex:
tld.mydomain.apple
) - iOS Bundle Identifier must be different and unique (ex:
tld.mydomain.apple.Kiwix
) - Bookmarks Bundle Identifier must be a child of iOS one (ex:
tld.mydomain.apple.Kiwix.Bookmarks
) - ⚠ if you are using a regular (non-paying) Apple Developer Account, you are limited in the number of App IDs you can use so be careful not to fumble much with those.
- App Group must be different and unique (ex:
- Change the Signing profile to your account.