AI prompts
base on Xcode extension for GitHub Copilot # <img align="center" height="70" src="./Docs/AppIcon.png"/> GitHub Copilot for Xcode
[GitHub Copilot](https://github.com/features/copilot) is an AI pair programmer
tool that helps you write code faster and smarter. Copilot for Xcode is an Xcode extension that provides inline coding suggestions as you type and a chat assistant to answer your coding questions.
## Chat
GitHub Copilot Chat provides suggestions to your specific coding tasks via chat.
<img alt="Chat of GitHub Copilot for Xcode" src="./Docs/chat_dark.gif" width="800" />
## Code Completion
You can receive auto-complete type suggestions from GitHub Copilot either by starting to write the code you want to use, or by writing a natural language comment describing what you want the code to do.
<img alt="Code Completion of GitHub Copilot for Xcode" src="./Docs/demo.gif" width="800" />
## Requirements
- macOS 12+
- Xcode 8+
- A GitHub Copilot subscription. To learn more, visit [https://github.com/features/copilot](https://github.com/features/copilot).
## Getting Started
1. Install via [Homebrew](https://brew.sh/):
```sh
brew install --cask github-copilot-for-xcode
```
Or download the `dmg` from
[the latest release](https://github.com/github/CopilotForXcode/releases/latest/download/GitHubCopilotForXcode.dmg).
Drag `GitHub Copilot for Xcode` into the `Applications` folder:
<p align="center">
<img alt="Screenshot of opened dmg" src="./Docs/dmg-open.png" width="512" />
</p>
Updates can be downloaded and installed by the app.
1. Open the `GitHub Copilot for Xcode` application (from the `Applications` folder). Accept the security warning.
<p align="center">
<img alt="Screenshot of MacOS download permission request" src="./Docs/macos-download-open-confirm.png" width="350" />
</p>
1. A background item will be added to enable Copilot to start when `GitHub Copilot for Xcode` is opened.
<p align="center">
<img alt="Screenshot of background item" src="./Docs/background-item.png" width="370" />
</p>
1. Two permissions are required: `Accessibility` and `Xcode Source Editor
Extension`. For more on why these permissions are required see
[TROUBLESHOOTING.md](./TROUBLESHOOTING.md).
The first time the application is run the `Accessibility` permission should be requested:
<p align="center">
<img alt="Screenshot of accessibility permission request" src="./Docs/accessibility-permission-request.png" width="529" />
</p>
The `Xcode Source Editor Extension` permission needs to be enabled manually. Click
`Extension Permission` from the `GitHub Copilot for Xcode` application settings to open the
System Preferences to the `Extensions` panel. Select `Xcode Source Editor`
and enable `GitHub Copilot`:
<p align="center">
<img alt="Screenshot of extension permission" src="./Docs/extension-permission.png" width="582" />
</p>
1. After granting the extension permission, open Xcode. Verify that the
`Github Copilot` menu is available and enabled under the Xcode `Editor`
menu.
<br>
<p align="center">
<img alt="Screenshot of Xcode Editor GitHub Copilot menu item" src="./Docs/xcode-menu.png" width="648" />
</p>
Keyboard shortcuts can be set for all menu items in the `Key Bindings`
section of Xcode preferences.
1. To sign into GitHub Copilot, click the `Sign in` button in the settings application. This will open a browser window and copy a code to the clipboard. Paste the code into the GitHub login page and authorize the application.
<p align="center">
<img alt="Screenshot of sign-in popup" src="./Docs/device-code.png" width="372" />
</p>
1. To install updates, click `Check for Updates` from the menu item or in the
settings application.
After installing a new version, Xcode must be restarted to use the new
version correctly.
New versions can also be installed from `dmg` files downloaded from the
releases page. When installing a new version via `dmg`, the application must
be run manually the first time to accept the downloaded from the internet
warning.
1. To avoid confusion, we recommend disabling `Predictive code completion` under
`Xcode` > `Preferences` > `Text Editing` > `Editing`.
1. Press `tab` to accept the first line of a suggestion, hold `option` to view
the full suggestion, and press `option` + `tab` to accept the full suggestion.
<p align="center">
<img alt="Screenshot of welcome screen" src="./Docs/welcome.png" width="450" />
</p>
## How to use Chat
Open Copilot Chat in GitHub Copilot.
- Open via the Xcode menu `Xcode -> Editor -> GitHub Copilot -> Open Chat`.
<p align="center">
<img alt="Screenshot of Xcode Editor GitHub Copilot menu item" src="./Docs/xcode-menu_dark.png" width="648" />
</p>
- Open via GitHub Copilot app menu `Open Chat`.
<p align="center">
<img alt="Screenshot of GitHub Copilot menu item" src="./Docs/copilot-menu_dark.png" width="244" />
</p>
## How to use Code Completion
Press `tab` to accept the first line of a suggestion, hold `option` to view
the full suggestion, and press `option` + `tab` to accept the full suggestion.
## License
This project is licensed under the terms of the MIT open source license. Please
refer to [LICENSE.txt](./LICENSE.txt) for the full terms.
## Privacy
We follow responsible practices in accordance with our
[Privacy Statement](https://docs.github.com/en/site-policy/privacy-policies/github-privacy-statement).
To get the latest security fixes, please use the latest version of the GitHub
Copilot for Xcode.
## Support
We’d love to get your help in making GitHub Copilot better! If you have
feedback or encounter any problems, please reach out on our [Feedback
forum](https://github.com/orgs/community/discussions/categories/copilot).
## Acknowledgements
Thank you to @intitni for creating the original project that this is based on.
Attributions can be found under About when running the app or in
[Credits.rtf](./Copilot%20for%20Xcode/Credits.rtf).", Assign "at most 3 tags" to the expected json: {"id":"12505","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"