Execute tests in parallel on multiple iOS Simulators

Overview

Deprecation Warning

Xcode 9 perfectly supports executing tests in parallel without any 3rd party tool like pxctest. We suggest moving to xcodebuild for running tests in parallel on multiple Simulators.

pxctest

Execute tests in parallel on multiple iOS Simulators.

Build Status

screencast

Installation

To install via Homebrew you can use the plu/homebrew-pxctest tap:

$ brew tap plu/pxctest && brew install pxctest

Usage

Compile your tests with build-for-testing, example:

$ xcodebuild \
    -IDEBuildLocationStyle=Custom \
    -IDECustomBuildLocationType=Absolute \
    -IDECustomBuildProductsPath="$PWD/build/Products" \
    -scheme 'MyApp' \
    -workspace 'MyApp.xcworkspace' \
    -destination 'platform=iOS Simulator,name=iPhone 5,OS=10.1' \
    build-for-testing

In build/Products you should find a .xctestrun file. This can then be passed to pxctest:

$ pxctest \
    run-tests \
    --destination 'name=iPhone 5,os=iOS 9.3' \
    --destination 'name=iPhone 5,os=iOS 10.1' \
    --testrun build/Products/MyApp_iphonesimulator10.1-i386.xctestrun

The --destination option can be passed in several times and will execute the tests in parallel on all Simulators.

run-tests options

To see a list of possible options, just run:

$ pxctest run-tests --help

Most of the options should be self-explanatory. If not, please open an issue or submit some pull request. However the --defaults option needs a special section here.

run-tests --defaults

This option expects a path to a file, which contains some JSON. After loading this file, its content gets applied to the Simulator's defaults. On the top level the keys must be either a relative path or a domain where the defaults are located.

Example: You can turn off all keyboard settings that you can find in the Simulator's Settings app by using following JSON content:

{
  "com.apple.Preferences": {
    "KeyboardAllowPaddle": false,
    "KeyboardAssistant": false,
    "KeyboardAutocapitalization": false,
    "KeyboardAutocorrection": false,
    "KeyboardCapsLock": false,
    "KeyboardCheckSpelling": false,
    "KeyboardPeriodShortcut": false,
    "KeyboardPrediction": false,
    "KeyboardShowPredictionBar": false
  }
}

Headless testing

It's possible to execute the tests without actually launching a Simulator.app window. This can be convenient because it will separate your test workflow from your development. If the tests run in the Simulator.app window and you launch your app during the test run from Xcode, it will stop the tests. There's not much we can do about that, it's just the way Xcode is handling Simulator.app - it takes control over all instances.

headless_screencast

First you need to pre-boot some Simulators in the background, with a custom device set path:

$ mkdir /tmp/test-simulators
$ pxctest boot-simulators \
    --deviceset /tmp/test-simulators \
    --destination 'name=iPhone 5,os=iOS 9.3' \
    --destination 'name=iPad Retina,os=iOS 9.3'

Once the command has finished, the Simulators are in a usable state and we can begin running tests on them.

To launch your tests on these Simulators, you just need to pass the --deviceset option to the run-tests command:

$ pxctest run-tests \
    --testrun build/Products/KIF_iphonesimulator10.1-i386.xctestrun \
    --deviceset /tmp/test-simulators \
    --destination 'name=iPhone 5,os=iOS 9.3' \
    --destination 'name=iPad Retina,os=iOS 9.3' \
    --only 'KIF Tests:TappingTests'
....................
KIF Tests - iPhone 5 iOS 9.3 - Finished executing 10 tests after 25.252s. 0 Failures, 0 Unexpected
KIF Tests - iPad Retina iOS 9.3 - Finished executing 10 tests after 25.119s. 0 Failures, 0 Unexpected
Total - Finished executing 20 tests. 0 Failures, 0 Unexpected

If you still see some Simulator.app window showing up, it might have different reasons:

  • something went wrong pre-booting the devices earlier
  • you forgot the --deviceset option
  • you didn't pre-boot all devices that you're using as --destination options now

