Carthage cache for S3, Minio, Ceph, Google Storage, Artifactory and many others

Overview

Rome Build Status rome-latest cocoapods total-downloads fastlane-plugin -badge twitter-follow

Rome is a tool that allows developers on Apple platforms to use:

as a shared cache for frameworks built with Carthage.

Trusted by:

Spotifylinecorp

Mozilla Brave DaimlerTSS

sharecareDisney

Search Github

Table of Contents

Get Rome

Using Homebrew

$ brew tap tmspzz/tap https://github.com/tmspzz/homebrew-tap.git
$ brew install tmspzz/homebrew-tap/rome

Using CocoaPods

Simply add the following line to your Podfile:

pod 'Rome'

This will download Rome to the Pods/ folder during your next pod install execution and will allow you to invoke it via ${PODS_ROOT}/Rome/rome in your Script Build Phases.

Manual

The Rome binary is also attached as a zip to each release on the releases page here on GitHub.

Using Rome? Let me know by opening an issue and I will gladly add you to the user list.

Use Rome with fastlane

You can integrate Rome into your fastlane automation with the fastlane plugin for Rome.

The problem

Suppose you're working a number of frameworks for your project and want to share those with your team. A great way to do so is to use Carthage and have team members point the Cartfile to the new framework version (or branch, tag, commit) and run carthage update.

Unfortunately this will require them to build from scratch the new framework. This is particularly annoying if the dependency tree for that framework is big and / or takes a long time to build.

The solution

Use a cache. The first team member (or a CI) can build the framework and share it, while all other developers can get it from the cache with no waiting time.

Workflow

The Rome's workflow changes depending if you are the producer (i.e. the first person in your team to build the framework) or the consumer.

Producer workflow

$ vi Cartfile # point to the new version of the framework
$ carthage update && rome upload

If you are running Rome in the context of a framework and want to upload the current framework see CurrentMap.

Consumer workflow

$ vi Cartfile # point to the new version of the framework if necessary
$ carthage update --no-build && rome download

or

$ vi Cartfile.resolved # point to the new version of the framework
$ rome download

If you are running Rome in the context of a framework and want to download the current framework see CurrentMap.

CI workflow

A CI can be both consumer and producer.

A simple workflow for using Rome on a continuous integration should resemble the following:

  • get available artifacts
  • check if any artifacts are missing
  • build missing artifacts if any
  • upload build artifacts to the cache if needed

You can use the fastlane plugin for Rome to implement a CI workflow too.

If you are running Rome in the context of a framework and want to upload or download the current framework see CurrentMap.

--cache-builds workflow (recommended)

This workflow relies on .version files being produced by Carthage. This means that you have to invoke carthage with --cache-builds for this to work.

In code:

#!/bin/bash
rome download --platform iOS # download missing frameworks (or copy from local cache)
carthage bootstrap --platform iOS --cache-builds # build dependencies missing a .version file or that where not found in the cache
rome list --missing --platform iOS | awk '{print $1}' | xargs -I {} rome upload "{}" --platform iOS # upload what is missing

List workflow

This workflow relies on querying the cache to check for missing dependencies and then selectively telling Carthage what to build. This flow is more fragile as Carthage will refuse to build indirect dependencies.

In code:

#!/bin/bash
rome download --platform iOS # download missing frameworks (or copy from local cache)
rome list --missing --platform iOS | awk '{print $1}' | xargs -I {} carthage bootstrap "{}" --platform iOS --cache-builds # list what is missing and update/build if needed
rome list --missing --platform iOS | awk '{print $1}' | xargs -I {} rome upload "{}" --platform iOS # upload what is missing

If no frameworks are missing, the awk pipe to carthage will fail and the rest of the command will not be executed. This avoids rebuilding all dependencies or uploading artifacts already present in the cache.

Set up

If you plan to use Amazon's S3 as a cache, then follow the next three steps:

  • First you need a .aws/credentials file in your home folder. This is used to specify your AWS Credentials.
  • Second you need a .aws/config file in your home folder. This is used to specify the AWS Region.
  • Third you need a Romefile in the project where you want to use Rome. At the same level where the Cartfile is.

If you just want to use only a local folder as a cache then:

  • You need a Romefile in the project where you want to use Rome. At the same level where the Cartfile is. Since 0.17.1.49, if you want to place the Romefile elsewhere or name it differently use --romefile <path-to-romefile> when running rome <COMMAND>.

Setting up AWS credentials

Since version 0.2.0.0 Rome will expect to find credentials either as environment variables $AWS_ACCESS_KEY_ID and $AWS_SECRET_ACCESS_KEY or in a file at .aws/credentials. This aligns Rome behavior to other tools that use Amazon's SDK. See Amazon's blogpost on the topic.

In your home folder create a .aws/credentials like the following

[default]
aws_access_key_id = ACCESS_KEY
aws_secret_access_key = SECRET_KEY

this should look something like

[default]
aws_access_key_id = AGIAJQARMD67CE3DTKHA
aws_secret_access_key = TedRV2/dFkBr1H3D7xuPsF9+CBHTjK0NKrJuoVs8

these will be the credentials that Rome will use to access S3 on your behalf. To use configurations other than the default profile set the $AWS_PROFILE environment variable to your desired profile.

Since version 0.21.0.58 Rome also supports privilege escalation via Amazon STS by specifying role_arn and source_profile in ~/.aws/config

Selecting the AWS Region

In your home folder create a .aws/config like the following

[default]
region = us-east-1

To use configurations other than the default profile set the $AWS_PROFILE environment variable to your desired profile.

Alternatively the AWS Region can also be specified by setting an AWS_REGION environment variable.

Setting up endpoint override

To your .aws/config in the profile section you wish to use, add an endpoint key like so

[default]
region = us-east-1
endpoint = https://my.minio.host:9091

Do not remove the region key.

Default port for https endpoints is 443 if the port is left unspecified.

Default port for http endpoints is 9000 if the port is left unspecified.

Alternatively the endpoint can also be specified by setting an AWS_ENDPOINT environment variable.

Custom Engine

You can write your own script that Rome will use as engine to execute upload/download/list commands. You start by specifying the path to a script or executable in your Romefile as shown in the example structure. Rome will invoke the specified script or executable with three commands and different parameters based on the action to perform:

  • ./script.sh upload local-path remote-path
  • ./script.sh download remote-path local-path
  • ./script.sh list remote-path

For example, if your Romefile specifies engine: script.sh, Rome will execute the following command when uploading/downloading/listing a framework:

./script.sh upload Alamofire/iOS/Alamofire.framework-4.8.2.zip Alamofire/iOS/Alamofire.framework-4.8.2.zip
./script.sh download Alamofire/iOS/Alamofire.framework-4.8.2.zip Alamofire/iOS/Alamofire.framework-4.8.2.zip
./script.sh list Alamofire/iOS/Alamofire.framework-4.8.2.zip

The script should take the given remote-path, carry out its logic to retrieve the artifact and place it at local-path. Please refer to the cache structure definition for more information on the cache is constructed.

For an example of a custom engine, take a look at engine.sh which is used in the integration tests to simply copy artifacts in a different directory. Infinite uses cases are opened by using a custom engine, such as uploading artifacts to any non-compatible S3 storage system.

Other example engines:

Romefile

About the format

Since version 0.17.0.48 the Romefile is in YAML format. Rome can still read the INI Romefile, for now.

Sucessive release might abandon compatibility.

Feature support that require additions or changes to the Romefile won't be supported in INI.

You can migrate your Romefile to YAML by running rome utils migrate-romefile.

If you are looking for the documention prior to 0.17.0.48, check the wiki

Purpose

The Romefile has three purposes:

  1. Specifies what caches to use - cache key. This key is required.
  2. Allows to use custom name mappings between repository names and framework names - repositoryMap key. This key is optional and can be omitted.
  3. Allows to ignore certain framework names - ignoreMap key. This key is optional and can be omitted.
  4. Allows to specify the current framework's name(s) - currentMap key. This key is optional and can be omitted.

Structure

A Romefile is made of 4 objects, of which only one, the cache, is required.

  • A cache definition object
  • A repositoryMap made of a list of Romefile Entry
  • An ignoreMap made of a list of Romefile Entry
  • A currentMap made of a list of Romefile Entry

