Skip to content

Entries with the open-source tag

Pull request Fix reload delete same index path on opennetltd/Composed

This is an improvement but it's not quite a fix yet.

I think the issue is in the transforming of the index paths. We probably need to work with a mixture of the current and the transformed index paths in ChangesReducer.removeElements(at:) but I can't figure out the right mix and need to step away for a bit to clear my head of this, hopefully coming back with "fresh eyes."

Pull request Enable Strict Concurrency Checks on opennetltd/Composed

The primary change here is to enable strict concurrency checks via -Xfrontend -strict-concurrency=complete. The main knock-on effect of this is that @MainActor has been added to most protocols and types.

I also:

  • Bumped the Swift tools version to 5.7
    • With this the name parameter on the dependency declaration has been deprecated
  • Removed support for all but UICollectionViews
    • We don't use any of the other view types so this has no impact on us, other than less to update and maintain
    • We did rely on some of the extensions on UITableView. The PR in the main repo now includes these extensions
  • The required initialisers on ArraySection have been removed
    • I planned to remove these soon because they make it harder to subclass, but these have been removed now because they were used for protocol conformances that cannot be satisfied with an actor-isolated function

Pull request Support watchOS on Quick/Quick

This is a counterpart to, which added support for watchOS to Nimble.

Note that this is a draft until a new version of Nimble is released with watchOS support. Until then this points at main.

I'm also not sure if the tests will run on CI correctly because the tests require watchOS 7.4 to run and I'm not sure what version of watchOS the simulators are configured with.

I also found that the tests weren't compiling (using Xcode 13.2.1) so I've updated these too.

Pull request Correctly calculate `CollectionFlowLayoutEnvironment.contentSize` on composed-swift/Composed

Here's a small PR for a bug that I think has just gone unnoticed because we've never used the sectionInset property of the UICollectionViewFlowLayout, and we've never used the contentInset property of UICollectionView.

The issues looks to be that the layout's sectionInset property is applied on a per-section basis, but the collection view's contentInset was not being honoured.

It was also calculated using insetBy(dx:dy:), which will modify the width by -dx * 2, which would double the expected insets.

Pull request [snapshot] wait for simulator to boot before overriding status bar on fastlane/fastlane


  • [x] I've run bundle exec rspec from the root directory to see all new and existing tests pass
  • [x] I've followed the fastlane code style and run bundle exec rubocop -a to ensure the code style is valid
  • [x] I've read the Contribution Guidelines
  • [x] I've updated the documentation if necessary.

Motivation and Context

If the simulator is not booted when the status bar is updated it does not do anything and the default status bar is used.

Resolves #19317


xcrun instruments fails with the error "xcrun: error: Failed to locate 'instruments'." This command will boot the simulator if it's not curerntly booted and then wait for it finish booting before terminating.

Testing Steps

Use snapshot while the override_status_bar option is true.