You can verify the state of your devices via:

$ xcrun simctl --set /tmp/test-simulators list
== Devices ==
-- iOS 9.3 --
    iPhone 5 (716A9864-08BD-4200-96ED-20EA1E81BE65) (Booted)
    iPad Retina (D2EB2BB9-8862-4F0D-A933-079C9BA0342A) (Booted)

The Booted state here however does not mean "is ready for launching apps or running tests". After booting a device it enters the Booted state quickly, but still showing the loading bar above the Springboard (you can see that if you boot them via Simulator.app and keep watching the state that xcrun simctl reports).

When you're finished running tests, you may wish to shut down running simulators to release their resources.

$ pxctest shutdown-simulators \
    --deviceset /tmp/test-simulators

Development

git clone --recursive https://github.com/plu/pxctest.git pxctest
cd pxctest
scripts/bootstrap.sh
NSUnbufferedIO=YES xcodebuild -scheme pxctest test | xcpretty -c

FBSimulatorControl

The functionality of pxctest would not be possible without the great FBSimulatorControl Framework provided by Lawrence Lomax at Facebook.

There are two command line tools that come with FBSimulatorControl:

  • fbsimctl - command line interface to the FBSimulatorControl Framework
  • fbxctest - test runner for running iOS testing bundles for the iOS Simulator Platform

Both of them are more flexible than pxctest, so it might be worth having a look at them.

Resource limits

By default the resource limitations (maximum processes per user, maximum open files) on Mac OS are quite small. There even seems to be a hard limit baked into the kernel of 2500 maximum processes per user. But there's some boot arguments that can be set to raise this limit to at least 5000.

So why is this important? A booted iPhone 7 Simulator is not just one process, it comes with a whole set of running processes. If you boot a couple Simulators at the same time, add your other running programs/processes on top of that, then you will hit these limits soon.

First we set the nvram boot argument:

$ sudo nvram boot-args="serverperfmode=1 $(nvram boot-args 2>/dev/null | cut -f 2-)"

If you're using Sierra, you will probably get an error message like

nvram: Error setting variable - 'boot-args': (iokit/common) general error

This is because starting from Sierra the nvram command should be executed from the recovery partition. more info here To restart a mac from the recovery partition press CMD+r during the boot procedure. From there open a terminal and insert the same command as before.

Next step is to make launchd set the new limits:

$ sudo cp config/limit.maxfiles.plist /Library/LaunchDaemons/limit.maxfiles.plist
$ sudo cp config/limit.maxproc.plist /Library/LaunchDaemons/limit.maxproc.plist

The two files can be found in this repository:

And we reboot! Afterwards you can check:

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 524288
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 5000
virtual memory          (kbytes, -v) unlimited

The open files part should say 524288, and max user processes should be 5000.

If you are using Sierra, the output looks a bit different:

ulimit -a
-t: cpu time (seconds)              unlimited
-f: file size (blocks)              unlimited
-d: data seg size (kbytes)          unlimited
-s: stack size (kbytes)             8192
-c: core file size (blocks)         0
-v: address space (kbytes)          unlimited
-l: locked-in-memory size (kbytes)  unlimited
-u: processes                       5000
-n: file descriptors                524288

The open files is now file descriptors and max user processes is renamed to processes.

Can't find the .xctestrun?

When code coverage is enabled on the project specifying IDECustomBuildProductsPath to xcodebuild has no effect. Instead you can provide derivedDataPath and get the .xctestrun file from the directory.

Compile your tests with build-for-testing, specifying derivedDataPath, for example:

$ xcodebuild \
    -derivedDataPath "$PWD/derivedData" \
    -scheme 'MyApp' \
    -workspace 'MyApp.xcworkspace' \
    -destination 'platform=iOS Simulator,name=iPhone 5,OS=10.1' \
    build-for-testing

