Building the official Wikipedia iOS app: what the repo expects from you
The official Wikipedia iOS app. After running scripts/setup, you should be able to open Wikipedia.xcodeproj and run the app on the iOS Simulator (using the Wikipedia scheme and target).
At a glance
- What is it?
- The Wikipedia iOS repository is the production codebase behind the App Store app. This review covers its build setup, scheme layout, testing constraints, and the trade-offs of adopting it as a base for your own wiki client.
- Who is it for?
- Adopt this repository if you need a complete, MIT-licensed iOS client for MediaWiki-based sites and you are comfortable with the Wikimedia team's conventions: Xcode 16 or later, a setup script that installs Homebrew, SwiftLint, and ClangFormat, and a test suite that currently requires the simulator to be set to en-US.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 1 day ago.
- What is it written in?
- Mainly Swift, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 14, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What this repository actually is
This is the official Wikipedia iOS app, maintained by the Wikimedia Foundation's mobile apps team. It is not a library or a framework. It is the full production client that ships on the App Store, with all the features that entails: reading articles, search, saved pages, settings, and the various extensions like widgets and notifications. For an engineer evaluating it, the first thing to understand is that you are not getting a clean sample project. You are getting the real codebase, with its own build conventions, its own configuration structure, and its own set of assumptions about your development environment. The README is direct about this: you need Xcode 16.0 or later, and you must run the setup script exactly as specified. The repository is licensed under MIT, which is permissive, but the code is deeply tied to Wikimedia's server APIs and configuration, so reusing it for a different wiki or a different backend will require real work.
The build path is a script, not a manual checklist
The README gives one primary way to get the app running: run ./scripts/setup from the repository root. It explicitly warns that going into the scripts directory and running setup will not work because of relative paths. This script assumes Xcode is already installed. It installs Homebrew, SwiftLint, and ClangFormat, and it creates a pre-commit hook that uses ClangFormat to lint Objective-C code. If you prefer to install dependencies yourself, the README lists the same three tools: Xcode, SwiftLint, and ClangFormat. The script is a convenience, but it also imposes a particular toolchain. If you are in an environment where you cannot or do not want to run a script that installs Homebrew, you will need to replicate those installations manually. The README does not document a manual build path beyond listing the dependencies, so you are on your own if you skip the script.
Schemes and targets: production, staging, and experimental
The repository defines multiple Xcode schemes, and each one points to a different server environment. The Wikipedia scheme is the production one. The Staging scheme points to various staging environments, controlled by the current property in WMF Framework/Configuration.swift. That property can be set to appsLabsForPCS for the Apps team's staging environment for page content, or betaCluster for the MediaWiki beta cluster, which is the default. The Staging scheme also turns on feature flags and is pushed to TestFlight as a separate app. The Experimental scheme is for one-off builds and prototype features, pointing to production by default but adjustable. There is also a Local Page Content Service and Announcements scheme for Debug-mode engineers, which can point to locally running mobileapps and wikifeeds repositories. This scheme structure is a real strength for a team that wants to test against different backends without editing code each time. But it also means you need to understand the Configuration.swift file before you can meaningfully change where the app talks to.
Testing has a hard language and region requirement
The README states that the Wikipedia scheme is configured to run the project's iOS unit tests, which you can trigger with Cmd+U or Product -> Test. There is a specific constraint: the test device's language and region must be set to en-US in Settings -> General -> Language & Region. If they are not, the tests will not pass. The README cites a Phabricator ticket, T259859, filed to update the tests to pass regardless of language and region. As of the last push date in the repository metadata, August 2026, that ticket is still referenced as an open issue, so the constraint is current. This is a genuine limitation. For a developer who works in a non-English locale, it is an extra step every time you set up a simulator or a new machine. It also signals that the test suite is not yet fully isolated from locale-dependent behavior, which is worth knowing before you rely on those tests as a safety net for your own changes.
Logging and formatting: conventions you inherit
The project has strong opinions about code style. Swift code is linted with SwiftLint, and Objective-C code is linted with ClangFormat, enforced by a pre-commit hook that the setup script installs. The README points to Apple's Coding Guidelines for Cocoa for Objective-C and the swift.org API Design Guidelines for Swift. Logging uses emoji to indicate levels: verbose, debug, info, warning, and error. The app only writes warning and error messages to the console in both Debug and Release mode. If you need to see all log messages during troubleshooting, you have to change a level in WMFLogging.h to DDLogLevelAll. This is a small but concrete example of how the project's conventions affect your daily work. You are not just writing code; you are writing code that must pass SwiftLint rules defined in .swiftlint-autocorrect.yml and match a pre-commit hook. If you adopt this repository, expect to spend time aligning your editor and habits with these tools.
Where this repository is the wrong tool
This is a full production app, and that is both its strength and its weakness. If you are building a simple wiki reader or a prototype, this repository is overkill. The setup script installs system-wide tools, the scheme configuration assumes you know what the MediaWiki beta cluster is, and the codebase is large enough that navigating it takes time. The README does not provide a quick-start guide beyond the build steps; it assumes you are comfortable with Xcode and with Wikimedia's development process. The repository also has a specific process document (docs/process.md) that governs contributions, which is fine for the Wikimedia team but may feel heavy for an external adopter. If you want to embed wiki reading functionality into your own app, this is not a component you can extract easily. It is a standalone app with its own UI, its own navigation, and its own server configuration. You would be forking the entire client, not integrating a library.
A real alternative: build your own MediaWiki API client
If the full app is too much, the alternative is to build a lighter client using the MediaWiki API directly, or to use a third-party library that wraps the API. The difference in approach is fundamental. The Wikipedia iOS app is a thick client that talks to the MediaWiki API and the mobileapps service for page content. It handles caching, offline reading, push notifications, and a host of features that are specific to Wikipedia's setup. A custom client, in contrast, would make direct HTTP requests to the MediaWiki API endpoints, and you would have to implement all of those features yourself. The trade-off is between adopting a complete, battle-tested client versus writing a smaller, more controllable codebase. The repository's own README points to the mobileapps service and the wikifeeds service as separate repositories, which shows how much of the app's behavior depends on server-side infrastructure. If you only need basic article fetching, a direct API client is simpler and does not require you to maintain a pre-commit hook or a staging scheme. But you lose all the polish and the testing that the Wikimedia team has built into this app.
Maintenance and license considerations
The repository is actively maintained, with the latest release tagged as releases/2026.08.11 as of the last push date. The release cadence appears to be roughly biweekly, based on the recent tags. This means you can expect regular updates, but it also means you need to track those updates if you fork the project. The license is MIT, which allows you to use, modify, and distribute the code with attribution, but it does not grant any trademark rights, and you would need to be careful about using the Wikipedia name if you ship a derivative. The README does not contain a detailed upgrade guide, so the maintenance cost is largely about keeping up with the upstream repository's changes. The project also has a documented process for contributions, which is useful if you plan to submit patches back, but it is not a requirement for local use. Before adopting it, verify that your team can handle the Xcode version requirement and the en-US test constraint, because those are the most likely friction points.
Editorial conclusion
Adopt this repository if you need a complete, MIT-licensed iOS client for MediaWiki-based sites and you are comfortable with the Wikimedia team's conventions: Xcode 16 or later, a setup script that installs Homebrew, SwiftLint, and ClangFormat, and a test suite that currently requires the simulator to be set to en-US. Do not adopt it if you want a lightweight sample or a framework you can drop into an existing app; it is a full app with its own configuration and staging schemes. Before committing, verify that your Xcode version is 16.0 or newer, run ./scripts/setup from the repository root (not from the scripts directory), and confirm that the Wikipedia scheme builds and passes tests on a simulator configured for en-US, because the test suite is known to fail under other language and region settings.
Community notes