{"id":3130,"url":"https://github.com/marcinolawski/StoryboardMerge","last_synced_at":"2025-08-03T13:31:54.846Z","repository":{"id":13647005,"uuid":"16340467","full_name":"marcinolawski/StoryboardMerge","owner":"marcinolawski","description":"Xcode storyboards diff and merge tool.","archived":false,"fork":false,"pushed_at":"2017-10-19T10:22:45.000Z","size":1696,"stargazers_count":237,"open_issues_count":1,"forks_count":21,"subscribers_count":17,"default_branch":"master","last_synced_at":"2024-08-16T10:42:12.535Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Objective-C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marcinolawski.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-01-29T09:31:48.000Z","updated_at":"2024-05-21T18:33:14.000Z","dependencies_parsed_at":"2022-09-24T04:01:35.334Z","dependency_job_id":null,"html_url":"https://github.com/marcinolawski/StoryboardMerge","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcinolawski%2FStoryboardMerge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcinolawski%2FStoryboardMerge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcinolawski%2FStoryboardMerge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcinolawski%2FStoryboardMerge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marcinolawski","download_url":"https://codeload.github.com/marcinolawski/StoryboardMerge/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228548567,"owners_count":17935221,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-01-05T20:16:32.236Z","updated_at":"2024-12-07T01:30:34.795Z","avatar_url":"https://github.com/marcinolawski.png","language":"Objective-C","funding_links":[],"categories":["Tools","WebSocket","Objective-C"],"sub_categories":["Web View","Other free courses"],"readme":"StoryboardMerge\n===============\n\n![alt tag](http://marcinolawski.pl/Tools_files/Screenshot2.jpg)\n\nStoryboard diff and merge tool which:\n- compares and merges two storyboard files,\n- provides an automatic merge-facility,\n\nThe storyboarding is a new UI design feature introduced with the Xcode 4.2 which allows to describe all the application’s UI in one file. This very handy mechanism has one major drawback. Because all the UI lives in one file, the whole UI design process is very prone to revision control conflicts. Moreover, the Xcode standard merging mechanism treats storyboard files like ordinary text files which further complicates merging.  The StoryboardMerge solves those problems.\n\nHow to use\n==========\nLoad two conflicted storyboard files from disk, SVN or Git and click Compare.\n\nThe StoryboardMerge compares files and shows conflicts (differences). Use checkboxes to tell the StoryboardMerge how to solve conflicts. \n\nAfter setting all checkboxes click Merge. You will see the merged storyboard in a right panel. \n\nThe StoryboardMerge will validate a new storyboard and mark in red incorrect elements.\n\nClick Save to write a new storyboard or override the old one.\n\nHow to use as a git mergetool\n=============================\nEdit your `~/.gitconfig` file and add the following section:\n\n```\n[mergetool \"storyboard\"]\n\tname = StoryboardMerge interactive merge\n\tcmd = storyboard-merge $BASE $LOCAL $REMOTE $MERGED\n\ttrustExitCode = false\n```\n\nCopy [storyboard-merge](https://github.com/marcinolawski/StoryboardMerge/blob/master/storyboard-merge) into `/usr/local/bin` and make it executable:\n\n```bash\n$ chmod 755 /usr/local/bin/storyboard-merge\n```\n\nWhen a storyboard conflict occurs:\n\n```bash\n$ git status\nOn branch master\nYour branch and 'origin/master' have diverged,\nand have 1 and 1 different commit each, respectively.\n  (use \"git pull\" to merge the remote branch into yours)\n\nYou have unmerged paths.\n  (fix conflicts and run \"git commit\")\n\nUnmerged paths:\n  (use \"git add \u003cfile\u003e...\" to mark resolution)\n\n\tboth modified:   Storyboards/Base.lproj/Main.storyboard\n\nno changes added to commit (use \"git add\" and/or \"git commit -a\")\n```\n\nRun:\n\n```bash\n$ git mergetool -t storyboard\n```\n\nWhich will give you the following prompt in your terminal:\n\n```bash\n$ git mergetool -t storyboard\nMerging:\nStoryboards/Base.lproj/Main.storyboard\n\nNormal merge conflict for 'Storyboards/Base.lproj/Main.storyboard':\n  {local}: modified file\n  {remote}: modified file\nHit return to start merge resolution tool (storyboard): \n```\n\nHit `return` to accept the default (as defined in your `~/.gitconfig` above.) Which will launch StoryboardMerge and give you the following prompt in your terminal:\n\n```bash\nStoryboards/Base.lproj/Main.storyboard seems unchanged.\nWas the merge successful? [y/n]\n```\n\nWhen your merge is complete, press the StoryboardMerge 'save' toolbar icon, which will save the file to the proper place, then return to your terminal and type 'y' to accept the merge. (Or 'n' if something went wrong and you'd like to start over.)\n\nAfter merging I'd recommend opening the file in Xcode and verifying everything is okay and to allow it to rewrite any changes is sees fit before committing your changes.\n\nBuilding\n========\n\n**IMPORTANT**: StoryboardMerge uses CocoaPods so make sure to always open the workspace file (StoryboardMerge.xcworkspace) instead of the project file (StoryboardMerge.xcodeproj) when building.\n\nMore info\n=========\n\nSee http://marcinolawski.pl/Tools.html\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcinolawski%2FStoryboardMerge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarcinolawski%2FStoryboardMerge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcinolawski%2FStoryboardMerge/lists"}