In derivedData/Build/Intermediates/CodeCoverage/Products you should find a .xctestrun file. This can then be passed to pxctest:

$ pxctest \
    run-tests \
    --destination 'name=iPhone 5,os=iOS 9.3' \
    --destination 'name=iPhone 5,os=iOS 10.1' \
    --testrun derivedData/Build/Intermediates/CodeCoverage/Products/MyApp_iphonesimulator10.1-i386.xctestrun

Release version update

  1. Update Info.plist > CFBundleShortVersionString
  2. Update CHANGELOG.md
  3. Ensure the latest stable Xcode version is installed and xcode-selected.
  4. From project root directory run ./scripts/release.sh
  5. Create a GitHub release: https://github.com/plu/pxctest/releases/new
    • Specify the tag you just pushed in the dropdown.
    • Set the release title to the new version number.
    • Add the changelog section to the release description text box.
    • Upload the portable zip you just built to the GitHub release binaries.
    • Click "Publish release".
  6. Publish to Homebrew and CocoaPods: ./scripts/publish.sh

License

MIT

Comments
  • Generate coverage data from each of the tests

    Generate coverage data from each of the tests

    Issue type: Feature Request

    Why:

    I need to gather coverage data from running tests.

    How:

    This is available in xcodebuild using the following:

    xcodebuild \
        -derivedDataPath /tmp/some/directory \
        -enableCodeCoverage YES \
       -destination 'platform=iOS Simulator,name=iPhone 6,OS=10.0' \
       -xctestrun path/to/file.xctestrun \
       test-without-building
    

    to extract the coverage data with LLVM

    xcrun llvm-cov report -instr-profile /tmp/some/directory/Build/Intermediates/CodeCoverage/Coverage.profdata /tmp/some/directory/Build/Intermediates/CodeCoverage/Products/Debug-iphonesimulator/Example.app/Example
    

    I don't know if its possible to pass xcodebuild those command line arguments using pxctest or if it is something that fbxctest would need to incorporate (or neither).

    opened by ollieatkinson 14
  • 'pxctest run-test ' fails to launch tests

    'pxctest run-test ' fails to launch tests

    I have followed exactly what is given in the RM file. How ever when I execute pxctest run-test, I was always given the error below:

    Error Domain=com.facebook.XCTestBootstrap Code=0

    it opens the application and immediately minimising the application and after while raises the above issue.

    opened by SamuelZhaoY 9
  • `/tmp/test-simulators` is not a `path`

    `/tmp/test-simulators` is not a `path`

    When I try to run this command in my terminal: pxctest boot-simulators --deviceset /tmp/test-simulators --destination 'name=iPhone 6’ --destination 'name=iPhone 7’

    Its says /tmp/test-simulators is not a path.

    My folder structure: Desktop > Github > pxctest > tmp > test-simulators

    screen shot 2017-03-11 at 9 32 21 pm
    opened by Akulavenkatesh 9
  • build.sh not working

    build.sh not working

    At latest master (0.3.2) build fails. (either via Xcode Cmd+B or ./script/build.sh fails) I could work-around it by removing Spectre from embedded Commander.xcodeproj . Homebrew fails with same error.

    $ brew unlink pxctest && brew tap plu/pxctest && brew install pxctest
    Unlinking /usr/local/Cellar/pxctest/0.3.1... 0 symlinks removed
    Updating Homebrew...
    ==> Auto-updated Homebrew!
    Updated 1 tap (homebrew/core).
    ==> Updated Formulae
    amazon-ecs-cli                       jmxtrans                             rtv
    
    ==> Installing pxctest from plu/pxctest
    ==> Cloning https://github.com/plu/pxctest.git
    Updating /Users/a14786/Library/Caches/Homebrew/pxctest--git
    ==> Checking out tag 0.3.2
    ==> ./scripts/build.sh /usr/local/Cellar/pxctest/0.3.2/libexec
    Last 15 lines from /Users/a14786/Library/Logs/Homebrew/pxctest/01.build.sh:
    <unknown>:0: error: no such file or directory: '/tmp/pxctest-20170331-10773-1wigcy1/Dependencies/Commander/.build/checkouts/Spectre.git--7655155069707042687/Sources/Context.swift'
    <unknown>:0: error: no such file or directory: '/tmp/pxctest-20170331-10773-1wigcy1/Dependencies/Commander/.build/checkouts/Spectre.git--7655155069707042687/Sources/Expectation.swift'
    <unknown>:0: error: no such file or directory: '/tmp/pxctest-20170331-10773-1wigcy1/Dependencies/Commander/.build/checkouts/Spectre.git--7655155069707042687/Sources/Failure.swift'
    <unknown>:0: error: no such file or directory: '/tmp/pxctest-20170331-10773-1wigcy1/Dependencies/Commander/.build/checkouts/Spectre.git--7655155069707042687/Sources/Global.swift'
    <unknown>:0: error: no such file or directory: '/tmp/pxctest-20170331-10773-1wigcy1/Dependencies/Commander/.build/checkouts/Spectre.git--7655155069707042687/Sources/GlobalContext.swift'
    <unknown>:0: error: no such file or directory: '/tmp/pxctest-20170331-10773-1wigcy1/Dependencies/Commander/.build/checkouts/Spectre.git--7655155069707042687/Sources/Reporter.swift'
    <unknown>:0: error: no such file or directory: '/tmp/pxctest-20170331-10773-1wigcy1/Dependencies/Commander/.build/checkouts/Spectre.git--7655155069707042687/Sources/Reporters.swift'
    Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc failed with exit code 1
    
    ** BUILD FAILED **
    
    
    The following build commands failed:
    	CompileSwiftSources normal x86_64 com.apple.xcode.tools.swift.compiler
    (1 failure)
    
    If reporting this issue please do so at (not Homebrew/brew or Homebrew/core):
    https://github.com/plu/homebrew-pxctest/issues
    
    opened by toshi0383 6
  • Moved launchedProcessLogs outside of loop in extractDiagnostics

    Moved launchedProcessLogs outside of loop in extractDiagnostics

    @plu The call of launchedProcessLogs() during runs seems to take a lot of time (up to 15 minutes for some of our test schemes). I have moved it outside the for loop and although it still takes a lot of time to retrieve the logs, it is doing so only once per simulator.

    opened by davetobin 5
  • Use pxctest to create simulators

    Use pxctest to create simulators

    Is it possible to create simulators in a specific location, e.g. --deviceset /tmp/test-simulators, without booting them in a headless state using boot-simulators?

    I would like to be able to create simulators, then "run-tests" and delete the simulators once testing has completed.

    Currently, I can use boot-simulators but am forced to run in a headless state using this.

    opened by davetobin 5
  • How to shutdown gracefully the simulators for headless testing?

    How to shutdown gracefully the simulators for headless testing?

    I am trying the headless testing with the boot-simulators command. It looks like new simulator devices are being created and booted in the provided folder (/tmp/test-simulators in your example).

    How can I gracefully shutdown (and possibly delete) the newly created simulator devices after being done with the tests?

    opened by atineoSE 5
  • can't find .xctestrun file

    can't find .xctestrun file

    Hi After running build command I get /var/folders/sc/b19_wblj5bv5wyph7hw5y5b95jc55b/T/SchemeScriptAction-Qjp2Sy: line 2: $: command not found ** TEST BUILD SUCCEEDED ** And i cant see that build/Products file generated.Is there something i missed. And I should inform you also i get the message below while installing it. _

    You are using OS X 10.12. We do not provide support for this pre-release version. You may encounter build failures or other breakages

    _.

    opened by okanerdogan09 5
  • Unable to install - error

    Unable to install - error

    Getting the following error, please advise!

    brew tap plu/pxctest && brew install pxctest

    ` /private/tmp/pxctest20161207-1608-wajtb0/Dependencies/Commander /private/tmp/pxctest20161207-1608-wajtb0 Cloning https://github.com/kylef/Spectre git: The build tool has reset ENV; --env=std required. swift-package: error: No version tag found in (/private/tmp/pxctest20161207-1608-wajtb0/Dependencies/Commander/Packages/Spectre) package. Add a version tag with "git tag" command. Example: "git tag 0.1.0"

    `

    opened by cliren 5
  • Test Scheme Pre-Action not being executed

    Test Scheme Pre-Action not being executed

    I've noticed that Pre-action scripts of test schemes do not get executed. It works when running with Xcode. Should this work with pxctest? Thanks in advance.

    This is where I have the pre-action script:

    image

    opened by davetobin 4
  • Unable to install via homebrew

    Unable to install via homebrew

    This is the output of the command

    brew tap plu/pxctest
    brew install pxctest
    

    Output:

    ==> Installing pxctest from plu/pxctest
    ==> Cloning https://github.com/plu/pxctest.git
    Updating /Users/ignazioc/Library/Caches/Homebrew/pxctest--git
    ==> Checking out tag 0.2.6
    error: no such remote ref f64bef8536fcfc7998df68846460e5adf93be347
    Fetched in submodule path 'Dependencies/FBSimulatorControl', but it did not contain f64bef8536fcfc7998df68846460e5adf93be347. Direct fetching of that commit failed.
    Error: Failed to download resource "pxctest"
    Failure while executing: git submodule -q update --init --recursive
    

    I was able to install only using the HEAD commit.

    ➜  ~ brew install pxctest --HEAD
    ==> Installing pxctest from plu/pxctest
    ==> Cloning https://github.com/plu/pxctest.git
    Updating /Users/ignazioc/Library/Caches/Homebrew/pxctest--git
    ==> Checking out branch master
    ==> ./scripts/build.sh /usr/local/Cellar/pxctest/HEAD-c4d456a/libexec
    🍺  /usr/local/Cellar/pxctest/HEAD-c4d456a: 227 files, 9.9M, built in 50 seconds
    ➜  ~
    

    Additional info:

    ➜  ~ brew --version
    Homebrew 1.1.2
    Homebrew/homebrew-core (git revision ac83; last commit 2016-12-01)
    ➜  ~ git --version
    git version 2.9.3 (Apple Git-75)
    
    opened by ignazioc 3
  • I tried pxctest on Xcode 9 beta and I get

    I tried pxctest on Xcode 9 beta and I get "Abort trap: 6" on every command

    I tried pxctest on Xcode 9 beta and I get "Abort trap: 6" on every command.

    cbennett-70ap:iOSxm8 i58288$ sudo xcode-select -s ../../.././../../../../Applications/Xcode-beta.app/Contents/Developer/
    Password:
    cbennett-70ap:iOSxm8 i58288$ pxctest     run-tests     --destination 'name=iPad Air 2,os=iOS 10.3'     --testrun build/Products/iOSxm8_iphonesimulator11.0-x86_64.xctestrun
    Abort trap: 6
    cbennett-70ap:iOSxm8 i58288$ pxctest     run-tests     --destination 'name=iPad Air 2,os=iOS 11.0'     --testrun build/Products/iOSxm8_iphonesimulator11.0-x86_64.xctestrun
    Abort trap: 6
    cbennett-70ap:iOSxm8 i58288$ pxctest run-tests --help
    Abort trap: 6
    cbennett-70ap:iOSxm8 i58288$ 
    

    Any support for Xcode beta?

    screen shot 2017-08-17 at 3 41 32 pm

    opened by bennet3 2
  • brew install pxctest fails

    brew install pxctest fails

    ➜  github brew install pxctest                     
    Updating Homebrew...
    ==> Installing pxctest from plu/pxctest
    ==> Cloning https://github.com/plu/pxctest.git
    Updating /Users/dmytrogolub/Library/Caches/Homebrew/pxctest--git
    ==> Checking out tag 0.3.3
    ==> ./scripts/build.sh /usr/local/Cellar/pxctest/0.3.3/libexec
    Last 15 lines from /Users/dmytrogolub/Library/Logs/Homebrew/pxctest/01.build.sh:
               ^
    /tmp/pxctest-20170507-41569-1606bgn/PXCTestKit/Extension/String+PXCTestKit.swift:9:8: error: could not build Objective-C module 'CommonCrypto'
    import CommonCrypto
           ^
    
    ** BUILD FAILED **
    
    
    The following build commands failed:
    	CompileSwift normal x86_64 /tmp/pxctest-20170507-41569-1606bgn/PXCTestKit/Reporter/TestReporter.swift
    	CompileSwift normal x86_64 /tmp/pxctest-20170507-41569-1606bgn/PXCTestKit/Command/RunTests/RunTestsReporters.swift
    	CompileSwift normal x86_64 /tmp/pxctest-20170507-41569-1606bgn/PXCTestKit/Command/RunTests/RunTestsPartitionManager.swift
    	CompileSwift normal x86_64 /tmp/pxctest-20170507-41569-1606bgn/PXCTestKit/FileReader.swift
    	CompileSwiftSources normal x86_64 com.apple.xcode.tools.swift.compiler
    (5 failures)
    
    If reporting this issue please do so at (not Homebrew/brew or Homebrew/core):
    https://github.com/plu/homebrew-pxctest/issues
    

    the failure seems to be happening due to the following line in module.modulemap of CommonCrypto.framework

    module CommonCrypto [system] {
        header "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/CommonCrypto/CommonCrypto.h"
        export *
    }
    

    I have few versions of Xcode installed and none of them is in Applications folder. Changing the path to my Xcode location fixed the problem. Not sure how to fix it for any Xcode location.

    opened by pigeon 0
  • Time out waiting for all required services

    Time out waiting for all required services

    Anyone seeing this issue?, my simulators are boots however the test never starts.

    Error Domain=com.facebook.FBSimulatorControl Code=0 "Timed out waiting for all required services [com.apple.SpringBoard, com.apple.medialibraryd, com.apple.backboardd, com.apple.mobile.installd, com.apple.SimulatorBridge] to start" UserInfo={NSLocalizedDescription=Timed out waiting for all required services [com.apple.SpringBoard, com.apple.medialibraryd, com.apple.backboardd, com.apple.mobile.installd, com.apple.SimulatorBridge] to start}

    opened by amesandy-zz 0
  • Has anyone used partitions?

    Has anyone used partitions?

    Has anyone used partition? if so, is it working fine?I would also like to implement splitting my scheme into 2 simulators, I am using a different way but I think this would be easier.

    opened by amesandy-zz 1
