{"action":"created","issue":{"url":"https://api.github.com/repos/CocoaPods/CocoaPods/issues/840","labels_url":"https://api.github.com/repos/CocoaPods/CocoaPods/issues/840/labels{/name}","comments_url":"https://api.github.com/repos/CocoaPods/CocoaPods/issues/840/comments","events_url":"https://api.github.com/repos/CocoaPods/CocoaPods/issues/840/events","html_url":"https://github.com/CocoaPods/CocoaPods/issues/840","id":11839029,"number":840,"title":"Clean up Podfile syntax","user":{"login":"fabiopelosin","id":1048705,"avatar_url":"https://avatars.githubusercontent.com/u/1048705?v=3","gravatar_id":"","url":"https://api.github.com/users/fabiopelosin","html_url":"https://github.com/fabiopelosin","followers_url":"https://api.github.com/users/fabiopelosin/followers","following_url":"https://api.github.com/users/fabiopelosin/following{/other_user}","gists_url":"https://api.github.com/users/fabiopelosin/gists{/gist_id}","starred_url":"https://api.github.com/users/fabiopelosin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fabiopelosin/subscriptions","organizations_url":"https://api.github.com/users/fabiopelosin/orgs","repos_url":"https://api.github.com/users/fabiopelosin/repos","events_url":"https://api.github.com/users/fabiopelosin/events{/privacy}","received_events_url":"https://api.github.com/users/fabiopelosin/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/CocoaPods/CocoaPods/labels/d3%3Ahard","name":"d3:hard","color":"375921"},{"url":"https://api.github.com/repos/CocoaPods/CocoaPods/labels/s2%3Aconfirmed","name":"s2:confirmed","color":"E2A72C"},{"url":"https://api.github.com/repos/CocoaPods/CocoaPods/labels/t1%3Aenhancement","name":"t1:enhancement","color":"02AFE1"},{"url":"https://api.github.com/repos/CocoaPods/CocoaPods/labels/%E2%98%85","name":"★","color":"C7C1C1"}],"state":"open","locked":false,"assignee":{"login":"segiddins","id":1946610,"avatar_url":"https://avatars.githubusercontent.com/u/1946610?v=3","gravatar_id":"","url":"https://api.github.com/users/segiddins","html_url":"https://github.com/segiddins","followers_url":"https://api.github.com/users/segiddins/followers","following_url":"https://api.github.com/users/segiddins/following{/other_user}","gists_url":"https://api.github.com/users/segiddins/gists{/gist_id}","starred_url":"https://api.github.com/users/segiddins/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/segiddins/subscriptions","organizations_url":"https://api.github.com/users/segiddins/orgs","repos_url":"https://api.github.com/users/segiddins/repos","events_url":"https://api.github.com/users/segiddins/events{/privacy}","received_events_url":"https://api.github.com/users/segiddins/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/CocoaPods/CocoaPods/milestones/4","labels_url":"https://api.github.com/repos/CocoaPods/CocoaPods/milestones/4/labels","id":53372,"number":4,"title":"1.0.0","description":"The champagne release.","creator":{"login":"alloy","id":2320,"avatar_url":"https://avatars.githubusercontent.com/u/2320?v=3","gravatar_id":"","url":"https://api.github.com/users/alloy","html_url":"https://github.com/alloy","followers_url":"https://api.github.com/users/alloy/followers","following_url":"https://api.github.com/users/alloy/following{/other_user}","gists_url":"https://api.github.com/users/alloy/gists{/gist_id}","starred_url":"https://api.github.com/users/alloy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alloy/subscriptions","organizations_url":"https://api.github.com/users/alloy/orgs","repos_url":"https://api.github.com/users/alloy/repos","events_url":"https://api.github.com/users/alloy/events{/privacy}","received_events_url":"https://api.github.com/users/alloy/received_events","type":"User","site_admin":false},"open_issues":5,"closed_issues":1,"state":"open","created_at":"2011-11-07T11:14:19Z","updated_at":"2015-01-12T02:19:51Z","due_on":null,"closed_at":null},"comments":20,"created_at":"2013-03-09T14:15:12Z","updated_at":"2015-01-20T18:39:17Z","closed_at":null,"body":"#### Background\r\n\r\n_Note: This text will be updated to reflect the most recent proposal_\r\n\r\nCurrently CocoaPods:\r\n\r\n- Skips target definitions without dependencies as the user might not want the implicit root target definition (which automatically links with the first target) and there is no other way to prevent its integration.\r\n- Marks a target as exclusive if it has a different platform from the parent not inheriting any dependency.\r\n- Doesn't have a way to specify what should be inherited from the parent target definition (nothing, only the headers, the dependencies). This is evident in the tests target which currently need to be marked as exclusive, however this set up only works because CocoaPods makes the headers of all targets visible (exactly for this reason).\r\n- Doesn't allow to specify that a target should not be integrated in the Podfile. It is only possible to specify that whole Podfile should not be integrated (i.e. no workspace) with a command line option.\r\n\r\n#### Proposal\r\n\r\n- [ ] Add a new `abstract_target!` attribute to the target definition.\r\n  - Skip the installation of the implicit root target definition if it doesn't have any dependency (temporary see below).\r\n  - Otherwise never skip the installation of a target unless marked abstract.\r\n- [ ] Add a new `do_not_integrate!` root attribute which would replace the command line option (`--no-integrate` of pod install and pod update).\r\n- [ ] Inherit the compatible dependencies from the parent target definition if the platforms do not match.\r\n- [ ] Add a new `inherit` attribute to the target definition which would support 3 values (true, false, :headers).\r\n  - Phase out the `exclusive` option of the target definition.\r\n- [ ] Drop any form of integration of the implicit target definition by CP 1.0. Adding a warning immediately.\r\n- [ ] Drop the options parameter used for new target definitions (the has used after the name and before the block) in favor of statements inside the block.\r\n  - This would accelerate the phasing out of the [exclusive](http://docs.cocoapods.org/podfile.html#target) option.\r\n- [ ] Deprecate the `link_with` attribute. Every integrated target should be identified by the name of the target definition common dependencies can be declared in dedicated targets. This would not only simplify the DSL but also the implementation of the CP analyzer and user project integrator.\r\n\r\n#### Points which require Feedback\r\n\r\n- The name of the `abstract_target!` and of the `do_not_integrate!`\r\n- Wether inheritance by nesting targets definitions should be dropped for an attribute (`inherits_from`, se example below).\r\n\r\n#### Podfile examples\r\n\r\n###### Headers only inheritance\r\n\r\nNote that By CocoaPods 1.0 the `abstract_target!` call can be dropped from the root as it will become the default behaviour.\r\n\r\n```ruby\r\nabstract_target!\r\npod 'CocoaAsyncSocket', '0.0.1'\r\npod 'CocoaLumberjack', '>=1.6'\r\n\r\ntarget 'App_1'\r\n  # deps\r\nend\r\n\r\ntarget 'App_2'\r\n  # deps\r\nend\r\n```\r\n\r\n---\r\n\r\n###### Abstract targets\r\n\r\n```ruby\r\ntarget 'MacApp'\r\n  pod 'AFNetworking'\r\n \r\n  target 'MacAppTests' do\r\n     use_headers_of_parent\r\n     # dependencies\r\n  end\r\nend\r\n```\r\n\r\n--\r\n\r\n###### Alternative headers only inheritance\r\n\r\nIn this scenario nesting would be disabled.\r\n\r\n```ruby\r\ntarget 'MacApp'\r\n  pod 'AFNetworking'\r\nend\r\n\r\ntarget 'MacAppTests' do\r\n  use_headers_of 'MacApp' \r\n  # use_headers_of 'MacApp_1', 'MacApp_2'\r\n  # dependencies\r\nend\r\n```\r\n\r\n---\r\n\r\n###### Multi platform inheritance\r\n\r\n```ruby\r\nabstract_target!\r\npod 'CocoaAsyncSocket', '0.0.1'\r\npod 'CocoaLumberjack', '>=1.6'\r\n\r\ntarget 'iOSApp'\r\n  platform :ios\r\n  # deps\r\nend\r\n\r\ntarget 'MacApp'\r\n  platform :osx \r\n  # deps\r\nend\r\n```"},"comment":{"url":"https://api.github.com/repos/CocoaPods/CocoaPods/issues/comments/70707382","html_url":"https://github.com/CocoaPods/CocoaPods/issues/840#issuecomment-70707382","issue_url":"https://api.github.com/repos/CocoaPods/CocoaPods/issues/840","id":70707382,"user":{"login":"orta","id":49038,"avatar_url":"https://avatars.githubusercontent.com/u/49038?v=3","gravatar_id":"","url":"https://api.github.com/users/orta","html_url":"https://github.com/orta","followers_url":"https://api.github.com/users/orta/followers","following_url":"https://api.github.com/users/orta/following{/other_user}","gists_url":"https://api.github.com/users/orta/gists{/gist_id}","starred_url":"https://api.github.com/users/orta/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/orta/subscriptions","organizations_url":"https://api.github.com/users/orta/orgs","repos_url":"https://api.github.com/users/orta/repos","events_url":"https://api.github.com/users/orta/events{/privacy}","received_events_url":"https://api.github.com/users/orta/received_events","type":"User","site_admin":false},"created_at":"2015-01-20T18:39:17Z","updated_at":"2015-01-20T18:39:17Z","body":"bwahah, you can't escape."}}