Some of the tests failed for me, although they do not seem related to this change.
rspec ./fastlane/spec/actions_specs/app_store_connect_api_key_spec.rb:95 # Fastlane Fastlane::FastFile App Store Connect API Key raise error when no key_filepath or key_content
rspec ./fastlane/spec/actions_specs/import_from_git_spec.rb:162 # Fastlane Fastlane::FastFile import_from_git with caching works with new tags
rspec ./fastlane/spec/actions_specs/import_from_git_spec.rb:200 # Fastlane Fastlane::FastFile import_from_git with caching works with branch
rspec ./match/spec/importer_spec.rb:47 # Match Match::Runner imports a .cert, .p12 and .mobileprovision (iOS provision) into the match repo
rspec ./match/spec/importer_spec.rb:64 # Match Match::Runner imports a .cert, .p12 and .provisionprofile (osx provision) into the match repo
rspec ./match/spec/importer_spec.rb:81 # Match Match::Runner imports a .cert and .p12 without profile into the match repo (backwards compatibility)
rspec ./match/spec/importer_spec.rb:98 # Match Match::Runner imports a .cert and .p12 when the type is set to developer_id
rspec ./pilot/spec/build_manager_spec.rb:661 # Build Manager #transporter_for_selected_team with one team id
rspec ./pilot/spec/build_manager_spec.rb:677 # Build Manager #transporter_for_selected_team with inferred provider id
rspec ./pilot/spec/build_manager_spec.rb:633 # Build Manager #transporter_for_selected_team with itc_provider with nil Spaceship::TunesClient
rspec ./pilot/spec/build_manager_spec.rb:646 # Build Manager #transporter_for_selected_team with itc_provider with nil Spaceship::TunesClient
rspec ./pilot/spec/manager_spec.rb[1:1:2:2:1:1:1] # Pilot Pilot::Manager what happens on 'login' when using web session when username input param is given behaves like performing the spaceship login using username and password by pilot performs the login using username and password
rspec ./pilot/spec/manager_spec.rb[1:1:2:2:2:1:1] # Pilot Pilot::Manager what happens on 'login' when using web session when username input param is not given but found apple_id in AppFile behaves like performing the spaceship login using username and password by pilot performs the login using username and password
rspec ./sigh/spec/runner_spec.rb:142 # Sigh Sigh::Runner#devices_to_use devices for development
rspec ./sigh/spec/runner_spec.rb:152 # Sigh Sigh::Runner#devices_to_use devices for adhoc

Pull request Fallback to description when content is not provided for JSON feed on jpmonette/feed

In RSS 2 the description may contain the full text and the content can be omitted when there is not a short version available:

However a JSON feed will not contain a content_html field when the content is not provided.

This makes it hard to create both a JSON feed and an RSS 2 feed because providing content without a description will create a content:encoded field but not a description field in the RSS 2 feed.

My solution to this is to fallback to the item.description when item.content is not provided and generating a JSON feed.

Pull request Add support for watchOS on Quick/Nimble

This PR is to add support for running on watchOS. Since Xcode 12.5 watchOS has been supported but Nimble doesn't currently compile for watchOS.

A new target has been added to the project, along with explicit support in the Package.swift.

I don't believe anything here is a breaking change.

I have a fork of Quick that also supports watchOS. I'll create a PR for that if this PR gets approved and merged.

VaporDocC v0.1.0

Release Notes

  • Support redirecting requests for the root (“/“)
  • Support redirecting requests with missing trailing slashes to include trailing slashes

Pull request Add JosephDuffy/VaporDocC.git on SwiftPackageIndex/PackageList

The package(s) being submitted are:


I have either:

  • [x] Run swift ./validate.swift.

Or, checked that:

  • [ ] The package repositories are publicly accessible.
  • [ ] The packages all contain a Package.swift file in the root folder.
  • [ ] The packages are written in Swift 5.0 or later.
  • [ ] The packages all contain at least one product (either library or executable), and at least one product is usable in other Swift apps.
  • [ ] The packages all have at least one release tagged as a semantic version.
  • [ ] The packages all output valid JSON from swift package dump-package with the latest Swift toolchain.
  • [ ] The package URLs are all fully specified including the protocol (usually https) and the .git extension.
  • [ ] The packages all compile without errors.
  • [ ] The package list JSON file is sorted alphabetically.

Pull request Cache `SingleElementSections.numberOfElements` on composed-swift/Composed

Overall this is pretty minor but when dealing with a lot of SingleElementSections that are infrequently updated is does start to slow down.

I thought a faster approach would be to use generics on replace(element:) to only check for nil when the value is Optional, but generics don't allow for this kind of overload.

Also added some basic tests. The performance tests show a ~9% performance increase.

Pull request Cache nib registrations to improve performance on composed-swift/Composed

@bill201207 found that UINib(nibName:bundle:) is a big part of the poor performance when our app launches.