Releases(0.3.3)
Owner
Johannes Plunien
Random Engineer, currently working at eBay on the Kleinanzeigen iOS app.
Johannes Plunien
Shows your current framerate (fps) in the status bar of your iOS app

WatchdogInspector Shows your current framerate (fps) in the status bar of your iOS app Be a good citizen! Don't block your main thread! WatchdogInspec

Christian Menschel 510 Nov 24, 2022
All new design. Inspect your iOS application at runtime.

Peek: All new design Peek 5 with an all new design and all new features. Whether you're a developer, designer or QA/tester, Peek can help you at all s

Shaps 2.6k Dec 17, 2022
An iOS app decrypter, full static using fouldecrypt.

Iridium An iOS app decrypter, full static using fouldecrypt. Supporting iOS 13+ Note We have built everything into the package, you can install and fl

Lakr Aream 234 Jan 9, 2023
An iOS app decrypter, full static using fouldecrypt.

Iridium An iOS app decrypter, full static using fouldecrypt. Supporting iOS 13+ Note We have built everything into the package, you can install and fl

Lakr Aream 226 Dec 24, 2022
Build native iOS, Android, and Web apps with Capacitor and Remix.run 💿

This repository holds production ready Capacitor templates for building native mobile applications using Remix. Using Capacitor, you can quickly build out a native mobile application for iOS and Android using web technology, such as Remix.

