- Tuist own explanation of its advantages
- Tuist is developed in Swift (no additional dependencies needed for installation)
- Fast bug fixes since Tuist is open source and developed in a community driven way
- Developers can write configuration files in Swift ❤️
- Code for setting up multiple projects can be shared using Project-Description-Helpers
- Project configuration and build settings can be documented
- External dependencies can be integrated in an easy way. Carthage and SPM are supported too.
- The workspace and project file can be removed from git which leads to a high reduction of merge conflicts and a smoother development process.
- Supports the creation of release pipelines for GitHub Actions and Bitrise.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import UIKit | |
/// This object should contain everything we need to process async, | |
/// non-concurrent stream updates. | |
struct Update { | |
var id: Int | |
var finishStream: () -> Void | |
} | |
final class UpdateMonitor { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
extension GMSMapView { | |
override open func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { | |
super.traitCollectionDidChange(previousTraitCollection) | |
guard traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) else { | |
return | |
} | |
updateMapStyle() | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
extension UIView { | |
func applyParallax() { | |
let amount = 10 | |
let horizontal = UIInterpolatingMotionEffect(keyPath: "center.x", type: .tiltAlongHorizontalAxis) | |
horizontal.minimumRelativeValue = -amount | |
horizontal.maximumRelativeValue = amount | |
let vertical = UIInterpolatingMotionEffect(keyPath: "center.y", type: .tiltAlongVerticalAxis) |
Thanks to Paul Hudson this question is also answered visually now:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
extension XCUIElement { | |
/** | |
Removes any current text in the field before typing in the new value | |
- Parameter text: the text to enter into the field | |
*/ | |
func clearAndEnterText(text: String) { | |
defer { | |
self.typeText(text) | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#/bin/bash | |
EXT="tif" | |
# use xargs to trim whitespaces | |
COUNT=`ls -1 *.$EXT 2>/dev/null | wc -l | xargs` | |
THRESHOLD="50%" | |
# check if there are files of the specified extension | |
if [ $COUNT != 0 ] | |
then | |
echo "Converting $COUNT $EXT's to black and white and merge them to one PDF..." |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { | |
let strippedString = <change replacements string so it fits your requirement - strip, trim, etc> | |
// replace current content with stripped content | |
if let replaceStart = textField.position(from: textField.beginningOfDocument, offset: range.location), | |
let replaceEnd = textField.position(from: replaceStart, offset: range.length), | |
let textRange = textField.textRange(from: replaceStart, to: replaceEnd) { | |
textField.replace(textRange, withText: strippedString) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
func addSubviewMaximized(subview: UIView, insets: UIEdgeInsets? = nil) { | |
let insets = insets ?? UIEdgeInsetsZero | |
let constraints: [NSLayoutConstraint] = [ | |
subview.leftAnchor.constraintEqualToAnchor(leftAnchor, constant: insets.left), | |
subview.leftAnchor.constraintEqualToAnchor(leftAnchor, constant: -insets.right), | |
subview.topAnchor.constraintEqualToAnchor(topAnchor, constant: insets.top), | |
subview.bottomAnchor.constraintEqualToAnchor(bottomAnchor, constant: -insets.bottom), | |
] | |
subview.translatesAutoresizingMaskIntoConstraints = false |
NewerOlder