Each Romefile Entry is made of:

  • A name
  • A type which can be static or dynamic
  • A set of supported platforms including iOS, Mac, tvOS, watchOS

A Romefile looks like this:

cache: # required
  # at least one of the following is required:
  local: ~/Library/Caches/Rome # optional and can be combined with either a `s3Bucket` or `engine`
  s3Bucket: ios-dev-bucket # optional and can be combined with `local`
  engine: script.sh # optional and can be combined with `local`
                    
repositoryMap: # optional
- better-dog-names: # entry that does not follow
                    # the "Organization/FrameworkName" convention.
  - name: DogFramework # required
    type: static # optional, defaults to dynamic
- HockeySDK-iOS:
  - name: HockeySDK
    platforms: [iOS] # optional, all platforms if empty
- awesome-framework-for-cat-names:
  - name: CatFramework
    type: dynamic
ignoreMap:
- GDCWebServer:
  - name: GDCWebServer
currentMap:
- animal-names-framework:
  - name: AnimalNames

Cache

The cache must contain at least one between:

  • the name of the S3 Bucket to upload/download to/from. The key s3Bucket is optional.
  • the path to local directory to use as an additional cache. The key local is optional.
  • the path to a custom engine to use as an additional cache. The key engine is optional.
cache: # required
  local: ~/Library/Caches/Rome # optional
                               # at least one between `local`, `s3bucket` and `engine` is required
  s3Bucket: ios-dev-bucket # optional
                           # at least one between `local`, `s3bucket` and `engine` is required
  engine: script.sh        # optional
                           # at least one between `local`, `s3bucket` and `engine` is required

This is already a viable Romefile.

RepositoryMap

This contains the mappings of repository and framework names. This is particularly useful if dependecies are not on GitHub or don't respect the "Organization/FrameworkName" convention.

Example:

Suppose you have the following in your Cartfile

github "Alamofire/Alamofire" ~> 4.3.0
github "bitstadium/HockeySDK-iOS" "3.8.6"
git "http://stash.myAnimalStartup.com/scm/iossdk/awesome-framework-for-cat-names.git" ~> 3.3.1
git "http://stash.myAnimalStartup.com/scm/iossdk/better-dog-names.git" ~> 0.4.4

which translates to the following Cartfile.resolved

github "Alamofire/Alamofire" "4.3.0"
github "bitstadium/HockeySDK-iOS" "3.8.6"
git "http://stash.myAnimalStartup.com/scm/iossdk/awesome-framework-for-cat-names.git" "3.3.1"
git "http://stash.myAnimalStartup.com/scm/iossdk/better-dog-names.git" "0.4.4"

but your framework names are actually HockeySDK, CatFramework and DogFramework as opposed to HockeySDK-iOS, awesome-framework-for-cat-names and better-dog-names.

simply add a repositoryMap key to your Romefile and specify the following mapping:

cache:
  local: ~/Library/Caches/Rome 
repositoryMap:
- better-dog-names: # this is the Romefile Entry for  `better-dog-names`
  - name: DogFramework
    type: static
    platforms: [iOS, Mac]
- HockeySDK-iOS: # this is the Romefile Entry for  `HockeySDK-iOS`
  - name: HockeySDK
    platforms: [iOS]
- awesome-framework-for-cat-names:  # this is the Romefile Entry for  `awesome-framework-for-cat-names`
  - name: CatFramework
  - type: dynamic

Note that it was not necessary to add Alamofire as it respects the "Organization/FrameworkName" convention.

IgnoreMap

This contains the mappings of repository and framework names that should be ignored. This is particularly useful in case not all your Cartfile.resolved entries produce a framework.

Some repositories use Carthage as a simple mechanism to include other git repositories that do not produce frameworks. Even Carthage itself does this, to include xcconfigs.

Example:

Suppose you have the following in your Cartfile

github "Quick/Nimble"
github "jspahrsummers/xcconfigs"

xcconfigs can be ignored by Rome by adding an ignoreMap key in the Romefile

ignoreMap:
- xcconfigs:
  - name: xcconfigs

Each entry in the IgnoreMap is also a Romefile Entry and supports all keys.

CurrentMap

By default the currentMap is not used. Specify --no-skip-current as a command line option to use it. It is supported by Rome versions greater than 0.18.x.y and can be specified only in YAML.

The currentMap contains the mappings of repository and framework name(s) that describe the current framework. This is particularly useful if you want to use Rome in the context of a framework. It is the equivalent of Carthage's --no-skip-current.

currentMap:
- Alamofire:
  - name: Alamofire

Each entry in the currentMap is also a Romefile Entry and supports all keys.

The currentMap is subject to the ignores specified in the ignoreMap. If you explicitly specify names of frameworks to upload, download on the command line, you don't need to pass --no-skip-current to use the currentMap. Just specify the name(s) of the current framework.

The version of the current framework is determined by

git describe --tags --exact-match `git rev-parse HEAD`

If the commands does not resolve to any tag, the HEAD commit hash from git rev-parse HEAD is used as version.

In order for --no-skip-current to work, make sure to run carthage archive to create an artifact to cache.

Multiple Aliases

Suppose you have a framework Framework that builds two targets, t1 and t2, Rome can handle both targets by specifying

repositoryMap:
- Framework:
  - name: t1
  - name: t2

Note: if ANY of the aliases is missing on S3, the entire entry will be reported as missing when running rome list [--missing]

Multiple aliases are supported in ignoreMap too

Static Frameworks

Since version 0.30.1 Carthage has support for Static Frameworks. To indicate that one of the aliases is a Static Framework, modify the repositoryMap like so:

repositoryMap:
- Framework:
  - name: t1
    type: static
  - name: t2

If left unspecified, an alias is a Dynamic Framework by default.

Platforms

Since version 0.17.1.49 Rome allows you to specify what platforms are supported for a specific Romefile Entry. This serves a differet purpose than the command line option --platforms.

repositoryMap:
- Framework: 
  - name: t1
    type: static
    platforms: [iOS, Mac]
  - name: t2

The above means that t1 is only available for iOS and Mac. The --platforms command line options can be used to futher limit the Rome command to a specific subset of the supported platfroms.

Cache Structure

The following describes the structure of the cache that Rome creates and manages.

By default frameworks, dSYMs and .bcsymbolmaps are placed in the cache (local and/or remote) according to the following convention:

<git-repository-name>/<platform>/<framework-name>.framework(.dSYM)-(static-)<version-hash>.zip
<git-repository-name>/<platform>/<bcsymbolmap-hash>.bcsymbolmap-(static-)<version-hash>.zip

Carthage version files are placed at:

<git-repository-name>/.<framework-name>.version-(static-)<version-hash>

For example the cache for the Cartfile.resolved in RepositoryMap would look like the following

/Users/blender/Library/Caches/Rome/
├── HockeySDK-iOS
│   └── iOS
│       ├── HockeySDK.framework-3.8.6.zip
│       ├── HockeySDK.framework.dSYM-3.8.6.zip
│       └── D034377A-B469-3819-97A7-1DC0AA293AC3.bcsymbolmap
├── awesome-framework-for-cat-names
│		├── iOS
│		│   ├── CatFramework.framework-883eea474e3932607988d4e74bf50c9799bfd99a.zip
│		│   └── CatFramework.framework.dSYM-883eea474e3932607988d4e74bf50c9799bfd99a.zip
│		├── tvOS
│		│   ├── CatFramework.framework-883eea474e3932607988d4e74bf50c9799bfd99a.zip
│		│   └── CatFramework.framework.dSYM-883eea474e3932607988d4e74bf50c9799bfd99a.zip
│		└── .CatFramework.version-883eea474e3932607988d4e74bf50c9799bfd99a
└─── better-dog-names
		├── iOS
		│   ├── DogFramework.framework-v4.0.0.zip
		│   └── DogFramework.framework.dSYM-v4.0.0.zip
		├── Mac
		│   ├── DogFramework.framework-v4.0.0.zip
		│   └── DogFramework.framework.dSYM-v4.0.0.zip
		└── .DogFramework.version-v4.0.0

