📱The official Wikipedia iOS app.
Switch branches/tags
v4.0.1-rc1 v4.0-rc2 v4.0-rc1 testTag2 testTag test-tag stabletf/4.0.7.6-stabletf-2014-03-18 stabletf/4.0.7.5-stabletf-2014-03-13 releases/6.1.0 releases/6.0.2 releases/6.0.1 releases/6.0.0 releases/5.8.2 releases/5.8.1 releases/5.8.0 releases/5.7.2 releases/5.7.1 releases/5.7.0 releases/5.6.0 releases/5.5.1 releases/5.5.0 releases/5.4.2 releases/5.4.1 releases/5.4.0 releases/5.3.4 releases/5.3.3 releases/5.3.2 releases/5.3.1 releases/5.3.0 releases/5.2.1.942.1 releases/5.2.0.939 releases/5.2.0.929.1 releases/5.1.1.920.1 releases/5.1.0.918.1 releases/5.1.0.917.1 releases/5.1.0.916.1 releases/5.1.0.913.1 releases/5.0.6.909.1 releases/5.0.6.908.1 releases/5.0.6.907.1 releases/5.0.6.906.1 releases/5.0.5.904.1.1 releases/5.0.5.904.1 releases/5.0.5.903.1 releases/5.0.5.902.1 releases/5.0.5.901.1 releases/5.0.5.900.1 releases/5.0.5.898.1 releases/5.0.5.896.1.1.1 releases/5.0.5.896.1.1 releases/5.0.5.896.1 releases/5.0.5.889.1 releases/5.0.5.883.1 releases/5.0.5.882.1 releases/5.0.5.881.1 releases/5.0.5.876.1 releases/5.0.5.875.1 releases/5.0.5.864.1 releases/5.0.4.851.1 releases/5.0.3.850.1 releases/5.0.3.849.1 releases/5.0.3.848.1 releases/5.0.2.802.1 releases/5.0.2.800.1 releases/5.0.1.792.1 releases/5.0.0.775 releases/5.0.0.771 release/4.1.2.0-release-2014-04-17 release/4.1.1-14-release-2014-04-16 release/4.1.0.2-release-2014-03-27 release/4.1.0.1-release-2014-03-27 release/4.1.0.0-release-2014-03-20 release/4.0.7.5-release-2014-03-13 refresh-working refresh-broken old-app-store-version list hockey/crash-on-random hockey/crash-on-random-poc hockey/crash-on-random-poc-20140304 dummy/dummy20140316 betas/1527 betas/1526 betas/1525 betas/1524 betas/1522 betas/1521 betas/1519 betas/1518 betas/1517 betas/1516 betas/1515 betas/1514 betas/1513 betas/1512 betas/1511 betas/1510 betas/1509 betas/1508 betas/1507
Nothing to show
Clone or download
joewalsh Merge pull request #2768 from wikimedia/local
Expand local scheme support to all mobileapps services URLs
Latest commit 6f474cf Nov 14, 2018
Permalink
Failed to load latest commit information.
ContinueReadingWidget bump version to 6.1.1 Oct 24, 2018
FeaturedArticleWidget bump version to 6.1.1 Oct 24, 2018
Icon update alpha app icon Dec 14, 2017
InTheNewsNotification add tag mapping Nov 13, 2018
TopReadWidget bump version to 6.1.1 Oct 24, 2018
WMF Framework fix paths Nov 14, 2018
Wikipedia Stickers bump version to 6.1.1 Oct 24, 2018
Wikipedia.xcodeproj expand local scheme support to all mobileapps services URLs Nov 14, 2018
Wikipedia Merge branch 'develop' into local Nov 14, 2018
WikipediaBetaClusterTests bump version to 6.1.1 Oct 24, 2018
WikipediaUITests bump version to 6.1.1 Oct 24, 2018
WikipediaUnitTests expand local scheme support to all mobileapps services URLs Nov 14, 2018
docs Update localization.md Aug 3, 2018
fastlane Import localizations from TWN on 11/12/2018 Nov 12, 2018
localization always import & export localizations Jun 13, 2017
scripts update readme, clearer name Oct 31, 2018
www Merge branch 'develop' into browserify Nov 9, 2018
.clang-format add link to style options page Jun 14, 2017
.gitignore Fastlane taking screenshots in various langs and simulators. May 20, 2018
.jshintignore commit web assets and remove build scripts Apr 7, 2015
.ruby-version Fastlane taking screenshots in various langs and simulators. May 20, 2018
.xctool-args update xctool.args Sep 1, 2016
CODE_OF_CONDUCT.md Add code of conduct Jun 9, 2017
CONTRIBUTING.md fix missing links May 3, 2018
Cartfile remove piwik Jun 6, 2018
Cartfile.resolved remove piwik Jun 6, 2018
Gemfile add xcode-install to gemfile Dec 19, 2016
Gemfile.lock update fastlane Nov 7, 2018
Jenkinsfile use post { always { Sep 25, 2018
LICENSE.txt Update LICENSE.txt Mar 31, 2018
Makefile Hygiene: Change CSS load prefix back to PROD_CSS_PREFIX Apr 6, 2018
README.md update readme, clearer name Oct 31, 2018
download downloading -> download May 1, 2018

README.md

Wikipedia iOS

The official Wikipedia iOS client.

MIT license

Development Team

The app is primarily being developed by the Wikimedia Foundation's Mobile Apps team. This README provides high-level guidelines for getting started with the project. If you have any questions, comments, or issues, the easiest way to talk to us is joining the #wikimedia-mobile channel on the Freenode IRC server during Eastern and Pacific business hours. We'll also gladly accept any tickets filed against the project in Phabricator.

Building and Running

Minimum Requirements

  • Xcode - The easiest way to get Xcode is from the App Store, but you can also download it from developer.apple.com if you have an AppleID registered with an Apple Developer account.

Run scripts/setup before building & running in Xcode to install all of the required dependencies. This may take a while as it will also compile any code dependencies.

scripts/setup will install:

At this point, you should be able to open Wikipedia.xcodeproject and run the app on the iOS Simulator (using the Wikipedia scheme and target). If you encounter any issues, please don't hesitate to let us know via a bug report or messaging us on IRC in #wikimedia-ios on Freenode.

Development

Guidelines

These are general guidelines rather than hard rules.

Objective-C

Swift

Formatting

We use Xcode's default 4 space indentation and our .clang-format file with the pre-commit hook setup by scripts/setup. Currently, this does not enforce Swift formatting.

Third-party Dependencies

We use Carthage to manage third-party native dependencies and npm for web.

Testing

The Wikipedia scheme is configured to execute the project's iOS unit tests, which can be run using the Cmd+U hotkey or the Product->Test menu bar action.

Event logging

Note: Testing event logging requires labs access to deployment-eventlog05.eqiad.wmflabs

To test event logging:

  • ensure event logging is enabled via Gear icon > Send usage reports

  • select Event Logging Dev Debug scheme in Xcode

  • get the app install id:

    • run app in the simulator
    • pause
    • paste po [WMFEventLoggingService sharedInstance].appInstallID in the Xcode console and copy the resulting string
  • ssh to labs: ssh deployment-eventlog05.eqiad.wmflabs

  • tail the following files (tail keeps stream open and prints last few lines of a file any time it changes) with the app install id and the id of the schema being tested (from MPopov):

    • /srv/log/eventlogging/all-events.log
      • only has events which have been validated against the appropriate schemas
    • /srv/log/eventlogging/client-side-events.log
      • has all incoming events (as raw, encoded URI query strings) regardless of their validity
    • /var/log/eventlogging/eventlogging-processor@client-side-00.log
    • /var/log/eventlogging/eventlogging-processor@client-side-01.log
      • if there are any issues with the incoming events or their validation, there will be detailed messages in the two eventlogging-processor@-client-side-XX logs

    Example:

    • tail -f /srv/log/eventlogging/all-events.log | grep "<app install id>" | grep "<schema id>"

Contributing

Covered in the contributing document.

Gerrit

We also maintain a mirror of this repository on Gerrit (see above), syncing the code after every release. If you'd rather use Gerrit to send us a patch, you'll need to:

Other Development Dependencies

Certain development and maintenance tasks will require the installation of specific tools. Many of these tools are installable using Homebrew, which is our recommended package manager.

Homebrew and many other tools require the Xcode command line tools, which can be installed by running xcode-select --install on newer versions of OS X. They can also be installed via Xcode or downloaded from the Apple Developer downloads page on older versions of OS X.

Carthage

brew install carthage

We use Carthage as our dependency manager. It is required to build the project. After installing carthage, (or running scripts/setup) you should be able to build & run in Xcode. scripts/carthage_bootstrap is run as a build step by Xcode. Your first build will take a while as the dependencies are built. Subsequent builds will re-use the prebuilt dependencies.

Carthage Troubleshooting

In Xcode, select the Clean and build dependencies target and run it. Make sure this succeeds before running the Wikipedia target again. This will run the setup script, remove any cached dependencies, and run carthage bootstrap again.

Manually imported dependencies

HockeySDK is manually imported from their binary release. New binary releases of HockeySDK can be downloaded from https://www.hockeyapp.net/releases/ and copied over the existing version in the Wikipedia/Frameworks folder. We use the release in the HockeySDKCrashOnly folder.

Clang-Format

brew install clang-format

As mentioned in best practices and coding style, we use clang-format to lint the project's Objective-C code. Installation via Homebrew is straightforward: brew install clang-format. We use a pre-commit hook to format code. The pre commit hook is scripts/clang_format_diff and is installed by scripts/setup.

NPM

brew install npm

npm is a package manager for nodejs. With it, we install various node modules as Javascript dependencies and development tools (see www/package.json for an up-to-date list). Similar to our native dependencies, we have committed certain files to the repository to remove node and npm as build dependencies in an effort to streamline typical application development. Please see Wikipedia iOS Web Development for more information about how to work with the web components in this project.

Fastlane

fastlane automates common development tasks - for example bumping version numbers, running tests on multiple configurations, or submitting to the App Store. You can list the available lanes (our project-specific scripts) using bundle exec fastlane lanes. You can list available actions (all actions available to be scripted via lanes) using bundle exec fastlane actions. The fastlane configuration and scripts are in the fastlane folder.

Production Builds

For production builds, should ensure you have the DELIVER_USER (your Apple ID) and HOCKEY_PRODUCTION (Wikimedia's HockeyApp API token) environment variables set.

Continuous Integration

Tests are run on Jenkins in response to pull requests. Volunteer contributor pull requests require an ok to test comment on the pull request from a project admin before tests are run.