Ionic 70 Dec 30, 2022
A repository that demonstrates the difficulty to run async tests with Xcode 13.2 beta on pre iOS-15 simulators

A repository that demonstrates the difficulty to run async tests with Xcode 13.2 beta on pre iOS-15 simulators This demonstration uses an iOS 13.7 sim

Gwendal Roué 0 Nov 1, 2021
Fast, non-deadlocking parallel object cache for iOS, tvOS and OS X

PINCache Fast, non-deadlocking parallel object cache for iOS and OS X. PINCache is a fork of TMCache re-architected to fix issues with deadlocking cau

Pinterest 2.6k Dec 28, 2022
Write unit tests which test the layout of a view in multiple configurations

Overview This library enables you to write unit tests which test the layout of a view in multiple configurations. It tests the view with different dat

LinkedIn 565 Nov 16, 2022
Control Room : a macOS app that lets you control the simulators for iOS, tvOS, and watchOS

Control Room is a macOS app that lets you control the simulators for iOS, tvOS, and watchOS – their UI appearance, status bar configuration, and more.

null 0 Nov 30, 2021
Command line utility to create a list of installed iOS simulators, for use with SwiftUI previews.

Installed-simulators - Command line utility to create a list of installed iOS simulators, for use with SwiftUI previews.

Casey Liss 18 Aug 19, 2022
🏇 A Swift HTTP / HTTPS networking library just incidentally execute on machines