Cache Prefix

Since version 0.12.0.31 Rome supports prefixes for top level directories in your caches. You can append --cache-prefix MY_PREFIX to all commands. This simply means that both the framework/dSYM and .version file conventional locations can be prefixed by another directory of your choosing. Thus the conventions become:

<MY_PREFIX>/<git-repository-name>/<platform>/<framework-name>.framework(.dSYM)-<version-hash>.zip

and

<MY_PREFIX>/<git-repository-name>/.<framework-name>.version-<version-hash>

This is particularly useful when the need to cache frameworks at the same version but build with different versions of the compiler arises.

Suppose you want to cache v4.0.0 of DogFramework build for Swift2.1/Swift3.1/Swift3.2/Swift4. Once built you can upload each build with the same version number to a separate top level directory in the cache via the --cache-prefix option.

Thus running for the Swift2.1 build

$ rome upload better-dog-names --platform iOS # note there is no prefix here

and running for the the Swift3.2 build

$ rome upload better-dog-names --platform iOS --cache-prefix Swift_3_2

would lead to the following cache structure

/Users/blender/Library/Caches/Rome/
├── better-dog-names
│   ├── iOS
│   │   ├── DogFramework.framework-v4.0.0.zip
│   │   └── DogFramework.framework.dSYM-v4.0.0.zip
│   └── .DogFramework.version-v4.0.0-iOS
└── Swift_3_2
    └── better-dog-names
        ├── iOS
        │   ├── DogFramework.framework-v4.0.0.zip
        │   └── DogFramework.framework.dSYM-v4.0.0.zip
        └── .DogFramework.version-v4.0.0-iOS

Usage

Getting help:

$ rome --help
Cache tool for Carthage

Usage: rome COMMAND [-v]

Available options:
  -h,--help                Show this help text
  --version                Prints the version information
  -v                       Show verbose output

Available commands:
  upload                   Uploads frameworks and dSYMs contained in the local
                           Carthage/Build/<platform> to S3, according to the
                           local Cartfile.resolved
  download                 Downloads and unpacks in Carthage/Build/<platform>
                           frameworks and dSYMs found in S3, according to the
                           local Cartfile.resolved
  list                     Lists frameworks in the cache and reports cache
                           misses/hits, according to the local
                           Cartfile.resolved. Ignores dSYMs.
  utils                    A series of utilities to make life easier. `rome
                           utils --help` to know more

Uploading

Uploading one or more frameworks, corresponding dSYMs, .bcsymbolmaps and Carthage version files if present (an empty list of frameworks will upload all frameworks found in Cartfile.resolved):

Referring to the Cartfile.resolved in RepositoryMap

$ rome upload Alamofire
Uploaded Alamofire to: Alamofire/iOS/Alamofire.framework-4.3.0.zip
Uploaded Alamofire.dSYM to: Alamofire/iOS/Alamofire.framework.dSYM-4.3.0.zip
Uploaded Alamofire to: Alamofire/tvOS/Alamofire.framework-4.3.0.zip
Uploaded Alamofire.dSYM to: Alamofire/tvOS/Alamofire.framework.dSYM-4.3.0.zip
Uploaded Alamofire to: Alamofire/watchOS/Alamofire.framework-4.3.0.zip
Uploaded Alamofire.dSYM to: Alamofire/watchOS/Alamofire.framework.dSYM-4.3.0.zip

Uploading for a specific platform (all platforms are uploaded by default):

$ rome upload --platform ios Alamofire
Uploaded Alamofire to: Alamofire/iOS/Alamofire.framework-4.3.0.zip
Uploaded Alamofire.dSYM to: Alamofire/iOS/Alamofire.framework.dSYM-4.3.0.zip

If a local cache is specified in your Romefile and you wish to ignore it pass --skip-local-cache on the command line.

Since version 0.20.0.56, if you are on a fast Internet connection you can use the --concurrently flag to maximise concurrency for the operation and maximise bandwith use. Using the --concurrently flag should result in a x3 speedup.

Downloading

Downloading one or more frameworks, corresponding dSYMs, .bcsymbolmaps and Carthage version files if present (an empty list of frameworks will download all frameworks found in Cartfile.resolved):

Referring to the Cartfile.resolved in RepositoryMap

$ rome download Alamofire
Downloaded Alamofire from: Alamofire/iOS/Alamofire.framework-4.3.0.zip
Downloaded Alamofire.dSYM from: Alamofire/iOS/Alamofire.framework.dSYM-4.3.0.zip
Error downloading Alamofire : The specified key does not exist.
Error downloading Alamofire.dSYM : The specified key does not exist.
Downloaded Alamofire from: Alamofire/tvOS/Alamofire.framework-4.3.0.zip
Downloaded Alamofire.dSYM from: Alamofire/tvOS/Alamofire.framework.dSYM-4.3.0.zip
Downloaded Alamofire from: Alamofire/watchOS/Alamofire.framework-4.3.0.zip
Downloaded Alamofire.dSYM from: Alamofire/watchOS/Alamofire.framework.dSYM-4.3.0.zip

Downloading for a specific platform (all platforms are downloaded by default):

$ rome download --platform ios,watchos Alamofire
Downloaded Alamofire from: Alamofire/iOS/Alamofire.framework-4.3.0.zip
Downloaded Alamofire.dSYM from: Alamofire/iOS/Alamofire.framework.dSYM-4.3.0.zip
Downloaded Alamofire from: Alamofire/watchOS/Alamofire.framework-4.3.0.zip
Downloaded Alamofire.dSYM from: Alamofire/watchOS/Alamofire.framework.dSYM-4.3.0.zip

If a local cache is specified in your Romefile and you wish to ignore it pass --skip-local-cache on the command line.

Since version 0.20.0.56, if you are on a fast Internet connection you can use the --concurrently flag to maximise concurrency for the operation and maximise bandwith use. Using the --concurrently flag should result in a x3 speedup.

Listing

Listing frameworks and reporting on their availability:

$ rome list
Alamofire 4.3.0 : +iOS -macOS +tvOS +watchOS
ResearchKit 1.4.1 : +iOS -macOS -tvOS -watchOS

Listing only frameworks present in the cache:

$ rome list --present
Alamofire 4.3.0 : +iOS +tvOS +watchOS
ResearchKit 1.4.1 : +iOS

Listing only frameworks missing from the cache:

$ rome list --missing
Alamofire 4.3.0 : -macOS
ResearchKit 1.4.1 : -macOS -tvOS -watchOS

Listing frameworks missing for specific platforms:

$ rome list --missing --platform watchos,tvos
ResearchKit 1.4.1 : -tvOS -watchOS

Forwarding a list of missing frameworks to Carthage for building:

$ rome list --missing --platform ios | awk '{print $1}' | xargs -I {} carthage build "{}" --platform ios
*** xcodebuild output can be found in ...

Since version 0.13.0.33 list results can also be printed as JSON by specifying --print-format=JSON

Note: list completely ignores dSYMs, bcsymbolmap and Carthage version files. If a dSYM or a Carthage version file is missing, the corresponding framework is still reported as present.

Utils

A collection of utilities to make life easier.

migrate-romefile

Migrate the Romefile from INI to YAML in place, by running:

rome utils migrate-romefile

Troubleshooting & FAQ

Getting "Image not found" when running an application using binaries

Implicit dependencies of frameworks when using binaries are not copied over by Xcode automatically despite "Always Embed Standard Libraries" set to YES (see 56).

Here is an example with ReactiveCocoa, which depends on CoreLocation and MapKit. If ReactiveCocoa is built via Carthage or as a Xcode subproject, CoreLocation and MapKit are copied into the app's bundle. On the other hand, when using the binary, Xcode has no clue of that and does not copy the necessary frameworks even if "Always Embed Standard Libraries" is set to yes.

To fix that, add an explicit import statement to one of your files:

// Implicit ReactiveCocoa Dependencies

import CoreLocation
import MapKit

Supporting multiple Swift Versions

Storing artifacts or a the same famework at different Swift versions can be achieved by specifying a cache prefix when using any Rome command like so:

