<commit_before>A Practical Introduction to iOS Automation with Illuminator
===========================================================

For [this author](http://github.com/ifreecarve/), the [technical documentation](./) can only go so far toward explaining how to use any new system, and more practical guide is more valuable.  This is that guide.

At this point, you should have taken care of the basics:

1. Downloaded the repository, or otherwise placed Illuminator on your machine
2. Run `bundle install` to bring in the appropriate Ruby gems

Let's bootstrap a project -- the Illuminator sample app.


Important Questions To Ask
--------------------------

Since we plan on running more than one automated test in a row against the app, we need a way to return the app to a known state -- no matter what!  One of the simplest ways to do this is to simply connect a reset function to an action that is available on all the screens (like the shake gesture).  At PayPal, we use a [bridge call](Bridge.md) named `resetToLogin:`.  The included sample app uses a bridge call named `resetToMainMenu:`.  Any action that can be invoked from any app state is acceptable, and must be tied to application code that returns the app to a known state.  **How will you implement this in your app?**

Since different devices can cause subtle changes in the behavior of any app, it may be necessary to perform the same action in slightly different ways.  Alternatively, two separate compilation targets (iPhone and iPad) may produce 2 separate apps but share a large amount of code -- allowing a large amount of shared automation code.  At PayPal, these translate into the automation target implementations `iPhone` and `iPad`.  These labels are completely arbitrary; they are functionally unrelated to the device names.  They could just as well be called `phone` and `tablet`, or be split into more functional variants like `short iPhone`, `tall iPhone`, `tablet`, and `phablet`.  **How many screen-specific variants of your app did you write?**<commit_msg>[docs] Refer to installation doc<commit_after>A Practical Introduction to iOS Automation with Illuminator
===========================================================

For [this author](http://github.com/ifreecarve/), the [technical documentation](./) can only go so far toward explaining how to use any new system, and more practical guide is more valuable.  This is that guide.

At this point, you should have at least [installed](Installation.md) Illuminator.

Let's bootstrap a project -- the Illuminator sample app.


Important Questions To Ask
--------------------------

Since we plan on running more than one automated test in a row against the app, we need a way to return the app to a known state -- no matter what!  One of the simplest ways to do this is to simply connect a reset function to an action that is available on all the screens (like the shake gesture).  At PayPal, we use a [bridge call](Bridge.md) named `resetToLogin:`.  The included sample app uses a bridge call named `resetToMainMenu:`.  Any action that can be invoked from any app state is acceptable, and must be tied to application code that returns the app to a known state.  **How will you implement this in your app?**

Since different devices can cause subtle changes in the behavior of any app, it may be necessary to perform the same action in slightly different ways.  Alternatively, two separate compilation targets (iPhone and iPad) may produce 2 separate apps but share a large amount of code -- allowing a large amount of shared automation code.  At PayPal, these translate into the automation target implementations `iPhone` and `iPad`.  These labels are completely arbitrary; they are functionally unrelated to the device names.  They could just as well be called `phone` and `tablet`, or be split into more functional variants like `short iPhone`, `tall iPhone`, `tablet`, and `phablet`.  **How many screen-specific variants of your app did you write?**
{'fraction_non_alphanumeric': 0.09366391184573003, 'fraction_numerical': 0.0010017530678687703, 'mean_word_length': 4.262187088274045, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5190385', 'n_tokens_mistral': 941, 'n_tokens_neox': 889, 'n_words': 602}