Ultimately batching updates will help with a lot of things like this, but really that'll just be masking some of the performance issues so it's useful to find issues like this now.

Pull request Merge ComposedLayout and ComposedUI packages on composed-swift/Composed

This adds the ComposedLayout and ComposedUI packages, which will close #16.

The base for this is 2.0-beta, which we can use for testing new changes, which can also break API.

If you go to the repo settings you can (temporarily) set the default branch to 2.0-beta and we can add a note to the README stating this is the beta release and the stable release is available in the master branch.

Once merged and these changes are made the READMEs for ComposedLayout and ComposedUI repos can be updated to point to this repo and their repos archived.

Pull request Add `FlatSection` on composed-swift/Composed

This is a new type of section that is similar to ComposedSectionProvider, but rather than flattening each of the children in to a single SectionProvider it flattens them in to a single Section.

The ComposedUI side of this has been updated to support multiple cells per section, with a convenience for FlatSection that delegates the calls to each of the flattened sections.

This is a breaking change since the protocol requirements have changed. I have set the base of the PR to merge-all-libraries since that's also a breaking change and this PR relies on those changes.

edit: We've moved to our own fork to allow for more rapid development. The latest changes are in, which will eventually be merged back in to this repo once some of the other PRs/issues have been resolved.

Pull request Use default Xcode version on composed-swift/Composed

In my open source frameworks I usually use the last major Xcode (currently 11.7), latest (currently 12.3) and latest beta (soon to be 12.4), but this project has only been setup for the latest version of Xcode.

If we feel it's good to run the tests across multiple Xcode versions I have created, which we can use to keep the versions in-sync with the versions available as part of GitHub actions.

For now I've removed all use a explicit Xcode versions.

Pull request Fix crash switching segmented provider's segment on composed-swift/Composed

Regression introduce in 1.1.1.

Would occur when a segmented provider was the last child of a composed provider and the selected segment changed.

This could have also been fixed in SegmentedSectionProvider but changing the _currentIndex after the delegate has been notified (which is closer to what ComposedSectionProvider does) but we have nothing in the API contract stating this must be done, so really it's an issue with the caching in ComposedSectionProvider.

Pull request Cache `sections` and `numberOfSection` on composed-swift/Composed

These properties are accessed quite frequently and can be cached with a little extra processing.

This is another finding from screens that have a large number of composed sections.

This and seem to be the main areas of performance issues, although that doesn't mean that once these are working and merged we won't uncover more 😅

Thanks to @bill201207 for their contributions to this change.

Pull request Add collection view batch updates on composed-swift/ComposedUI

The idea of this is that without breaking the API the collection view will batch updates.

Inserting a large number of sections is the main area of performance loss we are currently encountering, because the sections are inserted individually and not batched. This change alone has reduce the initial load time of one our screens (which has 100-150 sections added at once) from 30-45 seconds down to less than a second (at least it is not noticeable).

I had created to try and address this, which has the advantage that it would apply to other view types (e.g. UITableView), but I believe does not offer the same performance improvements and it is restricted to a single ComposedSectionProvider.

This is a draft to collect feedback; as you can see there are some TODOs but I think there's enough implemented to provide an overview of the changes that would be required to implement this.

This does not currently work; there are situations that cause the collection NSInternalInconsistencyException', reason: 'Invalid update error. I have some failing tests that demonstrate what the result should be.

Pull request Add `performBatchUpdates(_:)` function on composed-swift/Composed

When adding a lot of sections (we have a screen which inserts 100~175 on initial load) the performance is quite poor.

Along with the improve-composed-section-provider-performance branch (which I want to fully validate before making a PR) performing these changes in batch helps a lot.

YetiiLiib 0.2.2

Release Notes

Updated App Store URL generation

Fixed error when loading app store from generated URLs Moved logic for generating App Store URL to the AppMetaData struct Improved documentation around App Store URLs

YetiiLiib Versions 0.0.1 to 0.2.1