$ rome upload --platform iOS --cache-prefix Swift3 Alamofire
$ rome download --platform iOS --cache-prefix Swift3 Alamofire
$ rome list --platform iOS --cache-prefix Swift3

If you prefer a more accurate way of generating cache prefixes for different swift versions consider using the following:

--cache-prefix `xcrun swift --version | head -1 | sed 's/.*\((.*)\).*/\1/' | tr -d "()" | tr " " "-"`

The specified prefix is prepended to the git repository name in the caches. Using a local cache path like ~/Library/Caches/Rome will store Alamofire from the example above at ~/Library/Caches/Rome/Swift3/Alamofire

See Cache Structure and Cache Prefix for an in depth explanation.

Developing

  1. Install Stack via homebrew brew install stack
  2. Clone the repo git clone https://github.com/tmspzz/Rome.git
  3. cd Rome && stack build
  4. Optional: Install brittany via stack install brittany
  5. Optional: Install hlint via stack install hlint

IDE

  1. Optional: If you use VIM install haskell-vim-how
  2. Optional: If you use Visual Studio Code install Haskero

Releasing

  1. Increase the version number in Rome.cabal
  2. Increase the version number in app/Main.hs
  3. Increase the version number in Rome.podspec
  4. Commit
  5. Create a new pre-release on Github
  6. Attach the zipped binary
  7. Promote to release
  8. Run pod trunk push Rome.podspec
  9. Update the homebrew formula
  10. Run bundle exec github_changelog_generator -u tmspzz -p Rome -t <YourGitHubToken>
  11. Commit CHANGELOG.md

Presentations and Tutorials

Video tutorial on Rome given at CocoaHeads Berlin and slides

cocoaheads-berlin-video-presentation

AppUnite article - comparison of popular approaches to building dependencies with Carthage by Szymon Mrozek

License

Rome is released under MIT License

Logo courtesy of TeddyBear[Picnic] at FreeDigitalPhotos.net

