Showing preview only (996K chars total). Download the full file or copy to clipboard to get everything.
Repository: xmartlabs/Eureka
Branch: master
Commit: 028ef8e3191a
Files: 162
Total size: 943.5 KB
Directory structure:
gitextract_b_rh3mc8/
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ ├── ISSUE_TEMPLATE.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ └── workflows/
│ └── ci.yml
├── .gitignore
├── CHANGELOG.md
├── CONTRIBUTING.md
├── Documentation/
│ ├── Eureka 2.0 Migration Guide.md
│ └── README_CN.md
├── Eureka.playground/
│ ├── Contents.swift
│ ├── contents.xcplayground
│ ├── playground.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ └── IDEWorkspaceChecks.plist
│ └── timeline.xctimeline
├── Eureka.podspec
├── Eureka.xcodeproj/
│ ├── project.pbxproj
│ ├── project.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ └── IDEWorkspaceChecks.plist
│ └── xcshareddata/
│ └── xcschemes/
│ └── Eureka.xcscheme
├── Eureka.xcworkspace/
│ ├── contents.xcworkspacedata
│ └── xcshareddata/
│ └── IDEWorkspaceChecks.plist
├── Example/
│ ├── EmojiCell.xib
│ ├── Example/
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets/
│ │ │ ├── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── Contents.json
│ │ │ ├── Eureka.imageset/
│ │ │ │ └── Contents.json
│ │ │ ├── checkedDay.imageset/
│ │ │ │ └── Contents.json
│ │ │ ├── map_pin.imageset/
│ │ │ │ └── Contents.json
│ │ │ ├── plus_image.imageset/
│ │ │ │ └── Contents.json
│ │ │ ├── selected.imageset/
│ │ │ │ └── Contents.json
│ │ │ ├── selectedRectangle.imageset/
│ │ │ │ └── Contents.json
│ │ │ ├── uncheckedDay.imageset/
│ │ │ │ └── Contents.json
│ │ │ ├── unselected.imageset/
│ │ │ │ └── Contents.json
│ │ │ └── unselectedRectangle.imageset/
│ │ │ └── Contents.json
│ │ ├── Base.lproj/
│ │ │ ├── EurekaSectionHeader.xib
│ │ │ ├── LaunchScreen.storyboard
│ │ │ ├── Main.storyboard
│ │ │ └── WeekDaysCell.xib
│ │ ├── Controllers/
│ │ │ ├── CustomCellsViewController.swift
│ │ │ ├── CustomDesignController.swift
│ │ │ ├── DisabledRowsExample.swift
│ │ │ ├── FieldRowCustomizationController.swift
│ │ │ ├── FormatterExample.swift
│ │ │ ├── HiddenRowsExample.swift
│ │ │ ├── InlineRowsExample.swift
│ │ │ ├── ListSectionsController.swift
│ │ │ ├── MultivaluedExamples.swift
│ │ │ ├── NativeEventExample.swift
│ │ │ ├── NavigationAccessoryController.swift
│ │ │ ├── PlainTableViewExample.swift
│ │ │ ├── RowsExample.swift
│ │ │ ├── SwipeActionsController.swift
│ │ │ └── ValidationsController.swift
│ │ ├── CustomCells.swift
│ │ ├── CustomDesign/
│ │ │ ├── DatePickerCell.xib
│ │ │ ├── SwitchCell.xib
│ │ │ └── TextCell.xib
│ │ ├── CustomRows/
│ │ │ └── ImageRow/
│ │ │ ├── ImagePickerController.swift
│ │ │ └── ImageRow.swift
│ │ ├── Helpers/
│ │ │ └── FloatLabelTextField.swift
│ │ ├── Info.plist
│ │ └── ViewController.swift
│ └── UITests/
│ ├── FieldRowUITests.swift
│ └── Info.plist
├── Example.xcodeproj/
│ ├── project.pbxproj
│ ├── project.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ └── IDEWorkspaceChecks.plist
│ └── xcshareddata/
│ └── xcschemes/
│ └── Example.xcscheme
├── LICENSE
├── Package.swift
├── README.md
├── Source/
│ ├── Assets.xcassets/
│ │ └── Contents.json
│ ├── Core/
│ │ ├── BaseRow.swift
│ │ ├── Cell.swift
│ │ ├── CellType.swift
│ │ ├── Core.swift
│ │ ├── Form.swift
│ │ ├── HeaderFooterView.swift
│ │ ├── Helpers.swift
│ │ ├── InlineRowType.swift
│ │ ├── NavigationAccessoryView.swift
│ │ ├── Operators.swift
│ │ ├── PresenterRowType.swift
│ │ ├── ResultBuilders.swift
│ │ ├── Row.swift
│ │ ├── RowControllerType.swift
│ │ ├── RowProtocols.swift
│ │ ├── RowType.swift
│ │ ├── Section.swift
│ │ ├── SelectableRowType.swift
│ │ ├── SelectableSection.swift
│ │ ├── SwipeActions.swift
│ │ └── Validation.swift
│ ├── Eureka.h
│ ├── Info.plist
│ ├── PrivacyInfo.xcprivacy
│ ├── Rows/
│ │ ├── ActionSheetRow.swift
│ │ ├── AlertRow.swift
│ │ ├── ButtonRow.swift
│ │ ├── ButtonRowWithPresent.swift
│ │ ├── CheckRow.swift
│ │ ├── Common/
│ │ │ ├── AlertOptionsRow.swift
│ │ │ ├── DateFieldRow.swift
│ │ │ ├── DateInlineFieldRow.swift
│ │ │ ├── DecimalFormatter.swift
│ │ │ ├── FieldRow.swift
│ │ │ ├── GenericMultipleSelectorRow.swift
│ │ │ ├── OptionsRow.swift
│ │ │ ├── Protocols.swift
│ │ │ └── SelectorRow.swift
│ │ ├── Controllers/
│ │ │ ├── MultipleSelectorViewController.swift
│ │ │ ├── SelectorAlertController.swift
│ │ │ └── SelectorViewController.swift
│ │ ├── DateInlineRow.swift
│ │ ├── DatePickerRow.swift
│ │ ├── DateRow.swift
│ │ ├── DoublePickerInputRow.swift
│ │ ├── DoublePickerRow.swift
│ │ ├── FieldsRow.swift
│ │ ├── LabelRow.swift
│ │ ├── MultipleSelectorRow.swift
│ │ ├── PickerInlineRow.swift
│ │ ├── PickerInputRow.swift
│ │ ├── PickerRow.swift
│ │ ├── PopoverSelectorRow.swift
│ │ ├── PushRow.swift
│ │ ├── SegmentedRow.swift
│ │ ├── SelectableRows/
│ │ │ └── ListCheckRow.swift
│ │ ├── SliderRow.swift
│ │ ├── StepperRow.swift
│ │ ├── SwitchRow.swift
│ │ ├── TextAreaRow.swift
│ │ ├── TriplePickerInputRow.swift
│ │ └── TriplePickerRow.swift
│ └── Validations/
│ ├── RuleClosure.swift
│ ├── RuleEmail.swift
│ ├── RuleEqualsToRow.swift
│ ├── RuleLength.swift
│ ├── RuleRange.swift
│ ├── RuleRegExp.swift
│ ├── RuleRequired.swift
│ └── RuleURL.swift
└── Tests/
├── BaseEurekaTests.swift
├── CallbacksTests.swift
├── CollectionTests.swift
├── DateTests.swift
├── FormValuesTests.swift
├── HelperMethodTests.swift
├── HiddenRowsTests.swift
├── Info.plist
├── MultivaluedSectionTests.swift
├── OperatorsTest.swift
├── ResultBuildersTests.swift
├── RowByTagTests.swift
├── RowCallbackTests.swift
├── RowsInsertionTests.swift
├── SectionsInsertionTests.swift
├── SelectableSectionTests.swift
├── SetValuesTests.swift
└── ValidationsTests.swift
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms
github: xmartlabs # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve. Please make sure to search for existing
issues or in the Readme before posting.
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Versions (please complete the following information):**
- Device: [e.g. iPhone 13]
- OS: [e.g. iOS 15.0]
- Eureka Version [e.g. 5.3.5]
- Xcode version [e.g. 13.1]
**Additional context**
Add any other context about the problem here. Console output, stack traces, etc.
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: 'type: feature request'
assignees: ''
---
**Before submitting...**
Please check whether such a feature has already been requested.
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================
Before submitting issues ...
- Make sure you are using Eureka [latest release](https://github.com/xmartlabs/Eureka/releases) or master branch version.
- Make sure your Xcode version is the latest stable one.
- Check if the issue was [already reported or fixed](https://github.com/xmartlabs/Eureka/issues?utf8=%E2%9C%93&q=is%3Aissue). We add labels to each issue in order to easily find related issues. If you found a match add a brief comment "I have the same problem" or "+1".
When submitting issues, please provide the following information to help maintainers to fix the problem faster:
- Environment: Eureka, Xcode and iOS version you are using.
- In case of reporting errors, provide Xcode console output of stack trace or code compilation error.
- Any other additional detail such as your eureka form/section/row code that you think it would be useful to understand and solve the problem.
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
================================================
FILE: .github/workflows/ci.yml
================================================
name: Eureka CI
on:
pull_request:
push:
branches:
- master
jobs:
iOS:
runs-on: macos-12
strategy:
matrix:
destination: ['platform=iOS Simulator,OS=16.0,name=iPhone 14']
steps:
- uses: actions/checkout@v2
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: '14.0.1'
- name: Build and test
run: set -o pipefail && xcodebuild -project Eureka.xcodeproj -scheme 'Eureka' -sdk 'iphonesimulator' -destination "${{ matrix.destination }}" -configuration Debug test | xcpretty
================================================
FILE: .gitignore
================================================
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
*.xcscmblueprint
.LSOverride
# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control
#
# Pods/
# Carthage
#
# Add this line if you want to avoid checking in source code from Carthage dependencies.
# Carthage/Checkouts
Carthage/Build
================================================
FILE: CHANGELOG.md
================================================
# Change Log
All notable changes to this project will be documented in this file.
### [5.5.0](https://github.com/xmartlabs/Eureka/releases/tag/5.5.0)
* Created PrivacyInfo file (#2255)
### [5.4.0](https://github.com/xmartlabs/Eureka/releases/tag/5.4.0)
* Renamed several methods that clashed with private Obj-C methods and triggered warnings when uploading to App Store (#2231)
* Other minor fixes (#2220, #2222)
### [5.3.6](https://github.com/xmartlabs/Eureka/releases/tag/5.3.6)
* Fixed done button issue in keyboard (#2213)
### [5.3.5](https://github.com/xmartlabs/Eureka/releases/tag/5.3.5)
* Fix a compiler error in Xcode 13 (#2162)
* Change CI to GitHub Actions and remove Travis (#2185)
* Fix crash when user taps tab key on external keyboard (#2205)
* Other minor fixes (#2191, #2206, #2183)
### [5.3.4](https://github.com/xmartlabs/Eureka/releases/tag/5.3.4)
* Resolve class protocol inheritance warnings (#2151)
* Fix Chinese input issue (#2150) …
* Specific special characters are allowed in the username of an email address (#2160)
* Fix SliderRow not rendering properly (#2166)
### [5.3.3](https://github.com/xmartlabs/Eureka/releases/tag/5.3.3)
* Add option for different ScrollPosition behavior on keyboard appearance (#2112)
* Prefix Eureka to certain class names to avoid clashes with other pods (#2113)
* Remove the default header title of section (#2128)
* Modify hugging priority for PasswordRow (#2129)
* Add replace method for all sections (#2105)
* Fix: Non-public API usage (valueChanged, datePickerValueChanged) (#2130)
* Fix: remove EXCLUDED_ARCHS build setting to support M1 mac iphone simulator (#2137)
* Fix: removeAll method in sections (#2141)
### [5.3.2](https://github.com/xmartlabs/Eureka/releases/tag/5.3.2)
* Make tableViewStyle public (#2092)
* Fix CountDown rows crash (#2095)
* Make ValidationRuleHelper's rule property public. (#2101)
* Fix for building with Carthage and Xcode 12 (#2104)
### [5.3.1](https://github.com/xmartlabs/Eureka/releases/tag/5.3.1)
* Fix building for Mac Catalyst on Xcode 12 (#2078)
* Fix datePickerStyle for DateFieldRow and DatePickerCell (#2077)
* Adjust font size of PasswordRow to avoid dots (#2080)
### [5.3.0](https://github.com/xmartlabs/Eureka/releases/tag/5.3.0)
* Reload rows on viewWillAppear for iOS 12 and below. (#2029)
* Change validation functions access level to open (#2049)
* Start editing field rows at the end when tapping blank space in row (#2046)
* Update SelectorViewController.swift (#2062)
* Fix subtitle field row constraints (#2069)
* Create a workaround for Swift crash (#2057, #2061)
* Fix date row style/rendering issues for iOS 14 (#2067)
### [5.2.1](https://github.com/xmartlabs/Eureka/releases/tag/5.2.1)
* Mark `tableView:editActionsForRowAt` as deprecated (#2000)
* Removes unwanted assertionFailure Core.swift Navigation (#1998)
* Fix for crash in iOS 13.4 with Xcode 11.4 (#2008)
### [5.2.0](https://github.com/xmartlabs/Eureka/releases/tag/5.2.0)
* *Support for Swift Package Manager* (#1976)
* Add GenericMultivaluedSection to allow changing add button (#1843)
* Remove InputTypeInitiable constraint for PickerInputRow (#1975)
* Fix: avoid reloading rows in viewWillAppear when tableView is not added to window (#1971)
* Fix optional header and footer in SelectorViewController. (#1962)
* Fix table view contentInset adjustment with safe area when keyboard shows (#1960)
* Fix for iOS 13 that was not removing the row automatically anymore even after calling the completion handler in a destructive swipe action (#1944)
* Fixed reference cycle (#1930)
* Allows a section's header and footer to be `nil` (#1927)
### [5.1.0](https://github.com/xmartlabs/Eureka/releases/tag/5.1.0)
* Support for Xcode 11 and iOS 13
* Added dark mode support
### [5.0.1](https://github.com/xmartlabs/Eureka/releases/tag/5.0.1)
* Added `quietly` parameter for use with non-ui validation (#1817)
* RuleMinLength (and others) now pass for nil and empty strings.
* iOS deployment target back on iOS 9.0
* Several other fixes
### [5.0.0](https://github.com/xmartlabs/Eureka/releases/tag/5.0.0)
* Bug fixes and stability improvements
* iOS deployment target increased to iOS9.3
### [4.3.1](https://github.com/xmartlabs/Eureka/releases/tag/4.3.1)
* Bug fixes and stability improvements
### [4.3.0](https://github.com/xmartlabs/Eureka/releases/tag/4.3.0)
* Changes for Swift 4.2, Xcode 10 and iOS 12
* Add ability to customise the text color of UIPickerView used by PickerRow
* Make `onPresent` result discardable
* Add `insert(row: after:)` method on Section which allows inserting rows after a hidden row
* Other minor fixes
### [4.2.0](https://github.com/xmartlabs/Eureka/releases/tag/4.2.0)
* Adding support for RowType.subtitle on FieldRow (#1468)
* CompletionHandler for SwipeAction under iOS < 11
* Allow setting position of the cell after scrolling (#1452)
* Add Chinese readme (#1487)
* Implement readOnly textAreaRow feature (#1489)
* Update cell when tintColor changes (#1492)
* PickerRow for 2 and 3 components (#1540)
* And several bug fixes
### [4.1.1](https://github.com/xmartlabs/Eureka/releases/tag/4.1.1)
* Bug fixes and stability improvements.
### [4.1.0](https://github.com/xmartlabs/Eureka/releases/tag/4.1.0)
* Add compatibility for Xcode 9.3 beta 2 and Swift 4.1.
* New functionality 🎉. https://github.com/xmartlabs/eureka#swipe-actions. Thanks [@marbetschar](https://github.com/marbetschar).
* Add sectionIndexTitles and sectionForSectionIndexTitles to FormViewController to allow for subclasses to override.
* Fix SliderRow layout.
* Fix regular expression for URLs to allow query and location parameter.
* Corrected issue in section sorting function of MultipleSelectorViewController, where all options were placed in one section, with a section title based on the first option.
* Added missing call to super.updateConstraints in SegmentedCell.
* Add ability to setup alert cancel title from AlertRow.
* remove blank section headers/footers from plain tables on iOS 11. This prevents blank section headers and footers from appearing on iOS
11 when setting the table view style to plain and there are no headers
or footers.
* Fix UIDatePicker bug when mode == .countDownTimer.
* Allow non-selectable rows to exist besides selectable rows in a selectable section.
* SliderRow - added option 'shouldHideValue' to hide value label (default to false).
* Update cell when tintColor changes.
* Support dynamic font size changes.
### [4.0.0](https://github.com/xmartlabs/Eureka/releases/tag/4.0.0)
* Xcode 9, Swift 4 support.
* Add the values of MultivaluedSection into form.values().
### [3.1.0](https://github.com/xmartlabs/Eureka/releases/tag/3.1.0)
Bug fixes & stability improvements:
* Fixed how sections and rows are inserted using subscripts
* Fixed issue with disbled rows in selectable sections. Disabled rows were still selectable.
* Multivalued section does not display image in imagerow #977
* Improve currency formatter #1103
* Added option to use accessory view in ImageCheckCell
* Exact length validation (new feature)
* Change validation on demand behaviour when row was not valid (#1148)
* Move FormDelegate methods to `FormViewController` class to make it extensible and customizable.
* The slider was not being disabled when the row was disabled.
### [3.0.0](https://github.com/xmartlabs/Eureka/releases/tag/3.0.0)
Bug fixes & stability improvements:
* CountDownRow prints Date as Optional #683
* defaultOnCellHighlightChanged event not being called #704
* Error when compiling CustomRow with Swift 3.0 #693
* Fix strange animation when using `insertAtIndex` to add a new section to the form. #566
* Ability to customize validation message.
* New RuleEqualsToRow validation rule.
* fix RuleMaxLength & RuleMinLength issues. #729
* avoid `animateAlongsideTransition(in:` that could cause transition animation interruption.
* Fix initialisation of SliderRow when it has no value at start.
* Added isExpanded & isCollapsed helpers to InlineRowType.
* fix #800, added form.validate() argument to indicate if hiddenRows should be considered.
* Fix issue when showing StepperRow value. Now we use displayValueFor as we do with the rest of rows.
* Added PickerInputRow #818
* Fix an issue when FieldCell has a Formatter and the formatter is not used during text editing #796, #768
* Tapping inside an enabled text area row crashes #795
* Added ability to change scroll position when a row is selected.
* Added ability to specify that regex validation allows empty values.
* Changed the Access Control of Class RuleRegExp to be open.
* Implement init?(coder: NSCoder) for some cell types #860
* Removed fatalError from init(coder:) for selector view controllers #882
* Always call onSelectSelectableRow, added properties to control selector vc dismissal.
* Reload the tableView even if it is not added to a window.
* Adds 'cell.row.wasChanged' to check for cell validation.
* Added ability to group options of PushRow MultipleSelectorRow by adding sections to the selector table view.
* fix #887, TextAreaRow adds an enter when pressing next on keyboard coming from another row.
* Minor fix on how SliderRow update method is called.
* Adds RuleClosure example in code comments.
* Removing the forced navigationAccessoryView.tintColor set #921.
Thanks to all contributors!! 🍻🍻🍻🍻🍻🍻
### [2.0.1](https://github.com/xmartlabs/Eureka/releases/tag/2.0.1)
* Bug fixes and stability improvements.
### [2.0.0-beta.1](https://github.com/xmartlabs/Eureka/releases/tag/2.0.0)
Pull requests associated with this milestone can be found in this [filter](https://github.com/xmartlabs/Eureka/issues?utf8=%E2%9C%93&q=milestone%3A2.0.0%20).
We have made tons of changes to the Eureka API to follow the new Swift API design guidelines.
It's hard to enumerate all changes and most of them will be automatically suggested by Xcode.
We have also added to Eureka a extensible build-in validations support.
These are the most important changes...
#### Deleted
* `PostalAddressRow` was removed.
* `ImageRow` was removed.
You can find these both rows under [EurekaCommunity] github organization.
* Row's `func highlightCell()`
* Row's `func unhighlightCell()`
* Cell's `func highlight()`
* Cell's `func unhighlight()`
* Cell's `func didSelect()`
#### Added
* Rows's `var isHighlighted: Bool`.
* Rows's `var isValid: Bool`.
* Row's `func onCellHighlightChanged(_ callback: @escaping (_ cell: Cell, _ row: Self)->()) -> Self `.
* Row's `func onRowValidationChanged(_ callback: @escaping (_ cell: Cell, _ row: Self)->()) -> Self`.
* Row's `func validate() -> [ValidationError]`
* Form's `func validate() -> [ValidationError]`
* Row's `func add<Rule: RuleType>(rule: Rule)`
* Row's `func remove(ruleWithIdentifier: String)`
* `RuleSet<T: Equatable>` type.
* `ValidationOptions` Enum type.
* `RuleType` protocol.
* `ValidationError` type.
##### Fixes
* Fixed textlabel alignment for cells with custom constraints (FieldRow, SegmentedRow, TextAreaRow).
* Set 'Require Only App-Extension-Safe API' to YES to enable code sharing in App Extensions.
* Other bug fixes and minor improvements
Take a look at [2.0.0 Migration guide]() for more information on how to solve breaking changes.
### [1.7.0](https://github.com/xmartlabs/Eureka/releases/tag/1.7.0)
* **Breaking change**: Fixed typo in `hightlightCell`. You must now call / override `highlightCell`.
* Added `allSections` method to Form. (by @programmarchy)
* Updated navigation images for row navigation. (thanks @VladislavJevremovic)
* Removed +++= operator.
* Other bug fixes and minor improvements
### [1.6.0](https://github.com/xmartlabs/Eureka/releases/tag/1.6.0)
* **Breaking change**: Remove controller: FormViewController parameter from HeaderFooterViewRepresentable `viewForSection` method.
* Support for Xcode 7.3.1.
* Fixed ImageRow issue when trying to access imageURL after selecting image. Now imageURL is properly set up. #346
* Made FieldRowConformance protocol public.
* Added ability to override TextAreaRow constraints.
* Fix. Now section headerView/footerView cache is deleted whenever section header/footer is assigned.
* Made public `navigateToDirection(direction: Direction)` method.
* Fixed autolayout in cells. #396
* Removed cell.setNeedsLayout() and cell.setNeedsUpdateConstraints() from updateCell process.
* Added `ButtonRow` `onCellSelecttion` example.
* Improve row deselection behavior during interactive transitions. #406
* Autosize TextAreaRow functionality added.
* Moved `inputAccessoryViewForRow` method from extension to FormViewController allowing it to be overridden.
* Added ability to show a text when there is no value selected to some rows.
* Fixed: The top divider of a PickerInlineRow disappears upon selection.
* Fixed crash when selecting a date. DatePickerRow.
* Ensure inline row is visible when it’s expanded.
* Fixed PostalAddressRow - When a long form is scrolled up/down, values in Address box disappears.
### [1.5.0](https://github.com/xmartlabs/Eureka/releases/tag/1.5.0)
* Xcode 7.3 support.
* Expose a public `KeyboardReturnTypeConfiguration` initializer.
* Allow to override constraints of FieldRow.
* Fixed SelectableSection wrong behaviour when the selectable rows was added to the section before adding the selectable section to the form.
* Implemented StepperRow and added an example to the example project.
* Allow AlertRow cancel title to be changed.
* Enabled CI UI testing and added some tests.
* Fixed "0 after decimal separator (DecimalRow)"
* Added ability to customize selector and multiple selector view controller option rows. Added `selectableRowCellUpdate` property to `SelectorViewController` and `MultipleSelectorViewController`.
* Performance improvement. Store values for each tag in a dictionary and do not calculate it every time we evaluateHidden.
### [1.4.1](https://github.com/xmartlabs/Eureka/releases/tag/1.4.1)
Released on 2016-02-25.
##### Breaking Changes
* `SelectorRow` now requires the cell among its generic values. This means it is easier to change the cell for a selector row.
* `_AlertRow` and `_ActionSheetRow` require generic cell parameter
If you are using custom rows that inherit from SelectorRow then you might want to change them as follows (or use your custom cell):
```
// before
// public final class LocationRow : SelectorRow<CLLocation, MapViewController>, RowType
// now
public final class LocationRow : SelectorRow<CLLocation, MapViewController, PushSelectorCell<CLLocation>>, RowType
```
### [1.4.0](https://github.com/xmartlabs/Eureka/releases/tag/1.4.0)
Released on 2016-02-25.
* PopoverSelectorRow added.
* BaseRow reload, select, deselect helpers added.
* ImageRow update: allows clear button, image sources are public
* Added PostalAddressRow
* Lots of smaller bug fixes and new documentation
##### Breaking Changes
* `BaseCellType` protocol method `func cellBecomeFirstResponder() -> Bool` was renamed to `func cellBecomeFirstResponder(direction: Direction) -> Bool`
If you are using custom rows you may have to fix the compiler error by adding the new parameter.
* DecimalRow value type changed from Float to Double.
### [1.3.1](https://github.com/xmartlabs/Eureka/releases/tag/1.3.1)
Released on 2016-01-11.
* Bug fixes and stability improvements.
### [1.3.0](https://github.com/xmartlabs/Eureka/releases/tag/1.3.0)
Released on 2015-12-08.
* Memory leak fix.
* Removed HeaderFooterView inits from Section.
* Removed HeaderFooterView inits from Section
* Added documentation for Section Header and Footer
* Added documentation for Implementing custom Presenter row
* Inject table view style on init (by [mikaoj])
* Modified observeValueForKeyPath functions on FieldCell and SegmentedCell to correctly update constraints (by [dernster] and [estebansotoara])
* Added Keyboard next button
* Fixed bug with minimum dates [#111](https://github.com/xmartlabs/Eureka/issues/111)
* Fixed bug where autocorrected value would not be saved in row.value
* Fixed currency formatter bugs
* Added list sections
### [1.2.0](https://github.com/xmartlabs/Eureka/releases/tag/1.2.0)
Released on 2015-11-12.
* Added PickerRow.
* Added PickerInlineRow.
* Added ZipCodeRow.
* Fix bug when inserting hidden row in midst of a section.
* Example project: Added ability to set up a formatter to FloatLabelRow.
* `rowValueHasBeenChanged` signature has been changed to `override func rowValueHasBeenChanged(row: BaseRow, oldValue: Any?, newValue: Any?)`.
* Added `@noescape` attribute to initializer closures.
* Fixed issue with tableView's bottom inset when keyboard was dismissed.
* Changed NameRow keyboardType to make autocapitalization works.
### [1.1.0](https://github.com/xmartlabs/Eureka/releases/tag/1.1.0)
Released on 2015-10-20.
### [1.0.0](https://github.com/xmartlabs/Eureka/releases/tag/1.0.0)
Released on 2015-09-29. This is the initial version.
[mikaoj]: https://github.com/mikaoj
[estebansotoara]: https://github.com/estebansotoara
[dernster]: https://github.com/dernster
[EurekaCommunity]: https://github.com/EurekaCommunity
================================================
FILE: CONTRIBUTING.md
================================================
Contributing Guidelines
--------------------------------------------------
This document provides general guidelines about how to contribute to the project. Keep in mind these important things before you start contributing.
### Asking Questions
We do not use github issues for general library support. We think this questions should be posted on stack overflow using [eureka-forms](http://stackoverflow.com/questions/tagged/eureka-forms) tag.
### Reporting issues
* Use [github issues](https://github.com/xmartlabs/Eureka/issues) to report a bug.
* Before creating a new issue:
* Make sure you are using the [latest release](https://github.com/xmartlabs/Eureka/releases).
* Check if the issue was [already reported or fixed](https://github.com/xmartlabs/Eureka/issues?utf8=%E2%9C%93&q=is%3Aissue). Notice that it may not be released yet.
* If you found a match add a brief comment "I have the same problem" or "+1". This helps prioritize the issues addressing the most common and critical first. If possible add additional information to help us reproduce and fix the issue. Please use your best judgement.
* Reporting issues:
* Please include the following information to help maintainers to fix the problem faster:
* Xcode version you are using.
* iOS version you are targeting.
* Full Xcode console output of stack trace or code compilation error.
* Any other additional detail you think it would be useful to understand and solve the problem.
### Pull requests
The easiest way to start contributing is searching open issues by `help wanted` tag. We also add a `difficulty` tag (difficulty: easy, difficulty: moderate, difficulty: hard) in order to give an idea of how complex it can be to implement the feature according maintainers project experience.
* Add test coverage to the feature or fix. We only accept new feature pull requests that have related test coverage. This allows us to keep the library stable as we move forward.
* Remember to document the new feature. We do not accept new feature pull requests without its associated documentation.
* In case of a new feature please update the example project showing the feature.
* Please only one fix or feature per pull request. This will increase the chances your feature will be merged.
###### Suggested git workflow to contribute
1. Fork the Eureka repository.
2. Clone your forked project into your developer machine: `git clone git@github.com:<your-github-username>/Eureka.git`
3. Add the original project repo as upstream repository in your forked project: `git remote add upstream git@github.com:xmartlabs/Eureka.git`
4. Before starting a new feature make sure your forked master branch is synchronized upstream master branch. Considering you do not merge your pull request into master you can run: `git checkout master` and then `git pull upstream master`. Optionally `git push origin master`.
5. Create a new branch. Note that the starting point is the upstream master branch HEAD. `git checkout -b my-feature-name`
6. Stage all your changes `git add .` and commit them `git commit -m "Your commit message"`
7. Make sure your branch is up to date with upstream master, `git pull --rebase upstream master`, resolve conflicts if necessary. This will move your commit to the top of git stack.
8. Squash your commits into one commit. `git rebase -i HEAD~6` considering you did 6 commits.
9. Push your branch into your forked remote repository.
10. Create a new pull request adding any useful comment.
###### Code style and conventions
We try to follow our [swift style guide](https://github.com/xmartlabs/Swift-Style-Guide). Following it is not strictly necessary to contribute and to have a pull request accepted but project maintainers try to follow it. We would love to hear your ideas to improve our code style and conventions. Feel free to contribute.
### Feature proposal
We would love to hear your ideas and make a discussions about it.
* Use github issues to make feature proposals.
* We use `type: feature request` label to mark all [feature request issues](https://github.com/xmartlabs/Eureka/labels/type%3A%20feature%20request).
* Before submitting your proposal make sure there is no similar feature request. If you found a match feel free to join the discussion or just add a brief "+1" if you think the feature is worth implementing.
* Be as specific as possible providing a precise explanation of feature request so anyone can understand the problem and the benefits of solving it.
================================================
FILE: Documentation/Eureka 2.0 Migration Guide.md
================================================
# Eureka 2.0 Migration Guide
#### Requirements:
Eureka 2.0.0 needs Xcode 8, Swift3+ to work. Minimum supported iOS version is 8.0.
#### Changes
Eureka 2.0.0 includes complete Swift 3 Compatibility and adopts the new [API Design Guidelines](https://swift.org/documentation/api-design-guidelines/). It also includes the whole new validations build-in feature.
Bring support to swift 3 involves some API updates to follow Apple's Swift API best practices, we have also changed and deprecated some API's.
Most important changes will be listed below...
Many properties, methods, types were renamed and Xcode should suggest the fix automatically.
These are some examples:
|Old API| New API|
|----|----|
|`func rowByTag<T: Equatable>(_: String) -> RowOf<T>?`|`func rowBy<T: Equatable>(tag: String) -> RowOf<T>?`|
|`func rowByTag<Row: RowType>(_: String) -> Row?`|`func rowBy<Row: RowType>(tag: String) -> Row?`|
|`func rowByTag(_: String) -> BaseRow?`|`func rowBy(tag: String) -> BaseRow?`|
|`func sectionByTag(_: String) -> Section?`|`func sectionBy(tag: String) -> Section?`|
|`func rowValueHasBeenChanged(_: BaseRow, oldValue: Any?, newValue: Any?)`|`func valueHasBeenChanged(for: BaseRow, oldValue: Any?, newValue: Any?)`|
|`public final func indexPath() -> IndexPath?`|`public final var indexPath: IndexPath?`|
|`func prepareForSegue(_ segue: UIStoryboardSegue)`|`func prepare(for segue: UIStoryboardSegue)`|
|`func presentViewController(_ viewController: VCType!, row: BaseRow, presentingViewController:FormViewController)`|`present(_ viewController: VCType!, row: BaseRow, presentingViewController:FormViewController)`|
|`func createController() -> VCType?`|`func makeController() -> VCType?`|
There are also some breaking changes related with deprecated API:
Removed APIs:
* `PostalAddressRow` and `ImageRow` was deleted. You can find them and many other custom rows at EurekaCommunity [organization account](https://github.com/eurekaCommunity).
* `highlightCell` and `unhighlightCell` callbacks were deleted, now we should use `row.isHighlighted` from cell update to check from highlighted status and make UI modification according its value.
In case you want to do something when the row's highlighted state switches its value you can set up `onCellHighlightChanged` callback.
Custom Rows changes:
Row generic type no longer specify the value type. Its Value type is inferred from cell specification.
Before:
`public final class WeekDayRow: Row<Set<WeekDay>, WeekDayCell>, RowType`
After:
`public final class WeekDayRow: Row<WeekDayCell>, RowType`
================================================
FILE: Documentation/README_CN.md
================================================

<p align="center">
<a href="https://travis-ci.org/xmartlabs/Eureka"><img src="https://travis-ci.org/xmartlabs/Eureka.svg?branch=master" alt="Build status" /></a>
<img src="https://img.shields.io/badge/platform-iOS-blue.svg?style=flat" alt="Platform iOS" />
<a href="https://developer.apple.com/swift"><img src="https://img.shields.io/badge/swift4-compatible-4BC51D.svg?style=flat" alt="Swift 4 compatible" /></a>
<a href="https://github.com/Carthage/Carthage"><img src="https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat" alt="Carthage compatible" /></a>
<a href="https://cocoapods.org/pods/Eureka"><img src="https://img.shields.io/cocoapods/v/Eureka.svg" alt="CocoaPods compatible" /></a>
<a href="https://raw.githubusercontent.com/xmartlabs/Eureka/master/LICENSE"><img src="http://img.shields.io/badge/license-MIT-blue.svg?style=flat" alt="License: MIT" /></a>
<a href="https://codebeat.co/projects/github-com-xmartlabs-eureka"><img alt="codebeat badge" src="https://codebeat.co/badges/16f29afb-f072-4633-9497-333c6eb71263" /></a>
</p>
由[XMARTLABS](http://xmartlabs.com)精心编写,是[XLForm]的Swift版本。
## 概览
<table>
<tr>
<th>
<img src="../Example/Media/EurekaExample1.gif" width="220"/>
</th>
<th>
<img src="../Example/Media/EurekaExample2.gif" width="220"/>
</th>
<th>
<img src="../Example/Media/EurekaExample3.gif" width="220"/>
</th>
</tr>
</table>
## 目录
* [要求]
* [使用]
+ [如何创建表格]
+ [获取行的值]
+ [操作符]
+ [callbacks的使用]
+ [Section Header和Footer]
+ [动态地隐藏和显示row(或者Sections)]
+ [列表类型的sections]
+ [有多个值的sections]
+ [验证]
+ [滑动操作]
* [自定义row]
+ [简单的自定义rows]
+ [自定义内联rows]
+ [自定义Presenter rows]
* [row目录]
* [安装]
* [常见问题解答]
**想了解更多,可以查看我们的关于*Eureka*的[博客](https://blog.xmartlabs.com/2015/09/29/Introducing-Eureka-iOS-form-library-written-in-pure-Swift/)。**
## 要求
* Xcode 9.2+
* Swift 4+
### 示例程序
你可以clone这个项目,然后运行Example来欣赏Eureka的大部分特性。
<table>
<tr>
<th>
<img src="../Example/Media/EurekaNavigation.gif" width="200"/>
</th>
<th>
<img src="../Example/Media/EurekaRows.gif" width="200"/>
</th>
</tr>
</table>
## 使用
### 如何创建表格
通过继承 `FormViewController`,你可以很容易地把sections和rows添加到`form`变量。
```swift
import Eureka
class MyFormViewController: FormViewController {
override func viewDidLoad() {
super.viewDidLoad()
form +++ Section("Section1")
<<< TextRow(){ row in
row.title = "Text Row"
row.placeholder = "Enter text here"
}
<<< PhoneRow(){
$0.title = "Phone Row"
$0.placeholder = "And numbers here"
}
+++ Section("Section2")
<<< DateRow(){
$0.title = "Date Row"
$0.value = Date(timeIntervalSinceReferenceDate: 0)
}
}
}
```
在这个例子中,我们创建了两个包含基本rows的sections,效果如下图:
<center>
<img src="../Example/Media/EurekaHowTo.gif" width="200" alt="Screenshot of Custom Cells"/>
</center>
你也可以不继承`FormViewController`,然后自己设置`form`变量。但是通过继承的话,会方便很多。
#### 配置键盘导航辅助
如果需要改变导航辅助,你需要设置控制器的`navigationOptions`变量,是一个`OptionSet`类型,所以我们可以给它设置一个或者多个值:
- **disabled**: 不显示
- **enabled**: 显示在底部
- **stopDisabledRow**: 如果下一行被禁用了,就隐藏
- **skipCanNotBecomeFirstResponderRow**: 如果当前行的`canBecomeFirstResponder()`返回`false`,导航辅助就跳过这行
默认值是 `enabled & skipCanNotBecomeFirstResponderRow`
如果需要流畅的滚动屏幕,要把`animateScroll`设置为`true`。默认情况下,在导航辅助上点击上一个和下一个按钮的时候,`FormViewController`是直接跳到上一行或者下一行的,包括上一行或者下一行不在屏幕内的时候。
如果要设置键盘和正在编辑的row的间距,设置`rowKeyboardSpacing`即可。默认情况下,当表格滚动到一个没有显示出来的view,键盘的顶部和编辑行的底部是没有间距的。
```swift
class MyFormViewController: FormViewController {
override func viewDidLoad() {
super.viewDidLoad()
form = ...
// 开启导航辅助,并且遇到被禁用的行就隐藏导航
navigationOptions = RowNavigationOptions.Enabled.union(.StopDisabledRow)
// 开启流畅地滚动到之前没有显示出来的行
animateScroll = true
// 设置键盘顶部和正在编辑行底部的间距为20
rowKeyboardSpacing = 20
}
}
```
如果你想要改变导航辅助,需要在`FormViewController`的子类重写`navigationAccessoryView`。
### 获取行的值
`Row`对象有一个具体类型的 ***value*** 。
例如,`SwitchRow`有一个`Bool`,而`TextRow`有一个`String`。
```swift
// 获取单个row的值
let row: TextRow? = form.rowBy(tag: "MyRowTag")
let value = row.value
// 获取表格中所有rows的值(必须给每个row的tag赋值)
// 字典中包含的键值对为:['rowTag': value]。
let valuesDictionary = form.values()
```
### 操作符
Eureka包含了自定义的操作符,使得我们更容易地创建表格:
#### +++ 添加一个section
```swift
form +++ Section()
// 连起来添加多个sections
form +++ Section("First Section") +++ Section("Another Section")
// 或者直接利用行来创建一个空白的section
form +++ TextRow()
+++ TextRow() // 每个row显示在一个独立的section
```
#### <<< 插入一行
```swift
form +++ Section()
<<< TextRow()
<<< DateRow()
// 或者隐式地创建一个section
form +++ TextRow()
<<< DateRow()
```
#### += 添加一个数组
```swift
// 添加多个Sections到表格中
form += [Section("A"), Section("B"), Section("C")]
// 添加多个rows到一个section中
section += [TextRow(), DateRow()]
```
### callbacks的使用
Eureka包含了很多callbacks来更改行的外观和行为。
#### 理解`Row`和`Cell`
`Row`是抽象的,是Eureka用来存储 **value** 的并包含了一个`Cell`。这个`Cell`用来管理view,并继承自`UITableViewCell`。
例子:
```swift
let row = SwitchRow("SwitchRow") { row in // 初始化函数
row.title = "The title"
}.onChange { row in
row.title = (row.value ?? false) ? "The title expands when on" : "The title"
row.updateCell()
}.cellSetup { cell, row in
cell.backgroundColor = .lightGray
}.cellUpdate { cell, row in
cell.textLabel?.font = .italicSystemFont(ofSize: 18.0)
}
```
<img src="../Example/Media/EurekaOnChange.gif" width="300" alt="Screenshot of Disabled Row"/>
#### Callbacks清单
* **onChange()**
当row的`value`改变时调用。你可以在这里调整一些参数,甚至显示或隐藏其他row。
* **onCellSelection()**
当用户点击row并且被选中的时候调用。
* **cellSetup()**
当cell第一次配置的时候调用,并且仅调用一次。可以在这做一些永久性的设置。
* **cellUpdate()**
当cell每次在屏幕上显示的时候调用。可以在里个更新外观。
* **onCellHighlightChanged()**
当cell或者里面的subview 成为或者辞去第一响应者 时调用。
* **onRowValidationChanged()**
当与row关联的验证错误改变时调用。
* **onExpandInlineRow()**
内联row展开前调用。适用于遵循`InlineRowType`协议的rows。
* **onCollapseInlineRow()**
内联row折叠前调用。适用于遵循`InlineRowType`协议的rows。
* **onPresent()**
在显示另外一个view controller之前调用。适用于遵循`PresenterRowType`的rows。可以在这里设置被显示的view controller。
### Section Header和Footer <a name="section-header-footer"></a>
你可以将`String`的title或者自定义的`View`作为`Section`的header或者footer。
#### String title
```swift
Section("Title")
Section(header: "Title", footer: "Footer Title")
Section(footer: "Footer Title")
```
#### 自定义View
你可以使用一个`.xib`作为自定义View:
```swift
Section() { section in
var header = HeaderFooterView<MyHeaderNibFile>(.nibFile(name: "MyHeaderNibFile", bundle: nil))
// header每次出现在屏幕的时候调用
header.onSetupView = { view, _ in
// 通常是在这修改view里面的文字
// 不要在这修改view的大小或者层级关系
}
section.header = header
}
```
或者是一个使用纯代码创建的`UIView`
```swift
Section(){ section in
var header = HeaderFooterView<MyCustomUIView>(.class)
header.height = {100}
header.onSetupView = { view, _ in
view.backgroundColor = .red
}
section.header = header
}
```
或者直接用callback来创建view
```swift
Section(){ section in
section.header = {
var header = HeaderFooterView<UIView>(.callback({
let view = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
view.backgroundColor = .red
return view
}))
header.height = { 100 }
return header
}()
}
```
### 动态地隐藏和显示row(或者Sections) <a name="hide-show-rows"></a>
<img src="../Example/Media/EurekaSwitchSections.gif" width="300" alt="Screenshot of Hidden Rows" />
在这个例子里,我们隐藏或显示整个sections。
为了达到这个效果,每个row有一个`Condition`的可选类型的变量`hidden`,`Condition`可以通过`function`或者`NSPredicate`来设置。
#### 使用function condition来隐藏
使用`Condition`的`function` case:
```swift
Condition.function([String], (Form)->Bool)
```
`function`需要一个`Form`参数,并返回`Bool`,决定当前row是否需要隐藏。这是一个非常强大的设置`hidden`的方式,因为它没有明显的限制。
```swift
form +++ Section()
<<< SwitchRow("switchRowTag"){
$0.title = "Show message"
}
<<< LabelRow(){
$0.hidden = Condition.function(["switchRowTag"], { form in
return !((form.rowBy(tag: "switchRowTag") as? SwitchRow)?.value ?? false)
})
$0.title = "Switch is on!"
}
```
<img src="../Example/Media/EurekaHidden.gif" width="300" alt="Screenshot of Hidden Rows" />
```swift
public enum Condition {
case function([String], (Form)->Bool)
case predicate(NSPredicate)
}
```
#### 使用NSPredicate隐藏
`hidden`也可以用NSPredicate来设置。在predicate string里面,你可以引用其他row的tags,然后决定一个row是否需要隐藏。
但是使用NSPredicate来设置`hidden`的方式只适用于其他rows的value继承自NSObject(String 和 Int 也适用,因为它们被桥接到OjbC对应的类型,但是enums不适用)
使用NSPredicate限制这么多,我们为什么要使用它呢?
因为它比function更简单、更短而且更易读。例如下面这个例子:
```swift
$0.hidden = Condition.predicate(NSPredicate(format: "$switchTag == false"))
```
我们还可以写的更简单,因为`Condition`遵循`ExpressibleByStringLiteral`:
```swift
$0.hidden = "$switchTag == false"
```
*注意:我们会在执行的时候把'$switchTag'替换成tag为switchTag的row的value。*
所以的rows都必须有一个tag,我们会用这个tag去找到对应的row,这样才能达到我们想要的效果。
我们也可以直接隐藏一个row:
```swift
$0.hidden = true
```
因为`Condition`遵循`ExpressibleByBooleanLiteral`.
如果不设置`hidden`变量,那么对应的rows就会一直显示。
##### Sections
对于section来说,也是一样的。我们也可以通过设置`hidden`属性来控制显示或隐藏。
##### 禁用rows
为了禁用rows,每个row有一个`disable`变量,也是`Condition`的可选类型。使用的方式跟`hidden`一样,所以要求每个row有一个tag。
Note that if you want to disable a row permanently you can also set `disabled` variable to `true`.
注意:如果你想永久的禁用一个row,可以把`disabled`设置为`true`.
### 列表类型的sections
为了显示一个列表选项,Eukera有一个特殊的section,叫做`SelectableSection`。
当创建`SelectableSection`的时候,你需要传入在选项中使用的row的类型和`selectionTyle`。`selectionTyle`是一个枚举,`multipleSelection` 或者 `singleSelection(enableDeselection: Bool)`(`enableDeselection`决定选中的rows是否可以取消选中)。
```swift
form +++ SelectableSection<ListCheckRow<String>>("Where do you live", selectionType: .singleSelection(enableDeselection: true))
let continents = ["Africa", "Antarctica", "Asia", "Australia", "Europe", "North America", "South America"]
for option in continents {
form.last! <<< ListCheckRow<String>(option){ listRow in
listRow.title = option
listRow.selectableValue = option
listRow.value = nil
}
}
```
##### 可以使用什么类型的row?
为了创建这样的section,你必须先创建一个遵循`SelectableRowType`协议的row。
```swift
public protocol SelectableRowType : RowType {
var selectableValue : Value? { get set }
}
```
`selectableValue`是row的value,将会被永久存储。而`value`变量将会用来决定row是否选中,如果被选中,它的值就等于`selectableValue`,否则为nil。Eureka包含上面例子用到的`ListCheckRow`,在自定义rows的实例程序中,你还可以找到`ImageCheckRow`。
##### 获取选中的rows
为了获得`SelectableSection`中被选中的row,Eukera提供了两个方法:`selectedRow()`(获取`SingleSelection`选中的row) and `selectedRows()`获取`MultipleSelection`所有选中的rows。
##### 在sections中把选项分组
另外,你可以使用`SelectorViewController`的属性把选项列表分组。
- `sectionKeyForValue` - 是一个闭包,返回特定row的value对应的key,这个key被用来把选项分组。
- `sectionHeaderTitleForKey` - 是一个闭包,返回特定key对应的section的header title,默认是key本身的值。
- `sectionFooterTitleForKey` - 是一个闭包,返回特定key对应的section的footer title。
### 有多个值的sections
Eureka可以通过有多个值的section来支持一个字段对应多个值的情况。它允许我们很容易地创建能插入的、能删除的和能排序的sections。
<img src="../Example/Media/EurekaMultivalued.gif" width="300" alt="Screenshot of Multivalued Section" />
#### 如何创建多值section
为了创建一个多值section,我们要使用`MultivaluedSection` ,而不是常规的`Section`。`MultivaluedSection`继承自`Section`,拥有一些额外的属性来设置多值section的行为。
让我们来看一个例子:
```swift
form +++
MultivaluedSection(multivaluedOptions: [.Reorder, .Insert, .Delete],
header: "Multivalued TextField",
footer: ".Insert adds a 'Add Item' (Add New Tag) button row as last cell.") {
$0.addButtonProvider = { section in
return ButtonRow(){
$0.title = "Add New Tag"
}
}
$0.multivaluedRowToInsertAt = { index in
return NameRow() {
$0.placeholder = "Tag Name"
}
}
$0 <<< NameRow() {
$0.placeholder = "Tag Name"
}
}
```
上面的代码演示了如何创建一个多值的section。在上面我们把insert, delete 和 reorder传给了`multivaluedOptions`。
`addButtonProvider`允许我们自定义button row,当点击这个button row并且`multivaluedOptions`包含`.Insert`的时候,就会添加一行。
`multivaluedRowToInsertAt`闭包在Eureka每次需要新的row插入的时候调用。为了提供一个row来插入到多值的section中,我们就要设置这个属性。Eureka传index作为闭包的参数。需要注意的是,我们可以返回任何类型的row,甚至自定义的row,即使在多数情况下多值section的rows都是同一类型的。
当我们创建多值section的时候,Eureka会自动添加button row。我们刚刚说到我们可以自定义button row的外观。默认情况下button row的左边有一个加号按钮,我们可以通过设置`showInsertIconInAddButton`属性来决定是否要显示加号按钮。
当创建一个可以插入的sections时,我们还需要更多的考虑。所以被添加到可插入的多值section的rows都应该放在Eureka通过点击按钮来插入的rows上面。我们可以在初始化section的时候,在最后一个闭包参数里添加额外的row,这样在点击button row的时候就会自动把要插入的rows放在最后面。
#### 编辑模式
默认情况下,Eureka只会在当表格中有含有MultivaluedSection的时候把tableView的`isEditing`设置为`true`,而且会在表格第一次显示时的`viewWillAppear`完成。
要了解更多如何使用多值section的相关信息,可以看下Eureka的示例程序,里面包含了多种用法。
### 验证
Eureka 2.0.0 内置了很多验证特性。
一个row有很多规则和一个用于决定rules是否需要验证的特定配置。
有很多规则是默认提供的,但是你也可以自己创建自己的规则。
默认提供的规则:
* RuleRequired
* RuleEmail
* RuleURL
* RuleGreaterThan, RuleGreaterOrEqualThan, RuleSmallerThan, RuleSmallerOrEqualThan
* RuleMinLength, RuleMaxLength
* RuleClosure
让我们看看如何设置验证规则。
```swift
override func viewDidLoad() {
super.viewDidLoad()
form
+++ Section(header: "Required Rule", footer: "Options: Validates on change")
<<< TextRow() {
$0.title = "Required Rule"
$0.add(rule: RuleRequired())
// 这也可以通过一个闭包来实现:如果验证通过,返回nil,否则返回一个ValidationError。
/*
let ruleRequiredViaClosure = RuleClosure<String> { rowValue in
return (rowValue == nil || rowValue!.isEmpty) ? ValidationError(msg: "Field required!") : nil
}
$0.add(rule: ruleRequiredViaClosure)
*/
$0.validationOptions = .validatesOnChange
}
.cellUpdate { cell, row in
if !row.isValid {
cell.titleLabel?.textColor = .red
}
}
+++ Section(header: "Email Rule, Required Rule", footer: "Options: Validates on change after blurred")
<<< TextRow() {
$0.title = "Email Rule"
$0.add(rule: RuleRequired())
$0.add(rule: RuleEmail())
$0.validationOptions = .validatesOnChangeAfterBlurred
}
.cellUpdate { cell, row in
if !row.isValid {
cell.titleLabel?.textColor = .red
}
}
```
从上面的代码可以看到,我们可以通过 `add(rule:)`设置多个我们想要的规则。
Row还提供了`func remove(ruleWithIdentifier identifier: String)`来移除规则。为了使用这个方法,我们必须在创建规则的时候,给规则设置一个id。
有时候我们想要在这个row上使用的规则,跟其他rows是一样的。这种情况下,我们可以使用`RuleSet`来设置所以规则:
```swift
var rules = RuleSet<String>()
rules.add(rule: RuleRequired())
rules.add(rule: RuleEmail())
let row = TextRow() {
$0.title = "Email Rule"
$0.add(ruleSet: rules)
$0.validationOptions = .validatesOnChangeAfterBlurred
}
```
Eureka允许我们指定何时执行验证规则。我们可以通过row的`validationOptions`属性来设置,它有以下这些值:
* `.validatesOnChange` - 当row的value改变时执行。
* `.validatesOnBlur` - (默认值)当cell辞去第一响应者时执行,不适用于所有rows。
* `.validatesOnChangeAfterBlurred` - 在第一次辞去第一响应者之后,row的value改变时执行
* `.validatesOnDemand` - 我们需要手动调用`validate()`来验证row或者form
如果你想验证整个form(或者所有rows),你可以手动调用Form的`validate()`方法。
#### 如何获取验证错误
每个row都有一个`validationErrors`属性,可以用来获取所有验证错误。这个属性仅仅存储了最后一次验证的错误清单,并不会执行验证规则。
#### 注意类型
正如我们所想的那样,规则的类型必须与row的类型相同。要格外小心检查所使用的row类型。你可能会看到这个编译错误:`"(Incorrect arugment label in call (have 'rule:' expected 'ruleSet:')"`,这并不是把类型混淆了的问题。
### 滑动操作
Eureka 4.1.0 引入了滑动特性.
现在你可以为每一行定义多个`leadingSwipe` 和 `trailingSwipe`操作。因为滑动操作决定于iOS系统的特性,所以`leadingSwipe`只能用于iOS 11 以上的系统。
让我们看看如何定义滑动操作:
```swift
let row = TextRow() {
let deleteAction = SwipeAction(
style: .destructive,
title: "Delete",
handler: { (action, row, completionHandler) in
// 在这添加你的代码
// 操作完成后一定要调用completionHandler
completionHandler?(true)
})
deleteAction.image = UIImage(named: "icon-trash")
$0.trailingSwipe.actions = [deleteAction]
$0.trailingSwipe.performsFirstActionWithFullSwipe = true
// 请注意:`leadingSwipe`只能用于iOS 11以上的系统
let infoAction = SwipeAction(
style: .normal,
title: "Info",
handler: { (action, row, completionHandler) in
// 在这添加你的代码
// 操作完成后一定要调用completionHandler
completionHandler?(true)
})
infoAction.backgroundColor = .blue
infoAction.image = UIImage(named: "icon-info")
$0.leadingSwipe.actions = [infoAction]
$0.leadingSwipe.performsFirstActionWithFullSwipe = true
}
```
滑动操作需要把`tableView.isEditing`设置为`false`。Eureka会在当表格中有含有MultivaluedSection的时候把tableView的`isEditing`设置为`true`(在`viewWillAppear`设置)。如果你在同一个表格中同时拥有MultivaluedSections和滑动操作,你要根据情况来设置`isEditing`。
## 自定义row
通常你需要自定义不同于Eureka内置的row。这其实不是很难,你可以阅读[如何自定义rows的教程](https://blog.xmartlabs.com/2016/09/06/Eureka-custom-row-tutorial/)来开始。你也可以看看[EurekaCommunity],这里包含了其他rows,并准备加入到Eukera中。
### 简单的自定义rows
为了创建一个拥有自定义行为和外观的row,你可能需要继承于`Row`和`Cell`。
请记住`Row`是Eureka使用的抽象类;而`Cell`实际上是`UITableViewCell`,用于管理view。
因为`Row`包含了`Cell`,所以`Row`和`Cell`必须同时定义。
```swift
// 自定义value类型是Bool的Cell
// Cell是使用 .xib 定义的,所以我们可以直接设置outlets
public class CustomCell: Cell<Bool>, CellType {
@IBOutlet weak var switchControl: UISwitch!
@IBOutlet weak var label: UILabel!
public override func setup() {
super.setup()
switchControl.addTarget(self, action: #selector(CustomCell.switchValueChanged), for: .valueChanged)
}
func switchValueChanged(){
row.value = switchControl.on
row.updateCell() // Re-draws the cell which calls 'update' bellow
}
public override func update() {
super.update()
backgroundColor = (row.value ?? false) ? .white : .black
}
}
// 自定义的Row,拥有CustomCell和对应的value
public final class CustomRow: Row<CustomCell>, RowType {
required public init(tag: String?) {
super.init(tag: tag)
// 我们把对应CustomCell的 .xib 加载到cellProvidor
cellProvider = CellProvider<CustomCell>(nibName: "CustomCell")
}
}
```
结果: <br>
<img src="../Example/Media/EurekaCustomRow.gif" alt="Screenshot of Disabled Row"/>
<br>
自定义rows需要继承自 `Row<CellType>`,并遵循`RowType`协议。
自定义的cells必须继承自`Cell<ValueType>`,并遵循`CellType`协议。
就像cellSetup和CellUpdate回调一样,`Cell`有setup和update方法,你可以在里面做自定义。
### 自定义内联rows
内联row是一个特定的row类型,可以在它下面动态的显示一个row。正常来说内联row在被点击时在展开和折叠两种状态切换。
所以,为了创建一个内联row,我们需要两个rows,一个总是显示的row,另外一个被展开和折叠的row。
另外一个要求是,这两个rows的value类型必须是一样的。
一旦我们拥有了两个rows,我们要让第一个row遵循`InlineRowType`,这将会给第一个row添加一些方法:
```swift
func expandInlineRow()
func hideInlineRow()
func toggleInlineRow()
```
最后,当row被点击时我们要调用`toggleInlineRow()`,例如重写`customDidSelect()`方法:
```swift
public override func customDidSelect() {
toggleInlineRow()
}
```
### 自定义Presenter rows <a name="presenter-rows"></a>
**注意:** *一个Presenter row 是可以弹出UIViewController的row。*
为了创建一个Presenter rows,必须创建一个遵循`PresenterRowType`的类。高度推荐继承自`SelectorRow`,因为它遵循了那个协议并且添加了其他很有用的方法。
`PresenterRowType`协议的定义如下:
```swift
public protocol PresenterRowType: TypedRowType {
typealias ProviderType : UIViewController, TypedRowControllerType
var presentationMode: PresentationMode<ProviderType>? { get set }
var onPresentCallback: ((FormViewController, ProviderType)->())? { get set }
}
```
`onPresentCallback`将会在row即将显示另外一个view controller的时候调用。在`SelectorRow`里面已经调用了,如果你没有继承自它的话,你需要自己手动调用。
`presentationMode`定义了应该显示哪个controller和怎么显示controller。我们可以通过Segue identifier、segue class、present或者push来展示controller。例如一个CustomPushRow可以像这样定义:
```swift
public final class CustomPushRow<T: Equatable>: SelectorRow<PushSelectorCell<T>, SelectorViewController<T>>, RowType {
public required init(tag: String?) {
super.init(tag: tag)
presentationMode = .show(controllerProvider: ControllerProvider.callback {
return SelectorViewController<T>(){ _ in }
}, onDismiss: { vc in
_ = vc.navigationController?.popViewController(animated: true)
})
}
}
```
你可以用自己的UIViewController替换`SelectorViewController<T>`,用自己的cell替换`PushSelectorCell<T>`。
### 使用相同的row来子类化cells
有时候我们想要改变我们其中一个row的外观,但是不需要改变row的类型和已有的逻辑。如果我们使用的cell是通过`xib`文件来初始化的,那么现在有一种方法能达到我们的要求。目前,所有Eureka内置的rows都不是通过`xib`来初始化的,但是[EurekaCommunity]的一些自定义rows是通过`xib`初始化,例如[PostalAddressRow](https://github.com/EurekaCommunity/PostalAddressRow)。
你所需要做的是:
* 创建一个包含你想要创建的cell的nib文件。
* 然后把cell的class设置为你想要修改的cell(如果你想要更改除了UI以外的东西,你需要子类化那个cell。),并且确保那个cell的module是正确的。
* 把outlets连接到类中
* 告诉你的row使用这个新的nib文件。这是通过设置`cellProvider`来完成的,这个设置需要在具体的初始化过程或者`defaultRowInitializer`里面完成。例如:
```swift
<<< PostalAddressRow() {
$0.cellProvider = CellProvider<PostalAddressCell>(nibName: "CustomNib", bundle: Bundle.main)
}
```
另外,你也可以创建一个新的row来达到目的。这种情况下你要继承同一个父类,让这个row继承它的逻辑。
当我们在实现这个的时候,有些东西可以考虑下:
* 如果你想要看例子,你可以看看[PostalAddressRow](https://github.com/EurekaCommunity/PostalAddressRow)或者[CreditCardRow](https://github.com/EurekaCommunity/CreditCardRow),它们都是用了自定义的nib文件。
* 如果你遇到了这样的错误:`Unknown class <YOUR_CLASS_NAME> in Interface Builder file`,可能是你需要在代码中的某个位置、在运行的时候实例化那个新的类型。我是通过调用`let t = YourClass.self`来解决的。
## row目录
### Controls Rows
<table>
<tr>
<td><center><b>Label Row</b><br>
<img src="../Example/Media/RowStatics/LabelRow.png"/>
</center><br><br>
</td>
<td><center><b>Button Row</b><br>
<img src="../Example/Media/RowStatics/ButtonRow.png"/>
</center><br><br>
</td>
<td><center><b>Check Row</b><br>
<img src="../Example/Media/RowStatics/CheckRow.png"/>
</center><br><br>
</td>
</tr>
<tr>
<td><center><b>Switch Row</b><br>
<img src="../Example/Media/RowStatics/SwitchRow.png"/>
</center><br><br>
</td>
<td><center><b>Slider Row</b><br>
<img src="../Example/Media/RowStatics/SliderRow.png"/>
</center><br><br>
</td>
<td><center><b>Stepper Row</b><br>
<img src="../Example/Media/RowStatics/StepperRow.png"/>
</center><br><br>
</td>
</tr>
<tr>
<td><center><b>Text Area Row</b><br>
<img src="../Example/Media/RowStatics/TextAreaRow.png"/>
</center><br><br>
</td>
</tr>
</table>
### Field Rows
这些rows在cell的右边有一个textField,它们的不同之处在于包含不同的大小写、自动更正和键盘类型配置。
<table>
<tr>
<td>
<img src="../Example/Media/CatalogFieldRows.jpg" width="300"/>
</td>
<td>
TextRow<br><br>
NameRow<br><br>
URLRow<br><br>
IntRow<br><br>
PhoneRow<br><br>
PasswordRow<br><br>
EmailRow<br><br>
DecimalRow<br><br>
TwitterRow<br><br>
AccountRow<br><br>
ZipCodeRow
</td>
<tr>
</table>
上面所有的`FieldRow`类型都有一个<a href="https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSFormatter_Class/">`NSFormatter`</a>类型的`formatter`属性,可以用来控制row的value如何显示。Eureka内置了一个可以保留两位小数的formatter,`DecimalFormatter`。实例程序中包含了`CurrencyFormatter`,可以根据用户所在地显示相应的货币格式。
默认情况下,设置row的`formatter`只会影响到在没有被编辑的时候的显示格式。如果要在编辑的时候也要格式化,要在初始化row的时候把`useFormatterDuringInput`设置为`true`。编辑的时候格式化value的时候可能需要更新光标的位置,Eukera提供了下面的协议,你的formatter需要遵循这个协议来处理光标的位置:
```swift
public protocol FormatterProtocol {
func getNewPosition(forPosition forPosition: UITextPosition, inTextInput textInput: UITextInput, oldValue: String?, newValue: String?) -> UITextPosition
}
```
另外,`FieldRow`有一个`useFormatterOnDidBeginEditing`属性。当使用`DecimalRow`的时候,并且有一个允许decimal value和遵循用户所在地的formatter,例如`DecimalFormatter`,如果`useFormatterDuringInput`是`false`,`useFormatterOnDidBeginEditing`必须设置为`true`,这样value中的小数点才能匹配键盘中的小数点。
### Date Rows
Date Rows存储了一个Date,并且允许我们通过UIDatePicker来设置一个新的值。UIDatePicker的模式和date picker view的显示方法如下图:
<table>
<tr>
<td>
<center><b>Date Row</b>
<img src="../Example/Media/RowGifs/EurekaDateRow.gif" height="220" width="230" />
<br>
Picker在键盘上显示
</center>
</td>
<td>
<center><b>Date Row (Inline)</b>
<img src="../Example/Media/RowGifs/EurekaDateInlineRow.gif" height="220" width="210"/>
<br>
row展开
</center>
</td>
<td>
<center><b>Date Row (Picker)</b>
<img src="../Example/Media/RowGifs/EurekaDatePickerRow.gif" height="220" width="210"/>
<br>
picker一直显示
</center>
</td>
</tr>
</table>
有三种风格(Normal、Inline和Picker),Eureka还包括:
+ **DateRow**
+ **TimeRow**
+ **DateTimeRow**
+ **CountDownRow**
### Option Rows
Option Rows关联着用户必须选择的一系列选项。
```swift
<<< ActionSheetRow<String>() {
$0.title = "ActionSheetRow"
$0.selectorTitle = "Pick a number"
$0.options = ["One","Two","Three"]
$0.value = "Two" // initially selected
}
```
<table>
<tr>
<td width="25%">
<center><b>Alert Row</b><br>
<img src="../Example/Media/RowStatics/AlertRow.jpeg"/>
<br>
通过Alert的方式显示。
</center>
</td>
<td width="25%">
<center><b>ActionSheet Row</b><br>
<img src="../Example/Media/RowStatics/ActionSheetRow.jpeg"/>
<br>
通过action sheet的方式显示。
</center>
</td>
<td width="25%">
<center><b>Push Row</b><br>
<img src="../Example/Media/RowStatics/PushRow.jpeg"/>
<br>
push到一个新的controller。
</center>
</td>
<td width="25%">
<center><b>Multiple Selector Row</b><br>
<img src="../Example/Media/RowStatics/MultipleSelectorRow.jpeg"/>
<br>
像PushRow一样,但是允许多选。
</center>
</td>
</tr>
</table>
<table>
<tr>
<td><center><b>Segmented Row</b><br>
<img src="../Example/Media/RowStatics/SegmentedRow.png"/>
</center>
</td>
<td><center><b>Segmented Row (w/Title)</b><br>
<img src="../Example/Media/RowStatics/SegmentedRowWithTitle.png"/>
</center>
</td>
<td><center><b>Picker Row</b><br>
<img src="../Example/Media/RowStatics/PickerRow.png"/>
<br>通过picker view来显示通用类型选项
<br><b>(也有Picker内联Row)</b>
</center>
</td>
</tr>
</table>
### 建立自己的自定义row?
让我们知道它,我们会跟高兴的在这提到它。:)
* **LocationRow** (在示例程序中作为自定义row)
<img src="../Example/Media/EurekaLocationRow.gif" width="300" alt="Screenshot of Location Row"/>
## 安装
#### CocoaPods
[CocoaPods](https://cocoapods.org/) 是一个管理Cocoa项目的依赖。
在项目中的`Podfile`文件指定Eureka:
```ruby
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'
use_frameworks!
pod 'Eureka'
```
然后运行下面的命令:
```bash
$ pod install
```
#### Carthage
[Carthage](https://github.com/Carthage/Carthage) 是一个简单的、分散的Cocoa依赖管理器。
在项目中的`Cartfile`文件文件指定Eureka:
```ogdl
github "xmartlabs/Eureka" ~> 4.0
```
#### 手动集成框架
* 在项目的根目录运行下列代码克隆Eureka,作为一个git [submodule](http://git-scm.com/docs/git-submodule)。
```bash
$ git submodule add https://github.com/xmartlabs/Eureka.git
```
* 克隆完成后,打开Eureka文件夹,然后把`Eureka.xcodeproj`拖动到Xcode项目的Project Navigator中
* 在Project Navigator选中`Eureka.xcodeproj`,检查deployment target是否跟应用的匹配
* 在Project Navigator选中你自己的项目,选择自己应用的target,然后选择在"General"选项卡,在`Embedded Binaries`点击加号
* 选择`Eureka.framework`,大功告成。
## 参与其中
* 如果你想贡献,请随时提交pull request。
* 如果你有新功能要求,请开一个issue。
* 如果你找到了一个bug,在提交新的issue之前,请先查看旧的issues。
* 如果你需要帮助,或者询问常见的问题,使用[StackOverflow]。(Tag `eureka-forms`)
**在贡献之前,请先查看[CONTRIBUTING](../CONTRIBUTING.md)文件了解更多信息。**
如果你在你的项目中使用了**Eureka**,我们很想听到这个消息。可以在[twitter]给我发消息。
## 作者
* [Martin Barreto](https://github.com/mtnBarreto) ([@mtnBarreto](https://twitter.com/mtnBarreto))
* [Mathias Claassen](https://github.com/mats-claassen) ([@mClaassen26](https://twitter.com/mClaassen26))
## 常见问题解答
#### 如果通过tag获取Row
我们可以通过调用`Form`暴露的下列方法来获取特定的row:
```swift
public func rowBy<T: Equatable>(tag: String) -> RowOf<T>?
public func rowBy<Row: RowType>(tag: String) -> Row?
public func rowBy(tag: String) -> BaseRow?
```
例如:
```swift
let dateRow : DateRow? = form.rowBy(tag: "dateRowTag")
let labelRow: LabelRow? = form.rowBy(tag: "labelRowTag")
let dateRow2: Row<DateCell>? = form.rowBy(tag: "dateRowTag")
let labelRow2: BaseRow? = form.rowBy(tag: "labelRowTag")
```
#### 如果使用tag获取Section
```swift
let section: Section? = form.sectionBy(tag: "sectionTag")
```
#### 如果使用dictionary来设置form的值
调用`Form`暴露的`setValues(values: [String: Any?])`方法.
例如:
```swift
form.setValues(["IntRowTag": 8, "TextRowTag": "Hello world!", "PushRowTag": Company(name:"Xmartlabs")])
```
`"IntRowTag"`、 `"TextRowTag"`、 `"PushRowTag"` 是row tag (每个都唯一地标识一个row), `8`、 `"Hello world!"`、 `Company(name:"Xmartlabs")` 是对应的要赋给row的值。
row的value类型必须匹配dictionary中对应值的类型,否则会将nil赋给row的value。
如果form已经显示了,我们必须刷新已经显示的rows,可以通过调用`tableView.reloadData()`来刷新table view,或者调用已经显示的row的`updateCell()`方法。
#### 更改hidden或者disable condition后,Row没有更新
在设置了一个condition之后,这个condition不会自动执行,如果你想要马上执行,你可以调用`.evaluateHidden()` 或者 `.evaluateDisabled()`。
这些方法仅仅在row被添加到form时和row改变时调用。如果这个condition被更改了,但是这个row处于显示状态,必须手动执行。
#### 除非onCellHighlight也被定义了,否则onCellUnHighlight不会被调用
查看这个[issue](https://github.com/xmartlabs/Eureka/issues/96).
#### 如更新 Section header/footer
* 设置新的 header/footer ....
```swift
section.header = HeaderFooterView(title: "Header title \(variable)") // 使用 String interpolation
//或者
var header = HeaderFooterView<UIView>(.class) // 使用任何view类型更灵活地设置header
header.height = { 60 } // 可以指高度
header.onSetupView = { view, section in // 每次view即将显示时,onSetupView被调用
view.backgroundColor = .orange
}
section.header = header
```
* 刷新Section
```swift
section.reload()
```
#### 如何自定义Selector 和 MultipleSelector 选项的cells
`selectableRowSetup`、`selectableRowCellUpdate` 和 `selectableRowCellSetup` 可以自定义 SelectorViewController 和 MultipleSelectorViewController的可选cells.
```swift
let row = PushRow<Emoji>() {
$0.title = "PushRow"
$0.options = [💁🏻, 🍐, 👦🏼, 🐗, 🐼, 🐻]
$0.value = 👦🏼
$0.selectorTitle = "Choose an Emoji!"
}.onPresent { from, to in
to.dismissOnSelection = false
to.dismissOnChange = false
to.selectableRowSetup = { row in
row.cellProvider = CellProvider<ListCheckCell<Emoji>>(nibName: "EmojiCell", bundle: Bundle.main)
}
to.selectableRowCellUpdate = { cell, row in
cell.textLabel?.text = "Text " + row.selectableValue! // 自定义
cell.detailTextLabel?.text = "Detail " + row.selectableValue!
}
}
```
#### 不想使用Eureka提供的自定义操作符?
正如我们所说的,`Form`和`Section`遵循`MutableCollection`和`RangeReplaceableCollection`。一个Form是一个Sections的集合,一个Sections是一个Rows的集合。
`RangeReplaceableCollection` 协议扩展提供了很多方法来改变集合。
```swift
extension RangeReplaceableCollection {
public mutating func append(_ newElement: Self.Element)
public mutating func append<S>(contentsOf newElements: S) where S : Sequence, Self.Element == S.Element
public mutating func insert(_ newElement: Self.Element, at i: Self.Index)
public mutating func insert<S>(contentsOf newElements: S, at i: Self.Index) where S : Collection, Self.Element == S.Element
public mutating func remove(at i: Self.Index) -> Self.Element
public mutating func removeSubrange(_ bounds: Range<Self.Index>)
public mutating func removeFirst(_ n: Int)
public mutating func removeFirst() -> Self.Element
public mutating func removeAll(keepingCapacity keepCapacity: Bool)
public mutating func reserveCapacity(_ n: Self.IndexDistance)
}
```
上面的方法在内部用来实现自定义的操作:
```swift
public func +++(left: Form, right: Section) -> Form {
left.append(right)
return left
}
public func +=<C : Collection>(inout lhs: Form, rhs: C) where C.Element == Section {
lhs.append(contentsOf: rhs)
}
public func <<<(left: Section, right: BaseRow) -> Section {
left.append(right)
return left
}
public func +=<C : Collection>(inout lhs: Section, rhs: C) where C.Element == BaseRow {
lhs.append(contentsOf: rhs)
}
```
你可以在[这里](https://github.com/xmartlabs/Eureka/blob/master/Source/Core/Operators.swift)看到剩下的自定义操作符是如何实现的。
是否要用自定义的操作符,完全由你自己决定。
<!--- In file -->
[要求]: #要求
[使用]: #使用
[如何创建表格]: #如何创建表格
[获取行的值]: #获取行的值
[操作符]: #操作符
[callbacks的使用]: #callbacks的使用
[Section Header和Footer]: #section-header-footer
[动态地隐藏和显示row(或者Sections)]: #hide-show-rows
[列表类型的sections]: #列表类型的sections
[有多个值的sections]: #有多个值的sections
[验证]: #验证
[滑动操作]: #滑动操作
[自定义row]: #自定义row
[简单的自定义rows]: #简单的自定义rows
[自定义内联rows]: #自定义内联rows
[自定义Presenter rows]: #presenter-rows
[row目录]: #row目录
[安装]: #安装
[常见问题解答]: #常见问题解答
<!--- In Project -->
[CustomCellsController]: ../Example/Example/ViewController.swift
[FormViewController]: ../Example/Source/Controllers.swift
<!--- External -->
[XLForm]: https://github.com/xmartlabs/XLForm
[DSL]: https://en.wikipedia.org/wiki/Domain-specific_language
[StackOverflow]: http://stackoverflow.com/questions/tagged/eureka-forms
[our blog post]: http://blog.xmartlabs.com/2015/09/29/Introducing-Eureka-iOS-form-library-written-in-pure-Swift/
[twitter]: https://twitter.com/xmartlabs
[EurekaCommunity]: https://github.com/EurekaCommunity
# 捐赠Eureka
所以我们可以让Eureka变得更好!<br><br>
[<img src="../donate.png"/>](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=HRMAH7WZ4QQ8E)
# 更改日志
可以在[CHANGELOG.md](../CHANGELOG.md)文件中查看。
================================================
FILE: Eureka.playground/Contents.swift
================================================
//: **Eureka Playground** - let us walk you through Eureka! cool features, we will show how to
//: easily create powerful forms using Eureka!
//: It allows us to create complex dynamic table view forms and obviously simple static table view. It's ideal for data entry task or settings pages.
import UIKit
import XCPlayground
import PlaygroundSupport
//: Start by importing Eureka module
import Eureka
//: Any **Eureka** form must extend from `FormViewController`
let formController = FormViewController()
PlaygroundPage.current.liveView = formController.view
let b = [Int]()
b.last
let f = Form()
f.last
//: ## Operators
//: ### +++
//: Adds a Section to a Form when the left operator is a Form
let form = Form() +++ Section()
//: When both operators are a Section it creates a new Form containing both Section and return the created form.
let form2 = Section("First") +++ Section("Second") +++ Section("Third")
//: Notice that you don't need to add parenthesis in the above expresion, +++ operator is left associative so it will create a form containing the 2 first sections and then append last Section (Third) to the created form.
//: form and form2 don't have any row and are not useful at all. Let's add some rows.
//: ### +++
//: Can be used to append a row to a form without having to create a Section to contain the row. The form section is implicitly created as a result of the +++ operator.
formController.form +++ TextRow("Text")
//: it can also be used to append a Section like this:
formController.form +++ Section()
//: ### <<<
//: Can be used to append rows to a section.
formController.form.last! <<< SwitchRow("Switch") { $0.title = "Switch"; $0.value = true }
//: it can also be used to create a section and append rows to it. Let's use that to add a new section to the form
formController.form +++ PhoneRow("Phone") { $0.title = "Phone"}
<<< IntRow("IntRow") { $0.title = "Int"; $0.value = 5 }
formController.view
//: # Callbacks
//: Rows might have several closures associated to be called at different events. Let's see them one by one. Sadly, we can not interact with it in our playground.
//: ### onChange callback
//: Will be called when the value of a row changes. Lots of things can be done with this feature. Let's create a new section for the new rows:
formController.form +++ Section("Callbacks") <<< SwitchRow("scr1") { $0.title = "Switch to turn red"; $0.value = false }
.onChange({ row in
if row.value == true {
row.cell.backgroundColor = .red
} else {
row.cell.backgroundColor = .black
}
})
//: Now when we change the value of this row its background color will change to red. Try that by (un)commenting the following line:
formController.view
formController.form.last?.last?.baseValue = true
formController.view
//: Notice that we set the `baseValue` attribute because we did not downcast the result of `formController.form.last?.last`. It is essentially the same as the `value` attribute
//: ### cellSetup and cellUpdate callbacks
//: The cellSetup will be called when the cell of this row is configured (just once at the beginning)
//: and the cellUpdate will be called when it is updated (each time it reappears on screen). Here you should define the appearance of the cell
formController.form.last! <<< SegmentedRow<String>("Segments") { $0.title = "Choose an animal"; $0.value = "🐼"; $0.options = ["🐼", "🐶", "🐻"]}.cellSetup({ cell, _ in
cell.backgroundColor = .red
}).cellUpdate({ (cell, _) -> Void in
cell.textLabel?.textColor = .yellow
})
//: ### onSelection and onPresent callbacks
//: OnSelection will be called when this row is selected (tapped by the user). It might be useful for certain rows instead of the onChange callback.
//: OnPresent will be called when a row that presents another view controller is tapped. It might be useful to set up the presented view controller.
//: We can not try them out in the playground but they can be set just like the others.
formController.form.last! <<< SegmentedRow<String>("Segments2") { $0.title = "Choose an animal"; $0.value = "🐼"; $0.options = ["🐼", "🐶", "🐻"]
}.onCellSelection { cell, row in
print("\(cell) for \(row) got selected")
}
formController.view
//: ### Hiding rows
//: We can hide rows by defining conditions that will tell if they should appear on screen or not. Let's create a row that will hide when the previous one is "🐼".
formController.form.last! <<< LabelRow("Confirm") {
$0.title = "Are you sure you do not want the 🐼?"
$0.hidden = "$Segments2 == '🐼'"
}
//: Now let's see how this works:
formController.view
formController.form.rowBy(tag: "Segments2")?.baseValue = "🐶"
formController.view
//: We can do the same using functions. Functions are specially useful for more complicated conditions.
//: This applies when the value of the row we depend on is not compatible with NSPredicates (which is not the current case, but anyway).
formController.form.last! <<< LabelRow("Confirm2") {
$0.title = "Well chosen!!"
$0.hidden = Condition.function(["Segments2"]) { form in
if let r: SegmentedRow<String> = form.rowBy(tag: "Segments2") {
return r.value != "🐼"
}
return true
}
}
//: Now let's see how this works:
formController.view
formController.form.rowBy(tag: "Segments2")?.baseValue = "🐼"
formController.view
================================================
FILE: Eureka.playground/contents.xcplayground
================================================
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<playground version='5.0' target-platform='ios' auto-termination-delay='20' display-mode='rendered' timelineScrubberEnabled='true' last-migration='1020'>
<timeline fileName='timeline.xctimeline'/>
</playground>
================================================
FILE: Eureka.playground/playground.xcworkspace/contents.xcworkspacedata
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:">
</FileRef>
</Workspace>
================================================
FILE: Eureka.playground/playground.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>
================================================
FILE: Eureka.playground/timeline.xctimeline
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Timeline
version = "3.0">
<TimelineItems>
<LoggerValueHistoryTimelineItem
documentLocation = "file:///Users/barreto/Development/iOS/opensource/Eureka/Eureka.playground#CharacterRangeLen=19&CharacterRangeLoc=734&EndingColumnNumber=19&EndingLineNumber=26&StartingColumnNumber=0&StartingLineNumber=26&Timestamp=575824644.159923"
lockedSize = "{1063, 340}"
selectedRepresentationIndex = "0"
shouldTrackSuperviewWidth = "NO">
</LoggerValueHistoryTimelineItem>
<LoggerValueHistoryTimelineItem
documentLocation = "file:///Users/barreto/Development/iOS/opensource/Eureka/Eureka.playground#CharacterRangeLen=19&CharacterRangeLoc=1253&EndingColumnNumber=31&EndingLineNumber=32&StartingColumnNumber=12&StartingLineNumber=32&Timestamp=575824644.160043"
lockedSize = "{322, 325}"
selectedRepresentationIndex = "0"
shouldTrackSuperviewWidth = "NO">
</LoggerValueHistoryTimelineItem>
<LoggerValueHistoryTimelineItem
documentLocation = "file:///Users/barreto/Development/iOS/opensource/Eureka/Eureka.playground#CharacterRangeLen=9&CharacterRangeLoc=1567&EndingColumnNumber=24&EndingLineNumber=38&StartingColumnNumber=15&StartingLineNumber=38&Timestamp=575824644.160136"
lockedSize = "{328, 416}"
selectedRepresentationIndex = "0"
shouldTrackSuperviewWidth = "NO">
</LoggerValueHistoryTimelineItem>
<LoggerValueHistoryTimelineItem
documentLocation = "file:///Users/barreto/Development/iOS/opensource/Eureka/Eureka.playground#CharacterRangeLen=19&CharacterRangeLoc=1373&EndingColumnNumber=151&EndingLineNumber=32&StartingColumnNumber=132&StartingLineNumber=32&Timestamp=575824644.160224"
lockedSize = "{395, 526}"
selectedRepresentationIndex = "0"
shouldTrackSuperviewWidth = "NO">
</LoggerValueHistoryTimelineItem>
<LoggerValueHistoryTimelineItem
documentLocation = "file:///Users/barreto/Development/iOS/opensource/Eureka/Eureka.playground#CharacterRangeLen=0&CharacterRangeLoc=3649&EndingColumnNumber=12&EndingLineNumber=77&StartingColumnNumber=12&StartingLineNumber=77&Timestamp=575824644.160311"
lockedSize = "{354, 450}"
selectedRepresentationIndex = "0"
shouldTrackSuperviewWidth = "NO">
</LoggerValueHistoryTimelineItem>
<LoggerValueHistoryTimelineItem
documentLocation = "file:///Users/barreto/Development/iOS/opensource/Eureka/Eureka.playground#CharacterRangeLen=90&CharacterRangeLoc=1598&EndingColumnNumber=0&EndingLineNumber=40&StartingColumnNumber=1&StartingLineNumber=39&Timestamp=575824644.160396"
lockedSize = "{453, 531}"
selectedRepresentationIndex = "0"
shouldTrackSuperviewWidth = "NO">
</LoggerValueHistoryTimelineItem>
<LoggerValueHistoryTimelineItem
documentLocation = "file:///Users/barreto/Development/iOS/opensource/Eureka/Eureka.playground#CharacterRangeLen=0&CharacterRangeLoc=152&EndingColumnNumber=9&EndingLineNumber=3&StartingColumnNumber=9&StartingLineNumber=3&Timestamp=575824644.160482"
selectedRepresentationIndex = "0"
shouldTrackSuperviewWidth = "NO">
</LoggerValueHistoryTimelineItem>
<LoggerValueHistoryTimelineItem
documentLocation = "file:///Users/barreto/Development/iOS/opensource/Eureka/Eureka.playground#CharacterRangeLen=0&CharacterRangeLoc=1641&EndingColumnNumber=44&EndingLineNumber=39&StartingColumnNumber=44&StartingLineNumber=39&Timestamp=575824644.160576"
lockedSize = "{566, 773}"
selectedRepresentationIndex = "0"
shouldTrackSuperviewWidth = "NO">
</LoggerValueHistoryTimelineItem>
<LoggerValueHistoryTimelineItem
documentLocation = "file:///Users/barreto/Development/iOS/opensource/Eureka/Eureka.playground#CharacterRangeLen=19&CharacterRangeLoc=988&EndingColumnNumber=88&EndingLineNumber=28&StartingColumnNumber=69&StartingLineNumber=28&Timestamp=575824644.160663"
lockedSize = "{177, 169}"
selectedRepresentationIndex = "0"
shouldTrackSuperviewWidth = "NO">
</LoggerValueHistoryTimelineItem>
<LoggerValueHistoryTimelineItem
documentLocation = "file:///Users/barreto/Development/iOS/opensource/Eureka/Eureka.playground#CharacterRangeLen=19&CharacterRangeLoc=1621&EndingColumnNumber=43&EndingLineNumber=39&StartingColumnNumber=24&StartingLineNumber=39&Timestamp=575824644.160761"
selectedRepresentationIndex = "0"
shouldTrackSuperviewWidth = "NO">
</LoggerValueHistoryTimelineItem>
<LoggerValueHistoryTimelineItem
documentLocation = "file:///Users/barreto/Development/iOS/opensource/Eureka/Eureka.playground#CharacterRangeLen=19&CharacterRangeLoc=1057&EndingColumnNumber=157&EndingLineNumber=28&StartingColumnNumber=138&StartingLineNumber=28&Timestamp=575824644.1608551"
selectedRepresentationIndex = "0"
shouldTrackSuperviewWidth = "NO">
</LoggerValueHistoryTimelineItem>
<LoggerValueHistoryTimelineItem
documentLocation = "file:///Users/barreto/Development/iOS/opensource/Eureka/Eureka.playground#CharacterRangeLen=19&CharacterRangeLoc=2259&EndingColumnNumber=103&EndingLineNumber=50&StartingColumnNumber=84&StartingLineNumber=50&Timestamp=575824644.160948"
lockedSize = "{298, 389}"
selectedRepresentationIndex = "0"
shouldTrackSuperviewWidth = "NO">
</LoggerValueHistoryTimelineItem>
<LoggerValueHistoryTimelineItem
documentLocation = "file:///Users/barreto/Development/iOS/opensource/Eureka/Eureka.playground#CharacterRangeLen=19&CharacterRangeLoc=1870&EndingColumnNumber=21&EndingLineNumber=43&StartingColumnNumber=2&StartingLineNumber=43&Timestamp=575824644.161056"
lockedSize = "{475, 564}"
selectedRepresentationIndex = "0"
shouldTrackSuperviewWidth = "NO">
</LoggerValueHistoryTimelineItem>
<LoggerValueHistoryTimelineItem
documentLocation = "file:///Users/barreto/Development/iOS/opensource/Eureka/Eureka.playground#CharacterRangeLen=19&CharacterRangeLoc=1790&EndingColumnNumber=5&EndingLineNumber=42&StartingColumnNumber=101&StartingLineNumber=41&Timestamp=575824644.161153"
lockedSize = "{397, 516}"
selectedRepresentationIndex = "0"
shouldTrackSuperviewWidth = "NO">
</LoggerValueHistoryTimelineItem>
</TimelineItems>
</Timeline>
================================================
FILE: Eureka.podspec
================================================
Pod::Spec.new do |s|
s.name = 'Eureka'
s.version = '5.5.0'
s.license = 'MIT'
s.summary = 'Elegant iOS Forms in pure Swift'
s.homepage = 'https://github.com/xmartlabs/Eureka'
s.social_media_url = 'http://twitter.com/xmartlabs'
s.authors = { 'Martin Barreto' => 'martin@xmartlabs.com', 'Mathias Claassen' => 'mathias@xmartlabs.com' }
s.source = { :git => 'https://github.com/xmartlabs/Eureka.git', :tag => s.version }
s.ios.deployment_target = '9.0'
s.ios.frameworks = 'UIKit', 'Foundation'
s.source_files = 'Source/**/*.swift'
s.requires_arc = true
s.swift_version = '5.0'
end
================================================
FILE: Eureka.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
280FBE5D1D87360900900064 /* RuleRange.swift in Sources */ = {isa = PBXBuildFile; fileRef = 280FBE5C1D87360900900064 /* RuleRange.swift */; };
280FBE5F1D873CCE00900064 /* RuleClosure.swift in Sources */ = {isa = PBXBuildFile; fileRef = 280FBE5E1D873CCE00900064 /* RuleClosure.swift */; };
2859CD951C7CF1FD0002982F /* Core.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CD921C7CF1FD0002982F /* Core.swift */; };
2859CD961C7CF1FD0002982F /* Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CD931C7CF1FD0002982F /* Helpers.swift */; };
2859CDBE1C7D137D0002982F /* Form.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CDBD1C7D137D0002982F /* Form.swift */; };
2859CDC01C7D138D0002982F /* Section.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CDBF1C7D138D0002982F /* Section.swift */; };
2859CDC41C7D19C50002982F /* HeaderFooterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CDC31C7D19C50002982F /* HeaderFooterView.swift */; };
2859CDC61C7D1A2E0002982F /* NavigationAccessoryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CDC51C7D1A2E0002982F /* NavigationAccessoryView.swift */; };
2859CDE91C7DD78E0002982F /* BaseRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CDE81C7DD78E0002982F /* BaseRow.swift */; };
285BA44A1E8187480034EE92 /* MultivaluedSectionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 285BA4481E81864E0034EE92 /* MultivaluedSectionTests.swift */; };
287A142B1D89DF1E00FFE6EB /* ValidationsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 287A142A1D89DF1E00FFE6EB /* ValidationsTests.swift */; };
287A14331D8A07ED00FFE6EB /* SelectableSectionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 287A142D1D8A07B700FFE6EB /* SelectableSectionTests.swift */; };
287E7D7E1D625A260065F4DE /* RuleRequired.swift in Sources */ = {isa = PBXBuildFile; fileRef = 287E7D7D1D625A260065F4DE /* RuleRequired.swift */; };
287E7D801D74E42D0065F4DE /* RuleRegExp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 287E7D7F1D74E42D0065F4DE /* RuleRegExp.swift */; };
287E7D821D74E64C0065F4DE /* RuleURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 287E7D811D74E64C0065F4DE /* RuleURL.swift */; };
287E7D841D75F9C80065F4DE /* RuleEmail.swift in Sources */ = {isa = PBXBuildFile; fileRef = 287E7D831D75F9C80065F4DE /* RuleEmail.swift */; };
287E7D901D7601850065F4DE /* RuleLength.swift in Sources */ = {isa = PBXBuildFile; fileRef = 287E7D8F1D7601850065F4DE /* RuleLength.swift */; };
28B12FD51BA0E83C00F27A23 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 28B12FD41BA0E83C00F27A23 /* Assets.xcassets */; };
28B1D7871C7F911900605EB3 /* BaseEurekaTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28B1D7711C7F90C900605EB3 /* BaseEurekaTests.swift */; };
28B1D7881C7F911900605EB3 /* CallbacksTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28B1D7721C7F90C900605EB3 /* CallbacksTests.swift */; };
28B1D7891C7F911900605EB3 /* CollectionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28B1D7731C7F90C900605EB3 /* CollectionTests.swift */; };
28B1D78A1C7F911900605EB3 /* DateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28B1D7741C7F90C900605EB3 /* DateTests.swift */; };
28B1D78B1C7F911900605EB3 /* FormValuesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28B1D7751C7F90C900605EB3 /* FormValuesTests.swift */; };
28B1D78C1C7F911900605EB3 /* HelperMethodTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28B1D7761C7F90C900605EB3 /* HelperMethodTests.swift */; };
28B1D78D1C7F911900605EB3 /* HiddenRowsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28B1D7771C7F90C900605EB3 /* HiddenRowsTests.swift */; };
28B1D78E1C7F911900605EB3 /* OperatorsTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28B1D7781C7F90C900605EB3 /* OperatorsTest.swift */; };
28B1D78F1C7F911900605EB3 /* RowByTagTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28B1D7791C7F90C900605EB3 /* RowByTagTests.swift */; };
28B1D7901C7F911900605EB3 /* RowCallbackTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28B1D77A1C7F90C900605EB3 /* RowCallbackTests.swift */; };
28B1D7911C7F911900605EB3 /* SetValuesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28B1D77B1C7F90C900605EB3 /* SetValuesTests.swift */; };
28DB37301CE4F864009E46BA /* Protocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28DB372F1CE4F864009E46BA /* Protocols.swift */; };
28EE0FDE1D5E889F00B91340 /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28EE0FDD1D5E889F00B91340 /* Validation.swift */; };
28EE46A81C7F5D5200EFF4A2 /* SelectableSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CE231C7E141B0002982F /* SelectableSection.swift */; };
28EE46A91C7F685900EFF4A2 /* PushRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CDEC1C7DF0680002982F /* PushRow.swift */; };
28EE46AC1C7F712300EFF4A2 /* DateInlineRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CDF41C7DF2740002982F /* DateInlineRow.swift */; };
28EEBFE81C7E1D7E00300699 /* CellType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28EEBFE41C7E1B3B00300699 /* CellType.swift */; };
28EEBFEC1C7E224200300699 /* PresenterRowType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28EEBFEB1C7E224200300699 /* PresenterRowType.swift */; };
28EEBFEE1C7E231C00300699 /* RowControllerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28EEBFED1C7E231C00300699 /* RowControllerType.swift */; };
28EEBFF01C7E23F400300699 /* Row.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28EEBFEF1C7E23F400300699 /* Row.swift */; };
28EEBFF21C7E23FA00300699 /* RowType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28EEBFF11C7E23FA00300699 /* RowType.swift */; };
28EEBFF41C7E240000300699 /* RowProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28EEBFF31C7E240000300699 /* RowProtocols.swift */; };
28EEBFF61C7E240B00300699 /* InlineRowType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28EEBFF51C7E240B00300699 /* InlineRowType.swift */; };
28EEBFF81C7E241200300699 /* SelectableRowType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28EEBFF71C7E241200300699 /* SelectableRowType.swift */; };
28EEBFFB1C7E25C500300699 /* Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28EEBFFA1C7E25C500300699 /* Operators.swift */; };
28EEBFFD1C7E25F100300699 /* Cell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28EEBFFC1C7E25F100300699 /* Cell.swift */; };
28EEBFFE1C7E281F00300699 /* CheckRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CDA41C7CF51A0002982F /* CheckRow.swift */; };
28EEC0001C7E36EB00300699 /* SwitchRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CDA61C7CF5530002982F /* SwitchRow.swift */; };
28EEC0021C7E37BD00300699 /* ButtonRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CDA21C7CF4050002982F /* ButtonRow.swift */; };
28EEC0031C7E390300300699 /* DecimalFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CE0A1C7E003B0002982F /* DecimalFormatter.swift */; };
28EEC00B1C7E395700300699 /* OptionsRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CDB31C7D0E4B0002982F /* OptionsRow.swift */; };
28EEC00C1C7E396000300699 /* SelectorRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CDBB1C7D12930002982F /* SelectorRow.swift */; };
28EEC00E1C7E398A00300699 /* DateFieldRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CDEE1C7DF0F70002982F /* DateFieldRow.swift */; };
28EEC00F1C7E398D00300699 /* FieldRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CDF01C7DF1620002982F /* FieldRow.swift */; };
28EEC0101C7E399500300699 /* DateInlineFieldRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CDF21C7DF22D0002982F /* DateInlineFieldRow.swift */; };
28EEC0121C7E399500300699 /* GenericMultipleSelectorRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CE211C7E13470002982F /* GenericMultipleSelectorRow.swift */; };
28EEC0151C7E39C100300699 /* DateRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CDFE1C7DF9A70002982F /* DateRow.swift */; };
28EEC0161C7E3A3200300699 /* ListCheckRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CE1B1C7E04630002982F /* ListCheckRow.swift */; };
28EEC0181C7E3A3D00300699 /* MultipleSelectorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CE121C7E02310002982F /* MultipleSelectorViewController.swift */; };
28EEC0191C7E3A3D00300699 /* SelectorAlertController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CE141C7E02710002982F /* SelectorAlertController.swift */; };
28EEC01C1C7E3A7400300699 /* ButtonRowWithPresent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CD991C7CF2020002982F /* ButtonRowWithPresent.swift */; };
28EEC01D1C7E3A8600300699 /* SliderRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CD9A1C7CF2020002982F /* SliderRow.swift */; };
28EEC01F1C7E3AC800300699 /* LabelRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CDA01C7CF3A10002982F /* LabelRow.swift */; };
28EEC0201C7E3AD200300699 /* SegmentedRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CDA81C7D0B3C0002982F /* SegmentedRow.swift */; };
28EEC0211C7E3AD700300699 /* TextAreaRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CDAC1C7D0BCA0002982F /* TextAreaRow.swift */; };
28EEC0221C7E3B1300300699 /* ActionSheetRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CDAE1C7D0D990002982F /* ActionSheetRow.swift */; };
28EEC0231C7E3B1900300699 /* AlertRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CDB01C7D0E010002982F /* AlertRow.swift */; };
28EEC0241C7E3B1D00300699 /* PickerRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CDB51C7D0EC60002982F /* PickerRow.swift */; };
28EEC0251C7E3B2200300699 /* PickerInlineRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CDB71C7D0FE70002982F /* PickerInlineRow.swift */; };
28EEC0281C7E3B4B00300699 /* FieldsRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CE061C7DFBFA0002982F /* FieldsRow.swift */; };
28EEC02A1C7E3B5A00300699 /* MultipleSelectorRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CE1F1C7E092B0002982F /* MultipleSelectorRow.swift */; };
28EEC02F1C7E49BF00300699 /* SelectorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CE101C7E01EE0002982F /* SelectorViewController.swift */; };
28EEC0321C7E64A400300699 /* DatePickerRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CDFC1C7DF9430002982F /* DatePickerRow.swift */; };
28EEC0331C7E64AB00300699 /* PopoverSelectorRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859CE1D1C7E08300002982F /* PopoverSelectorRow.swift */; };
3973000A1DF0E2A000080E4D /* PickerInputRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 397300091DF0E2A000080E4D /* PickerInputRow.swift */; };
49ADC7F91C8A83240073952B /* StepperRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49ADC7F81C8A83240073952B /* StepperRow.swift */; };
51729DF61B9A4F5E004A00EB /* Eureka.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 51729DEB1B9A4F5E004A00EB /* Eureka.framework */; };
51729E671B9A5FA5004A00EB /* Eureka.h in Headers */ = {isa = PBXBuildFile; fileRef = 51729E661B9A5FA5004A00EB /* Eureka.h */; settings = {ATTRIBUTES = (Public, ); }; };
798C5ADA1EF1E35600A21F52 /* SwipeActions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 798C5AD91EF1E35600A21F52 /* SwipeActions.swift */; };
8FCCF8EF20A24085004793A0 /* DoublePickerRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FCCF8EE20A24085004793A0 /* DoublePickerRow.swift */; };
8FCCF8F120A32613004793A0 /* TriplePickerRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FCCF8F020A32613004793A0 /* TriplePickerRow.swift */; };
8FCCF92320A473E7004793A0 /* DoublePickerInputRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FCCF92220A473E7004793A0 /* DoublePickerInputRow.swift */; };
8FCCF92520A4794B004793A0 /* TriplePickerInputRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FCCF92420A4794B004793A0 /* TriplePickerInputRow.swift */; };
9EFC727C291D0369004840A9 /* ResultBuildersTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EFC727B291D0369004840A9 /* ResultBuildersTests.swift */; };
9EFC727F291D05FB004840A9 /* ResultBuilders.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EFC727D291D05EA004840A9 /* ResultBuilders.swift */; };
B244E6541FE1C94F0026B944 /* AlertOptionsRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = B244E6531FE1C94F0026B944 /* AlertOptionsRow.swift */; };
B257FE2E1EC0F66900043911 /* RowsInsertionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B257FE2D1EC0F66900043911 /* RowsInsertionTests.swift */; };
B2A401161EC0BA140042EDF0 /* SectionsInsertionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2A401151EC0BA140042EDF0 /* SectionsInsertionTests.swift */; };
E110A1402BC9D08200FFD81D /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = E110A13F2BC9D08200FFD81D /* PrivacyInfo.xcprivacy */; };
FA56B6AF1DBAD38900407C94 /* RuleEqualsToRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA56B6AE1DBAD38900407C94 /* RuleEqualsToRow.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
51729DF71B9A4F5E004A00EB /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 51729DE21B9A4F5E004A00EB /* Project object */;
proxyType = 1;
remoteGlobalIDString = 51729DEA1B9A4F5E004A00EB;
remoteInfo = Eureka;
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
280FBE5C1D87360900900064 /* RuleRange.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RuleRange.swift; path = Source/Validations/RuleRange.swift; sourceTree = SOURCE_ROOT; };
280FBE5E1D873CCE00900064 /* RuleClosure.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RuleClosure.swift; path = Source/Validations/RuleClosure.swift; sourceTree = SOURCE_ROOT; };
2859CD921C7CF1FD0002982F /* Core.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = Core.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
2859CD931C7CF1FD0002982F /* Helpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Helpers.swift; sourceTree = "<group>"; };
2859CD991C7CF2020002982F /* ButtonRowWithPresent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = ButtonRowWithPresent.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
2859CD9A1C7CF2020002982F /* SliderRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SliderRow.swift; sourceTree = "<group>"; };
2859CDA01C7CF3A10002982F /* LabelRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LabelRow.swift; sourceTree = "<group>"; };
2859CDA21C7CF4050002982F /* ButtonRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = ButtonRow.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
2859CDA41C7CF51A0002982F /* CheckRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = CheckRow.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
2859CDA61C7CF5530002982F /* SwitchRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwitchRow.swift; sourceTree = "<group>"; };
2859CDA81C7D0B3C0002982F /* SegmentedRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SegmentedRow.swift; sourceTree = "<group>"; };
2859CDAC1C7D0BCA0002982F /* TextAreaRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextAreaRow.swift; sourceTree = "<group>"; };
2859CDAE1C7D0D990002982F /* ActionSheetRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = ActionSheetRow.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
2859CDB01C7D0E010002982F /* AlertRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = AlertRow.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
2859CDB31C7D0E4B0002982F /* OptionsRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OptionsRow.swift; path = Common/OptionsRow.swift; sourceTree = "<group>"; };
2859CDB51C7D0EC60002982F /* PickerRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PickerRow.swift; sourceTree = "<group>"; };
2859CDB71C7D0FE70002982F /* PickerInlineRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PickerInlineRow.swift; sourceTree = "<group>"; };
2859CDBB1C7D12930002982F /* SelectorRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SelectorRow.swift; path = Common/SelectorRow.swift; sourceTree = "<group>"; };
2859CDBD1C7D137D0002982F /* Form.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Form.swift; sourceTree = "<group>"; };
2859CDBF1C7D138D0002982F /* Section.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Section.swift; sourceTree = "<group>"; };
2859CDC31C7D19C50002982F /* HeaderFooterView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HeaderFooterView.swift; sourceTree = "<group>"; };
2859CDC51C7D1A2E0002982F /* NavigationAccessoryView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NavigationAccessoryView.swift; sourceTree = "<group>"; };
2859CDE81C7DD78E0002982F /* BaseRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BaseRow.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
2859CDEC1C7DF0680002982F /* PushRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PushRow.swift; sourceTree = "<group>"; };
2859CDEE1C7DF0F70002982F /* DateFieldRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; name = DateFieldRow.swift; path = Common/DateFieldRow.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
2859CDF01C7DF1620002982F /* FieldRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = FieldRow.swift; path = Common/FieldRow.swift; sourceTree = "<group>"; };
2859CDF21C7DF22D0002982F /* DateInlineFieldRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; name = DateInlineFieldRow.swift; path = Common/DateInlineFieldRow.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
2859CDF41C7DF2740002982F /* DateInlineRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = DateInlineRow.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
2859CDFC1C7DF9430002982F /* DatePickerRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DatePickerRow.swift; sourceTree = "<group>"; };
2859CDFE1C7DF9A70002982F /* DateRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DateRow.swift; sourceTree = "<group>"; };
2859CE061C7DFBFA0002982F /* FieldsRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FieldsRow.swift; sourceTree = "<group>"; };
2859CE0A1C7E003B0002982F /* DecimalFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = DecimalFormatter.swift; path = Common/DecimalFormatter.swift; sourceTree = "<group>"; };
2859CE101C7E01EE0002982F /* SelectorViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SelectorViewController.swift; path = Controllers/SelectorViewController.swift; sourceTree = "<group>"; };
2859CE121C7E02310002982F /* MultipleSelectorViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MultipleSelectorViewController.swift; path = Controllers/MultipleSelectorViewController.swift; sourceTree = "<group>"; };
2859CE141C7E02710002982F /* SelectorAlertController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SelectorAlertController.swift; path = Controllers/SelectorAlertController.swift; sourceTree = "<group>"; };
2859CE1B1C7E04630002982F /* ListCheckRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ListCheckRow.swift; path = SelectableRows/ListCheckRow.swift; sourceTree = "<group>"; };
2859CE1D1C7E08300002982F /* PopoverSelectorRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PopoverSelectorRow.swift; sourceTree = "<group>"; };
2859CE1F1C7E092B0002982F /* MultipleSelectorRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MultipleSelectorRow.swift; sourceTree = "<group>"; };
2859CE211C7E13470002982F /* GenericMultipleSelectorRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GenericMultipleSelectorRow.swift; path = Common/GenericMultipleSelectorRow.swift; sourceTree = "<group>"; };
2859CE231C7E141B0002982F /* SelectableSection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectableSection.swift; sourceTree = "<group>"; };
285BA4481E81864E0034EE92 /* MultivaluedSectionTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MultivaluedSectionTests.swift; path = Tests/MultivaluedSectionTests.swift; sourceTree = SOURCE_ROOT; };
287A142A1D89DF1E00FFE6EB /* ValidationsTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ValidationsTests.swift; path = Tests/ValidationsTests.swift; sourceTree = SOURCE_ROOT; };
287A142D1D8A07B700FFE6EB /* SelectableSectionTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SelectableSectionTests.swift; path = Tests/SelectableSectionTests.swift; sourceTree = SOURCE_ROOT; };
287E7D7D1D625A260065F4DE /* RuleRequired.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RuleRequired.swift; path = Source/Validations/RuleRequired.swift; sourceTree = SOURCE_ROOT; };
287E7D7F1D74E42D0065F4DE /* RuleRegExp.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RuleRegExp.swift; path = Source/Validations/RuleRegExp.swift; sourceTree = SOURCE_ROOT; };
287E7D811D74E64C0065F4DE /* RuleURL.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RuleURL.swift; path = Source/Validations/RuleURL.swift; sourceTree = SOURCE_ROOT; };
287E7D831D75F9C80065F4DE /* RuleEmail.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RuleEmail.swift; path = Source/Validations/RuleEmail.swift; sourceTree = SOURCE_ROOT; };
287E7D8F1D7601850065F4DE /* RuleLength.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RuleLength.swift; path = Source/Validations/RuleLength.swift; sourceTree = SOURCE_ROOT; };
28B12FD41BA0E83C00F27A23 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Source/Assets.xcassets; sourceTree = SOURCE_ROOT; };
28B1D7711C7F90C900605EB3 /* BaseEurekaTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; name = BaseEurekaTests.swift; path = Tests/BaseEurekaTests.swift; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
28B1D7721C7F90C900605EB3 /* CallbacksTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; name = CallbacksTests.swift; path = Tests/CallbacksTests.swift; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
28B1D7731C7F90C900605EB3 /* CollectionTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CollectionTests.swift; path = Tests/CollectionTests.swift; sourceTree = SOURCE_ROOT; };
28B1D7741C7F90C900605EB3 /* DateTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = DateTests.swift; path = Tests/DateTests.swift; sourceTree = SOURCE_ROOT; };
28B1D7751C7F90C900605EB3 /* FormValuesTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = FormValuesTests.swift; path = Tests/FormValuesTests.swift; sourceTree = SOURCE_ROOT; };
28B1D7761C7F90C900605EB3 /* HelperMethodTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = HelperMethodTests.swift; path = Tests/HelperMethodTests.swift; sourceTree = SOURCE_ROOT; };
28B1D7771C7F90C900605EB3 /* HiddenRowsTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = HiddenRowsTests.swift; path = Tests/HiddenRowsTests.swift; sourceTree = SOURCE_ROOT; };
28B1D7781C7F90C900605EB3 /* OperatorsTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OperatorsTest.swift; path = Tests/OperatorsTest.swift; sourceTree = SOURCE_ROOT; };
28B1D7791C7F90C900605EB3 /* RowByTagTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RowByTagTests.swift; path = Tests/RowByTagTests.swift; sourceTree = SOURCE_ROOT; };
28B1D77A1C7F90C900605EB3 /* RowCallbackTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RowCallbackTests.swift; path = Tests/RowCallbackTests.swift; sourceTree = SOURCE_ROOT; };
28B1D77B1C7F90C900605EB3 /* SetValuesTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SetValuesTests.swift; path = Tests/SetValuesTests.swift; sourceTree = SOURCE_ROOT; };
28DB372F1CE4F864009E46BA /* Protocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Protocols.swift; path = Common/Protocols.swift; sourceTree = "<group>"; };
28EE0FDD1D5E889F00B91340 /* Validation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Validation.swift; sourceTree = "<group>"; };
28EEBFE41C7E1B3B00300699 /* CellType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = CellType.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
28EEBFEB1C7E224200300699 /* PresenterRowType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresenterRowType.swift; sourceTree = "<group>"; };
28EEBFED1C7E231C00300699 /* RowControllerType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RowControllerType.swift; sourceTree = "<group>"; };
28EEBFEF1C7E23F400300699 /* Row.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Row.swift; sourceTree = "<group>"; };
28EEBFF11C7E23FA00300699 /* RowType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RowType.swift; sourceTree = "<group>"; };
28EEBFF31C7E240000300699 /* RowProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RowProtocols.swift; sourceTree = "<group>"; };
28EEBFF51C7E240B00300699 /* InlineRowType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InlineRowType.swift; sourceTree = "<group>"; };
28EEBFF71C7E241200300699 /* SelectableRowType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectableRowType.swift; sourceTree = "<group>"; };
28EEBFFA1C7E25C500300699 /* Operators.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Operators.swift; sourceTree = "<group>"; };
28EEBFFC1C7E25F100300699 /* Cell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = Cell.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
397300091DF0E2A000080E4D /* PickerInputRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PickerInputRow.swift; sourceTree = "<group>"; };
49ADC7F81C8A83240073952B /* StepperRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StepperRow.swift; sourceTree = "<group>"; };
51729DEB1B9A4F5E004A00EB /* Eureka.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Eureka.framework; sourceTree = BUILT_PRODUCTS_DIR; };
51729DF01B9A4F5E004A00EB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
51729DF51B9A4F5E004A00EB /* EurekaTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = EurekaTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
51729DFC1B9A4F5E004A00EB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = ../Tests/Info.plist; sourceTree = "<group>"; };
51729E661B9A5FA5004A00EB /* Eureka.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Eureka.h; path = Source/Eureka.h; sourceTree = SOURCE_ROOT; };
798C5AD91EF1E35600A21F52 /* SwipeActions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwipeActions.swift; sourceTree = "<group>"; };
8FCCF8EE20A24085004793A0 /* DoublePickerRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DoublePickerRow.swift; sourceTree = "<group>"; };
8FCCF8F020A32613004793A0 /* TriplePickerRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TriplePickerRow.swift; sourceTree = "<group>"; };
8FCCF92220A473E7004793A0 /* DoublePickerInputRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DoublePickerInputRow.swift; sourceTree = "<group>"; };
8FCCF92420A4794B004793A0 /* TriplePickerInputRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TriplePickerInputRow.swift; sourceTree = "<group>"; };
9EFC727B291D0369004840A9 /* ResultBuildersTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ResultBuildersTests.swift; sourceTree = "<group>"; };
9EFC727D291D05EA004840A9 /* ResultBuilders.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ResultBuilders.swift; sourceTree = "<group>"; };
B244E6531FE1C94F0026B944 /* AlertOptionsRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AlertOptionsRow.swift; path = Common/AlertOptionsRow.swift; sourceTree = "<group>"; };
B257FE2D1EC0F66900043911 /* RowsInsertionTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RowsInsertionTests.swift; path = Tests/RowsInsertionTests.swift; sourceTree = SOURCE_ROOT; };
B2A401151EC0BA140042EDF0 /* SectionsInsertionTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SectionsInsertionTests.swift; path = Tests/SectionsInsertionTests.swift; sourceTree = SOURCE_ROOT; };
E110A13F2BC9D08200FFD81D /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
FA56B6AE1DBAD38900407C94 /* RuleEqualsToRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RuleEqualsToRow.swift; path = Source/Validations/RuleEqualsToRow.swift; sourceTree = SOURCE_ROOT; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
51729DE71B9A4F5E004A00EB /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
51729DF21B9A4F5E004A00EB /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
51729DF61B9A4F5E004A00EB /* Eureka.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
2859CD901C7CF1FD0002982F /* Core */ = {
isa = PBXGroup;
children = (
2859CDE81C7DD78E0002982F /* BaseRow.swift */,
28EEBFFC1C7E25F100300699 /* Cell.swift */,
28EEBFE41C7E1B3B00300699 /* CellType.swift */,
2859CD921C7CF1FD0002982F /* Core.swift */,
2859CDBD1C7D137D0002982F /* Form.swift */,
2859CDC31C7D19C50002982F /* HeaderFooterView.swift */,
2859CD931C7CF1FD0002982F /* Helpers.swift */,
28EEBFF51C7E240B00300699 /* InlineRowType.swift */,
2859CDC51C7D1A2E0002982F /* NavigationAccessoryView.swift */,
28EEBFFA1C7E25C500300699 /* Operators.swift */,
28EEBFEB1C7E224200300699 /* PresenterRowType.swift */,
9EFC727D291D05EA004840A9 /* ResultBuilders.swift */,
28EEBFEF1C7E23F400300699 /* Row.swift */,
28EEBFED1C7E231C00300699 /* RowControllerType.swift */,
28EEBFF31C7E240000300699 /* RowProtocols.swift */,
28EEBFF11C7E23FA00300699 /* RowType.swift */,
28EEBFF71C7E241200300699 /* SelectableRowType.swift */,
2859CDBF1C7D138D0002982F /* Section.swift */,
2859CE231C7E141B0002982F /* SelectableSection.swift */,
798C5AD91EF1E35600A21F52 /* SwipeActions.swift */,
28EE0FDD1D5E889F00B91340 /* Validation.swift */,
);
name = Core;
path = Source/Core;
sourceTree = SOURCE_ROOT;
};
2859CD971C7CF2020002982F /* Rows */ = {
isa = PBXGroup;
children = (
2859CE1A1C7E04250002982F /* SelectableRows */,
2859CE0F1C7E01C70002982F /* Controllers */,
2859CDB21C7D0E210002982F /* Common */,
2859CDAE1C7D0D990002982F /* ActionSheetRow.swift */,
2859CDB01C7D0E010002982F /* AlertRow.swift */,
2859CDA21C7CF4050002982F /* ButtonRow.swift */,
2859CD991C7CF2020002982F /* ButtonRowWithPresent.swift */,
2859CDA41C7CF51A0002982F /* CheckRow.swift */,
2859CDFE1C7DF9A70002982F /* DateRow.swift */,
2859CDF41C7DF2740002982F /* DateInlineRow.swift */,
2859CDFC1C7DF9430002982F /* DatePickerRow.swift */,
8FCCF92220A473E7004793A0 /* DoublePickerInputRow.swift */,
8FCCF8EE20A24085004793A0 /* DoublePickerRow.swift */,
2859CE061C7DFBFA0002982F /* FieldsRow.swift */,
2859CDA01C7CF3A10002982F /* LabelRow.swift */,
2859CE1F1C7E092B0002982F /* MultipleSelectorRow.swift */,
2859CDB51C7D0EC60002982F /* PickerRow.swift */,
397300091DF0E2A000080E4D /* PickerInputRow.swift */,
2859CDB71C7D0FE70002982F /* PickerInlineRow.swift */,
2859CE1D1C7E08300002982F /* PopoverSelectorRow.swift */,
2859CDEC1C7DF0680002982F /* PushRow.swift */,
2859CDA81C7D0B3C0002982F /* SegmentedRow.swift */,
2859CD9A1C7CF2020002982F /* SliderRow.swift */,
49ADC7F81C8A83240073952B /* StepperRow.swift */,
2859CDA61C7CF5530002982F /* SwitchRow.swift */,
2859CDAC1C7D0BCA0002982F /* TextAreaRow.swift */,
8FCCF92420A4794B004793A0 /* TriplePickerInputRow.swift */,
8FCCF8F020A32613004793A0 /* TriplePickerRow.swift */,
);
name = Rows;
path = Source/Rows;
sourceTree = SOURCE_ROOT;
};
2859CDB21C7D0E210002982F /* Common */ = {
isa = PBXGroup;
children = (
2859CDF01C7DF1620002982F /* FieldRow.swift */,
2859CDB31C7D0E4B0002982F /* OptionsRow.swift */,
B244E6531FE1C94F0026B944 /* AlertOptionsRow.swift */,
2859CDBB1C7D12930002982F /* SelectorRow.swift */,
2859CDEE1C7DF0F70002982F /* DateFieldRow.swift */,
2859CDF21C7DF22D0002982F /* DateInlineFieldRow.swift */,
2859CE0A1C7E003B0002982F /* DecimalFormatter.swift */,
2859CE211C7E13470002982F /* GenericMultipleSelectorRow.swift */,
28DB372F1CE4F864009E46BA /* Protocols.swift */,
);
name = Common;
sourceTree = "<group>";
};
2859CE0F1C7E01C70002982F /* Controllers */ = {
isa = PBXGroup;
children = (
2859CE101C7E01EE0002982F /* SelectorViewController.swift */,
2859CE141C7E02710002982F /* SelectorAlertController.swift */,
2859CE121C7E02310002982F /* MultipleSelectorViewController.swift */,
);
name = Controllers;
sourceTree = "<group>";
};
2859CE1A1C7E04250002982F /* SelectableRows */ = {
isa = PBXGroup;
children = (
2859CE1B1C7E04630002982F /* ListCheckRow.swift */,
);
name = SelectableRows;
sourceTree = "<group>";
};
287E7D7C1D62552C0065F4DE /* Validations */ = {
isa = PBXGroup;
children = (
287E7D7D1D625A260065F4DE /* RuleRequired.swift */,
287E7D7F1D74E42D0065F4DE /* RuleRegExp.swift */,
287E7D831D75F9C80065F4DE /* RuleEmail.swift */,
287E7D811D74E64C0065F4DE /* RuleURL.swift */,
280FBE5C1D87360900900064 /* RuleRange.swift */,
287E7D8F1D7601850065F4DE /* RuleLength.swift */,
280FBE5E1D873CCE00900064 /* RuleClosure.swift */,
FA56B6AE1DBAD38900407C94 /* RuleEqualsToRow.swift */,
);
path = Validations;
sourceTree = "<group>";
};
51729DE11B9A4F5E004A00EB = {
isa = PBXGroup;
children = (
51729DED1B9A4F5E004A00EB /* Source */,
51729DF91B9A4F5E004A00EB /* Tests */,
51729DEC1B9A4F5E004A00EB /* Products */,
);
sourceTree = "<group>";
};
51729DEC1B9A4F5E004A00EB /* Products */ = {
isa = PBXGroup;
children = (
51729DEB1B9A4F5E004A00EB /* Eureka.framework */,
51729DF51B9A4F5E004A00EB /* EurekaTests.xctest */,
);
name = Products;
sourceTree = "<group>";
};
51729DED1B9A4F5E004A00EB /* Source */ = {
isa = PBXGroup;
children = (
2859CD901C7CF1FD0002982F /* Core */,
2859CD971C7CF2020002982F /* Rows */,
287E7D7C1D62552C0065F4DE /* Validations */,
51729E661B9A5FA5004A00EB /* Eureka.h */,
E110A13F2BC9D08200FFD81D /* PrivacyInfo.xcprivacy */,
51729DF01B9A4F5E004A00EB /* Info.plist */,
28B12FD41BA0E83C00F27A23 /* Assets.xcassets */,
);
path = Source;
sourceTree = "<group>";
};
51729DF91B9A4F5E004A00EB /* Tests */ = {
isa = PBXGroup;
children = (
287A142D1D8A07B700FFE6EB /* SelectableSectionTests.swift */,
28B1D7711C7F90C900605EB3 /* BaseEurekaTests.swift */,
28B1D7721C7F90C900605EB3 /* CallbacksTests.swift */,
28B1D7731C7F90C900605EB3 /* CollectionTests.swift */,
28B1D7741C7F90C900605EB3 /* DateTests.swift */,
28B1D7751C7F90C900605EB3 /* FormValuesTests.swift */,
28B1D7761C7F90C900605EB3 /* HelperMethodTests.swift */,
28B1D7771C7F90C900605EB3 /* HiddenRowsTests.swift */,
28B1D7781C7F90C900605EB3 /* OperatorsTest.swift */,
9EFC727B291D0369004840A9 /* ResultBuildersTests.swift */,
28B1D7791C7F90C900605EB3 /* RowByTagTests.swift */,
28B1D77A1C7F90C900605EB3 /* RowCallbackTests.swift */,
28B1D77B1C7F90C900605EB3 /* SetValuesTests.swift */,
287A142A1D89DF1E00FFE6EB /* ValidationsTests.swift */,
285BA4481E81864E0034EE92 /* MultivaluedSectionTests.swift */,
51729DFC1B9A4F5E004A00EB /* Info.plist */,
B2A401151EC0BA140042EDF0 /* SectionsInsertionTests.swift */,
B257FE2D1EC0F66900043911 /* RowsInsertionTests.swift */,
);
path = Tests;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
51729DE81B9A4F5E004A00EB /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
51729E671B9A5FA5004A00EB /* Eureka.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
51729DEA1B9A4F5E004A00EB /* Eureka */ = {
isa = PBXNativeTarget;
buildConfigurationList = 51729DFF1B9A4F5E004A00EB /* Build configuration list for PBXNativeTarget "Eureka" */;
buildPhases = (
51729DE61B9A4F5E004A00EB /* Sources */,
51729DE71B9A4F5E004A00EB /* Frameworks */,
51729DE81B9A4F5E004A00EB /* Headers */,
51729DE91B9A4F5E004A00EB /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = Eureka;
productName = Eureka;
productReference = 51729DEB1B9A4F5E004A00EB /* Eureka.framework */;
productType = "com.apple.product-type.framework";
};
51729DF41B9A4F5E004A00EB /* EurekaTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 51729E021B9A4F5E004A00EB /* Build configuration list for PBXNativeTarget "EurekaTests" */;
buildPhases = (
51729DF11B9A4F5E004A00EB /* Sources */,
51729DF21B9A4F5E004A00EB /* Frameworks */,
51729DF31B9A4F5E004A00EB /* Resources */,
);
buildRules = (
);
dependencies = (
51729DF81B9A4F5E004A00EB /* PBXTargetDependency */,
);
name = EurekaTests;
productName = EurekaTests;
productReference = 51729DF51B9A4F5E004A00EB /* EurekaTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
51729DE21B9A4F5E004A00EB /* Project object */ = {
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0700;
LastUpgradeCheck = 1400;
ORGANIZATIONNAME = Xmartlabs;
TargetAttributes = {
51729DEA1B9A4F5E004A00EB = {
CreatedOnToolsVersion = 7.0;
LastSwiftMigration = 1020;
ProvisioningStyle = Automatic;
};
51729DF41B9A4F5E004A00EB = {
CreatedOnToolsVersion = 7.0;
LastSwiftMigration = 1020;
ProvisioningStyle = Automatic;
};
};
};
buildConfigurationList = 51729DE51B9A4F5E004A00EB /* Build configuration list for PBXProject "Eureka" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 51729DE11B9A4F5E004A00EB;
productRefGroup = 51729DEC1B9A4F5E004A00EB /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
51729DEA1B9A4F5E004A00EB /* Eureka */,
51729DF41B9A4F5E004A00EB /* EurekaTests */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
51729DE91B9A4F5E004A00EB /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
E110A1402BC9D08200FFD81D /* PrivacyInfo.xcprivacy in Resources */,
28B12FD51BA0E83C00F27A23 /* Assets.xcassets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
51729DF31B9A4F5E004A00EB /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
51729DE61B9A4F5E004A00EB /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
28EEC0251C7E3B2200300699 /* PickerInlineRow.swift in Sources */,
28EEC0331C7E64AB00300699 /* PopoverSelectorRow.swift in Sources */,
28EEBFF81C7E241200300699 /* SelectableRowType.swift in Sources */,
28EEC0201C7E3AD200300699 /* SegmentedRow.swift in Sources */,
28EEC01F1C7E3AC800300699 /* LabelRow.swift in Sources */,
287E7D7E1D625A260065F4DE /* RuleRequired.swift in Sources */,
28EEC0191C7E3A3D00300699 /* SelectorAlertController.swift in Sources */,
28EEBFEE1C7E231C00300699 /* RowControllerType.swift in Sources */,
28EE46A91C7F685900EFF4A2 /* PushRow.swift in Sources */,
28EEC00F1C7E398D00300699 /* FieldRow.swift in Sources */,
28EEC02F1C7E49BF00300699 /* SelectorViewController.swift in Sources */,
28EEC0031C7E390300300699 /* DecimalFormatter.swift in Sources */,
28EE0FDE1D5E889F00B91340 /* Validation.swift in Sources */,
2859CD951C7CF1FD0002982F /* Core.swift in Sources */,
2859CDBE1C7D137D0002982F /* Form.swift in Sources */,
280FBE5F1D873CCE00900064 /* RuleClosure.swift in Sources */,
28EEC0001C7E36EB00300699 /* SwitchRow.swift in Sources */,
3973000A1DF0E2A000080E4D /* PickerInputRow.swift in Sources */,
287E7D901D7601850065F4DE /* RuleLength.swift in Sources */,
8FCCF8EF20A24085004793A0 /* DoublePickerRow.swift in Sources */,
28EEC02A1C7E3B5A00300699 /* MultipleSelectorRow.swift in Sources */,
28EEC0231C7E3B1900300699 /* AlertRow.swift in Sources */,
28EEC0221C7E3B1300300699 /* ActionSheetRow.swift in Sources */,
28EEBFEC1C7E224200300699 /* PresenterRowType.swift in Sources */,
28EEC0211C7E3AD700300699 /* TextAreaRow.swift in Sources */,
28EEBFFD1C7E25F100300699 /* Cell.swift in Sources */,
28EEC0321C7E64A400300699 /* DatePickerRow.swift in Sources */,
FA56B6AF1DBAD38900407C94 /* RuleEqualsToRow.swift in Sources */,
28EEBFE81C7E1D7E00300699 /* CellType.swift in Sources */,
8FCCF92320A473E7004793A0 /* DoublePickerInputRow.swift in Sources */,
28EEC0241C7E3B1D00300699 /* PickerRow.swift in Sources */,
28EEC0281C7E3B4B00300699 /* FieldsRow.swift in Sources */,
2859CD961C7CF1FD0002982F /* Helpers.swift in Sources */,
287E7D821D74E64C0065F4DE /* RuleURL.swift in Sources */,
28EEBFF21C7E23FA00300699 /* RowType.swift in Sources */,
9EFC727F291D05FB004840A9 /* ResultBuilders.swift in Sources */,
287E7D801D74E42D0065F4DE /* RuleRegExp.swift in Sources */,
28EEC0101C7E399500300699 /* DateInlineFieldRow.swift in Sources */,
2859CDC61C7D1A2E0002982F /* NavigationAccessoryView.swift in Sources */,
49ADC7F91C8A83240073952B /* StepperRow.swift in Sources */,
B244E6541FE1C94F0026B944 /* AlertOptionsRow.swift in Sources */,
28EE46AC1C7F712300EFF4A2 /* DateInlineRow.swift in Sources */,
28EEC01C1C7E3A7400300699 /* ButtonRowWithPresent.swift in Sources */,
798C5ADA1EF1E35600A21F52 /* SwipeActions.swift in Sources */,
28EEBFF41C7E240000300699 /* RowProtocols.swift in Sources */,
28EEBFFE1C7E281F00300699 /* CheckRow.swift in Sources */,
2859CDC41C7D19C50002982F /* HeaderFooterView.swift in Sources */,
28EEC00C1C7E396000300699 /* SelectorRow.swift in Sources */,
280FBE5D1D87360900900064 /* RuleRange.swift in Sources */,
28EEC0161C7E3A3200300699 /* ListCheckRow.swift in Sources */,
28EEC01D1C7E3A8600300699 /* SliderRow.swift in Sources */,
28EEC00B1C7E395700300699 /* OptionsRow.swift in Sources */,
28EEC0021C7E37BD00300699 /* ButtonRow.swift in Sources */,
28EE46A81C7F5D5200EFF4A2 /* SelectableSection.swift in Sources */,
28EEBFF61C7E240B00300699 /* InlineRowType.swift in Sources */,
287E7D841D75F9C80065F4DE /* RuleEmail.swift in Sources */,
8FCCF8F120A32613004793A0 /* TriplePickerRow.swift in Sources */,
28EEBFFB1C7E25C500300699 /* Operators.swift in Sources */,
28DB37301CE4F864009E46BA /* Protocols.swift in Sources */,
2859CDC01C7D138D0002982F /* Section.swift in Sources */,
28EEC0151C7E39C100300699 /* DateRow.swift in Sources */,
2859CDE91C7DD78E0002982F /* BaseRow.swift in Sources */,
8FCCF92520A4794B004793A0 /* TriplePickerInputRow.swift in Sources */,
28EEBFF01C7E23F400300699 /* Row.swift in Sources */,
28EEC0121C7E399500300699 /* GenericMultipleSelectorRow.swift in Sources */,
28EEC0181C7E3A3D00300699 /* MultipleSelectorViewController.swift in Sources */,
28EEC00E1C7E398A00300699 /* DateFieldRow.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
51729DF11B9A4F5E004A00EB /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
28B1D7881C7F911900605EB3 /* CallbacksTests.swift in Sources */,
28B1D7891C7F911900605EB3 /* CollectionTests.swift in Sources */,
28B1D78C1C7F911900605EB3 /* HelperMethodTests.swift in Sources */,
28B1D78B1C7F911900605EB3 /* FormValuesTests.swift in Sources */,
B2A401161EC0BA140042EDF0 /* SectionsInsertionTests.swift in Sources */,
9EFC727C291D0369004840A9 /* ResultBuildersTests.swift in Sources */,
28B1D7871C7F911900605EB3 /* BaseEurekaTests.swift in Sources */,
28B1D7911C7F911900605EB3 /* SetValuesTests.swift in Sources */,
285BA44A1E8187480034EE92 /* MultivaluedSectionTests.swift in Sources */,
28B1D7901C7F911900605EB3 /* RowCallbackTests.swift in Sources */,
28B1D78E1C7F911900605EB3 /* OperatorsTest.swift in Sources */,
28B1D78D1C7F911900605EB3 /* HiddenRowsTests.swift in Sources */,
287A14331D8A07ED00FFE6EB /* SelectableSectionTests.swift in Sources */,
B257FE2E1EC0F66900043911 /* RowsInsertionTests.swift in Sources */,
28B1D78A1C7F911900605EB3 /* DateTests.swift in Sources */,
287A142B1D89DF1E00FFE6EB /* ValidationsTests.swift in Sources */,
28B1D78F1C7F911900605EB3 /* RowByTagTests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
51729DF81B9A4F5E004A00EB /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 51729DEA1B9A4F5E004A00EB /* Eureka */;
targetProxy = 51729DF71B9A4F5E004A00EB /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
51729DFD1B9A4F5E004A00EB /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = Debug;
};
51729DFE1B9A4F5E004A00EB /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = Release;
};
51729E001B9A4F5E004A00EB /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
APPLICATION_EXTENSION_API_ONLY = YES;
CLANG_ENABLE_MODULES = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
ENABLE_BITCODE = YES;
INFOPLIST_FILE = Source/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
MARKETING_VERSION = 5.5.0;
PRODUCT_BUNDLE_IDENTIFIER = com.xmartlabs.Eureka;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
};
name = Debug;
};
51729E011B9A4F5E004A00EB /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
APPLICATION_EXTENSION_API_ONLY = YES;
CLANG_ENABLE_MODULES = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
ENABLE_BITCODE = YES;
INFOPLIST_FILE = Source/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
MARKETING_VERSION = 5.5.0;
PRODUCT_BUNDLE_IDENTIFIER = com.xmartlabs.Eureka;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 5.0;
};
name = Release;
};
51729E031B9A4F5E004A00EB /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = "";
INFOPLIST_FILE = Tests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.xmartlabs.EurekaTests;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_VERSION = 5.0;
};
name = Debug;
};
51729E041B9A4F5E004A00EB /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = "";
INFOPLIST_FILE = Tests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.xmartlabs.EurekaTests;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 5.0;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
51729DE51B9A4F5E004A00EB /* Build configuration list for PBXProject "Eureka" */ = {
isa = XCConfigurationList;
buildConfigurations = (
51729DFD1B9A4F5E004A00EB /* Debug */,
51729DFE1B9A4F5E004A00EB /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
51729DFF1B9A4F5E004A00EB /* Build configuration list for PBXNativeTarget "Eureka" */ = {
isa = XCConfigurationList;
buildConfigurations = (
51729E001B9A4F5E004A00EB /* Debug */,
51729E011B9A4F5E004A00EB /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
51729E021B9A4F5E004A00EB /* Build configuration list for PBXNativeTarget "EurekaTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
51729E031B9A4F5E004A00EB /* Debug */,
51729E041B9A4F5E004A00EB /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 51729DE21B9A4F5E004A00EB /* Project object */;
}
================================================
FILE: Eureka.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:Eureka.xcodeproj">
</FileRef>
</Workspace>
================================================
FILE: Eureka.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>
================================================
FILE: Eureka.xcodeproj/xcshareddata/xcschemes/Eureka.xcscheme
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1400"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "51729DEA1B9A4F5E004A00EB"
BuildableName = "Eureka.framework"
BlueprintName = "Eureka"
ReferencedContainer = "container:Eureka.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "51729DEA1B9A4F5E004A00EB"
BuildableName = "Eureka.framework"
BlueprintName = "Eureka"
ReferencedContainer = "container:Eureka.xcodeproj">
</BuildableReference>
</MacroExpansion>
<Testables>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "51729DF41B9A4F5E004A00EB"
BuildableName = "EurekaTests.xctest"
BlueprintName = "EurekaTests"
ReferencedContainer = "container:Eureka.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "51729DEA1B9A4F5E004A00EB"
BuildableName = "Eureka.framework"
BlueprintName = "Eureka"
ReferencedContainer = "container:Eureka.xcodeproj">
</BuildableReference>
</MacroExpansion>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "51729DEA1B9A4F5E004A00EB"
BuildableName = "Eureka.framework"
BlueprintName = "Eureka"
ReferencedContainer = "container:Eureka.xcodeproj">
</BuildableReference>
</MacroExpansion>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
================================================
FILE: Eureka.xcworkspace/contents.xcworkspacedata
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:Eureka.playground">
</FileRef>
<FileRef
location = "group:Eureka.xcodeproj">
</FileRef>
<FileRef
location = "group:Example.xcodeproj">
</FileRef>
</Workspace>
================================================
FILE: Eureka.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>
================================================
FILE: Example/EmojiCell.xib
================================================
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14092" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14081.1"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" reuseIdentifier="EmojiCell" textLabel="4Kb-XA-Gei" detailTextLabel="b0T-tu-awZ" rowHeight="87" style="IBUITableViewCellStyleSubtitle" id="IUS-Ee-0Ac" customClass="EmojiCell" customModule="Example" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="375" height="87"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="IUS-Ee-0Ac" id="Qbf-AF-gzT">
<rect key="frame" x="0.0" y="0.0" width="375" height="86.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="💁🏻" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="4Kb-XA-Gei">
<rect key="frame" x="16" y="15" width="40" height="42"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" type="system" pointSize="35"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Subtitle" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="b0T-tu-awZ">
<rect key="frame" x="16" y="57" width="44" height="14.5"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
<point key="canvasLocation" x="46.5" y="15.5"/>
</tableViewCell>
</objects>
</document>
================================================
FILE: Example/Example/AppDelegate.swift
================================================
// AppDelegate.swift
// Eureka ( https://github.com/xmartlabs/Eureka )
//
// Copyright (c) 2016 Xmartlabs ( http://xmartlabs.com )
//
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
// Take a look at Main.storyboard
return true
}
}
================================================
FILE: Example/Example/Assets.xcassets/AppIcon.appiconset/Contents.json
================================================
{
"images" : [
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "appIcon20pt@2x.png",
"scale" : "2x"
},
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "appIcon20pt@3x.png",
"scale" : "3x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "appIcon29pt@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "appIcon29pt@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "appIcon29pt@3x.png",
"scale" : "3x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "appIcon40pt@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "appIcon40pt@3x.png",
"scale" : "3x"
},
{
"idiom" : "iphone",
"size" : "57x57",
"scale" : "1x"
},
{
"idiom" : "iphone",
"size" : "57x57",
"scale" : "2x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "appIcon60pt@2x.png",
"scale" : "2x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "appIcon60pt@3x.png",
"scale" : "3x"
},
{
"idiom" : "ipad",
"size" : "20x20",
"scale" : "1x"
},
{
"idiom" : "ipad",
"size" : "20x20",
"scale" : "2x"
},
{
"idiom" : "ipad",
"size" : "29x29",
"scale" : "1x"
},
{
"idiom" : "ipad",
"size" : "29x29",
"scale" : "2x"
},
{
"idiom" : "ipad",
"size" : "40x40",
"scale" : "1x"
},
{
"idiom" : "ipad",
"size" : "40x40",
"scale" : "2x"
},
{
"idiom" : "ipad",
"size" : "50x50",
"scale" : "1x"
},
{
"idiom" : "ipad",
"size" : "50x50",
"scale" : "2x"
},
{
"idiom" : "ipad",
"size" : "72x72",
"scale" : "1x"
},
{
"idiom" : "ipad",
"size" : "72x72",
"scale" : "2x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "appIcon76pt@1x.png",
"scale" : "1x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "appIcon76pt@2x.png",
"scale" : "2x"
},
{
"size" : "83.5x83.5",
"idiom" : "ipad",
"filename" : "appIcon83-5pt@2x.png",
"scale" : "2x"
},
{
"idiom" : "ios-marketing",
"size" : "1024x1024",
"scale" : "1x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: Example/Example/Assets.xcassets/Contents.json
================================================
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: Example/Example/Assets.xcassets/Eureka.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "Eureka@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: Example/Example/Assets.xcassets/checkedDay.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "checkedDay.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: Example/Example/Assets.xcassets/map_pin.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "map_pin@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "map_pin@3x.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: Example/Example/Assets.xcassets/plus_image.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "plus_image@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "plus_image@3x.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: Example/Example/Assets.xcassets/selected.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "selectedCircle@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "selectedCircle@3x.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: Example/Example/Assets.xcassets/selectedRectangle.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "selectedRectangle@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "selectedRectangle@3x.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: Example/Example/Assets.xcassets/uncheckedDay.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "uncheckedDay.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: Example/Example/Assets.xcassets/unselected.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "unselectedCircle@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "unselectedCircle@3x.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: Example/Example/Assets.xcassets/unselectedRectangle.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "unselectedRectangle@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "unselectedRectangle@3x.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: Example/Example/Base.lproj/EurekaSectionHeader.xib
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="10112" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10083"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="iN0-l3-epB" customClass="EurekaLogoViewNib" customModule="Example" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="365" height="130"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="Eureka" translatesAutoresizingMaskIntoConstraints="NO" id="Bjs-Pe-yeM">
<rect key="frame" x="0.0" y="0.0" width="365" height="130"/>
</imageView>
</subviews>
<constraints>
<constraint firstItem="Bjs-Pe-yeM" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="4fF-WE-lgN"/>
<constraint firstItem="Bjs-Pe-yeM" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="BZC-rI-vHR"/>
<constraint firstAttribute="trailing" secondItem="Bjs-Pe-yeM" secondAttribute="trailing" id="Evo-0m-78o"/>
<constraint firstAttribute="bottom" secondItem="Bjs-Pe-yeM" secondAttribute="bottom" id="Jjg-Ri-jws"/>
</constraints>
<nil key="simulatedStatusBarMetrics"/>
<nil key="simulatedTopBarMetrics"/>
<nil key="simulatedBottomBarMetrics"/>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<connections>
<outlet property="imageView" destination="Bjs-Pe-yeM" id="PfU-lb-bgw"/>
</connections>
<point key="canvasLocation" x="430.5" y="158"/>
</view>
</objects>
<resources>
<image name="Eureka" width="425" height="125"/>
</resources>
</document>
================================================
FILE: Example/Example/Base.lproj/LaunchScreen.storyboard
================================================
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14854.2" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<device id="retina6_1" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14806.4"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="Llm-lL-Icb"/>
<viewControllerLayoutGuide type="bottom" id="xb3-aO-Qok"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="53" y="375"/>
</scene>
</scenes>
</document>
================================================
FILE: Example/Example/Base.lproj/Main.storyboard
================================================
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="15505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="6g3-M9-WkD">
<device id="retina5_9" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15510"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--Navigation Accessory Controller-->
<scene sceneID="KUY-gm-WOC">
<objects>
<viewController id="qkw-PN-ncD" customClass="NavigationAccessoryController" customModule="Example" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="aLU-ZA-CPL">
<rect key="frame" x="0.0" y="0.0" width="375" height="812"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" translatesAutoresizingMaskIntoConstraints="NO" id="jQG-xm-oMp">
<rect key="frame" x="0.0" y="24" width="375" height="754"/>
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
</tableView>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<constraints>
<constraint firstItem="NtP-HB-AnI" firstAttribute="bottom" secondItem="jQG-xm-oMp" secondAttribute="bottom" id="8Hm-QB-9Pn"/>
<constraint firstItem="jQG-xm-oMp" firstAttribute="leading" secondItem="NtP-HB-AnI" secondAttribute="leading" id="EHB-bm-9xW"/>
<constraint firstItem="NtP-HB-AnI" firstAttribute="trailing" secondItem="jQG-xm-oMp" secondAttribute="trailing" id="Lsb-Eh-469"/>
<constraint firstItem="jQG-xm-oMp" firstAttribute="top" secondItem="NtP-HB-AnI" secondAttribute="top" constant="-64" id="UrC-SL-ofL"/>
</constraints>
<viewLayoutGuide key="safeArea" id="NtP-HB-AnI"/>
</view>
<navigationItem key="navigationItem" id="egl-fd-Z6j"/>
<connections>
<outlet property="tableView" destination="jQG-xm-oMp" id="DcV-mx-UFW"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="qff-bS-Fd6" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="1139.1304347826087" y="-257.8125"/>
</scene>
<!--Plain Table View Style Controller-->
<scene sceneID="8Iv-ww-ibT">
<objects>
<viewController id="u8Y-1k-1VR" customClass="PlainTableViewStyleController" customModule="Example" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="aCc-Ey-nD3">
<rect key="frame" x="0.0" y="0.0" width="375" height="812"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="9b5-qK-Oul">
<rect key="frame" x="0.0" y="24" width="375" height="754"/>
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
</tableView>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<constraints>
<constraint firstItem="tqh-Qn-BG6" firstAttribute="bottom" secondItem="9b5-qK-Oul" secondAttribute="bottom" id="GT0-5p-SkJ"/>
<constraint firstItem="tqh-Qn-BG6" firstAttribute="trailing" secondItem="9b5-qK-Oul" secondAttribute="trailing" id="I31-Ya-LHb"/>
<constraint firstItem="9b5-qK-Oul" firstAttribute="top" secondItem="tqh-Qn-BG6" secondAttribute="top" constant="-64" id="NDA-ez-DqV"/>
<constraint firstItem="9b5-qK-Oul" firstAttribute="leading" secondItem="tqh-Qn-BG6" secondAttribute="leading" id="Tc2-VW-AzC"/>
</constraints>
<viewLayoutGuide key="safeArea" id="tqh-Qn-BG6"/>
</view>
<navigationItem key="navigationItem" id="ZBu-dV-FRu"/>
<connections>
<outlet property="tableView" destination="9b5-qK-Oul" id="yv5-t9-NwK"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="U1f-50-jOU" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="505.79710144927537" y="-258.48214285714283"/>
</scene>
<!--Eureka! Rows Example-->
<scene sceneID="bWN-GL-dH9">
<objects>
<viewController storyboardIdentifier="RowsExampleViewController" title="Eureka! Rows Example" id="iIY-1E-c79" customClass="RowsExampleViewController" customModule="Example" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="LYQ-fV-apO">
<rect key="frame" x="0.0" y="0.0" width="375" height="812"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" translatesAutoresizingMaskIntoConstraints="NO" id="mHC-X5-7oy">
<rect key="frame" x="0.0" y="24" width="375" height="788"/>
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
</tableView>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<constraints>
<constraint firstItem="mHC-X5-7oy" firstAttribute="leading" secondItem="WNm-Bu-325" secondAttribute="leading" id="00G-df-Zlp"/>
<constraint firstItem="mHC-X5-7oy" firstAttribute="top" secondItem="WNm-Bu-325" secondAttribute="top" constant="-64" id="IOw-Fs-Oj6"/>
<constraint firstAttribute="bottom" secondItem="mHC-X5-7oy" secondAttribute="bottom" id="beh-j7-CaG"/>
<constraint firstItem="WNm-Bu-325" firstAttribute="trailing" secondItem="mHC-X5-7oy" secondAttribute="trailing" id="kvh-01-UU4"/>
</constraints>
<viewLayoutGuide key="safeArea" id="WNm-Bu-325"/>
</view>
<navigationItem key="navigationItem" id="ELF-z4-WBZ"/>
<connections>
<outlet property="tableView" destination="mHC-X5-7oy" id="hpr-Il-C3d"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="w7K-pv-5uH" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="1730.4347826086957" y="-257.8125"/>
</scene>
<!--Add Event-->
<scene sceneID="tne-QT-ifu">
<objects>
<viewController id="BYZ-38-t0r" customClass="NativeEventFormViewController" customModule="Example" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="375" height="758"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" translatesAutoresizingMaskIntoConstraints="NO" id="oJ1-ro-hyM">
<rect key="frame" x="0.0" y="-8" width="375" height="732"/>
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
</tableView>
</subviews>
<color key="backgroundColor" systemColor="systemGroupedBackgroundColor" red="0.94901960780000005" green="0.94901960780000005" blue="0.96862745100000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="U5c-nj-u8e" firstAttribute="trailing" secondItem="oJ1-ro-hyM" secondAttribute="trailing" id="XgS-22-Aoo"/>
<constraint firstItem="oJ1-ro-hyM" firstAttribute="top" secondItem="U5c-nj-u8e" secondAttribute="top" constant="-64" id="YSr-Wh-Xyz"/>
<constraint firstItem="U5c-nj-u8e" firstAttribute="bottom" secondItem="oJ1-ro-hyM" secondAttribute="bottom" id="eQ4-u8-vGU"/>
<constraint firstItem="oJ1-ro-hyM" firstAttribute="leading" secondItem="U5c-nj-u8e" secondAttribute="leading" id="uhl-H3-Rce"/>
</constraints>
<viewLayoutGuide key="safeArea" id="U5c-nj-u8e"/>
</view>
<navigationItem key="navigationItem" title="Add Event" id="h7i-CH-mmM">
<barButtonItem key="leftBarButtonItem" systemItem="cancel" id="qON-hm-SNY"/>
</navigationItem>
<connections>
<outlet property="tableView" destination="oJ1-ro-hyM" id="NSW-Uu-bsz"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="2449.855072463768" y="214.90178571428572"/>
</scene>
<!--Navigation Controller-->
<scene sceneID="nLS-mE-meo">
<objects>
<navigationController automaticallyAdjustsScrollViewInsets="NO" id="6g3-M9-WkD" sceneMemberID="viewController">
<toolbarItems/>
<navigationBar key="navigationBar" contentMode="scaleToFill" id="37i-zo-mrN">
<rect key="frame" x="0.0" y="44" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
</navigationBar>
<nil name="viewControllers"/>
<connections>
<segue destination="Q34-kO-jVh" kind="relationship" relationship="rootViewController" id="coO-wd-J7b"/>
</connections>
</navigationController>
<placeholder placeholderIdentifier="IBFirstResponder" id="7Af-Ro-aVc" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="195.94202898550725" y="224.41071428571428"/>
</scene>
<!--Examples-->
<scene sceneID="qdG-dP-VzI">
<objects>
<viewController id="Q34-kO-jVh" customClass="HomeViewController" customModule="Example" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="Ux2-HS-1aH">
<rect key="frame" x="0.0" y="0.0" width="375" height="812"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" translatesAutoresizingMaskIntoConstraints="NO" id="pl1-EZ-WGm">
<rect key="frame" x="0.0" y="24" width="375" height="754"/>
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
</tableView>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<constraints>
<constraint firstItem="cto-dc-jaT" firstAttribute="trailing" secondItem="pl1-EZ-WGm" secondAttribute="trailing" id="7nV-zY-JKN"/>
<constraint firstItem="pl1-EZ-WGm" firstAttribute="leading" secondItem="cto-dc-jaT" secondAttribute="leading" id="VVN-CR-lUf"/>
<constraint firstItem="pl1-EZ-WGm" firstAttribute="top" secondItem="cto-dc-jaT" secondAttribute="top" constant="-64" id="WAd-Vi-yKW"/>
<constraint firstItem="cto-dc-jaT" firstAttribute="bottom" secondItem="pl1-EZ-WGm" secondAttribute="bottom" id="nxj-De-NLD"/>
</constraints>
<viewLayoutGuide key="safeArea" id="cto-dc-jaT"/>
</view>
<navigationItem key="navigationItem" title="Examples" id="FWz-Cv-Kdv"/>
<connections>
<outlet property="tableView" destination="pl1-EZ-WGm" id="zsO-pM-0A4"/>
<segue destination="iIY-1E-c79" kind="push" identifier="RowsExampleViewControllerSegue" id="zao-qc-znT"/>
<segue destination="3A7-59-k1N" kind="modal" identifier="NativeEventsFormNavigationControllerSegue" id="C5g-Vf-F1k"/>
<segue destination="qkw-PN-ncD" kind="push" identifier="AccesoryViewControllerSegue" id="RnC-5l-00d"/>
<segue destination="fCj-HP-5F1" kind="push" identifier="FieldCustomizationControllerSegue" id="9ui-4G-IO6"/>
<segue destination="tER-SL-iRc" kind="push" identifier="CustomCellsControllerSegue" id="tta-mz-nG3"/>
<segue destination="dNv-jC-9dj" kind="push" identifier="HiddenRowsControllerSegue" id="0ae-09-D0q"/>
<segue destination="pxw-b6-Gas" kind="push" identifier="FormattersControllerSegue" id="ge5-Vi-S0G"/>
<segue destination="WZQ-di-uNi" kind="push" identifier="DisabledRowsControllerSegue" id="eDe-eK-e8n"/>
<segue destination="42E-0V-OKN" kind="push" identifier="InlineRowsControllerSegue" id="sMp-yV-Evw"/>
<segue destination="3b9-rf-NW3" kind="push" identifier="ListSectionsControllerSegue" id="s7W-Vn-beG"/>
<segue destination="1By-iT-GXN" kind="push" identifier="ValidationsControllerSegue" id="e8a-Jy-4iL"/>
<segue destination="1Eh-Nv-AVS" kind="push" identifier="CustomDesignControllerSegue" id="qm6-xE-x5d"/>
<segue destination="qIY-1j-dNf" kind="push" identifier="MultivaluedSectionsControllerSegue" id="HjC-JK-Qvc"/>
<segue destination="u8Y-1k-1VR" kind="push" identifier="PlainTableViewStyleViewControllerSegue" id="kqc-ak-a1R"/>
<segue destination="fc5-sQ-cEm" kind="push" identifier="SwipeActionsControllerSegue" id="AxK-me-pi6"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="Eoz-Jq-Zy9" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="882.60869565217399" y="224.33035714285714"/>
</scene>
<!--Field Row Customization Controller-->
<scene sceneID="W6I-ft-vXN">
<objects>
<viewController id="fCj-HP-5F1" customClass="FieldRowCustomizationController" customModule="Example" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="zCX-U4-qfa">
<rect key="frame" x="0.0" y="0.0" width="375" height="812"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" translatesAutoresizingMaskIntoConstraints="NO" id="Pne-fE-n6D">
<rect key="frame" x="0.0" y="24" width="375" height="754"/>
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
</tableView>
</subviews>
<color key="backgroundColor" systemColor="systemGroupedBackgroundColor" red="0.94901960780000005" green="0.94901960780000005" blue="0.96862745100000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="Cuq-3C-FAE" firstAttribute="bottom" secondItem="Pne-fE-n6D" secondAttribute="bottom" id="41M-Jl-IKE"/>
<constraint firstItem="Pne-fE-n6D" firstAttribute="top" secondItem="Cuq-3C-FAE" secondAttribute="top" constant="-64" id="BD4-qa-mHe"/>
<constraint firstItem="Cuq-3C-FAE" firstAttribute="trailing" secondItem="Pne-fE-n6D" secondAttribute="trailing" id="KUw-yd-say"/>
<constraint firstItem="Pne-fE-n6D" firstAttribute="leading" secondItem="Cuq-3C-FAE" secondAttribute="leading" id="Osr-md-5i1"/>
</constraints>
<viewLayoutGuide key="safeArea" id="Cuq-3C-FAE"/>
</view>
<navigationItem key="navigationItem" id="9Gs-k4-MI9"/>
<connections>
<outlet property="tableView" destination="Pne-fE-n6D" id="MUO-X0-IL3"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="MpW-n9-Kk5" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="1773.913043478261" y="721.20535714285711"/>
</scene>
<!--Native Event Navigation Controller-->
<scene sceneID="xGW-9n-a0Q">
<objects>
<navigationController automaticallyAdjustsScrollViewInsets="NO" id="3A7-59-k1N" customClass="NativeEventNavigationController" customModule="Example" customModuleProvider="target" sceneMemberID="viewController">
<toolbarItems/>
<navigationBar key="navigationBar" contentMode="scaleToFill" id="dOa-Gv-ZyO">
<rect key="frame" x="0.0" y="0.0" width="375" height="56"/>
<autoresizingMask key="autoresizingMask"/>
</navigationBar>
<nil name="viewControllers"/>
<connections>
<segue destination="BYZ-38-t0r" kind="relationship" relationship="rootViewController" id="JT6-Ui-Yex"/>
</connections>
</navigationController>
<placeholder placeholderIdentifier="IBFirstResponder" id="1QP-CT-4n8" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="1740.2898550724638" y="214.90178571428572"/>
</scene>
<!--Disabled Rows Example-->
<scene sceneID="ABy-XO-E3c">
<objects>
<viewController id="WZQ-di-uNi" customClass="DisabledRowsExample" customModule="Example" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="Sc4-2O-AXJ">
<rect key="frame" x="0.0" y="0.0" width="375" height="812"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" translatesAutoresizingMaskIntoConstraints="NO" id="Oyg-dY-W55">
<rect key="frame" x="0.0" y="24" width="375" height="754"/>
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
</tableView>
</subviews>
<color key="backgroundColor" systemColor="systemGroupedBackgroundColor" red="0.94901960780000005" green="0.94901960780000005" blue="0.96862745100000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="XkN-zT-NEc" firstAttribute="trailing" secondItem="Oyg-dY-W55" secondAttribute="trailing" id="7gn-0e-cZf"/>
<constraint firstItem="Oyg-dY-W55" firstAttribute="top" secondItem="XkN-zT-NEc" secondAttribute="top" constant="-64" id="Gn4-I4-rBc"/>
<constraint firstItem="Oyg-dY-W55" firstAttribute="leading" secondItem="XkN-zT-NEc" secondAttribute="leading" id="Hro-1Y-ulj"/>
<constraint firstItem="XkN-zT-NEc" firstAttribute="bottom" secondItem="Oyg-dY-W55" secondAttribute="bottom" id="c4g-Ey-qFj"/>
</constraints>
<viewLayoutGuide key="safeArea" id="XkN-zT-NEc"/>
</view>
<navigationItem key="navigationItem" id="4bl-6M-I9c"/>
<connections>
<outlet property="tableView" destination="Oyg-dY-W55" id="U4U-2e-K4n"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="jCh-aA-iuT" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="671.01449275362324" y="721.20535714285711"/>
</scene>
<!--SwipeActions Example-->
<scene sceneID="h0m-5n-GTL">
<objects>
<viewController title="SwipeActions Example" id="fc5-sQ-cEm" customClass="SwipeActionsController" customModule="Example" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="BDe-QW-0vU">
<rect key="frame" x="0.0" y="0.0" width="375" height="812"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" systemColor="systemGroupedBackgroundColor" red="0.94901960780000005" green="0.94901960780000005" blue="0.96862745100000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<viewLayoutGuide key="safeArea" id="pZd-Qt-DdU"/>
</view>
<navigationItem key="navigationItem" id="KY1-r2-ar2"/>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="axy-1K-pFt" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-768.11594202898561" y="1227.4553571428571"/>
</scene>
<!--Multivalued Sections Example-->
<scene sceneID="zbo-bQ-HRw">
<objects>
<viewController id="qIY-1j-dNf" customClass="MultivaluedSectionsController" customModule="Example" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="pDt-5Z-yLs">
<rect key="frame" x="0.0" y="0.0" width="375" height="812"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" systemColor="systemGroupedBackgroundColor" red="0.94901960780000005" green="0.94901960780000005" blue="0.96862745100000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<viewLayoutGuide key="safeArea" id="0u0-ut-SRL"/>
</view>
<navigationItem key="navigationItem" title="Multivalued Sections Example" id="AEF-L0-dOV"/>
<connections>
<segue destination="3E8-i9-e3P" kind="push" identifier="MultivaluedControllerSegue" id="WPE-k6-DLt"/>
<segue destination="fcN-W7-dk3" kind="push" identifier="MultivaluedOnlyReorderControllerSegue" id="UmF-77-syG"/>
<segue destination="X0Z-sB-j66" kind="push" identifier="MultivaluedOnlyInsertControllerSegue" id="E1b-n9-UAy"/>
<segue destination="duw-cd-ZoW" kind="push" identifier="MultivaluedOnlyDeleteControllerSegue" id="ELX-44-GWI"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="H3o-bj-Hpa" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-149.27536231884059" y="1205.3571428571429"/>
</scene>
<!--Custom Design Controller-->
<scene sceneID="YgN-2q-WXn">
<objects>
<viewController id="1Eh-Nv-AVS" customClass="CustomDesignController" customModule="Example" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="4er-sy-2OI">
<rect key="frame" x="0.0" y="0.0" width="375" height="812"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" systemColor="systemGroupedBackgroundColor" red="0.94901960780000005" green="0.94901960780000005" blue="0.96862745100000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<viewLayoutGuide key="safeArea" id="eSn-2T-5HY"/>
</view>
<navigationItem key="navigationItem" id="jsk-QK-ZNA"/>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="nBi-85-NX3" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="642.02898550724638" y="1205.3571428571429"/>
</scene>
<!--Multivalued Controller-->
<scene sceneID="q1j-mm-Aje">
<objects>
<viewController id="3E8-i9-e3P" customClass="MultivaluedController" customModule="Example" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="ObQ-WF-NaQ">
<rect key="frame" x="0.0" y="0.0" width="375" height="812"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" translatesAutoresizingMaskIntoConstraints="NO" id="QYB-0m-3TS">
<rect key="frame" x="0.0" y="24" width="375" height="754"/>
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
</tableView>
</subviews>
<color key="backgroundColor" systemColor="systemGroupedBackgroundColor" red="0.94901960780000005" green="0.94901960780000005" blue="0.96862745100000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="0fE-6j-NXZ" firstAttribute="trailing" secondItem="QYB-0m-3TS" secondAttribute="trailing" id="WNq-53-tdD"/>
<constraint firstItem="QYB-0m-3TS" firstAttribute="leading" secondItem="0fE-6j-NXZ" secondAttribute="leading" id="g7B-dV-Rka"/>
<constraint firstItem="QYB-0m-3TS" firstAttribute="top" secondItem="0fE-6j-NXZ" secondAttribute="top" constant="-64" id="hOF-AE-8dp"/>
<constraint firstItem="0fE-6j-NXZ" firstAttribute="bottom" secondItem="QYB-0m-3TS" secondAttribute="bottom" id="iIx-JY-TTE"/>
</constraints>
<viewLayoutGuide key="safeArea" id="0fE-6j-NXZ"/>
</view>
<navigationItem key="navigationItem" id="JnB-RD-R8g">
<barButtonItem key="rightBarButtonItem" title="Item" id="2jn-dM-TgZ">
<connections>
<action selector="save:" destination="3E8-i9-e3P" id="PAG-gJ-1WR"/>
</connections>
</barButtonItem>
</navigationItem>
<connections>
<outlet property="tableView" destination="QYB-0m-3TS" id="iAK-pT-gJd"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="Rb8-YP-WOF" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-1034.0579710144928" y="1705.9151785714284"/>
</scene>
<!--Multivalued Only Reorder Controller-->
<scene sceneID="iCj-Rb-n4P">
<objects>
<viewController id="fcN-W7-dk3" customClass="MultivaluedOnlyReorderController" customModule="Example" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="tot-tU-1EY">
<rect key="frame" x="0.0" y="0.0" width="375" height="812"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" translatesAutoresizingMaskIntoConstraints="NO" id="nfL-xs-nks">
<rect key="frame" x="0.0" y="24" width="375" height="754"/>
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
</tableView>
</subviews>
<color key="backgroundColor" systemColor="systemGroupedBackgroundColor" red="0.94901960780000005" green="0.94901960780000005" blue="0.96862745100000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="5A2-39-vLN" firstAttribute="trailing" secondItem="nfL-xs-nks" secondAttribute="trailing" id="Q8c-Dl-5N7"/>
<constraint firstItem="nfL-xs-nks" firstAttribute="top" secondItem="5A2-39-vLN" secondAttribute="top" constant="-64" id="X4r-kb-Teo"/>
<constraint firstItem="nfL-xs-nks" firstAttribute="leading" secondItem="5A2-39-vLN" secondAttribute="leading" id="joz-Cm-Ydf"/>
<constraint firstItem="5A2-39-vLN" firstAttribute="bottom" secondItem="nfL-xs-nks" secondAttribute="bottom" id="kKC-5p-SHy"/>
</constraints>
<viewLayoutGuide key="safeArea" id="5A2-39-vLN"/>
</view>
<navigationItem key="navigationItem" id="oxA-95-cU0"/>
<connections>
<outlet property="tableView" destination="nfL-xs-nks" id="iHP-FE-BF2"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iGJ-ZK-Z6q" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-455.07246376811599" y="1704.9107142857142"/>
</scene>
<!--Multivalued Only Insert Controller-->
<scene sceneID="q8U-ZK-3v7">
<objects>
<viewController id="X0Z-sB-j66" customClass="MultivaluedOnlyInsertController" customModule="Example" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="NZ2-Ab-KeD">
<rect key="frame" x="0.0" y="0.0" width="375" height="812"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" translatesAutoresizingMaskIntoConstraints="NO" id="9zy-nc-7Mc">
<rect key="frame" x="0.0" y="24" width="375" height="754"/>
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
</tableView>
</subviews>
<color key="backgroundColor" systemColor="systemGroupedBackgroundColor" red="0.94901960780000005" green="0.94901960780000005" blue="0.96862745100000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="k5N-q9-Egl" firstAttribute="trailing" secondItem="9zy-nc-7Mc" secondAttribute="trailing" id="5VJ-Q8-2V3"/>
<constraint firstItem="k5N-q9-Egl" firstAttribute="bottom" secondItem="9zy-nc-7Mc" secondAttribute="bottom" id="Tdf-8H-0aa"/>
<constraint firstItem="9zy-nc-7Mc" firstAttribute="top" secondItem="k5N-q9-Egl" secondAttribute="top" constant="-64" id="UTa-RU-N26"/>
<constraint firstItem="9zy-nc-7Mc" firstAttribute="leading" secondItem="k5N-q9-Egl" secondAttribute="leading" id="ocp-Oa-Mno"/>
</constraints>
<viewLayoutGuide key="safeArea" id="k5N-q9-Egl"/>
</view>
<navigationItem key="navigationItem" id="SZ8-Zk-XSU"/>
<connections>
<outlet property="tableView" destination="9zy-nc-7Mc" id="9bF-Fv-4vy"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="qfr-yj-va3" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="123.91304347826087" y="1704.5758928571429"/>
</scene>
<!--Multivalued Only Delete Controller-->
<scene sceneID="cKy-CR-RFW">
<objects>
<viewController id="duw-cd-ZoW" customClass="MultivaluedOnlyDeleteController" customModule="Example" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="qXS-6w-zrz">
<rect key="frame" x="0.0" y="0.0" width="375" height="812"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" translatesAutoresizingMaskIntoConstraints="NO" id="zaC-nI-UNK">
<rect key="frame" x="0.0" y="24" width="375" height="754"/>
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
</tableView>
</subviews>
<color key="backgroundColor" systemColor="systemGroupedBackgroundColor" red="0.94901960780000005" green="0.94901960780000005" blue="0.96862745100000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="IJ3-lb-fgF" firstAttribute="bottom" secondItem="zaC-nI-UNK" secondAttribute="bottom" id="R1V-hB-AaB"/>
<constraint firstItem="zaC-nI-UNK" firstAttribute="leading" secondItem="IJ3-lb-fgF" secondAttribute="leading" id="hqn-yy-qFx"/>
<constraint firstItem="zaC-nI-UNK" firstAttribute="top" secondItem="IJ3-lb-fgF" secondAttribute="top" constant="-64" id="owB-uD-Hwq"/>
<constraint firstItem="IJ3-lb-fgF" firstAttribute="trailing" secondItem="zaC-nI-UNK" secondAttribute="trailing" id="z8c-hO-WPO"/>
</constraints>
<viewLayoutGuide key="safeArea" id="IJ3-lb-fgF"/>
</view>
<navigationItem key="navigationItem" id="ZyI-L0-gTH">
<barButtonItem key="rightBarButtonItem" title="Edit" id="TAS-3q-2T6"/>
</navigationItem>
<connections>
<outlet property="editButton" destination="TAS-3q-2T6" id="FjX-jX-Kxn"/>
<outlet property="tableView" destination="zaC-nI-UNK" id="zOS-GW-fdq"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="Cvq-de-G7L" userLabel="First Responder" s
gitextract_b_rh3mc8/
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ ├── ISSUE_TEMPLATE.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ └── workflows/
│ └── ci.yml
├── .gitignore
├── CHANGELOG.md
├── CONTRIBUTING.md
├── Documentation/
│ ├── Eureka 2.0 Migration Guide.md
│ └── README_CN.md
├── Eureka.playground/
│ ├── Contents.swift
│ ├── contents.xcplayground
│ ├── playground.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ └── IDEWorkspaceChecks.plist
│ └── timeline.xctimeline
├── Eureka.podspec
├── Eureka.xcodeproj/
│ ├── project.pbxproj
│ ├── project.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ └── IDEWorkspaceChecks.plist
│ └── xcshareddata/
│ └── xcschemes/
│ └── Eureka.xcscheme
├── Eureka.xcworkspace/
│ ├── contents.xcworkspacedata
│ └── xcshareddata/
│ └── IDEWorkspaceChecks.plist
├── Example/
│ ├── EmojiCell.xib
│ ├── Example/
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets/
│ │ │ ├── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── Contents.json
│ │ │ ├── Eureka.imageset/
│ │ │ │ └── Contents.json
│ │ │ ├── checkedDay.imageset/
│ │ │ │ └── Contents.json
│ │ │ ├── map_pin.imageset/
│ │ │ │ └── Contents.json
│ │ │ ├── plus_image.imageset/
│ │ │ │ └── Contents.json
│ │ │ ├── selected.imageset/
│ │ │ │ └── Contents.json
│ │ │ ├── selectedRectangle.imageset/
│ │ │ │ └── Contents.json
│ │ │ ├── uncheckedDay.imageset/
│ │ │ │ └── Contents.json
│ │ │ ├── unselected.imageset/
│ │ │ │ └── Contents.json
│ │ │ └── unselectedRectangle.imageset/
│ │ │ └── Contents.json
│ │ ├── Base.lproj/
│ │ │ ├── EurekaSectionHeader.xib
│ │ │ ├── LaunchScreen.storyboard
│ │ │ ├── Main.storyboard
│ │ │ └── WeekDaysCell.xib
│ │ ├── Controllers/
│ │ │ ├── CustomCellsViewController.swift
│ │ │ ├── CustomDesignController.swift
│ │ │ ├── DisabledRowsExample.swift
│ │ │ ├── FieldRowCustomizationController.swift
│ │ │ ├── FormatterExample.swift
│ │ │ ├── HiddenRowsExample.swift
│ │ │ ├── InlineRowsExample.swift
│ │ │ ├── ListSectionsController.swift
│ │ │ ├── MultivaluedExamples.swift
│ │ │ ├── NativeEventExample.swift
│ │ │ ├── NavigationAccessoryController.swift
│ │ │ ├── PlainTableViewExample.swift
│ │ │ ├── RowsExample.swift
│ │ │ ├── SwipeActionsController.swift
│ │ │ └── ValidationsController.swift
│ │ ├── CustomCells.swift
│ │ ├── CustomDesign/
│ │ │ ├── DatePickerCell.xib
│ │ │ ├── SwitchCell.xib
│ │ │ └── TextCell.xib
│ │ ├── CustomRows/
│ │ │ └── ImageRow/
│ │ │ ├── ImagePickerController.swift
│ │ │ └── ImageRow.swift
│ │ ├── Helpers/
│ │ │ └── FloatLabelTextField.swift
│ │ ├── Info.plist
│ │ └── ViewController.swift
│ └── UITests/
│ ├── FieldRowUITests.swift
│ └── Info.plist
├── Example.xcodeproj/
│ ├── project.pbxproj
│ ├── project.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ └── IDEWorkspaceChecks.plist
│ └── xcshareddata/
│ └── xcschemes/
│ └── Example.xcscheme
├── LICENSE
├── Package.swift
├── README.md
├── Source/
│ ├── Assets.xcassets/
│ │ └── Contents.json
│ ├── Core/
│ │ ├── BaseRow.swift
│ │ ├── Cell.swift
│ │ ├── CellType.swift
│ │ ├── Core.swift
│ │ ├── Form.swift
│ │ ├── HeaderFooterView.swift
│ │ ├── Helpers.swift
│ │ ├── InlineRowType.swift
│ │ ├── NavigationAccessoryView.swift
│ │ ├── Operators.swift
│ │ ├── PresenterRowType.swift
│ │ ├── ResultBuilders.swift
│ │ ├── Row.swift
│ │ ├── RowControllerType.swift
│ │ ├── RowProtocols.swift
│ │ ├── RowType.swift
│ │ ├── Section.swift
│ │ ├── SelectableRowType.swift
│ │ ├── SelectableSection.swift
│ │ ├── SwipeActions.swift
│ │ └── Validation.swift
│ ├── Eureka.h
│ ├── Info.plist
│ ├── PrivacyInfo.xcprivacy
│ ├── Rows/
│ │ ├── ActionSheetRow.swift
│ │ ├── AlertRow.swift
│ │ ├── ButtonRow.swift
│ │ ├── ButtonRowWithPresent.swift
│ │ ├── CheckRow.swift
│ │ ├── Common/
│ │ │ ├── AlertOptionsRow.swift
│ │ │ ├── DateFieldRow.swift
│ │ │ ├── DateInlineFieldRow.swift
│ │ │ ├── DecimalFormatter.swift
│ │ │ ├── FieldRow.swift
│ │ │ ├── GenericMultipleSelectorRow.swift
│ │ │ ├── OptionsRow.swift
│ │ │ ├── Protocols.swift
│ │ │ └── SelectorRow.swift
│ │ ├── Controllers/
│ │ │ ├── MultipleSelectorViewController.swift
│ │ │ ├── SelectorAlertController.swift
│ │ │ └── SelectorViewController.swift
│ │ ├── DateInlineRow.swift
│ │ ├── DatePickerRow.swift
│ │ ├── DateRow.swift
│ │ ├── DoublePickerInputRow.swift
│ │ ├── DoublePickerRow.swift
│ │ ├── FieldsRow.swift
│ │ ├── LabelRow.swift
│ │ ├── MultipleSelectorRow.swift
│ │ ├── PickerInlineRow.swift
│ │ ├── PickerInputRow.swift
│ │ ├── PickerRow.swift
│ │ ├── PopoverSelectorRow.swift
│ │ ├── PushRow.swift
│ │ ├── SegmentedRow.swift
│ │ ├── SelectableRows/
│ │ │ └── ListCheckRow.swift
│ │ ├── SliderRow.swift
│ │ ├── StepperRow.swift
│ │ ├── SwitchRow.swift
│ │ ├── TextAreaRow.swift
│ │ ├── TriplePickerInputRow.swift
│ │ └── TriplePickerRow.swift
│ └── Validations/
│ ├── RuleClosure.swift
│ ├── RuleEmail.swift
│ ├── RuleEqualsToRow.swift
│ ├── RuleLength.swift
│ ├── RuleRange.swift
│ ├── RuleRegExp.swift
│ ├── RuleRequired.swift
│ └── RuleURL.swift
└── Tests/
├── BaseEurekaTests.swift
├── CallbacksTests.swift
├── CollectionTests.swift
├── DateTests.swift
├── FormValuesTests.swift
├── HelperMethodTests.swift
├── HiddenRowsTests.swift
├── Info.plist
├── MultivaluedSectionTests.swift
├── OperatorsTest.swift
├── ResultBuildersTests.swift
├── RowByTagTests.swift
├── RowCallbackTests.swift
├── RowsInsertionTests.swift
├── SectionsInsertionTests.swift
├── SelectableSectionTests.swift
├── SetValuesTests.swift
└── ValidationsTests.swift
Condensed preview — 162 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,017K chars).
[
{
"path": ".github/FUNDING.yml",
"chars": 813,
"preview": "# These are supported funding model platforms\n\ngithub: xmartlabs # Replace with up to 4 GitHub Sponsors-enabled username"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 823,
"preview": "---\nname: Bug report\nabout: Create a report to help us improve. Please make sure to search for existing\n issues or in t"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 706,
"preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: 'type: feature request'\nassignees: '"
},
{
"path": ".github/ISSUE_TEMPLATE.md",
"chars": 898,
"preview": "Before submitting issues ...\n\n- Make sure you are using Eureka [latest release](https://github.com/xmartlabs/Eureka/rele"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 0,
"preview": ""
},
{
"path": ".github/workflows/ci.yml",
"chars": 550,
"preview": "name: Eureka CI\n\non:\n pull_request:\n push:\n branches:\n - master\n\njobs:\n iOS:\n runs-on: macos-12\n strate"
},
{
"path": ".gitignore",
"chars": 664,
"preview": "# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!defau"
},
{
"path": "CHANGELOG.md",
"chars": 17089,
"preview": "# Change Log\nAll notable changes to this project will be documented in this file.\n\n\n### [5.5.0](https://github.com/xmart"
},
{
"path": "CONTRIBUTING.md",
"chars": 4510,
"preview": "Contributing Guidelines\n--------------------------------------------------\n\nThis document provides general guidelines ab"
},
{
"path": "Documentation/Eureka 2.0 Migration Guide.md",
"chars": 2575,
"preview": "# Eureka 2.0 Migration Guide\n\n#### Requirements:\n\nEureka 2.0.0 needs Xcode 8, Swift3+ to work. Minimum supported iOS ve"
},
{
"path": "Documentation/README_CN.md",
"chars": 33312,
"preview": "\n\n<p align=\"center\">\n<a href=\"https://travis-ci.org/xmartlabs/Eureka\"><img"
},
{
"path": "Eureka.playground/Contents.swift",
"chars": 5397,
"preview": "//: **Eureka Playground** - let us walk you through Eureka! cool features, we will show how to\n//: easily create powerfu"
},
{
"path": "Eureka.playground/contents.xcplayground",
"chars": 270,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<playground version='5.0' target-platform='ios' auto-termination"
},
{
"path": "Eureka.playground/playground.xcworkspace/contents.xcworkspacedata",
"chars": 135,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n version = \"1.0\">\n <FileRef\n location = \"self:\">\n </FileRef"
},
{
"path": "Eureka.playground/playground.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
"chars": 238,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "Eureka.playground/timeline.xctimeline",
"chars": 6811,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Timeline\n version = \"3.0\">\n <TimelineItems>\n <LoggerValueHistoryTimelin"
},
{
"path": "Eureka.podspec",
"chars": 602,
"preview": "Pod::Spec.new do |s|\n s.name = 'Eureka'\n s.version = '5.5.0'\n s.license = 'MIT'\n s.summary = 'Elegant iOS Forms in p"
},
{
"path": "Eureka.xcodeproj/project.pbxproj",
"chars": 59316,
"preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
},
{
"path": "Eureka.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
"chars": 151,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n version = \"1.0\">\n <FileRef\n location = \"self:Eureka.xcodepro"
},
{
"path": "Eureka.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
"chars": 238,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "Eureka.xcodeproj/xcshareddata/xcschemes/Eureka.xcscheme",
"chars": 3522,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n LastUpgradeVersion = \"1400\"\n version = \"1.3\">\n <BuildAction\n "
},
{
"path": "Eureka.xcworkspace/contents.xcworkspacedata",
"chars": 292,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n version = \"1.0\">\n <FileRef\n location = \"group:Eureka.playgro"
},
{
"path": "Eureka.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
"chars": 238,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "Example/EmojiCell.xib",
"chars": 3241,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVe"
},
{
"path": "Example/Example/AppDelegate.swift",
"chars": 1554,
"preview": "// AppDelegate.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( http://xm"
},
{
"path": "Example/Example/Assets.xcassets/AppIcon.appiconset/Contents.json",
"chars": 2664,
"preview": "{\n \"images\" : [\n {\n \"size\" : \"20x20\",\n \"idiom\" : \"iphone\",\n \"filename\" : \"appIcon20pt@2x.png\",\n "
},
{
"path": "Example/Example/Assets.xcassets/Contents.json",
"chars": 62,
"preview": "{\n \"info\" : {\n \"version\" : 1,\n \"author\" : \"xcode\"\n }\n}"
},
{
"path": "Example/Example/Assets.xcassets/Eureka.imageset/Contents.json",
"chars": 306,
"preview": "{\n \"images\" : [\n {\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {\n \"idiom\" : \"universal\",\n "
},
{
"path": "Example/Example/Assets.xcassets/checkedDay.imageset/Contents.json",
"chars": 307,
"preview": "{\n \"images\" : [\n {\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {\n \"idiom\" : \"universal\",\n "
},
{
"path": "Example/Example/Assets.xcassets/map_pin.imageset/Contents.json",
"chars": 344,
"preview": "{\n \"images\" : [\n {\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {\n \"idiom\" : \"universal\",\n "
},
{
"path": "Example/Example/Assets.xcassets/plus_image.imageset/Contents.json",
"chars": 350,
"preview": "{\n \"images\" : [\n {\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {\n \"idiom\" : \"universal\",\n "
},
{
"path": "Example/Example/Assets.xcassets/selected.imageset/Contents.json",
"chars": 358,
"preview": "{\n \"images\" : [\n {\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {\n \"idiom\" : \"universal\",\n "
},
{
"path": "Example/Example/Assets.xcassets/selectedRectangle.imageset/Contents.json",
"chars": 364,
"preview": "{\n \"images\" : [\n {\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {\n \"idiom\" : \"universal\",\n "
},
{
"path": "Example/Example/Assets.xcassets/uncheckedDay.imageset/Contents.json",
"chars": 309,
"preview": "{\n \"images\" : [\n {\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {\n \"idiom\" : \"universal\",\n "
},
{
"path": "Example/Example/Assets.xcassets/unselected.imageset/Contents.json",
"chars": 362,
"preview": "{\n \"images\" : [\n {\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {\n \"idiom\" : \"universal\",\n "
},
{
"path": "Example/Example/Assets.xcassets/unselectedRectangle.imageset/Contents.json",
"chars": 368,
"preview": "{\n \"images\" : [\n {\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {\n \"idiom\" : \"universal\",\n "
},
{
"path": "Example/Example/Base.lproj/EurekaSectionHeader.xib",
"chars": 2482,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" versi"
},
{
"path": "Example/Example/Base.lproj/LaunchScreen.storyboard",
"chars": 1806,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3"
},
{
"path": "Example/Example/Base.lproj/Main.storyboard",
"chars": 56728,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3"
},
{
"path": "Example/Example/Base.lproj/WeekDaysCell.xib",
"chars": 19406,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" versi"
},
{
"path": "Example/Example/Controllers/CustomCellsViewController.swift",
"chars": 1627,
"preview": "//\n// CustomCellsViewController.swift\n// Example\n//\n// Created by Mathias Claassen on 3/15/18.\n// Copyright © 2018 X"
},
{
"path": "Example/Example/Controllers/CustomDesignController.swift",
"chars": 1236,
"preview": "//\n// CustomDesignController.swift\n// Example\n//\n// Created by Mathias Claassen on 3/15/18.\n// Copyright © 2018 Xmar"
},
{
"path": "Example/Example/Controllers/DisabledRowsExample.swift",
"chars": 1318,
"preview": "//\n// DisabledRowsExample.swift\n// Example\n//\n// Created by Mathias Claassen on 3/15/18.\n// Copyright © 2018 Xmartla"
},
{
"path": "Example/Example/Controllers/FieldRowCustomizationController.swift",
"chars": 4127,
"preview": "//\n// FieldRowCustomizationController.swift\n// Example\n//\n// Created by Mathias Claassen on 3/15/18.\n// Copyright © "
},
{
"path": "Example/Example/Controllers/FormatterExample.swift",
"chars": 3750,
"preview": "//\n// FormatterExample.swift\n// Example\n//\n// Created by Mathias Claassen on 3/15/18.\n// Copyright © 2018 Xmartlabs."
},
{
"path": "Example/Example/Controllers/HiddenRowsExample.swift",
"chars": 2779,
"preview": "//\n// HiddenRowsExample.swift\n// Example\n//\n// Created by Mathias Claassen on 3/15/18.\n// Copyright © 2018 Xmartlabs"
},
{
"path": "Example/Example/Controllers/InlineRowsExample.swift",
"chars": 2961,
"preview": "//\n// InlineRowsExample.swift\n// Example\n//\n// Created by Mathias Claassen on 3/15/18.\n// Copyright © 2018 Xmartlabs"
},
{
"path": "Example/Example/Controllers/ListSectionsController.swift",
"chars": 1998,
"preview": "//\n// ListSectionsController.swift\n// Example\n//\n// Created by Mathias Claassen on 3/15/18.\n// Copyright © 2018 Xmar"
},
{
"path": "Example/Example/Controllers/MultivaluedExamples.swift",
"chars": 9503,
"preview": "//\n// MultivaluedSectionsController.swift\n// Example\n//\n// Created by Mathias Claassen on 3/15/18.\n// Copyright © 20"
},
{
"path": "Example/Example/Controllers/NativeEventExample.swift",
"chars": 8002,
"preview": "//\n// NativeEventExample.swift\n// Example\n//\n// Created by Mathias Claassen on 3/15/18.\n// Copyright © 2018 Xmartlab"
},
{
"path": "Example/Example/Controllers/NavigationAccessoryController.swift",
"chars": 3580,
"preview": "//\n// NavigationAccessoryController.swift\n// Example\n//\n// Created by Mathias Claassen on 3/15/18.\n// Copyright © 20"
},
{
"path": "Example/Example/Controllers/PlainTableViewExample.swift",
"chars": 931,
"preview": "//\n// PlainTableViewExample.swift\n// Example\n//\n// Created by Mathias Claassen on 3/15/18.\n// Copyright © 2018 Xmart"
},
{
"path": "Example/Example/Controllers/RowsExample.swift",
"chars": 12857,
"preview": "//\n// RowsExample.swift\n// Example\n//\n// Created by Mathias Claassen on 3/15/18.\n// Copyright © 2018 Xmartlabs. All "
},
{
"path": "Example/Example/Controllers/SwipeActionsController.swift",
"chars": 2351,
"preview": "//\n// SwipeActionsController.swift\n// Example\n//\n// Created by Mathias Claassen on 3/15/18.\n// Copyright © 2018 Xmar"
},
{
"path": "Example/Example/Controllers/ValidationsController.swift",
"chars": 11223,
"preview": "//\n// ValidationsController.swift\n// Example\n//\n// Created by Mathias Claassen on 3/15/18.\n// Copyright © 2018 Xmart"
},
{
"path": "Example/Example/CustomCells.swift",
"chars": 27277,
"preview": "// CustomCells.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( http://xm"
},
{
"path": "Example/Example/CustomDesign/DatePickerCell.xib",
"chars": 4073,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVe"
},
{
"path": "Example/Example/CustomDesign/SwitchCell.xib",
"chars": 3617,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVe"
},
{
"path": "Example/Example/CustomDesign/TextCell.xib",
"chars": 4629,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVe"
},
{
"path": "Example/Example/CustomRows/ImageRow/ImagePickerController.swift",
"chars": 2225,
"preview": "// ImagePickerController.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs S"
},
{
"path": "Example/Example/CustomRows/ImageRow/ImageRow.swift",
"chars": 9933,
"preview": "// ImageRow.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL ( http://x"
},
{
"path": "Example/Example/Helpers/FloatLabelTextField.swift",
"chars": 4943,
"preview": "//\n// FloatLabelTextField.swift\n// FloatLabelFields\n//\n// Created by Fahim Farook on 28/11/14.\n// Copyright (c) 2014"
},
{
"path": "Example/Example/Info.plist",
"chars": 1413,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "Example/Example/ViewController.swift",
"chars": 6824,
"preview": "// ViewController.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( http:/"
},
{
"path": "Example/UITests/FieldRowUITests.swift",
"chars": 6434,
"preview": "// ExampleUITests.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( http:/"
},
{
"path": "Example/UITests/Info.plist",
"chars": 733,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "Example.xcodeproj/project.pbxproj",
"chars": 35865,
"preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
},
{
"path": "Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
"chars": 152,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n version = \"1.0\">\n <FileRef\n location = \"self:Example.xcodepr"
},
{
"path": "Example.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
"chars": 238,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "Example.xcodeproj/xcshareddata/xcschemes/Example.xcscheme",
"chars": 3631,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n LastUpgradeVersion = \"1400\"\n version = \"1.3\">\n <BuildAction\n "
},
{
"path": "LICENSE",
"chars": 1076,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2019 XMARTLABS\n\nPermission is hereby granted, free of charge, to any person obtaini"
},
{
"path": "Package.swift",
"chars": 436,
"preview": "// swift-tools-version:5.0\nimport PackageDescription\n\nlet package = Package(\n name: \"Eureka\",\n platforms: [.iOS(.v"
},
{
"path": "README.md",
"chars": 53167,
"preview": "\n\n<p align=\"center\">\n<a href=\"https://travis-ci.org/xmartlabs/Eureka"
},
{
"path": "Source/Assets.xcassets/Contents.json",
"chars": 62,
"preview": "{\n \"info\" : {\n \"version\" : 1,\n \"author\" : \"xcode\"\n }\n}"
},
{
"path": "Source/Core/BaseRow.swift",
"chars": 10399,
"preview": "// BaseRow.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( http://xmartl"
},
{
"path": "Source/Core/Cell.swift",
"chars": 5483,
"preview": "// Cell.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( http://xmartlabs"
},
{
"path": "Source/Core/CellType.swift",
"chars": 2596,
"preview": "// CellType.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( http://xmart"
},
{
"path": "Source/Core/Core.swift",
"chars": 46566,
"preview": "// Core.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( http://xmartlabs"
},
{
"path": "Source/Core/Form.swift",
"chars": 17560,
"preview": "// Form.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( http://xmartlabs"
},
{
"path": "Source/Core/HeaderFooterView.swift",
"chars": 5251,
"preview": "// HeaderFooterView.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( http"
},
{
"path": "Source/Core/Helpers.swift",
"chars": 2869,
"preview": "// Helpers.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( http://xmartl"
},
{
"path": "Source/Core/InlineRowType.swift",
"chars": 5342,
"preview": "// InlineRowType.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( http://"
},
{
"path": "Source/Core/NavigationAccessoryView.swift",
"chars": 6120,
"preview": "// NavigationAccessoryView.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs"
},
{
"path": "Source/Core/Operators.swift",
"chars": 4708,
"preview": "// Operators.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( http://xmar"
},
{
"path": "Source/Core/PresenterRowType.swift",
"chars": 2229,
"preview": "// PresenterRowType.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( http"
},
{
"path": "Source/Core/ResultBuilders.swift",
"chars": 3549,
"preview": "// ResultBuilders.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2022 Xmartlabs ( http:/"
},
{
"path": "Source/Core/Row.swift",
"chars": 6857,
"preview": "// Row.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( http://xmartlabs."
},
{
"path": "Source/Core/RowControllerType.swift",
"chars": 1513,
"preview": "// RowControllerType.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( htt"
},
{
"path": "Source/Core/RowProtocols.swift",
"chars": 2458,
"preview": "// RowProtocols.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( http://x"
},
{
"path": "Source/Core/RowType.swift",
"chars": 9510,
"preview": "// RowType.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( http://xmartl"
},
{
"path": "Source/Core/Section.swift",
"chars": 21711,
"preview": "// Section.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( http://xmartl"
},
{
"path": "Source/Core/SelectableRowType.swift",
"chars": 1429,
"preview": "// SelectableRowType.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( htt"
},
{
"path": "Source/Core/SelectableSection.swift",
"chars": 5878,
"preview": "// SelectableSection.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( htt"
},
{
"path": "Source/Core/SwipeActions.swift",
"chars": 4792,
"preview": "//\n// Swipe.swift\n// Eureka\n//\n// Created by Marco Betschart on 14.06.17.\n// Copyright © 2017 Xmartlabs. All rights "
},
{
"path": "Source/Core/Validation.swift",
"chars": 3344,
"preview": "// RowValidationType.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL ("
},
{
"path": "Source/Eureka.h",
"chars": 1550,
"preview": "// Eureka.h\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( http://xmartlabs.c"
},
{
"path": "Source/Info.plist",
"chars": 823,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "Source/PrivacyInfo.xcprivacy",
"chars": 631,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "Source/Rows/ActionSheetRow.swift",
"chars": 4011,
"preview": "// ActionSheetRow.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL ( ht"
},
{
"path": "Source/Rows/AlertRow.swift",
"chars": 2952,
"preview": "// AlertRow.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL ( http://x"
},
{
"path": "Source/Rows/ButtonRow.swift",
"chars": 4027,
"preview": "// ButtonRow.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL ( http://"
},
{
"path": "Source/Rows/ButtonRowWithPresent.swift",
"chars": 3718,
"preview": "// Rows.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( http://xmartlabs"
},
{
"path": "Source/Rows/CheckRow.swift",
"chars": 2594,
"preview": "// CheckRow.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL ( http://x"
},
{
"path": "Source/Rows/Common/AlertOptionsRow.swift",
"chars": 1553,
"preview": "//\n// AlertOptionsRow.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL "
},
{
"path": "Source/Rows/Common/DateFieldRow.swift",
"chars": 4817,
"preview": "// DateFieldRow.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL ( http"
},
{
"path": "Source/Rows/Common/DateInlineFieldRow.swift",
"chars": 2799,
"preview": "// DateInlineFieldRow.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL "
},
{
"path": "Source/Rows/Common/DecimalFormatter.swift",
"chars": 2963,
"preview": "// DecimalFormatter.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL ( "
},
{
"path": "Source/Rows/Common/FieldRow.swift",
"chars": 22974,
"preview": "// FieldRow.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( http://xmart"
},
{
"path": "Source/Rows/Common/GenericMultipleSelectorRow.swift",
"chars": 3889,
"preview": "// GenericMultipleSelectorRow.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartl"
},
{
"path": "Source/Rows/Common/OptionsRow.swift",
"chars": 1584,
"preview": "// OptionsRow.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL ( http:/"
},
{
"path": "Source/Rows/Common/Protocols.swift",
"chars": 1545,
"preview": "// Protocols.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL ( http://"
},
{
"path": "Source/Rows/Common/SelectorRow.swift",
"chars": 3610,
"preview": "// SelectorRow.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL ( http:"
},
{
"path": "Source/Rows/Controllers/MultipleSelectorViewController.swift",
"chars": 6590,
"preview": "// MultipleSelectorViewController.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xm"
},
{
"path": "Source/Rows/Controllers/SelectorAlertController.swift",
"chars": 3426,
"preview": "// SelectorAlertController.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs"
},
{
"path": "Source/Rows/Controllers/SelectorViewController.swift",
"chars": 9017,
"preview": "// SelectorViewController.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs "
},
{
"path": "Source/Rows/DateInlineRow.swift",
"chars": 7167,
"preview": "// DateInliuneRow.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL ( ht"
},
{
"path": "Source/Rows/DatePickerRow.swift",
"chars": 6107,
"preview": "// DateRow.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL ( http://xm"
},
{
"path": "Source/Rows/DateRow.swift",
"chars": 3613,
"preview": "// DateRow.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL ( http://xm"
},
{
"path": "Source/Rows/DoublePickerInputRow.swift",
"chars": 4428,
"preview": "//\n// DoublePickerInputRow.swift\n// Eureka\n//\n// Created by Mathias Claassen on 5/10/18.\n// Copyright © 2018 Xmartla"
},
{
"path": "Source/Rows/DoublePickerRow.swift",
"chars": 4550,
"preview": "//\n// MultiplePickerRow.swift\n// Eureka\n//\n// Created by Mathias Claassen on 5/8/18.\n// Copyright © 2018 Xmartlabs. "
},
{
"path": "Source/Rows/FieldsRow.swift",
"chars": 11677,
"preview": "// FieldsRow.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL ( http://"
},
{
"path": "Source/Rows/LabelRow.swift",
"chars": 2066,
"preview": "// LabelRow.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL ( http://x"
},
{
"path": "Source/Rows/MultipleSelectorRow.swift",
"chars": 1738,
"preview": "// MultipleSelectorRow.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL"
},
{
"path": "Source/Rows/PickerInlineRow.swift",
"chars": 7908,
"preview": "// PickerInlineRow.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL ( h"
},
{
"path": "Source/Rows/PickerInputRow.swift",
"chars": 5283,
"preview": "// PickerInputRow.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL ( ht"
},
{
"path": "Source/Rows/PickerRow.swift",
"chars": 4958,
"preview": "// PickerRow.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL ( http://"
},
{
"path": "Source/Rows/PopoverSelectorRow.swift",
"chars": 2467,
"preview": "// PopoverSelectorRow.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL "
},
{
"path": "Source/Rows/PushRow.swift",
"chars": 1893,
"preview": "// PushRow.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL ( http://xm"
},
{
"path": "Source/Rows/SegmentedRow.swift",
"chars": 8944,
"preview": "// SegmentedRow.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL ( http"
},
{
"path": "Source/Rows/SelectableRows/ListCheckRow.swift",
"chars": 2437,
"preview": "// ListCheckRow.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL ( http"
},
{
"path": "Source/Rows/SliderRow.swift",
"chars": 7083,
"preview": "// SliderRow.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( http://xmar"
},
{
"path": "Source/Rows/StepperRow.swift",
"chars": 5687,
"preview": "//\n// StepperRow.swift\n// Eureka\n//\n// Created by Andrew Holt on 3/4/16.\n// Copyright © 2016 Xmartlabs. All rights r"
},
{
"path": "Source/Rows/SwitchRow.swift",
"chars": 2691,
"preview": "// SwitchRow.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL ( http://"
},
{
"path": "Source/Rows/TextAreaRow.swift",
"chars": 14916,
"preview": "// TextAreaRow.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL ( http:"
},
{
"path": "Source/Rows/TriplePickerInputRow.swift",
"chars": 6937,
"preview": "//\n// TriplePickerInputRow.swift\n// Eureka\n//\n// Created by Mathias Claassen on 5/10/18.\n// Copyright © 2018 Xmartla"
},
{
"path": "Source/Rows/TriplePickerRow.swift",
"chars": 7126,
"preview": "//\n// TriplePickerRow.swift\n// Eureka\n//\n// Created by Mathias Claassen on 5/9/18.\n// Copyright © 2018 Xmartlabs. Al"
},
{
"path": "Source/Validations/RuleClosure.swift",
"chars": 1785,
"preview": "// RuleClosure.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL ( http:"
},
{
"path": "Source/Validations/RuleEmail.swift",
"chars": 1475,
"preview": "// RuleEmail.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL ( http://"
},
{
"path": "Source/Validations/RuleEqualsToRow.swift",
"chars": 2151,
"preview": "// RuleRequire.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL ( http:"
},
{
"path": "Source/Validations/RuleLength.swift",
"chars": 3078,
"preview": "// RuleLength.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL ( http:/"
},
{
"path": "Source/Validations/RuleRange.swift",
"chars": 3626,
"preview": "// RuleRange.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL ( http://"
},
{
"path": "Source/Validations/RuleRegExp.swift",
"chars": 2820,
"preview": "// RegexRule.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL ( http://"
},
{
"path": "Source/Validations/RuleRequired.swift",
"chars": 1743,
"preview": "// RuleRequire.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL ( http:"
},
{
"path": "Source/Validations/RuleURL.swift",
"chars": 2215,
"preview": "// RuleURL.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL ( http://xm"
},
{
"path": "Tests/BaseEurekaTests.swift",
"chars": 6074,
"preview": "// BaseEurekaTests.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( http:"
},
{
"path": "Tests/CallbacksTests.swift",
"chars": 8141,
"preview": "// CallbacksTests.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( http:/"
},
{
"path": "Tests/CollectionTests.swift",
"chars": 5204,
"preview": "// CollectionTests.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( http:"
},
{
"path": "Tests/DateTests.swift",
"chars": 3398,
"preview": "// DateTests.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( http://xmar"
},
{
"path": "Tests/FormValuesTests.swift",
"chars": 4310,
"preview": "// FormValuesTests.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( http:"
},
{
"path": "Tests/HelperMethodTests.swift",
"chars": 4530,
"preview": "// HelperMethodTests.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( htt"
},
{
"path": "Tests/HiddenRowsTests.swift",
"chars": 12565,
"preview": "// HiddenRowsTests.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( http:"
},
{
"path": "Tests/Info.plist",
"chars": 735,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "Tests/MultivaluedSectionTests.swift",
"chars": 5553,
"preview": "// MultivaluedSectionTests.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2017 Xmartlabs"
},
{
"path": "Tests/OperatorsTest.swift",
"chars": 2849,
"preview": "// OperatorsTest.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( http://"
},
{
"path": "Tests/ResultBuildersTests.swift",
"chars": 4601,
"preview": "// ResultBuildersTests.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2022 Xmartlabs ( h"
},
{
"path": "Tests/RowByTagTests.swift",
"chars": 2421,
"preview": "// RowByTagTests.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( http://"
},
{
"path": "Tests/RowCallbackTests.swift",
"chars": 4577,
"preview": "// RowCallbackTests.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( http"
},
{
"path": "Tests/RowsInsertionTests.swift",
"chars": 8806,
"preview": "//\n// RowsInsertionTests.swift\n// Eureka\n//\n// Created by Miguel Revetria on 5/8/17.\n// Copyright © 2017 Xmartlabs. "
},
{
"path": "Tests/SectionsInsertionTests.swift",
"chars": 11358,
"preview": "//\n// SectionInsertionTests.swift\n// Eureka\n//\n// Created by Miguel Revetria on 5/8/17.\n// Copyright © 2017 Xmartlab"
},
{
"path": "Tests/SelectableSectionTests.swift",
"chars": 9067,
"preview": "// SelectableSectionTests.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs "
},
{
"path": "Tests/SetValuesTests.swift",
"chars": 5591,
"preview": "// SetValuesTests.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs ( http:/"
},
{
"path": "Tests/ValidationsTests.swift",
"chars": 7376,
"preview": "// ValidationsTests.swift\n// Eureka ( https://github.com/xmartlabs/Eureka )\n//\n// Copyright (c) 2016 Xmartlabs SRL ( "
}
]
About this extraction
This page contains the full source code of the xmartlabs/Eureka GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 162 files (943.5 KB), approximately 240.7k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.