Thus, programs must be written for people to read, and only incidentally for machines to execute. Harold Abelson, "Structure and Interpretation of Com

John Lui 845 Oct 30, 2022
Swift code to programmatically execute local or hosted JXA payloads without using the on-disk osascript binary

Swift code to programmatically execute local or hosted JXA payloads without using the on-disk osascript binary. This is helpful when you have Terminal access to a macOS host and want to launch a JXA .js payload without using on-disk osascript commands.

Cedric Owens 20 Sep 27, 2022
A declarative, thread safe, and reentrant way to define code that should only execute at most once over the lifetime of an object.

SwiftRunOnce SwiftRunOnce allows a developer to mark a block of logic as "one-time" code – code that will execute at most once over the lifetime of an

Thumbtack 8 Aug 17, 2022
A external macos application to generate and execute tuist commands

Tuist Menu Bar App An external macos application to generate and execute tuist commands. How it works? Parses all tasks and their arguments with the -

Aytug Sevgi 3 May 25, 2022
Mathias Köhnke 1.1k Dec 16, 2022
Swift Package with examples of how to tests iOS apps

GimmeTheCodeTDD A swift package with examples of unit tests in iOS development. Requirements Xcode 13 Content Dependency Injection Constructor Injecti

Dominik Hauser 8 Oct 11, 2021
Swift iOS app that tests if you are depressed

Depressed? is an app that asks you the nine questions from the PHQ-9 questionnaire to determine if you are depressed. The questionnaire is implemented

Christian Lobach 92 Dec 16, 2022
Library for unifying the approach to network mocking in iOS unit- & UI-tests.

TinkoffMockStrapping Example To run the example project, clone the repo, and run pod install from the Example directory first. Requirements Installati

Online financial ecosystem 22 Jan 3, 2023
Upload failing iOS snapshot tests cases to S3

Second Curtain If you're using the cool FBSnapshotTestCase to test your iOS view logic, awesome! Even better if you have continuous integration, like

Ash Furrow 129 Sep 6, 2022
A collection of useful test helpers designed to ease the burden of writing tests for iOS applications.

MetovaTestKit is a collection of useful test helpers designed to ease the burden of writing tests for iOS applications. Requirements Installation Usag

null 23 Aug 29, 2021