Comments
  • Add support for multiple platforms

    Add support for multiple platforms

    Enhancement Suggestion

    Add support for more platforms (watchOS, tvOS, macOS)

    Current and suggested behavior

    Currently only iOS is supported, this should be expanded to other platform too.

    Why would the enhancement be useful to most users

    This enhancement should be useful for frameworks that target more than 1 platform.

    Rome version: v0.7.1.13 OS and version: Mac OS 10.11.6 - El Capitan

    enhancement 
    opened by tmspzz 35
  • Add support for S3 Bucket URL

    Add support for S3 Bucket URL

    Enhancement Suggestion

    Afternoon,

    I'd love to use Rome but can't use S3 for big-silly-company reasons. I can, however set up a Minio (https://docs.minio.io/) instance locally which is basically an S3 compatible object store that runs within a docker container.

    Getting rome to work with Minio would mean supporting an s3 url in .aws/config rather than a region. Something like:

    [default]
    endpoint =  https://play.minio.io:9000
    

    Why would the enhancement be useful to most users

    Supporting s3-compatible endpoints would open up other similar object storage systems and services. I know s3 can be super cheap, but some companies (esp. european ones) can't use AWS for compliance reasons.

    enhancement 
    opened by astromoose 33
  • Not downloading existing bcsymbolmap files

    Not downloading existing bcsymbolmap files

    Bug Report

    When attempting to use Rome currently with Carthage for an iOS project the bcsymbolmap files that are presented, and uploaded, do not get downloaded.

    Steps which explain the enhancement or reproduce the bug

    1. Create a Cartfile that has one an iOS dependencies. In my testing I used: github "Alamofire/Alamofire" ~> 4.7
    2. Build the iOS libraries with Carthage (e.g. carthage update Alamofire).
    3. After updating I have 4 files in my Carthage/Build/iOS folder:
      • Alamofire.framework
      • Alamofire.framework.dSYM
      • two bcsymbolmap files - these correspond to the UUIDs for the armv7 and arm64 UUIDs of the framework
    4. Upload the build using rome upload Alamofire --platform ios, should upload the four files and the version info - this will successfully be uploaded the the S3 bucket configured.
    5. (either on another machine, or after deleting Carthage/Build) Attempt to run rome download Alamofire --platform ios Should get output similar to the following https://pastebin.com/qhy9c5cs The output appears to download the framework, the framework.dSYM, the two bcsymbolmap files that were uploaded successfully, and the .Alamofire.version file, and to have errors for two additional bcsymbolmap files (these correspond to the i386 and x86_64 versions that were not generated by carthage and thus not uploaded) - yet the Carthage directory structure only has the Carthage/Build/.Alamofire.version, Carthage/Build/ioS/Alamofire.framework, and Carthage/Build/iOS/Alamofire.framework.dSYM files with no bcsymbolmap files.

    Current behavior

    Not downloading any of the bcsymbolmap files - even those that were uploaded successfully

    Suggested behavior

    Download the existing bcsymbolmap files

    Why would the enhancement be useful to most users

    Allow the bcsymbolmap files to be restored so that bitcode enable builds can be properly built.

    Rome version:

    0.15.0.43 - Romam uno die non fuisse conditam.

    OS and version:

    OS: macOS 10.13.5
    Carthage: 0.30.1
    
    bug 
    opened by Marus 27
  • Rome crashes when downloading cache from remote - Zero bytes Archive

    Rome crashes when downloading cache from remote - Zero bytes Archive

    Enhancement Suggestion / Bug Report

    Rome crashes when downloading cache from remote.

    Steps which explain the enhancement or reproduce the bug

    I'll try to make a sample project that reproduces that crash, here is the crash log:

    Error: could not find MyFramework in local cache at : /Users/admin/Library/Caches/Rome/swift-4.1.2-swiftlang-902.0.54-clang-902.0.39.2/MyFramework/iOS/MyFramework.framework-c57d3c0b3211274ffcda
    b294a7fd0e5743130839.zip
    Downloaded MyFramework from: swift-4.1.2-swiftlang-902.0.54-clang-902.0.39.2/MyFramework/iOS/MyFramework.framework-c57d3c0b3211274ffcdab294a7fd0e5743130839.zip
    Copied MyFramework to: /Users/admin/Library/Caches/Rome/swift-4.1.2-swiftlang-902.0.54-clang-902.0.39.2/MyFramework/iOS/MyFramework.framework-c57d3c0b3211274ffcdab294a7fd0e5743130839.zip
    rome: Data.Binary.Get.runGet at position 0: not enough bytes
    CallStack (from HasCallStack):
      error, called at libraries/binary/src/Data/Binary/Get.hs:342:5 in binary-0.8.3.0:Data.Binary.Get
    

    Current behavior

    Rome crashes when downloading cache from remote.

    Suggested behavior

    Not crash.

    Why would the enhancement be useful to most users

    Rome version:

    0.15.0.43
    

    OS and version:

    macOS High Sierra 10.13.4 (17E202)
    
    bug 
    opened by thii 26
  • Add Support for XCFrameworks

    Add Support for XCFrameworks

    This builds on the work in #244, and addresses the review comment left in there:

    • Only one of -xc-frameworks or --platform can be provided on the command line.
    • Providing both causes an error.
    • Providing neither goes ahead with the defaults of all platforms without xc framework support:
    Usage: rome upload [FRAMEWORKS...] [--use-xcframeworks | --platform PLATFORMS] 
                       [--cache-prefix PREFIX] [--skip-local-cache] [--no-ignore] 
                       [--no-skip-current] [--concurrently]
      Uploads frameworks and dSYMs contained in the local Carthage/Build/<platform>
      to S3, according to the local Cartfile.resolved
    
    Available options:
      -h,--help                Show this help text
      FRAMEWORKS...            Zero or more framework names. If zero, all frameworks
                               and dSYMs are uploaded.
      --use-xcframeworks       Search for .xcframeworks when performing the
                               operation.
      --platform PLATFORMS     Applicable platforms for the command. One of iOS,
                               MacOS, tvOS, watchOS, or a comma-separated list of
                               any of these values.
    

    Combining them:

    > rome upload --use-xcframeworks --platform iOS
    Invalid option `--platform'
    
    opened by vikrem 24
  • Update to XCFrameworks

    Update to XCFrameworks

    INCOMPLETE PR

    Partially updates Rome to use XCFrameworks, which are the new Apple-supported way to distribute binary libraries on Apple's platforms. This is to test operations with the new Carthage that produces XCFrameworks (.xcframework) instead of Frameworks (.framework).

    However, I realized after making this PR that we also need to completely refactor the logic of how platform-specific cacheing is handled, since XCFrameworks are themselves, multi-platform.

    Since I'm new to Haskell, this may take me awhile. Any help in this regard would me most helpful.

    As well, Rome's CI scripts to validate Rome appear to be based on AFNetworking.framework being a .framework so I'm not sure how I would ensure that AFNetworking is a .xcframework. Please advise.

    Rationale

    Unlike .frameworks, XCFrameworks do not have to be recompiled to work with newer versions of Xcode/Swfit. They are also cross-platform and multi-architecture, obviating the need to "lipo" out other architectures before adding the framework to a bundle. That means they play nice with Xcode playgrounds and simulators on M1-based Macs.

    .frameworks are no longer supported going forwards by Apple so this is a needed change.

    This PR should address https://github.com/tmspzz/Rome/issues/238

    opened by 1oo7 21
  • S3 - Profile with role_arn are not working

    S3 - Profile with role_arn are not working

    Enhancement Suggestion / Bug Report

    AWS recommends to use assume roles for cross-accounts management (which is the standard approach in a company). Rome can support profiles but the role_arn seems ignored and therefore, users get access denied.

    Steps which explain the enhancement or reproduce the bug For a matter of simplicity of repro steps, I give steps with admin rights while in real scenario, users would be granted only some roles and the roles would have less privileges too. Note that this tutorial can be useful for people that are not used to this mechanism.

    1. Create two AWS accounts (named A and B below)
    2. On account A, create a user account "myuser" and gives him admin rights
    3. On account B, create a S3 bucket for Rome (region=us-east-1)
    4. On account B, create a role that can be assumed from account A and gives him admin rights
    5. Login on account A with "myuser" and click on switch role to assume the new role on account B: validate you are able to browse/read/write from the console
    6. Configure the CLI to have a profile which assume this role (profile with a line role_arn='<full_arn>').
    7. export AWS_PROFILE='<yourprofilename', export AWS_REGION='us-east-1'. Validate you can list the buckets with "aws s3 ls". You should see the buckets from account B and use it properly
    8. Use Rome with this profile. You'll get access denied. (which makes me believe Rome is not ignoring the role_arn while the AWS Cli is using it)

    Current behavior Access denied -> Rome doesn't seem to assume role.

    The workaround is to create a shared service account on "account B" and to provide the access key to our users (we don't want to create user accounts on "account B"). This workaround is a bad practice.

    Suggested behavior Role should be assumed.

    Why would the enhancement be useful to most users This is how most organizations are/will be using AWS in production.

    Rome version: 0.19.0.55 - Romam uno die non fuisse conditam.

    OS and version: MACOS, Mojave OS is probably not important here.

    enhancement help wanted 
    opened by alexvanbelle 21
  • Custom Engine downloads to `cwd` instead of a temporary directory

    Custom Engine downloads to `cwd` instead of a temporary directory

    Enhancement Suggestion / Bug Report

    Can't eliminate errors on successful downloads using a custom engine

    Steps which explain the enhancement or reproduce the bug

    Cartfile.resolved:

    git "ssh://[email protected]:7999/iOS/VIVProtobuf.git" "3.5.1"

    1. When running> rome download --platfform iOS,watchOS
    2. Ignoring missing bcsymbolmaps

    Current behavior

    Error: could not download Protobuf : user error (Binary was not downloaded by engine) Error: could not download Protobuf.dSYM : user error (Binary was not downloaded by engine) Error: could not download .VIVProtobuf.version : user error (Binary was not downloaded by engine)

    Even though all of the framework files, dSYM files, .version, and expected bcsymbolfiles have been downloaded successfully.

    Suggested behavior

    I have had it in the past where this output a successful copy of .version files. This is what I would expect

    Rome version:

    0.23.1.61
    

    OS and version:

    Catalina 10.15.1

    enhancement question 
    opened by timbo24 17
  • Symlinks not preserved

    Symlinks not preserved

    Issue

    This issue sounds similar to #106, but that ticket seemed to cover a different scenario, so I figured I'd file this as a separate issue.

    I just updated our macOS build to use Rome and found that the build would break in code signing, but only in the case where binaries are copied in from Rome's local cache. (The build was successful when using artifacts produced directly by Carthage.) I discovered that the frameworks produced by Carthage contain symlinks, for example:

    % ls -la Carthage/Build/Mac/CocoaLumberjack.framework
    total 32
    drwxr-xr-x   7 campbell  staff  238 Jan  5 11:31 .
    drwxr-xr-x  19 campbell  staff  646 Jan  5 13:27 ..
    lrwxr-xr-x   1 campbell  staff   32 Jan  5 11:31 CocoaLumberjack -> Versions/Current/CocoaLumberjack
    lrwxr-xr-x   1 campbell  staff   24 Jan  5 11:31 Headers -> Versions/Current/Headers
    lrwxr-xr-x   1 campbell  staff   24 Jan  5 11:31 Modules -> Versions/Current/Modules
    lrwxr-xr-x   1 campbell  staff   26 Jan  5 11:31 Resources -> Versions/Current/Resources
    drwxr-xr-x   4 campbell  staff  136 Jan  5 11:31 Versions
    

    After a rome upload step, if I unzip the relevant file from the Rome cache, I see that the symlinks are no longer present:

    % cd ~/Library/Caches/Rome/CocoaLumberjack/Mac/
    % unzip CocoaLumberjack.framework-3.3.0.zip
    % ls -la Carthage/Build/Mac/CocoaLumberjack.framework
    total 504
    drwxr-xr-x   7 campbell  staff     238 Jan  5  2018 .
    drwxr-xr-x   3 campbell  staff     102 Jan  5 13:29 ..
    -rwxr-xr-x   1 campbell  staff  255500 Jan  5  2018 CocoaLumberjack
    drwxr-xr-x  18 campbell  staff     612 Jan  5  2018 Headers
    drwxr-xr-x   3 campbell  staff     102 Jan  5  2018 Modules
    drwxr-xr-x   3 campbell  staff     102 Jan  5  2018 Resources
    drwxr-xr-x   4 campbell  staff     136 Jan  5  2018 Versions
    

    So if later I use rome download, the Carthage/Build directory will be populated with the framework(s) that don't contain symlinks.

    This causes codesign to fail later with a "bundle format is ambiguous" error, which is described here: https://developer.apple.com/library/content/technotes/tn2206/_index.html#//apple_ref/doc/uid/DTS40007919-CH1-TNTAG313

    "Perhaps a framework was copied incorrectly so the symlinks it contained were converted to normal files."

    The relevant portion of our Cartfile.resolved:

    github "CocoaLumberjack/CocoaLumberjack" "3.3.0"
    

    And our Romefile:

    [Cache]
    local = ~/Library/Caches/Rome
    
    [RepositoryMap]
    CocoaLumberjack = CocoaLumberjack, CocoaLumberjackSwift
    

    Rome version: 0.13.1.35 OS and version: macOS 10.12.6

    bug 
    opened by chrispcampbell 17
  • [WIP] Add Support for XCFrameworks

    [WIP] Add Support for XCFrameworks

    Addresses #238

    A first pass at adding XCFramework support to Rome. This is my first time writing any Haskell so please be kind. This is not a complete implementation, but it's in a place where it's usable. I'd love if someone with more Haskell experience could pick this up and bring it across the finish line. Or maybe even just point me in the right direction.

    Changes

    • Added a --use-xcframeworks flag to the upload, download, and list commands

    Known Issues

    • Running with --use-xcframeworks and a --platform ignores frameworks that aren't xcframeworks (workaround is to run it twice with and without the use xcframeworks option)
    • Running with --use-xcframeworks and a --platform places all frameworks inside a platform specific folder in the cache

    P.S: We love Rome at The Knot. It's undoubtedly saved us hundreds (if not thousands) of developer hours in the two years we've been using it. Thank you so much for building such a useful tool.

    opened by evandcoleman 16
  • S3 Errors on Download: The specified key does not exist.

    S3 Errors on Download: The specified key does not exist.

    Enhancement Suggestion / Bug Report

    Rome uploads to S3 bucket seem to work fine, but I get a lot of errors when I try to download. Not sure if it's trying to download some files that were not uploaded due to architecture/platform specific build (and it shows as an error, but it's simply a file that was not uploaded) or if I'm missing some kind of bucket permission (I already have list, write and read permissions setup).

    Steps which explain the enhancement or reproduce the bug

    1. carthage update --plaform iOS --cache-builds
    2. rome upload --platform iOS. Seems to run fine, no errors
    3. rome list --missing --platform iOS. Show some dependencies that looked like uploaded fine in the last step.
    4. rm -rf Carthage
    5. rome download --platform iOS. Throws lots of Error: could not download <framework-name>: The specified key does not exist.

    Rome version:

    0.23.1.61

    OS and version:

    Mojave 10.14.6

    opened by edulpn 16
  • Prefer Homebrew's official formula

    Prefer Homebrew's official formula

    I registered Rome to Homebrew's official repository, and now everyone can install Rome without tapping. https://github.com/Homebrew/homebrew-core/pull/112033

    In addition, ARM64 native binary and Linux are supported because Homebrew requires this.

    https://github.com/Homebrew/homebrew-core/blob/master/Formula/rome.rb

    opened by umireon 0
  • using rome download --concurrently with --use-xcframeworks leads to io error: openBinaryFile: resource busy (file is locked)

    using rome download --concurrently with --use-xcframeworks leads to io error: openBinaryFile: resource busy (file is locked)

    Bug Report

    using rome download --concurrently option with --use-xcframeworks leads to io error: openBinaryFile: resource busy (file is locked)

    rome: Carthage/Build/RxBlocking.xcframework/ios-arm64_i386_x86_64-simulator/RxBlocking.framework/Modules/RxBlocking.swiftmodule/x86_64-apple-ios-simulator.swiftinterface: openBinaryFile: resource busy (file is locked)
    

    Steps which explain the enhancement or reproduce the bug

    pre-requisite: you have Cartfile with multiple dependencies (to benefit from "--concurrently" )

    1. try download cache from S3: rome download --use-xcframeworks --cache-prefix my_prefix --romefile ../Romefile
    2. observe error at some point (sooner or later):
    rome: Carthage/Build/RxBlocking.xcframework/ios-arm64_i386_x86_64-simulator/RxBlocking.framework/Modules/RxBlocking.swiftmodule/x86_64-apple-ios-simulator.swiftinterface: openBinaryFile: resource busy (file is locked)
    

    Current behavior

    it fails, as described above

    Suggested behavior

    it doesn't fail (i think it somehow connected with haskell io + possibly reading/writing some files twice??)

    Why would the enhancement be useful to most users

    as we more using xcframeworks – it might be handy to have fixed

    Rome version:

    rome --version 0.24.0.65 - Romam uno die non fuisse conditam.

    OS and version:

    MacOS 12.6 + M1 (arm64) Darwin PJ2NJLJF24 21.6.0 Darwin Kernel Version 21.6.0: Mon Aug 22 20:19:52 PDT 2022; root:xnu-8020.140.49~2/RELEASE_ARM64_T6000 arm64

    opened by osxd 0
  • Bump tzinfo from 1.2.7 to 1.2.10

    Bump tzinfo from 1.2.7 to 1.2.10

    Bumps tzinfo from 1.2.7 to 1.2.10.

    Release notes

    Sourced from tzinfo's releases.

    v1.2.10

    TZInfo v1.2.10 on RubyGems.org

    v1.2.9

    • Fixed an incorrect InvalidTimezoneIdentifier exception raised when loading a zoneinfo file that includes rules specifying an additional transition to the final defined offset (for example, Africa/Casablanca in version 2018e of the Time Zone Database). #123.

    TZInfo v1.2.9 on RubyGems.org

    v1.2.8

    • Added support for handling "slim" format zoneinfo files that are produced by default by zic version 2020b and later. The POSIX-style TZ string is now used calculate DST transition times after the final defined transition in the file. The 64-bit section is now always used regardless of whether Time has support for 64-bit times. #120.
    • Rubinius is no longer supported.

    TZInfo v1.2.8 on RubyGems.org

    Changelog

    Sourced from tzinfo's changelog.

    Version 1.2.10 - 19-Jul-2022

    Version 1.2.9 - 16-Dec-2020

    • Fixed an incorrect InvalidTimezoneIdentifier exception raised when loading a zoneinfo file that includes rules specifying an additional transition to the final defined offset (for example, Africa/Casablanca in version 2018e of the Time Zone Database). #123.

    Version 1.2.8 - 8-Nov-2020

    • Added support for handling "slim" format zoneinfo files that are produced by default by zic version 2020b and later. The POSIX-style TZ string is now used calculate DST transition times after the final defined transition in the file. The 64-bit section is now always used regardless of whether Time has support for 64-bit times. #120.
    • Rubinius is no longer supported.
    Commits
    • 0814dcd Fix the release date.
    • fd05e2a Preparing v1.2.10.
    • b98c32e Merge branch 'fix-directory-traversal-1.2' into 1.2
    • ac3ee68 Remove unnecessary escaping of + within regex character classes.
    • 9d49bf9 Fix relative path loading tests.
    • 394c381 Remove private_constant for consistency and compatibility.
    • 5e9f990 Exclude Arch Linux's SECURITY file from the time zone index.
    • 17fc9e1 Workaround for 'Permission denied - NUL' errors with JRuby on Windows.
    • 6bd7a51 Update copyright years.
    • 9905ca9 Fix directory traversal in Timezone.get when using Ruby data source
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump git from 1.7.0 to 1.11.0

    Bump git from 1.7.0 to 1.11.0

    Bumps git from 1.7.0 to 1.11.0.

    Release notes

    Sourced from git's releases.

    Release v1.11.0

    Full Changelog

    • 292087e Supress unneeded test output (#570)
    • 19dfe5e Add support for fetch options "--force/-f" and "--prune-tags/-P". (#563)
    • 018d919 Fix bug when grepping lines that contain numbers surrounded by colons (#566)
    • c04d16e remove from maintainer (#567)
    • 291ca09 Address command line injection in Git::Lib#fetch
    • 521b8e7 Release v1.10.2 (#561)

    Release v1.10.2

    Full Changelog

    • 57f941c Release v1.10.2
    • c987a74 Add create-release, setup, and console dev scripts (#560)
    • 12e3d03 Store tempfile objects to prevent deletion during tests (#555)

    Release v1.10.1

    Full Changelog

    • c7b12af Release v1.10.1
    • ea28118 Properly escape double quotes in shell commands on Windows (#552)
    • db060fc Properly unescape diff paths (#504)
    • ea47044 Add Ruby 3.0 to CI build (#547)
    • cb01d2b Create a Docker image to run the changelog (#546)

    v.1.10.0

    Full Changelog

    • 8acec7d Release v1.10.0 (#545)
    • 8feb4ff Refactor directory initialization (#544)
    • 3884314 Add -ff option to git clean (#529)
    • 984ff7f #533 Add --depth options for fetch call (#534)
    • 6cba37e Add support for git init --initial-branch=main argument (#539)
    • ff98c42 Add support for the git merge --no-commit argument (#538)
    • 1023f85 Require pathname module (#536)

    v1.9.1

    Full Changelog

    • 58100b0 Release v1.9.1 (#527)
    • 45aeac9 Fix the gpg_sign commit option (#525)

    v1.9.0

    Full Changelog

    • 07a1167 Release v1.9.0 (#524)
    • 8fe479b Fix worktree test when git dir includes symlinks (#522)
    • 0cef8ac feat: add --gpg-sign option on commits (#518)
    • 765df7c Adds file option to config_set to allow adding to specific git-config files (#458)

    ... (truncated)

    Changelog

    Sourced from git's changelog.

    v1.11.0

    • 292087e Supress unneeded test output (#570)
    • 19dfe5e Add support for fetch options "--force/-f" and "--prune-tags/-P". (#563)
    • 018d919 Fix bug when grepping lines that contain numbers surrounded by colons (#566)
    • c04d16e remove from maintainer (#567)
    • 291ca09 Address command line injection in Git::Lib#fetch
    • 521b8e7 Release v1.10.2 (#561)

    See https://github.com/ruby-git/ruby-git/releases/tag/v1.11.0

    v1.10.2

    See https://github.com/ruby-git/ruby-git/releases/tag/v1.10.2

    1.10.1

    See https://github.com/ruby-git/ruby-git/releases/tag/v1.10.1

    1.10.0

    See https://github.com/ruby-git/ruby-git/releases/tag/v1.10.0

    1.9.1

    See https://github.com/ruby-git/ruby-git/releases/tag/v1.9.1

    1.9.0

    See https://github.com/ruby-git/ruby-git/releases/tag/v1.9.0

    1.8.1

    See https://github.com/ruby-git/ruby-git/releases/tag/v1.8.1

    1.8.0

    See https://github.com/ruby-git/ruby-git/releases/tag/v1.8.0

    Commits
    • 546bc03 Release v1.11.0
    • 292087e Supress unneeded test output (#570)
    • 19dfe5e Add support for fetch options "--force/-f" and "--prune-tags/-P". (#563)
    • 018d919 Fix bug when grepping lines that contain numbers surrounded by colons (#566)
    • c04d16e remove from maintainer (#567)
    • 291ca09 Address command line injection in Git::Lib#fetch
    • 521b8e7 Release v1.10.2 (#561)
    • c987a74 Add create-release, setup, and console dev scripts (#560)
    • 12e3d03 Store tempfile objects to prevent deletion during tests (#555)
    • 735b083 Release v1.10.1 (#553)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump cocoapods-downloader from 1.3.0 to 1.6.3

    Bump cocoapods-downloader from 1.3.0 to 1.6.3

    Bumps cocoapods-downloader from 1.3.0 to 1.6.3.

    Release notes

    Sourced from cocoapods-downloader's releases.

    1.6.3

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.2

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.1

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.0

    Enhancements
    • None.
    Bug Fixes
    • Adds a check for command injections in the input for hg and git.
      orta #124

    1.5.1

    Enhancements
    • None.
    Bug Fixes
    • Fix "can't modify frozen string" errors when pods are integrated using the branch option
      buju77 #10920

    1.5.0

    ... (truncated)

    Changelog

    Sourced from cocoapods-downloader's changelog.

    1.6.3 (2022-04-01)

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.2 (2022-03-28)

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.1 (2022-03-23)

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.0 (2022-03-22)

    Enhancements
    • None.
    Bug Fixes
    • Adds a check for command injections in the input for hg and git.
      orta #124

    1.5.1 (2021-09-07)

    Enhancements
    • None.

    ... (truncated)

    Commits
    • c03e2ed Release 1.6.3
    • f75bccc Disable Bazaar tests due to macOS 12.3 not including python2
    • 52a0d54 Merge pull request #128 from CocoaPods/validate_before_dl
    • d27c983 Ensure that the git pre-processor doesn't accidentally bail also
    • 3adfe1f [CHANGELOG] Add empty Master section
    • 591167a Release 1.6.2
    • d2564c3 Merge pull request #127 from CocoaPods/validate_before_dl
    • 99fec61 Switches where we check for invalid input, to move it inside the download fun...
    • 96679f2 [CHANGELOG] Add empty Master section
    • 3a7c54b Release 1.6.1
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Issues with Rome for xcframeworks

    Issues with Rome for xcframeworks

    Bug Report

    Rome is not working for me when using the --use-xcframeworks option. My xcframeworks are not uploaded/downloaded as expected.

    This is my setup:

    $ carthage version
    0.38.0
    $ rome --version
    0.24.0.65 - Romam uno die non fuisse conditam.
    $ cat Cartfile
    github "Alamofire/Alamofire" ~> 5.4
    

    I can reproduce the issue with the following steps:

    $ carthage update --use-xcframeworks
    *** Fetching Alamofire
    *** Checking out Alamofire at "5.4.4"
    *** xcodebuild output can be found in /var/folders/bh/sn7pnkn54wl_9ksqxmvj7lrr0000gp/T/carthage-xcodebuild.uGeCAE.log
    *** Building scheme "Alamofire tvOS" in Alamofire.xcworkspace
    *** Building scheme "Alamofire macOS" in Alamofire.xcworkspace
    *** Building scheme "Alamofire iOS" in Alamofire.xcworkspace
    *** Building scheme "Alamofire watchOS" in Alamofire.xcworkspace
    
    $ ls -1 -A Carthage/Build
    .Alamofire.version
    Alamofire.xcframework
    
    $ rome upload --use-xcframeworks --cache-prefix swift_5_5_1-swiftlang-1300_0_31_4-clang-1300_0_29_3
    Copied Alamofire.framework to: /Users/de/Library/Caches/Rome/swift_5_5_1-swiftlang-1300_0_31_4-clang-1300_0_29_3/Alamofire/iOS/Alamofire.xcframework-5.4.4.zip
    Uploaded Alamofire to: swift_5_5_1-swiftlang-1300_0_31_4-clang-1300_0_29_3/Alamofire/iOS/Alamofire.xcframework-5.4.4.zip
    Copied Alamofire.framework to: /Users/de/Library/Caches/Rome/swift_5_5_1-swiftlang-1300_0_31_4-clang-1300_0_29_3/Alamofire/Mac/Alamofire.xcframework-5.4.4.zip
    Uploaded Alamofire to: swift_5_5_1-swiftlang-1300_0_31_4-clang-1300_0_29_3/Alamofire/Mac/Alamofire.xcframework-5.4.4.zip
    Copied Alamofire.framework to: /Users/de/Library/Caches/Rome/swift_5_5_1-swiftlang-1300_0_31_4-clang-1300_0_29_3/Alamofire/watchOS/Alamofire.xcframework-5.4.4.zip
    Uploaded Alamofire to: swift_5_5_1-swiftlang-1300_0_31_4-clang-1300_0_29_3/Alamofire/watchOS/Alamofire.xcframework-5.4.4.zip
    Copied Alamofire.framework to: /Users/de/Library/Caches/Rome/swift_5_5_1-swiftlang-1300_0_31_4-clang-1300_0_29_3/Alamofire/tvOS/Alamofire.xcframework-5.4.4.zip
    Uploaded Alamofire to: swift_5_5_1-swiftlang-1300_0_31_4-clang-1300_0_29_3/Alamofire/tvOS/Alamofire.xcframework-5.4.4.zip
    Copied .Alamofire.version to: /Users/de/Library/Caches/Rome/swift_5_5_1-swiftlang-1300_0_31_4-clang-1300_0_29_3/Alamofire/.Alamofire.version-5.4.4
    Uploaded .Alamofire.version to: swift_5_5_1-swiftlang-1300_0_31_4-clang-1300_0_29_3/Alamofire/.Alamofire.version-5.4.4
    

    A few notes:

    1. [minor] The log output Copied Alamofire.framework is not correct, should be Copied Alamofire.xcframework
    2. the xcframework is copied 4 times into folders named after the platform. Should be only once.

    Regardless, when continuing the download path I get the following:

    $ rm -rf Carthage/Build
    $ rm -rf /Users/de/Library/Caches/Rome/swift_5_5_1-swiftlang-1300_0_31_4-clang-1300_0_29_3/
    
    $ bundle exec rome download --use-xcframeworks --cache-prefix swift_5_5_1-swiftlang-1300_0_31_4-clang-1300_0_29_3
    Error: could not find Alamofire in local cache at : /Users/de/Library/Caches/Rome/swift_5_5_1-swiftlang-1300_0_31_4-clang-1300_0_29_3/Alamofire/iOS/Alamofire.xcframework-5.4.4.zip
    Downloaded Alamofire from: swift_5_5_1-swiftlang-1300_0_31_4-clang-1300_0_29_3/Alamofire/iOS/Alamofire.xcframework-5.4.4.zip
    Copied Alamofire to: /Users/de/Library/Caches/Rome/swift_5_5_1-swiftlang-1300_0_31_4-clang-1300_0_29_3/Alamofire/iOS/Alamofire.xcframework-5.4.4.zip
    Error: Cannot retrieve symbolmaps ids for Alamofire
    Error: could not find Alamofire.dSYM in local cache at : /Users/de/Library/Caches/Rome/swift_5_5_1-swiftlang-1300_0_31_4-clang-1300_0_29_3/Alamofire/iOS/Alamofire.framework.dSYM-5.4.4.zip
    Error: could not download Alamofire.dSYM : The specified key does not exist.
    Error: could not find Alamofire in local cache at : /Users/de/Library/Caches/Rome/swift_5_5_1-swiftlang-1300_0_31_4-clang-1300_0_29_3/Alamofire/Mac/Alamofire.xcframework-5.4.4.zip
    Downloaded Alamofire from: swift_5_5_1-swiftlang-1300_0_31_4-clang-1300_0_29_3/Alamofire/Mac/Alamofire.xcframework-5.4.4.zip
    Copied Alamofire to: /Users/de/Library/Caches/Rome/swift_5_5_1-swiftlang-1300_0_31_4-clang-1300_0_29_3/Alamofire/Mac/Alamofire.xcframework-5.4.4.zip
    rome: Carthage/Build/Alamofire.xcframework/macos-arm64_x86_64/Alamofire.framework/Alamofire: createSymbolicLink: already exists (File exists)
    

    Notes:

    1. for unknown reasons only 2 of the previous 4 platform folders are restored to the rome cache. This may not be significant for the end result as imo we only need one xcframework anyway.
    2. [minor] errors about missing dSYM files should be removed for xcframeworks
    3. what is the meaning to the createSymbolicLink warning?

    Now to the actual problem. In the Carthage/Build folder I now see:

    $ ls -1 -A Carthage/Build
    Alamofire.xcframework
    

    The file .Alamofire.version is now missing.
    Worse: I had cases where instead Alamofire.xcframework was missing.
    It seems like only the first object was restored, sometimes the dot file, sometimes the xcframework. This is hard to reproduce.

    Why would the enhancement be useful to most users

    This causes random errors locally and on the CI which should affect everyone using xcframeworks.

    Rome version:

    0.24.0.65
    

    OS and version:

    macOS 11.5
    
    opened by deberle 24
Releases(v0.24.0.65)
Owner
Tommaso Piazza
Works on my machine
Tommaso Piazza
Gradle plugin for managing Swift by enhancing Carthage with Maven repository

Works presents Athena Preface As a mobile application engineer that develops iOS and Android applications, I found that in Android, dependencies can b

Yunarta Kartawahyudi 1 Nov 3, 2020
A package manager that installs and runs executable Swift packages

Mint ?? A package manager that installs and runs Swift command line tool packages. $ mint run realm/[email protected] This would install and run SwiftL

Yonas Kolb 2k Jan 7, 2023
🚀 Create XCFrameworks with ease! A Command Line Tool to create XCFramework for multiple platforms at one shot! The better way to deal with XCFrameworks for iOS, Mac Catalyst, tvOS, macOS, and watchOS.

Surmagic ?? Create XCFramework with ease! A Command Line Tool to create XCFramework for multiple platforms at one shot! The better way to deal with XC

Muhammed Gurhan Yerlikaya 260 Dec 28, 2022
A script to fetch packages via Github search and diff them against SPI

spi-package-importer importer is a command line utility with three subcommands: fetch package lists from Github via search and save them to JSON files

Swift Package Index 1 Jan 17, 2022
A curated list of awesome SwiftUI tutorials, libraries, videos and articles.

Awesome SwiftUI ??️ A curated list of awesome SwiftUI tutorials, libraries, sessions and articles. Contributing Found a SwiftUI library or snippet tha

Chinsyo 607 Jan 3, 2023
Go Flashcards for iOS and WatchOS - Official repository

Go Flashcards for iOS and WatchOS Go Flashcards for iOS and WatchOS is an application that allows users to create stacks of flashcards and review them

Roy 60 Dec 8, 2022
A collection of iOS architectures - MVC, MVVM, MVVM+RxSwift, VIPER, RIBs and many others

ios-architecture WIP ?? ?? ?? ??️ Demystifying MVC, MVVM, VIPER, RIBs and many others A collection of simple one screen apps to showcase and discuss d

Pawel Krawiec 1.3k Jan 3, 2023
Boardy - Boardy serves as a digital bulletin board on iOS platforms built for high schoolers to share and view information from others in a convenient manner.

Boardy Boardy serves as a lightweight digital bulletin board on iOS platforms built for high schoolers to share and view information from others in a

Jacky Luong 0 Dec 31, 2021
Intuitive cycling tracker app for iOS built with SwiftUI using Xcode. Features live route tracking, live metrics, storage of past cycling routes and many customization settings.

GoCycling Available on the iOS App Store https://apps.apple.com/app/go-cycling/id1565861313 App Icon About Go Cycling is a cycling tracker app built e

Anthony Hopkins 64 Dec 19, 2022
CloudKit, Apple’s remote data storage service, provides a possibility to store app data using users’ iCloud accounts as a back-end storage service.

CloudKit, Apple’s remote data storage service, provides a possibility to store app data using users’ iCloud accounts as a back-end storage service. He

Yalantis 252 Nov 4, 2022
Awesome Cache Delightful on-disk cache (written in Swift). Backed by NSCache for maximum performance

Awesome Cache Delightful on-disk cache (written in Swift). Backed by NSCache for maximum performance and support for expiry of single objects. Usage d

Alexander Schuch 1.3k Dec 29, 2022
Cache - Nothing but Cache.

Cache doesn't claim to be unique in this area, but it's not another monster library that gives you a god's power. It does nothing but caching, but it does it well. It offers a good public API with out-of-box implementations and great customization possibilities. Cache utilizes Codable in Swift 4 to perform serialization.

HyperRedink 2.7k Dec 28, 2022
Apple Asset Cache (Content Cache) Tools

AssetCacheTool A library and tool for interacting with both the local and remote asset caches. This is based on research I did a few years ago on the

Kenneth Endfinger 21 Jan 5, 2023
SharedImages Screen grabs Main Features Private & self-owned social media Users store their images in their own cloud storage (Dropbox or Google Drive

SharedImages Screen grabs Main Features Private & self-owned social media Users store their images in their own cloud storage (Dropbox or Google Drive

Christopher Prince 12 Feb 10, 2022
A template for new Swift iOS / macOS / tvOS / watchOS Framework project ready with travis-ci, cocoapods, Carthage, SwiftPM and a Readme file

Swift Framework Template A template for new Swift Framework. What's in the template? Deployment Targets - iOS 9.0 / Mac OS X 10.10 / tvOS 9.0 / watchO

Rahul Katariya 529 Jun 27, 2022
Gradle plugin for managing Swift by enhancing Carthage with Maven repository

Works presents Athena Preface As a mobile application engineer that develops iOS and Android applications, I found that in Android, dependencies can b

Yunarta Kartawahyudi 1 Nov 3, 2020
🚘 A simple tool for updating Carthage script phase

Do you use Carthage? Are you feel tired of adding special script and the paths to frameworks (point 4, 5 and 6 in Getting Started guide) manually? Me

Artem Novichkov 184 Dec 11, 2021
Google Analytics tracker for Apple tvOS provides an easy integration of Google Analytics’ measurement protocol for Apple TV.

Google Analytics tracker for Apple tvOS by Adswerve About Google Analytics tracker for Apple tvOS provides an easy integration of Google Analytics’ me

Adswerve 81 Nov 13, 2022
Google-Blogger-iOS-App - Using Google Blogger API to build an iOS app like Medium

Google Blogger iOS App Using Google Blogger API to build an iOS app like Medium!

Ricky Chuang 9 Dec 13, 2022
PTPopupWebView is a simple and useful WebView for iOS, which can be popup and has many of the customized item.

PTPopupWebView PTPopupWebView is a simple and useful WebView for iOS, which can be popup and has many of the customized item. Requirement iOS 8.0 Inst

Takeshi Watanabe 117 Dec 3, 2022