Compare commits

...
Author SHA1 Message Date
lwouis 2c857a6eb1 feat: improve appearance at the different sizes 2024-11-02 00:05:27 +01:00
lwouis ad64ced2df feat: hide space labels when showing same-space windows (closes #3766) 2024-11-02 00:05:27 +01:00
lwouis 81fb54cff5 chore: preload fewer recycled views ahead of time 2024-11-02 00:05:27 +01:00
lwouis 45bbc93bee feat: improve display of wide/tall thumbnails (closes #3791) 2024-11-02 00:05:27 +01:00
lwouis f9542f9214 chore: add jekyll vendor folder to gitignore 2024-10-31 22:57:53 +01:00
lwouis 60052b8ab7 chore: remove metal api checker from xcode runs 2024-10-31 22:57:53 +01:00
lwouis 7b9a6b4e9c docs: update website contents 2024-10-30 22:04:10 +01:00
lwouis 09ca2a6740 chore: improve language preference support 2024-10-29 14:54:51 +01:00
lwouis 20cd27e68d chore: better read preferences + remove unused ones 2024-10-28 21:29:36 +01:00
lwouis 129d061434 feat: allow to run the app without screen-recording permissions
closes #1082
2024-10-17 22:28:34 +02:00
lwouis 19f59b207f feat: add irish localization 2024-10-15 23:28:38 +02:00
lwouis 528028d41b ci: add poeditor upload script 2024-10-15 23:18:28 +02:00
allsochen d77fa67729 feat: i18n 2024-10-15 10:52:08 +02:00
allsochen f33418ec35 feat: add language preference 2024-10-15 10:52:07 +02:00
allsochen dd379c41c9 fix: fixed the rounded corners when the mouse moves over the table 2024-10-12 18:38:18 +02:00
semantic-release-bot 609a25119d chore(release): 7.0.2 [skip ci]
## [7.0.2](https://github.com/lwouis/alt-tab-macos/compare/v7.0.1...v7.0.2) (2024-10-12)

### Bug Fixes

* avoid crashing in some cases ([d46d903](https://github.com/lwouis/alt-tab-macos/commit/d46d903))
* block titles in preferences in rtl languages ([ea5574b](https://github.com/lwouis/alt-tab-macos/commit/ea5574b))
* preferences panel icons wouldnt show on old macos versions ([9258acf](https://github.com/lwouis/alt-tab-macos/commit/9258acf))
* show titles > application name, in thumbnails style (closes [#3667](https://github.com/lwouis/alt-tab-macos/issues/3667)) ([b4e97ea](https://github.com/lwouis/alt-tab-macos/commit/b4e97ea))
2024-10-12 11:10:07 +00:00
lwouis 9258acf765 fix: preferences panel icons wouldnt show on old macos versions 2024-10-12 12:56:12 +02:00
allsochen d46d90395c fix: avoid crashing in some cases 2024-10-12 12:43:56 +02:00
allsochen b4e97ead04 fix: show titles > application name, in thumbnails style (closes #3667) 2024-10-12 12:43:56 +02:00
ShlomoCode ea5574bfa5 fix: block titles in preferences in rtl languages 2024-10-12 12:43:55 +02:00
semantic-release-bot 5b6e8de9a1 chore(release): 7.0.1 [skip ci]
## [7.0.1](https://github.com/lwouis/alt-tab-macos/compare/v7.0.0...v7.0.1) (2024-10-11)

### Bug Fixes

* avoid crashing in rare cases ([9980ec6](https://github.com/lwouis/alt-tab-macos/commit/9980ec6))
2024-10-11 10:14:13 +00:00
lwouis 9980ec62fd fix: avoid crashing in rare cases 2024-10-11 12:00:12 +02:00
semantic-release-bot 8abb9b4358 chore(release): 7.0.0 [skip ci]
# [7.0.0](https://github.com/lwouis/alt-tab-macos/compare/v6.73.0...v7.0.0) (2024-10-09)

### Features

* major rehaul of the preferences! ([6d97cbd](https://github.com/lwouis/alt-tab-macos/commit/6d97cbd)), closes [#351](https://github.com/lwouis/alt-tab-macos/issues/351)

### BREAKING CHANGES

* The old preferences panel has been replaced with a brand new one

Preferences are now much simpler, full of visual illustrations, and should provide a much better experience. Pick between 3 styles (thumbnails, app-icons, titles), sizes, dark/light themes, high visibility options, and more!
2024-10-10 11:20:02 +02:00
lwouis 40c1c0ec02 chore: fix swiftc errors on xcode 13.6 2024-10-10 11:20:02 +02:00
lwouis f2bc95ffcc ci: print xcode version and swift version 2024-10-10 11:20:02 +02:00
lwouis 4b1fbb1243 ci: improve logs 2024-10-10 11:20:01 +02:00
lwouis e7c2a8b880 ci: temporarily disable l10n check 2024-10-10 11:20:01 +02:00
lwouis dbbe9e8b0e ci: do not install swiftformat on npm install 2024-10-10 11:20:01 +02:00
lwouis b26a12074f ci: upgrade node/npm version 2024-10-10 11:20:01 +02:00
allsochen 79f99bd4f1 feat: major rehaul of the preferences!
closes #351

BREAKING CHANGE: The old preferences panel has been replaced with a brand new one

Preferences are now much simpler, full of visual illustrations, and should provide a much better experience. Pick between 3 styles (thumbnails, app-icons, titles), sizes, dark/light themes, high visibility options, and more!
2024-10-10 11:19:39 +02:00
semantic-release-bot 38cfe3a23b chore(release): 6.73.0 [skip ci]
# [6.73.0](https://github.com/lwouis/alt-tab-macos/compare/v6.72.0...v6.73.0) (2024-10-08)

### Bug Fixes

* closing alttab windows gives focus to previous app (closes [#3577](https://github.com/lwouis/alt-tab-macos/issues/3577)) ([0e6f200](https://github.com/lwouis/alt-tab-macos/commit/0e6f200))
* detect passwords app (closes [#3545](https://github.com/lwouis/alt-tab-macos/issues/3545)) ([d0cd206](https://github.com/lwouis/alt-tab-macos/commit/d0cd206))
* dragging files onto windowless apps was inconsistent ([0a9fe9b](https://github.com/lwouis/alt-tab-macos/commit/0a9fe9b))
* finder would sometimes not be listed (closes [#3350](https://github.com/lwouis/alt-tab-macos/issues/3350)) ([eba5e42](https://github.com/lwouis/alt-tab-macos/commit/eba5e42))
* focusing an app could open another version of it ([9d5f11a](https://github.com/lwouis/alt-tab-macos/commit/9d5f11a))
* preview window could remain after focusing an app (closes [#3505](https://github.com/lwouis/alt-tab-macos/issues/3505)) ([e890a60](https://github.com/lwouis/alt-tab-macos/commit/e890a60))

### Features

* add kannada and malayalam and localizations ([5e27701](https://github.com/lwouis/alt-tab-macos/commit/5e27701))
2024-10-08 20:34:17 +00:00
lwouis 5e27701228 feat: add kannada and malayalam and localizations 2024-10-08 22:19:04 +02:00
lwouis 0a9fe9bb89 fix: dragging files onto windowless apps was inconsistent 2024-10-08 21:36:43 +02:00
decodism d0cd206f51 fix: detect passwords app (closes #3545) 2024-09-18 22:00:08 +02:00
lwouis 9d5f11aed5 fix: focusing an app could open another version of it 2024-09-11 09:22:13 +02:00
lwouis eba5e422bf fix: finder would sometimes not be listed (closes #3350) 2024-08-31 18:01:32 +02:00
lwouis 0e6f200efe fix: closing alttab windows gives focus to previous app (closes #3577) 2024-08-30 22:22:13 +02:00
lwouis e890a603c2 fix: preview window could remain after focusing an app (closes #3505) 2024-07-30 12:00:44 +02:00
semantic-release-bot 97951e7e8e chore(release): 6.72.0 [skip ci]
# [6.72.0](https://github.com/lwouis/alt-tab-macos/compare/v6.71.0...v6.72.0) (2024-07-14)

### Bug Fixes

* preferences window quit button supports right-to-left languages ([d3dfd54](https://github.com/lwouis/alt-tab-macos/commit/d3dfd54)), closes [#3487](https://github.com/lwouis/alt-tab-macos/issues/3487)

### Features

* don't show caps-lock indicator as a window (closes [#3171](https://github.com/lwouis/alt-tab-macos/issues/3171)) ([2e15732](https://github.com/lwouis/alt-tab-macos/commit/2e15732))
* improve da/he localizations ([3d98b64](https://github.com/lwouis/alt-tab-macos/commit/3d98b64))
2024-07-14 17:02:49 +00:00
lwouis 3d98b64a42 feat: improve da/he localizations 2024-07-14 18:48:11 +02:00
ShlomoCode d3dfd54f54 fix: preferences window quit button supports right-to-left languages
closes #3487
2024-07-14 18:15:45 +02:00
lwouis 2e15732f64 feat: don't show caps-lock indicator as a window (closes #3171)
this is a not a fix: it's a macos bug; we providing a workaround
2024-07-14 16:14:13 +02:00
lwouis 45f5c5368a ci: ensure website download link is always up-to-date 2024-07-08 17:05:53 +02:00
semantic-release-bot 012e3b5f3c chore(release): 6.71.0 [skip ci]
# [6.71.0](https://github.com/lwouis/alt-tab-macos/compare/v6.70.1...v6.71.0) (2024-07-06)

### Bug Fixes

* restore default cmd+tab shortcut when alt-tab crashes ([2c47b4e](https://github.com/lwouis/alt-tab-macos/commit/2c47b4e))
* showing permissions window would crash on macos < 10.15 ([bb5215c](https://github.com/lwouis/alt-tab-macos/commit/bb5215c)), closes [#3437](https://github.com/lwouis/alt-tab-macos/issues/3437)
* traffic light icons could appear half-transparent (closes [#2892](https://github.com/lwouis/alt-tab-macos/issues/2892)) ([1eef1e0](https://github.com/lwouis/alt-tab-macos/commit/1eef1e0))

### Features

* improve fr/he/it/ja/pt/sv localizations ([35521a5](https://github.com/lwouis/alt-tab-macos/commit/35521a5))
* show de-fullscreen button on fullscreen windows ([ad1e8d0](https://github.com/lwouis/alt-tab-macos/commit/ad1e8d0))
2024-07-06 10:30:19 +00:00
lwouis 35521a5214 feat: improve fr/he/it/ja/pt/sv localizations 2024-07-06 12:15:39 +02:00
allsochen ad1e8d03e4 feat: show de-fullscreen button on fullscreen windows 2024-07-06 12:15:37 +02:00
lwouis 1eef1e083d fix: traffic light icons could appear half-transparent (closes #2892) 2024-06-26 19:25:47 +02:00
lwouis bb5215c306 fix: showing permissions window would crash on macos < 10.15
closes #3437
2024-06-21 11:52:49 +02:00
lwouis 2c47b4e585 fix: restore default cmd+tab shortcut when alt-tab crashes 2024-06-21 11:52:36 +02:00
semantic-release-bot 4371eb7c39 chore(release): 6.70.1 [skip ci]
## [6.70.1](https://github.com/lwouis/alt-tab-macos/compare/v6.70.0...v6.70.1) (2024-06-01)

### Bug Fixes

* prevent crash introduced in v6.70.0 (closes [#3392](https://github.com/lwouis/alt-tab-macos/issues/3392)) ([e16a3d4](https://github.com/lwouis/alt-tab-macos/commit/e16a3d4))
2024-06-01 11:38:26 +00:00
lwouis e16a3d46b3 fix: prevent crash introduced in v6.70.0 (closes #3392) 2024-06-01 13:20:36 +02:00
semantic-release-bot 1a3996e73b chore(release): 6.70.0 [skip ci]
# [6.70.0](https://github.com/lwouis/alt-tab-macos/compare/v6.69.0...v6.70.0) (2024-05-29)

### Bug Fixes

* detect safari fullscreen windows better (closes [#3384](https://github.com/lwouis/alt-tab-macos/issues/3384)) ([c3006c6](https://github.com/lwouis/alt-tab-macos/commit/c3006c6))

### Features

* add utm-app to default blacklist ([523bcbb](https://github.com/lwouis/alt-tab-macos/commit/523bcbb))
2024-05-29 22:15:51 +00:00
lwouis c3006c69a6 fix: detect safari fullscreen windows better (closes #3384) 2024-05-29 23:49:23 +02:00
lwouis 523bcbb6e3 feat: add utm-app to default blacklist 2024-05-26 00:17:04 +02:00
semantic-release-bot 127ad155ba chore(release): 6.69.0 [skip ci]
# [6.69.0](https://github.com/lwouis/alt-tab-macos/compare/v6.68.0...v6.69.0) (2024-05-12)

### Bug Fixes

* only show standard windows of preview.app (closes [#3351](https://github.com/lwouis/alt-tab-macos/issues/3351)) ([6231977](https://github.com/lwouis/alt-tab-macos/commit/6231977))

### Features

* update fi, ja, ko, pt-br, th localizations ([14d287a](https://github.com/lwouis/alt-tab-macos/commit/14d287a))
2024-05-12 20:18:54 +00:00
lwouis 14d287afe3 feat: update fi, ja, ko, pt-br, th localizations 2024-05-12 22:04:07 +02:00
lwouis 6231977e70 fix: only show standard windows of preview.app (closes #3351) 2024-05-12 22:03:12 +02:00
semantic-release-bot 758b3e804e chore(release): 6.68.0 [skip ci]
# [6.68.0](https://github.com/lwouis/alt-tab-macos/compare/v6.67.0...v6.68.0) (2024-04-03)

### Bug Fixes

* preview.app window may not show when opening many docs ([31b5a3d](https://github.com/lwouis/alt-tab-macos/commit/31b5a3d)), closes [#3276](https://github.com/lwouis/alt-tab-macos/issues/3276)
* preview.app windows would sometimes not show (closes [#3275](https://github.com/lwouis/alt-tab-macos/issues/3275)) ([785cf9c](https://github.com/lwouis/alt-tab-macos/commit/785cf9c))

### Features

* improve ar/nb/nn/pl/tr/uk localizations ([67a6d81](https://github.com/lwouis/alt-tab-macos/commit/67a6d81))
* new thai and norwegian localizations (closes [#3260](https://github.com/lwouis/alt-tab-macos/issues/3260)) ([d9aa319](https://github.com/lwouis/alt-tab-macos/commit/d9aa319))
2024-04-03 19:30:58 +00:00
lwouis 67a6d8194d feat: improve ar/nb/nn/pl/tr/uk localizations 2024-04-03 21:16:30 +02:00
lwouis 31b5a3df77 fix: preview.app window may not show when opening many docs
(closes #3276)
2024-04-03 20:17:05 +02:00
lwouis 785cf9c73a fix: preview.app windows would sometimes not show (closes #3275) 2024-04-03 20:01:32 +02:00
lwouis d9aa319e2c feat: new thai and norwegian localizations (closes #3260) 2024-03-25 20:25:10 +01:00
Dmytro Pashchenko 141e7233ff docs: fix typo on ukrainian/russian languages on the website 2024-03-19 16:43:47 +01:00
semantic-release-bot 9ff25e7c3a chore(release): 6.67.0 [skip ci]
# [6.67.0](https://github.com/lwouis/alt-tab-macos/compare/v6.66.0...v6.67.0) (2024-03-15)

### Features

* add icelandic localization ([7df1432](https://github.com/lwouis/alt-tab-macos/commit/7df1432))
* improve ru/cn localizations ([c9fe54e](https://github.com/lwouis/alt-tab-macos/commit/c9fe54e))
* support autocad non-native windows ([#3219](https://github.com/lwouis/alt-tab-macos/issues/3219)) ([bbaef6c](https://github.com/lwouis/alt-tab-macos/commit/bbaef6c))
2024-03-15 17:33:32 +00:00
lwouis c9fe54ed29 feat: improve ru/cn localizations 2024-03-15 18:18:03 +01:00
lwouis bbaef6cf8e feat: support autocad non-native windows (#3219) 2024-03-15 18:18:01 +01:00
lwouis 7df1432744 feat: add icelandic localization 2024-03-15 18:13:45 +01:00
semantic-release-bot 6442d85c9f chore(release): 6.66.0 [skip ci]
# [6.66.0](https://github.com/lwouis/alt-tab-macos/compare/v6.65.0...v6.66.0) (2024-03-03)

### Bug Fixes

* alttab would crash after menubar icon was actioned with voiceover ([f7fdf3f](https://github.com/lwouis/alt-tab-macos/commit/f7fdf3f)), closes [#3211](https://github.com/lwouis/alt-tab-macos/issues/3211)

### Features

* improved ca/de/es/ko/nl/sv/vi/zh localizations ([f4ad2ea](https://github.com/lwouis/alt-tab-macos/commit/f4ad2ea))
2024-03-03 12:03:34 +00:00
lwouis f4ad2ea6c8 feat: improved ca/de/es/ko/nl/sv/vi/zh localizations 2024-03-03 12:49:05 +01:00
lwouis f7fdf3f987 fix: alttab would crash after menubar icon was actioned with voiceover
closes #3211
2024-03-03 12:45:07 +01:00
lwouis b8833b74eb refactor: fix inkscape bin path 2024-02-08 17:08:21 +01:00
lwouis bc29d1e86c refactor: apply compiler hints 2024-02-08 17:08:21 +01:00
lwouis 5ea9b8211e docs: improve website performance, and lazy-load images 2024-02-08 17:08:21 +01:00
semantic-release-bot 25f1881f85 chore(release): 6.65.0 [skip ci]
# [6.65.0](https://github.com/lwouis/alt-tab-macos/compare/v6.64.0...v6.65.0) (2024-01-29)

### Features

* update da/de/es/sv localizations ([c88426e](https://github.com/lwouis/alt-tab-macos/commit/c88426e))
* users can check status of required system permissions ([70ee681](https://github.com/lwouis/alt-tab-macos/commit/70ee681))
2024-01-29 17:14:13 +00:00
lwouis d819d8e8a1 ci: make localization process deterministic 2024-01-29 17:58:27 +01:00
lwouis db022a0688 docs: add links to support project 2024-01-29 14:26:43 +01:00
lwouis c88426e0b2 feat: update da/de/es/sv localizations 2024-01-23 23:16:48 +01:00
lwouis 4818345ce2 docs: add patreon to github sponsors 2024-01-23 23:14:06 +01:00
lwouis 70ee681757 feat: users can check status of required system permissions 2023-12-20 22:17:55 +01:00
lwouis 9e03d5f665 docs: add github sponsorship 2023-11-16 00:44:37 +01:00
semantic-release-bot 1561f2631a chore(release): 6.64.0 [skip ci]
# [6.64.0](https://github.com/lwouis/alt-tab-macos/compare/v6.63.0...v6.64.0) (2023-10-24)

### Bug Fixes

* don't absorb key up events after summon (closes [#2914](https://github.com/lwouis/alt-tab-macos/issues/2914)) ([3b0194d](https://github.com/lwouis/alt-tab-macos/commit/3b0194d))
* stop vim keys preference disabling on launch (closes [#2919](https://github.com/lwouis/alt-tab-macos/issues/2919)) ([53692ff](https://github.com/lwouis/alt-tab-macos/commit/53692ff))

### Features

* improve fr,de localizations ([c4ae549](https://github.com/lwouis/alt-tab-macos/commit/c4ae549))
2023-10-24 21:47:54 +00:00
lwouis c4ae5496e2 feat: improve fr,de localizations 2023-10-24 23:33:25 +02:00
lwouis 53692ffc7c fix: stop vim keys preference disabling on launch (closes #2919) 2023-10-24 23:28:45 +02:00
lwouis 3b0194d886 fix: don't absorb key up events after summon (closes #2914) 2023-10-24 23:28:45 +02:00
semantic-release-bot e75a1ff4fe chore(release): 6.63.0 [skip ci]
# [6.63.0](https://github.com/lwouis/alt-tab-macos/compare/v6.62.0...v6.63.0) (2023-10-20)

### Bug Fixes

* never screenshot windows if thumbnails are hidden ([5e7f44b](https://github.com/lwouis/alt-tab-macos/commit/5e7f44b))

### Features

* improve ca/ko/ku localizations ([865570f](https://github.com/lwouis/alt-tab-macos/commit/865570f))
2023-10-20 20:09:53 +00:00
lwouis 042c8061f6 refactor: clearer color code 2023-10-20 10:27:36 +02:00
lwouis 865570fa94 feat: improve ca/ko/ku localizations 2023-10-20 10:27:36 +02:00
Sean Kelly 5e7f44b5ca fix: never screenshot windows if thumbnails are hidden 2023-10-20 10:07:24 +02:00
semantic-release-bot 821161363e chore(release): 6.62.0 [skip ci]
# [6.62.0](https://github.com/lwouis/alt-tab-macos/compare/v6.61.0...v6.62.0) (2023-10-10)

### Bug Fixes

* better crossover windows detection ([3f64463](https://github.com/lwouis/alt-tab-macos/commit/3f64463))

### Features

* add tamil and croatian localizations ([e542da8](https://github.com/lwouis/alt-tab-macos/commit/e542da8))
* add vim key window navigation (closes [#1229](https://github.com/lwouis/alt-tab-macos/issues/1229)) ([5cf7f99](https://github.com/lwouis/alt-tab-macos/commit/5cf7f99))
* improve bg,es,he,hi,ko,uk,cn localizations ([31fb795](https://github.com/lwouis/alt-tab-macos/commit/31fb795))
2023-10-10 20:47:48 +00:00
lwouis e542da8c74 feat: add tamil and croatian localizations 2023-10-10 22:33:04 +02:00
lwouis 31fb795fd8 feat: improve bg,es,he,hi,ko,uk,cn localizations 2023-10-10 21:53:17 +02:00
Sai Chand 5cf7f99517 feat: add vim key window navigation (closes #1229) 2023-10-10 21:53:16 +02:00
Zachary Wander 3f64463580 fix: better crossover windows detection 2023-09-19 18:36:06 +02:00
semantic-release-bot 1a9f16a25a chore(release): 6.61.0 [skip ci]
# [6.61.0](https://github.com/lwouis/alt-tab-macos/compare/v6.60.0...v6.61.0) (2023-07-12)

### Bug Fixes

* better identify tabs on macos versions older than 13 ([3147a69](https://github.com/lwouis/alt-tab-macos/commit/3147a69)), closes [#2017](https://github.com/lwouis/alt-tab-macos/issues/2017)
* don't show empty color-slurp windows ([01b3a42](https://github.com/lwouis/alt-tab-macos/commit/01b3a42))

### Features

* improve german localization ([1084d87](https://github.com/lwouis/alt-tab-macos/commit/1084d87))
* improve support for crossover windows ([f9f1c19](https://github.com/lwouis/alt-tab-macos/commit/f9f1c19))
* improve support for scrcpy always-on-top windows ([0673381](https://github.com/lwouis/alt-tab-macos/commit/0673381))
* show the ui by right-clicking the menubar icon (closes [#2647](https://github.com/lwouis/alt-tab-macos/issues/2647)) ([63502d5](https://github.com/lwouis/alt-tab-macos/commit/63502d5))
2023-07-12 19:44:40 +00:00
Louis Pontoise 1084d87399 feat: improve german localization 2023-07-12 21:28:40 +02:00
decodism 3147a6989c fix: better identify tabs on macos versions older than 13
closes #2017
2023-07-12 21:25:00 +02:00
Louis Pontoise 63502d5f30 feat: show the ui by right-clicking the menubar icon (closes #2647) 2023-07-12 21:13:12 +02:00
Zachary Wander 06733812e6 feat: improve support for scrcpy always-on-top windows 2023-07-02 20:50:43 +02:00
Zachary Wander f9f1c19b84 feat: improve support for crossover windows 2023-07-02 20:50:43 +02:00
Zachary Wander 01b3a428d9 fix: don't show empty color-slurp windows 2023-06-25 11:37:25 +02:00
Louis Pontoise fd2f14ae2e refactor: simpler conditionals and comparisons 2023-06-25 11:36:57 +02:00
semantic-release-bot bf6c9121f4 chore(release): 6.60.0 [skip ci]
# [6.60.0](https://github.com/lwouis/alt-tab-macos/compare/v6.59.0...v6.60.0) (2023-06-23)

### Bug Fixes

* prevent flickering when switching to a previewed window ([b69f5f4](https://github.com/lwouis/alt-tab-macos/commit/b69f5f4)), closes [#2432](https://github.com/lwouis/alt-tab-macos/issues/2432)

### Features

* improve support for color-slurp windows ([8605b23](https://github.com/lwouis/alt-tab-macos/commit/8605b23))
* user can change window order in preferences (closes [#515](https://github.com/lwouis/alt-tab-macos/issues/515)) ([a67d123](https://github.com/lwouis/alt-tab-macos/commit/a67d123))
2023-06-23 22:03:23 +00:00
Louis Pontoise a67d1231de feat: user can change window order in preferences (closes #515) 2023-06-23 23:30:56 +02:00
Louis Pontoise b69f5f4b5f fix: prevent flickering when switching to a previewed window
(closes #2432)
2023-06-23 23:30:56 +02:00
Louis Pontoise 8605b23135 feat: improve support for color-slurp windows 2023-06-23 23:30:55 +02:00
Louis Pontoise 7d823dd61d ci: replace altool with notarytool
Apple will break altool notarization on Nov 2023, so we are forced to update our ci
2023-06-23 23:30:55 +02:00
semantic-release-bot 8152c3cebf chore(release): 6.59.0 [skip ci]
# [6.59.0](https://github.com/lwouis/alt-tab-macos/compare/v6.58.0...v6.59.0) (2023-06-04)

### Features

* show app icon for app with no open window (closes [#2561](https://github.com/lwouis/alt-tab-macos/issues/2561)) ([44a5630](https://github.com/lwouis/alt-tab-macos/commit/44a5630))
* update vietnamese localization ([7229b8a](https://github.com/lwouis/alt-tab-macos/commit/7229b8a))
2023-06-04 16:07:27 +00:00
Louis Pontoise 7229b8a0a0 feat: update vietnamese localization 2023-06-04 17:52:01 +02:00
Louis Pontoise 44a5630634 feat: show app icon for app with no open window (closes #2561) 2023-06-04 17:41:42 +02:00
semantic-release-bot 19a65050e8 chore(release): 6.58.0 [skip ci]
# [6.58.0](https://github.com/lwouis/alt-tab-macos/compare/v6.57.0...v6.58.0) (2023-05-15)

### Bug Fixes

* editing the blacklist could sometimes bug (closes [#2528](https://github.com/lwouis/alt-tab-macos/issues/2528)) ([f7f4430](https://github.com/lwouis/alt-tab-macos/commit/f7f4430))

### Features

* update dutch localization ([04948a2](https://github.com/lwouis/alt-tab-macos/commit/04948a2))
2023-05-15 20:58:37 +00:00
Louis Pontoise 04948a21f0 feat: update dutch localization 2023-05-15 22:43:40 +02:00
Louis Pontoise f7f4430be9 fix: editing the blacklist could sometimes bug (closes #2528) 2023-05-15 22:41:13 +02:00
Louis Pontoise e77f3ed44a ci: travis is running deploy steps on fail build recently
i've opened a ticket. it's definitely a bug on their side, but this workaround should fix the issue in the here-and-now
2023-05-14 01:21:52 +02:00
semantic-release-bot 180ba935b1 chore(release): 6.57.0 [skip ci]
# [6.57.0](https://github.com/lwouis/alt-tab-macos/compare/v6.56.0...v6.57.0) (2023-05-09)

### Bug Fixes

* drag-and-drop from a folder on the dock (closes [#706](https://github.com/lwouis/alt-tab-macos/issues/706)) ([ee6785f](https://github.com/lwouis/alt-tab-macos/commit/ee6785f))
* preview window wouldn't update in some cases ([537ba26](https://github.com/lwouis/alt-tab-macos/commit/537ba26))

### Features

* add shortcut to toggle fullscreen selected window (closes [#2521](https://github.com/lwouis/alt-tab-macos/issues/2521)) ([7327917](https://github.com/lwouis/alt-tab-macos/commit/7327917))
* add uzbek localization ([0e106e2](https://github.com/lwouis/alt-tab-macos/commit/0e106e2))
2023-05-09 21:19:32 +00:00
Louis Pontoise 0e106e263b feat: add uzbek localization 2023-05-09 22:59:56 +02:00
Louis Pontoise 7327917a81 feat: add shortcut to toggle fullscreen selected window (closes #2521) 2023-05-09 18:28:35 +02:00
Louis Pontoise c08dcd9fb5 docs: update landing website material 2023-05-02 11:14:13 +02:00
Louis Pontoise ee6785f6ab fix: drag-and-drop from a folder on the dock (closes #706) 2023-03-22 21:39:53 +01:00
decodism 537ba26645 fix: preview window wouldn't update in some cases 2023-03-17 17:25:16 +01:00
semantic-release-bot e604ee2440 chore(release): 6.56.0 [skip ci]
# [6.56.0](https://github.com/lwouis/alt-tab-macos/compare/v6.55.0...v6.56.0) (2023-03-16)

### Bug Fixes

* correctly show when an app is no longer assigned to all desktops ([10bbaa9](https://github.com/lwouis/alt-tab-macos/commit/10bbaa9)), closes [#2372](https://github.com/lwouis/alt-tab-macos/issues/2372)

### Features

* add option to preview selected window (closes [#967](https://github.com/lwouis/alt-tab-macos/issues/967)) ([6534a2d](https://github.com/lwouis/alt-tab-macos/commit/6534a2d))
2023-03-16 10:27:22 +00:00
decodism 6534a2d62e feat: add option to preview selected window (closes #967) 2023-03-16 11:13:09 +01:00
Louis Pontoise b5c3bedd14 docs: optimize landing website images, fix typos, credit appcenter pod 2023-03-02 11:16:54 +01:00
Louis Pontoise 10bbaa9217 fix: correctly show when an app is no longer assigned to all desktops
closes #2372
2023-02-27 15:21:17 +01:00
semantic-release-bot 455e16a88f chore(release): 6.55.0 [skip ci]
# [6.55.0](https://github.com/lwouis/alt-tab-macos/compare/v6.54.0...v6.55.0) (2023-02-23)

### Bug Fixes

* use plain number formatter for initial slider label ([7cab722](https://github.com/lwouis/alt-tab-macos/commit/7cab722))

### Features

* allow batch removal from the blacklist ([f53c070](https://github.com/lwouis/alt-tab-macos/commit/f53c070))
* allow to switch shortcuts while the ui is already open ([b99c988](https://github.com/lwouis/alt-tab-macos/commit/b99c988))
* improved german localization ([5d27a19](https://github.com/lwouis/alt-tab-macos/commit/5d27a19))
* show dock badges when they don't show a number (closes [#2356](https://github.com/lwouis/alt-tab-macos/issues/2356)) ([84752e0](https://github.com/lwouis/alt-tab-macos/commit/84752e0))
2023-02-23 18:39:26 +00:00
Louis Pontoise 5d27a19b38 feat: improved german localization 2023-02-23 19:21:31 +01:00
decodism 7cab722df3 fix: use plain number formatter for initial slider label 2023-02-23 19:11:55 +01:00
decodism b99c988970 feat: allow to switch shortcuts while the ui is already open 2023-02-22 19:43:53 +01:00
decodism f53c070ca1 feat: allow batch removal from the blacklist 2023-02-22 19:43:53 +01:00
Louis Pontoise 84752e0fef feat: show dock badges when they don't show a number (closes #2356) 2023-02-22 19:19:48 +01:00
semantic-release-bot 0d4e0f1dab chore(release): 6.54.0 [skip ci]
# [6.54.0](https://github.com/lwouis/alt-tab-macos/compare/v6.53.1...v6.54.0) (2023-02-20)

### Features

* improve selection background/border color contrast ([cea0cff](https://github.com/lwouis/alt-tab-macos/commit/cea0cff)), closes [#2352](https://github.com/lwouis/alt-tab-macos/issues/2352)
2023-02-20 18:21:02 +00:00
Louis Pontoise cea0cff2a7 feat: improve selection background/border color contrast
closes #2352
2023-02-20 19:01:17 +01:00
semantic-release-bot a60f1e13db chore(release): 6.53.1 [skip ci]
## [6.53.1](https://github.com/lwouis/alt-tab-macos/compare/v6.53.0...v6.53.1) (2023-02-12)

### Bug Fixes

* bring back mouse hover selection (closes [#2317](https://github.com/lwouis/alt-tab-macos/issues/2317)) ([abe2e0b](https://github.com/lwouis/alt-tab-macos/commit/abe2e0b))
2023-02-12 18:26:05 +00:00
decodism abe2e0b73b fix: bring back mouse hover selection (closes #2317) 2023-02-12 19:07:45 +01:00
semantic-release-bot f9bb33c49b chore(release): 6.53.0 [skip ci]
# [6.53.0](https://github.com/lwouis/alt-tab-macos/compare/v6.52.1...v6.53.0) (2023-02-09)

### Bug Fixes

* don't focus window when dropping a file on it ([c386a0c](https://github.com/lwouis/alt-tab-macos/commit/c386a0c))

### Features

* allow status item removal by dragging ([216c5d8](https://github.com/lwouis/alt-tab-macos/commit/216c5d8))
* improve localizations ([7a30b18](https://github.com/lwouis/alt-tab-macos/commit/7a30b18))
* separate mouse hover from keyboard selection ([3fb9a19](https://github.com/lwouis/alt-tab-macos/commit/3fb9a19)), closes [#2078](https://github.com/lwouis/alt-tab-macos/issues/2078) [#1617](https://github.com/lwouis/alt-tab-macos/issues/1617)
2023-02-09 20:59:15 +00:00
Louis Pontoise 7a30b18c20 feat: improve localizations 2023-02-09 21:18:54 +01:00
Louis Pontoise 3fb9a195f8 feat: separate mouse hover from keyboard selection
closes #2078, closes #1617
2023-02-09 20:31:47 +01:00
Louis Pontoise c386a0c439 fix: don't focus window when dropping a file on it 2023-02-09 20:23:09 +01:00
decodism 216c5d8b8e feat: allow status item removal by dragging 2023-01-30 16:51:26 +01:00
semantic-release-bot b57a39d8e8 chore(release): 6.52.1 [skip ci]
## [6.52.1](https://github.com/lwouis/alt-tab-macos/compare/v6.52.0...v6.52.1) (2022-12-28)
2022-12-28 23:57:29 +00:00
Louis Pontoise 8ba828885b ci: replace revoked github token 2022-12-29 00:41:44 +01:00
semantic-release-bot d2c38963c9 chore(release): 6.52.0 [skip ci]
# [6.52.0](https://github.com/lwouis/alt-tab-macos/compare/v6.51.0...v6.52.0) (2022-12-28)

### Bug Fixes

* scale app red badge with app icon size (closes [#559](https://github.com/lwouis/alt-tab-macos/issues/559)) ([4b2f134](https://github.com/lwouis/alt-tab-macos/commit/4b2f134))
* some tooltips would remain on screen (closes [#2190](https://github.com/lwouis/alt-tab-macos/issues/2190)) ([6526caa](https://github.com/lwouis/alt-tab-macos/commit/6526caa))

### Features

* add kurdish localization and improve russian/romanian ([8217ad8](https://github.com/lwouis/alt-tab-macos/commit/8217ad8))
* help support broken fl studio app (closes [#2174](https://github.com/lwouis/alt-tab-macos/issues/2174)) ([4f26bc2](https://github.com/lwouis/alt-tab-macos/commit/4f26bc2))
2022-12-28 23:12:15 +00:00
Louis Pontoise 59d00c1765 ci: make sort use utf8 on every machine 2022-12-28 23:55:09 +01:00
Louis Pontoise 8217ad8fa5 feat: add kurdish localization and improve russian/romanian 2022-12-28 19:46:37 +01:00
Louis Pontoise 4b2f134f32 fix: scale app red badge with app icon size (closes #559) 2022-12-28 19:33:08 +01:00
Louis Pontoise 6526caae30 fix: some tooltips would remain on screen (closes #2190) 2022-12-10 19:26:52 +01:00
Louis Pontoise 4f26bc20a0 feat: help support broken fl studio app (closes #2174) 2022-12-10 19:26:52 +01:00
semantic-release-bot 8b9b0b4fcb chore(release): 6.51.0 [skip ci]
# [6.51.0](https://github.com/lwouis/alt-tab-macos/compare/v6.50.0...v6.51.0) (2022-11-16)

### Bug Fixes

* fullscreening windows stopped working (closes [#2129](https://github.com/lwouis/alt-tab-macos/issues/2129)) ([a09dbbf](https://github.com/lwouis/alt-tab-macos/commit/a09dbbf))
* windows assigned to all spaces were not shown (closes [#2123](https://github.com/lwouis/alt-tab-macos/issues/2123)) ([82cfb62](https://github.com/lwouis/alt-tab-macos/commit/82cfb62))

### Features

* improve localizations ([d2d5016](https://github.com/lwouis/alt-tab-macos/commit/d2d5016))
2022-11-16 21:35:02 +00:00
Louis Pontoise d2d5016780 feat: improve localizations 2022-11-16 22:19:25 +01:00
Louis Pontoise a09dbbfd27 fix: fullscreening windows stopped working (closes #2129) 2022-11-16 22:19:24 +01:00
Louis Pontoise 82cfb62804 fix: windows assigned to all spaces were not shown (closes #2123) 2022-11-16 22:19:24 +01:00
semantic-release-bot ebf445e3e1 chore(release): 6.50.0 [skip ci]
# [6.50.0](https://github.com/lwouis/alt-tab-macos/compare/v6.49.0...v6.50.0) (2022-11-14)

### Bug Fixes

* don't show firefox tooltips as windows (closes [#2110](https://github.com/lwouis/alt-tab-macos/issues/2110)) ([bf905b1](https://github.com/lwouis/alt-tab-macos/commit/bf905b1))
* tabs show as separate windows sometimes on monterey (closes [#2017](https://github.com/lwouis/alt-tab-macos/issues/2017)) ([0965a78](https://github.com/lwouis/alt-tab-macos/commit/0965a78))

### Features

* avoid accidental press of the "reset preferences" button ([#2093](https://github.com/lwouis/alt-tab-macos/issues/2093)) ([f6fcac5](https://github.com/lwouis/alt-tab-macos/commit/f6fcac5))
* avoid confusion with native app-switcher (closes [#2080](https://github.com/lwouis/alt-tab-macos/issues/2080)) ([f906c0e](https://github.com/lwouis/alt-tab-macos/commit/f906c0e))
* improve localizations ([2123af3](https://github.com/lwouis/alt-tab-macos/commit/2123af3))
* show alttab on display with active menubar when needed ([#2107](https://github.com/lwouis/alt-tab-macos/issues/2107)) ([917e661](https://github.com/lwouis/alt-tab-macos/commit/917e661))
2022-11-14 17:53:58 +00:00
Louis Pontoise 2123af39a7 feat: improve localizations 2022-11-14 18:37:32 +01:00
Louis Pontoise 917e661e88 feat: show alttab on display with active menubar when needed (#2107)
closes #2107
2022-11-14 18:32:18 +01:00
Louis Pontoise bf905b1562 fix: don't show firefox tooltips as windows (closes #2110) 2022-11-13 18:23:06 +01:00
Louis Pontoise f6fcac5856 feat: avoid accidental press of the "reset preferences" button (#2093)
closes #2093
2022-11-08 18:46:17 +01:00
Louis Pontoise d4f11542f9 docs: update compatibility info 2022-11-07 22:44:48 +01:00
Louis Pontoise f906c0ecab feat: avoid confusion with native app-switcher (closes #2080) 2022-11-04 22:20:52 +01:00
Louis Pontoise 99f8adeb7d docs: add env info to new issue template 2022-11-04 18:56:56 +01:00
decodism 0965a78d46 fix: tabs show as separate windows sometimes on monterey (closes #2017) 2022-11-03 11:16:51 +01:00
semantic-release-bot fe38b53ff7 chore(release): 6.49.0 [skip ci]
# [6.49.0](https://github.com/lwouis/alt-tab-macos/compare/v6.48.0...v6.49.0) (2022-11-02)

### Bug Fixes

* command+backtick not working if stage manager is on (closes [#2053](https://github.com/lwouis/alt-tab-macos/issues/2053)) ([848ae5f](https://github.com/lwouis/alt-tab-macos/commit/848ae5f))
* crash when setting some shortcut combinations (closes [#2061](https://github.com/lwouis/alt-tab-macos/issues/2061)) ([8b2d659](https://github.com/lwouis/alt-tab-macos/commit/8b2d659))
* hide minimize and fullscreen thumbnail buttons for tabs ([b62c422](https://github.com/lwouis/alt-tab-macos/commit/b62c422))
* improve key repeat-rate when held (closes [#2026](https://github.com/lwouis/alt-tab-macos/issues/2026)) ([1821dea](https://github.com/lwouis/alt-tab-macos/commit/1821dea))
* key-above-tab on international keyboards (closes [#1190](https://github.com/lwouis/alt-tab-macos/issues/1190)) ([4c31740](https://github.com/lwouis/alt-tab-macos/commit/4c31740))
* thumbnails would sometimes be the wrong size ([1065c0d](https://github.com/lwouis/alt-tab-macos/commit/1065c0d))
* wrong focus after active app becomes windowless (closes [#2065](https://github.com/lwouis/alt-tab-macos/issues/2065)) ([281b3ed](https://github.com/lwouis/alt-tab-macos/commit/281b3ed))

### Features

* improve some localizations ([292e6b0](https://github.com/lwouis/alt-tab-macos/commit/292e6b0))
* play alert sound for unavailable thumbnail shortcuts ([fd84a9a](https://github.com/lwouis/alt-tab-macos/commit/fd84a9a))
* support adobe after effects non-standard windows (closes [#1982](https://github.com/lwouis/alt-tab-macos/issues/1982)) ([7b54873](https://github.com/lwouis/alt-tab-macos/commit/7b54873))
2022-11-02 19:49:20 +00:00
decodism 1065c0d440 fix: thumbnails would sometimes be the wrong size 2022-11-02 19:14:34 +01:00
decodism fd84a9a5fc feat: play alert sound for unavailable thumbnail shortcuts 2022-11-02 18:54:42 +01:00
decodism b62c422959 fix: hide minimize and fullscreen thumbnail buttons for tabs 2022-11-02 18:19:22 +01:00
Louis Pontoise f2305429c4 refactor: document more plist attributes 2022-11-02 18:15:43 +01:00
Louis Pontoise 292e6b0339 feat: improve some localizations 2022-11-02 16:49:31 +01:00
Louis Pontoise 7b54873f08 feat: support adobe after effects non-standard windows (closes #1982) 2022-11-02 16:49:30 +01:00
Louis Pontoise 281b3ed45b fix: wrong focus after active app becomes windowless (closes #2065) 2022-11-02 16:49:30 +01:00
Louis Pontoise 8b2d659000 fix: crash when setting some shortcut combinations (closes #2061) 2022-11-02 16:49:30 +01:00
Louis Pontoise 4c31740f25 fix: key-above-tab on international keyboards (closes #1190) 2022-11-02 16:49:30 +01:00
Louis Pontoise 848ae5fc9d fix: command+backtick not working if stage manager is on (closes #2053) 2022-11-02 16:49:30 +01:00
Louis Pontoise b5da4e00ca refactor: pass correct param to private api 2022-11-02 16:49:30 +01:00
Louis Pontoise 4c3688de12 refactor: use triple-slash for method documentation 2022-11-02 16:49:30 +01:00
Louis Pontoise 805660d4d1 refactor: remove unused variables/calls 2022-11-02 16:49:30 +01:00
Louis Pontoise 1821deaa73 fix: improve key repeat-rate when held (closes #2026) 2022-11-02 16:49:29 +01:00
semantic-release-bot c9fd9a2a46 chore(release): 6.48.0 [skip ci]
# [6.48.0](https://github.com/lwouis/alt-tab-macos/compare/v6.47.0...v6.48.0) (2022-10-27)

### Bug Fixes

* app name in system settings in macos 13 (closes [#2044](https://github.com/lwouis/alt-tab-macos/issues/2044)) ([02451e8](https://github.com/lwouis/alt-tab-macos/commit/02451e8))

### Features

* add 3 more shortcut tabs in the preferences (closes [#1064](https://github.com/lwouis/alt-tab-macos/issues/1064)) ([31bd0a6](https://github.com/lwouis/alt-tab-macos/commit/31bd0a6))
2022-10-27 09:31:16 +00:00
decodism 31bd0a6d68 feat: add 3 more shortcut tabs in the preferences (closes #1064) 2022-10-27 11:16:24 +02:00
Louis Pontoise c3162bbb1f refactor: remove hardcoded reference to bundleid 2022-10-27 11:16:24 +02:00
decodism 02451e8ec8 fix: app name in system settings in macos 13 (closes #2044) 2022-10-27 11:16:24 +02:00
semantic-release-bot bd21332c25 chore(release): 6.47.0 [skip ci]
# [6.47.0](https://github.com/lwouis/alt-tab-macos/compare/v6.46.1...v6.47.0) (2022-10-14)

### Bug Fixes

* alt-tab would show on the wrong screen (closes [#2003](https://github.com/lwouis/alt-tab-macos/issues/2003)) ([b72c4db](https://github.com/lwouis/alt-tab-macos/commit/b72c4db))
* discover windows when switching spaces ([#1324](https://github.com/lwouis/alt-tab-macos/issues/1324)) ([9c26d54](https://github.com/lwouis/alt-tab-macos/commit/9c26d54))
* shortcut tabs right margin ([d207f86](https://github.com/lwouis/alt-tab-macos/commit/d207f86))
* show finder file copy windows (closes [#1466](https://github.com/lwouis/alt-tab-macos/issues/1466)) ([c78481b](https://github.com/lwouis/alt-tab-macos/commit/c78481b))
* wrap thumbnail buttons when needed ([ea05c03](https://github.com/lwouis/alt-tab-macos/commit/ea05c03))

### Features

* improve many localizations and add romanian ([71f1609](https://github.com/lwouis/alt-tab-macos/commit/71f1609))
2022-10-14 21:46:04 +00:00
Louis Pontoise 71f1609467 feat: improve many localizations and add romanian 2022-10-14 23:33:07 +02:00
Louis Pontoise 5331bc630a ci: migrate to xcode 13.4 to align with local machine 2022-10-14 21:38:31 +02:00
decodism ea05c0327b fix: wrap thumbnail buttons when needed 2022-10-14 21:27:32 +02:00
decodism d207f86daa fix: shortcut tabs right margin 2022-10-14 21:24:03 +02:00
Louis Pontoise 9c26d54eda fix: discover windows when switching spaces (#1324) 2022-10-14 21:21:18 +02:00
Louis Pontoise b72c4db334 fix: alt-tab would show on the wrong screen (closes #2003) 2022-10-14 21:21:17 +02:00
Louis Pontoise 5830958478 ci: remove detailed logs 2022-10-06 23:43:03 +02:00
Louis Pontoise c78481b5b1 fix: show finder file copy windows (closes #1466)
also improve dealing with steam windows
2022-06-28 02:06:16 +09:00
ryenus 0af9e0f42e refactor: fix compilation error on xcode 13+ 2022-06-26 17:25:57 +09:00
semantic-release-bot 48b0b25974 chore(release): 6.46.1 [skip ci]
## [6.46.1](https://github.com/lwouis/alt-tab-macos/compare/v6.46.0...v6.46.1) (2022-06-24)

### Bug Fixes

* mouse-hover controls remained after closing a window (closes [#1730](https://github.com/lwouis/alt-tab-macos/issues/1730)) ([6bd303d](https://github.com/lwouis/alt-tab-macos/commit/6bd303d))
2022-06-24 10:17:25 +00:00
Louis Pontoise 6bd303d2e8 fix: mouse-hover controls remained after closing a window (closes #1730) 2022-06-24 18:58:52 +09:00
semantic-release-bot dbddcc1c10 chore(release): 6.46.0 [skip ci]
# [6.46.0](https://github.com/lwouis/alt-tab-macos/compare/v6.45.0...v6.46.0) (2022-06-23)

### Features

* add quit-app icon on mouse hover (closes [#1260](https://github.com/lwouis/alt-tab-macos/issues/1260)) ([5c3b503](https://github.com/lwouis/alt-tab-macos/commit/5c3b503))
* improved turkish localization ([bb4a2b9](https://github.com/lwouis/alt-tab-macos/commit/bb4a2b9))
2022-06-23 09:45:23 +00:00
Louis Pontoise bb4a2b9b97 feat: improved turkish localization 2022-06-23 18:31:20 +09:00
Louis Pontoise 5c3b5031d8 feat: add quit-app icon on mouse hover (closes #1260) 2022-06-23 18:31:20 +09:00
semantic-release-bot b460443e77 chore(release): 6.45.0 [skip ci]
# [6.45.0](https://github.com/lwouis/alt-tab-macos/compare/v6.44.0...v6.45.0) (2022-06-21)

### Bug Fixes

* better guess at focus order on launch (closes [#1694](https://github.com/lwouis/alt-tab-macos/issues/1694)) ([be8631e](https://github.com/lwouis/alt-tab-macos/commit/be8631e))
* may avoid rare crashes ([e32beea](https://github.com/lwouis/alt-tab-macos/commit/e32beea))

### Features

* add bengali localization ([2d32823](https://github.com/lwouis/alt-tab-macos/commit/2d32823))
* improve chinese and german localizations ([69bfb41](https://github.com/lwouis/alt-tab-macos/commit/69bfb41))
* improve tooltips on mouse hover (closes [#1661](https://github.com/lwouis/alt-tab-macos/issues/1661)) ([38262f1](https://github.com/lwouis/alt-tab-macos/commit/38262f1))
* quitting an app twice force-quits it (closes [#1529](https://github.com/lwouis/alt-tab-macos/issues/1529)) ([bfcbaac](https://github.com/lwouis/alt-tab-macos/commit/bfcbaac))
2022-06-21 17:24:58 +00:00
Louis Pontoise 69bfb4180c feat: improve chinese and german localizations 2022-06-22 01:32:44 +09:00
Louis Pontoise 2d32823db8 feat: add bengali localization 2022-06-22 01:31:43 +09:00
Louis Pontoise 38262f11b2 feat: improve tooltips on mouse hover (closes #1661) 2022-06-22 01:10:08 +09:00
Louis Pontoise e32beea00a fix: may avoid rare crashes 2022-06-22 01:04:36 +09:00
Louis Pontoise bfcbaacec7 feat: quitting an app twice force-quits it (closes #1529) 2022-06-20 22:04:08 +09:00
Louis Pontoise be8631e90c fix: better guess at focus order on launch (closes #1694) 2022-06-20 20:37:47 +09:00
semantic-release-bot 4198881815 chore(release): 6.44.0 [skip ci]
# [6.44.0](https://github.com/lwouis/alt-tab-macos/compare/v6.43.0...v6.44.0) (2022-06-19)

### Bug Fixes

* blacklist table colors were wrong in dark mode ([#1702](https://github.com/lwouis/alt-tab-macos/issues/1702)) ([95cc29f](https://github.com/lwouis/alt-tab-macos/commit/95cc29f))
* don't show space icon for apps ([#1700](https://github.com/lwouis/alt-tab-macos/issues/1700)) ([f7d070b](https://github.com/lwouis/alt-tab-macos/commit/f7d070b))
* round corners would be aliased after changing theme ([#1698](https://github.com/lwouis/alt-tab-macos/issues/1698)) ([9ae76a9](https://github.com/lwouis/alt-tab-macos/commit/9ae76a9))

### Features

* update german and turkish localizations ([b91696b](https://github.com/lwouis/alt-tab-macos/commit/b91696b))
2022-06-19 15:53:12 +00:00
Louis Pontoise b91696bc89 feat: update german and turkish localizations 2022-06-20 00:38:02 +09:00
Louis Pontoise f7d070b38c fix: don't show space icon for apps (#1700) 2022-06-20 00:38:02 +09:00
Louis Pontoise 95cc29fd9c fix: blacklist table colors were wrong in dark mode (#1702) 2022-06-20 00:38:02 +09:00
Louis Pontoise 9ae76a90fc fix: round corners would be aliased after changing theme (#1698) 2022-06-20 00:38:02 +09:00
semantic-release-bot 24b8617c54 chore(release): 6.43.0 [skip ci]
# [6.43.0](https://github.com/lwouis/alt-tab-macos/compare/v6.42.0...v6.43.0) (2022-06-14)

### Features

* improve blacklist ux (closes [#539](https://github.com/lwouis/alt-tab-macos/issues/539)) ([892a168](https://github.com/lwouis/alt-tab-macos/commit/892a168))
* improve german and chinese (tw) localizations ([5133641](https://github.com/lwouis/alt-tab-macos/commit/5133641))
2022-06-14 07:18:05 +00:00
Louis Pontoise 892a168ee7 feat: improve blacklist ux (closes #539) 2022-06-14 15:59:21 +09:00
Louis Pontoise 51336412c5 feat: improve german and chinese (tw) localizations 2022-06-14 15:59:20 +09:00
Louis Pontoise f38913b75c refactor: maybe fix crash on nil cgwindowid + fix warnings 2022-06-14 15:59:20 +09:00
semantic-release-bot ae35474130 chore(release): 6.42.0 [skip ci]
# [6.42.0](https://github.com/lwouis/alt-tab-macos/compare/v6.41.1...v6.42.0) (2022-06-07)

### Bug Fixes

* some windows would not show ([#1655](https://github.com/lwouis/alt-tab-macos/issues/1655)) ([6a6c80d](https://github.com/lwouis/alt-tab-macos/commit/6a6c80d))

### Features

* show tooltips on mouse hover on main window ([#1661](https://github.com/lwouis/alt-tab-macos/issues/1661)) ([bb5cc23](https://github.com/lwouis/alt-tab-macos/commit/bb5cc23))
2022-06-07 11:55:43 +00:00
Louis Pontoise bb5cc236a7 feat: show tooltips on mouse hover on main window (#1661) 2022-06-07 18:42:14 +09:00
Louis Pontoise 6a6c80d9a4 fix: some windows would not show (#1655) 2022-06-07 18:10:59 +09:00
s4na ae8f7964fa docs: update homebrew instructions for v2.7 2022-06-07 18:10:58 +09:00
semantic-release-bot 3630b17cde chore(release): 6.41.1 [skip ci]
## [6.41.1](https://github.com/lwouis/alt-tab-macos/compare/v6.41.0...v6.41.1) (2022-06-05)

### Bug Fixes

* tab detection got broken in v6.41.0 ([#1656](https://github.com/lwouis/alt-tab-macos/issues/1656)) ([95f97d3](https://github.com/lwouis/alt-tab-macos/commit/95f97d3))
2022-06-05 03:19:48 +00:00
Louis Pontoise 95f97d33af fix: tab detection got broken in v6.41.0 (#1656) 2022-06-05 12:00:14 +09:00
semantic-release-bot 1243de8010 chore(release): 6.41.0 [skip ci]
# [6.41.0](https://github.com/lwouis/alt-tab-macos/compare/v6.40.0...v6.41.0) (2022-06-01)

### Bug Fixes

* fade-out animation was broken from macos 11 ([#760](https://github.com/lwouis/alt-tab-macos/issues/760)) ([d701bc7](https://github.com/lwouis/alt-tab-macos/commit/d701bc7))
* menubar icons in preferences handle dark mode ([1653c16](https://github.com/lwouis/alt-tab-macos/commit/1653c16))

### Features

* add a button to reset the preferences ([#1275](https://github.com/lwouis/alt-tab-macos/issues/1275)) ([82e9ca9](https://github.com/lwouis/alt-tab-macos/commit/82e9ca9))
* add galician localization ([965b179](https://github.com/lwouis/alt-tab-macos/commit/965b179))
* improve windows detection ([de0497a](https://github.com/lwouis/alt-tab-macos/commit/de0497a))
* smoother rounded corners for the main window ([5d0fff2](https://github.com/lwouis/alt-tab-macos/commit/5d0fff2))
* update czech localization ([d7b6b7c](https://github.com/lwouis/alt-tab-macos/commit/d7b6b7c))
2022-06-01 10:31:20 +00:00
Louis Pontoise 965b179d56 feat: add galician localization 2022-06-01 19:10:53 +09:00
Louis Pontoise 5d0fff2276 feat: smoother rounded corners for the main window 2022-06-01 18:56:02 +09:00
Louis Pontoise d7b6b7c0ae feat: update czech localization 2022-06-01 01:22:16 +09:00
Louis Pontoise de0497a2dc feat: improve windows detection 2022-06-01 01:22:16 +09:00
Louis Pontoise 1653c16c65 fix: menubar icons in preferences handle dark mode 2022-06-01 01:22:16 +09:00
Louis Pontoise 88783b3f5f docs: typo on the website homepage 2022-06-01 01:22:16 +09:00
Zachary Wander d701bc7347 fix: fade-out animation was broken from macos 11 (#760) 2022-06-01 01:22:15 +09:00
Louis Pontoise 82e9ca93b6 feat: add a button to reset the preferences (#1275) 2022-05-28 19:13:42 +09:00
Louis Pontoise 5f99e7280a refactor: find method to dry code 2022-05-28 12:37:10 +09:00
semantic-release-bot f56bf3d41b chore(release): 6.40.0 [skip ci]
# [6.40.0](https://github.com/lwouis/alt-tab-macos/compare/v6.39.1...v6.40.0) (2022-05-27)

### Bug Fixes

* focusing alt-tab own windows could fail ([#759](https://github.com/lwouis/alt-tab-macos/issues/759)) ([08720d8](https://github.com/lwouis/alt-tab-macos/commit/08720d8))

### Features

* update spanish localization ([1ac0494](https://github.com/lwouis/alt-tab-macos/commit/1ac0494))
2022-05-27 17:53:39 +00:00
Louis Pontoise 1ac0494f96 feat: update spanish localization 2022-05-28 02:33:41 +09:00
Louis Pontoise 08720d8eeb fix: focusing alt-tab own windows could fail (#759) 2022-05-28 02:29:54 +09:00
semantic-release-bot c44057f47d chore(release): 6.39.1 [skip ci]
## [6.39.1](https://github.com/lwouis/alt-tab-macos/compare/v6.39.0...v6.39.1) (2022-05-26)

### Bug Fixes

* better tabs detection + fix issues with some apps (closes [#1540](https://github.com/lwouis/alt-tab-macos/issues/1540)) ([abd54b3](https://github.com/lwouis/alt-tab-macos/commit/abd54b3)), closes [#647](https://github.com/lwouis/alt-tab-macos/issues/647) [#718](https://github.com/lwouis/alt-tab-macos/issues/718)
2022-05-26 15:54:16 +00:00
Louis Pontoise abd54b3939 fix: better tabs detection + fix issues with some apps (closes #1540)
Maybe fixed #647 #718
2022-05-27 00:33:55 +09:00
semantic-release-bot 1a9fc593d1 chore(release): 6.39.0 [skip ci]
# [6.39.0](https://github.com/lwouis/alt-tab-macos/compare/v6.38.0...v6.39.0) (2022-05-26)

### Bug Fixes

* handle being quit through activity-monitor (closes [#1622](https://github.com/lwouis/alt-tab-macos/issues/1622)) ([69a5ffd](https://github.com/lwouis/alt-tab-macos/commit/69a5ffd))

### Features

* middle-click a thumbnail to close that window (closes [#1621](https://github.com/lwouis/alt-tab-macos/issues/1621)) ([bc4c0cc](https://github.com/lwouis/alt-tab-macos/commit/bc4c0cc))
* update contributors ([b1bf867](https://github.com/lwouis/alt-tab-macos/commit/b1bf867))
2022-05-26 13:58:07 +00:00
Louis Pontoise b1bf86724d feat: update contributors 2022-05-26 22:39:24 +09:00
Louis Pontoise bc4c0cc505 feat: middle-click a thumbnail to close that window (closes #1621) 2022-05-26 21:36:40 +09:00
Louis Pontoise 69a5ffd8b2 fix: handle being quit through activity-monitor (closes #1622) 2022-05-26 21:36:40 +09:00
semantic-release-bot e22f2f2e90 chore(release): 6.38.0 [skip ci]
# [6.38.0](https://github.com/lwouis/alt-tab-macos/compare/v6.37.1...v6.38.0) (2022-05-24)

### Bug Fixes

* better mouse hover behavior ([#1557](https://github.com/lwouis/alt-tab-macos/issues/1557)) ([d3cabc1](https://github.com/lwouis/alt-tab-macos/commit/d3cabc1))

### Features

* improve ukrainian, polish, albanian localization ([b02972b](https://github.com/lwouis/alt-tab-macos/commit/b02972b))
2022-05-24 15:12:35 +00:00
Louis Pontoise b02972b7ea feat: improve ukrainian, polish, albanian localization 2022-05-24 23:53:19 +09:00
Louis Pontoise d3cabc1c05 fix: better mouse hover behavior (#1557) 2022-05-24 23:48:45 +09:00
semantic-release-bot 634cf79916 chore(release): 6.37.1 [skip ci]
## [6.37.1](https://github.com/lwouis/alt-tab-macos/compare/v6.37.0...v6.37.1) (2022-05-12)

### Bug Fixes

* hovering thumbnails would make alttab laggy ([#1567](https://github.com/lwouis/alt-tab-macos/issues/1567)) ([7e66009](https://github.com/lwouis/alt-tab-macos/commit/7e66009))
2022-05-12 13:56:26 +00:00
Louis Pontoise 7e660091e0 fix: hovering thumbnails would make alttab laggy (#1567) 2022-05-12 22:33:23 +09:00
Louis Pontoise 296ced8e9b docs: improve website readability 2022-05-12 21:58:54 +09:00
semantic-release-bot 1226caca03 chore(release): 6.37.0 [skip ci]
# [6.37.0](https://github.com/lwouis/alt-tab-macos/compare/v6.36.2...v6.37.0) (2022-05-12)

### Bug Fixes

* prevent matlab freezing ([#890](https://github.com/lwouis/alt-tab-macos/issues/890)) ([0792838](https://github.com/lwouis/alt-tab-macos/commit/0792838))

### Features

* add albanian localization ([c22b364](https://github.com/lwouis/alt-tab-macos/commit/c22b364))
* improve chinese/taiwanese localizations ([f1c0244](https://github.com/lwouis/alt-tab-macos/commit/f1c0244))
2022-05-12 12:44:59 +00:00
Louis Pontoise f1c02442bc feat: improve chinese/taiwanese localizations 2022-05-12 21:25:22 +09:00
Louis Pontoise 52f8f513da docs: update website with more helpful info 2022-05-12 21:25:22 +09:00
Louis Pontoise c22b364ebe feat: add albanian localization 2022-05-12 21:04:41 +09:00
Louis Pontoise 0792838b16 fix: prevent matlab freezing (#890) 2022-05-12 19:25:37 +09:00
semantic-release-bot f16f6ea4d7 chore(release): 6.36.2 [skip ci]
## [6.36.2](https://github.com/lwouis/alt-tab-macos/compare/v6.36.1...v6.36.2) (2022-05-11)

### Bug Fixes

* hide window controls when another window is selected (closes [#1557](https://github.com/lwouis/alt-tab-macos/issues/1557)) ([2e9cc3b](https://github.com/lwouis/alt-tab-macos/commit/2e9cc3b))
2022-05-11 14:55:28 +00:00
Louis Pontoise 2e9cc3b581 fix: hide window controls when another window is selected (closes #1557) 2022-05-11 23:35:14 +09:00
Louis Pontoise 71543dc615 docs: link to nice launchd plist docs 2022-05-07 19:03:51 +09:00
semantic-release-bot f4f327e7d4 chore(release): 6.36.1 [skip ci]
## [6.36.1](https://github.com/lwouis/alt-tab-macos/compare/v6.36.0...v6.36.1) (2022-05-07)

### Bug Fixes

* better anti-aliasing on traffic-light icons ([022806b](https://github.com/lwouis/alt-tab-macos/commit/022806b))
* libre-office would freeze with 2 open windows (closes [#1508](https://github.com/lwouis/alt-tab-macos/issues/1508)) ([1bb9fd0](https://github.com/lwouis/alt-tab-macos/commit/1bb9fd0))
* switcher could select the wrong thumbnail (closes [#1198](https://github.com/lwouis/alt-tab-macos/issues/1198)) ([4c67778](https://github.com/lwouis/alt-tab-macos/commit/4c67778))
2022-05-07 09:34:14 +00:00
Louis Pontoise 4c6777862e fix: switcher could select the wrong thumbnail (closes #1198) 2022-05-07 18:15:07 +09:00
Louis Pontoise 7acee37607 refactor: update private apis 2022-05-07 18:06:09 +09:00
Louis Pontoise 1bb9fd04d8 fix: libre-office would freeze with 2 open windows (closes #1508) 2022-05-07 18:06:09 +09:00
Louis Pontoise 022806bea2 fix: better anti-aliasing on traffic-light icons 2022-05-07 18:06:09 +09:00
Louis Pontoise 55bbfe59e6 docs: document more use-cases 2022-05-07 18:06:08 +09:00
semantic-release-bot 52d7d21019 chore(release): 6.36.0 [skip ci]
# [6.36.0](https://github.com/lwouis/alt-tab-macos/compare/v6.35.0...v6.36.0) (2022-05-06)

### Features

* improve traffic-light icons (closes [#1542](https://github.com/lwouis/alt-tab-macos/issues/1542)) ([6974de0](https://github.com/lwouis/alt-tab-macos/commit/6974de0))
2022-05-06 17:53:13 +00:00
Louis Pontoise 6974de02ac feat: improve traffic-light icons (closes #1542) 2022-05-07 02:34:35 +09:00
semantic-release-bot d46bd8d10c chore(release): 6.35.0 [skip ci]
# [6.35.0](https://github.com/lwouis/alt-tab-macos/compare/v6.34.1...v6.35.0) (2022-05-05)

### Bug Fixes

* sometimes moved cursor on focus wrong (closes [#1087](https://github.com/lwouis/alt-tab-macos/issues/1087)) ([ed10201](https://github.com/lwouis/alt-tab-macos/commit/ed10201))

### Features

* update turkish localization ([9129ff6](https://github.com/lwouis/alt-tab-macos/commit/9129ff6))
2022-05-05 15:46:39 +00:00
Louis Pontoise 9129ff6e75 feat: update turkish localization 2022-05-06 00:26:21 +09:00
Louis Pontoise ed102015ad fix: sometimes moved cursor on focus wrong (closes #1087) 2022-05-05 00:59:38 +09:00
semantic-release-bot 26e2375bfb chore(release): 6.34.1 [skip ci]
## [6.34.1](https://github.com/lwouis/alt-tab-macos/compare/v6.34.0...v6.34.1) (2022-04-30)

### Bug Fixes

* custom shortcuts can use arrow keys (closes [#1376](https://github.com/lwouis/alt-tab-macos/issues/1376)) ([bb1de75](https://github.com/lwouis/alt-tab-macos/commit/bb1de75))
2022-04-30 15:50:29 +00:00
Louis Pontoise bb1de75128 fix: custom shortcuts can use arrow keys (closes #1376) 2022-05-01 00:31:13 +09:00
semantic-release-bot 254f238f82 chore(release): 6.34.0 [skip ci]
# [6.34.0](https://github.com/lwouis/alt-tab-macos/compare/v6.33.0...v6.34.0) (2022-04-28)

### Bug Fixes

* alt-tab could be relaunched in a loop (closes [#1367](https://github.com/lwouis/alt-tab-macos/issues/1367)) ([cdb461a](https://github.com/lwouis/alt-tab-macos/commit/cdb461a))
* reduce alt-tab cpu usage in some scenarios (closes [#1481](https://github.com/lwouis/alt-tab-macos/issues/1481)) ([0569ed0](https://github.com/lwouis/alt-tab-macos/commit/0569ed0))

### Features

* update indian and russian localizations ([85210e2](https://github.com/lwouis/alt-tab-macos/commit/85210e2))
2022-04-28 14:33:41 +00:00
Louis Pontoise 85210e2935 feat: update indian and russian localizations 2022-04-28 23:12:23 +09:00
Louis Pontoise cdb461ab68 fix: alt-tab could be relaunched in a loop (closes #1367) 2022-04-28 23:12:23 +09:00
Louis Pontoise 0569ed0f86 fix: reduce alt-tab cpu usage in some scenarios (closes #1481) 2022-04-28 23:12:23 +09:00
semantic-release-bot 64d1e8677e chore(release): 6.33.0 [skip ci]
# [6.33.0](https://github.com/lwouis/alt-tab-macos/compare/v6.32.0...v6.33.0) (2022-04-08)

### Features

* allow quitting finder for power users (closes [#1328](https://github.com/lwouis/alt-tab-macos/issues/1328)) ([9e46bd8](https://github.com/lwouis/alt-tab-macos/commit/9e46bd8))
2022-04-08 10:23:04 +00:00
Louis Pontoise 790f6440f3 docs: update contributor list 2022-04-08 18:01:21 +09:00
Louis Pontoise 9e46bd8e2c feat: allow quitting finder for power users (closes #1328) 2022-04-08 18:01:21 +09:00
semantic-release-bot 02590579df chore(release): 6.32.0 [skip ci]
# [6.32.0](https://github.com/lwouis/alt-tab-macos/compare/v6.31.0...v6.32.0) (2022-04-07)

### Bug Fixes

* issue with some apps launched before alt-tab ([f97cd74](https://github.com/lwouis/alt-tab-macos/commit/f97cd74))
* show window of some apps like jetbrains apps ([#1249](https://github.com/lwouis/alt-tab-macos/issues/1249) [#1079](https://github.com/lwouis/alt-tab-macos/issues/1079) [#1392](https://github.com/lwouis/alt-tab-macos/issues/1392)) ([0b85b09](https://github.com/lwouis/alt-tab-macos/commit/0b85b09))
* show windows of some defective apps like bear.app ([9b5cd42](https://github.com/lwouis/alt-tab-macos/commit/9b5cd42))

### Features

* add greek and estonian, and update other localizations ([fccae77](https://github.com/lwouis/alt-tab-macos/commit/fccae77))
2022-04-07 13:16:51 +00:00
Louis Pontoise fccae7734d feat: add greek and estonian, and update other localizations 2022-04-07 21:56:30 +09:00
metacodes f97cd74bd3 fix: issue with some apps launched before alt-tab 2022-04-07 21:05:19 +09:00
metacodes 9b5cd427e6 fix: show windows of some defective apps like bear.app 2022-04-07 21:05:19 +09:00
metacodes 0b85b09f62 fix: show window of some apps like jetbrains apps (#1249 #1079 #1392)
I am able to reproduce the issue by reinstall JetBrains AppCode. The first time I open AppCode after reinstall it, AltTab never show AppCode window. I debug the code on my Mac, I find that AltTab can get the event of app launched but never get the event of finishedLaunching. So I just remove the code runningApplication.isFinishedLaunching. After that, AltTab work well and the issue is fixed.
2022-04-07 21:05:18 +09:00
semantic-release-bot 6887291151 chore(release): 6.31.0 [skip ci]
# [6.31.0](https://github.com/lwouis/alt-tab-macos/compare/v6.30.0...v6.31.0) (2022-02-10)

### Features

* add hebrew localization ([26b72e3](https://github.com/lwouis/alt-tab-macos/commit/26b72e3))
2022-02-10 03:03:20 +00:00
Louis Pontoise 26b72e3792 feat: add hebrew localization 2022-02-10 11:44:39 +09:00
semantic-release-bot 2d042f2c44 chore(release): 6.30.0 [skip ci]
# [6.30.0](https://github.com/lwouis/alt-tab-macos/compare/v6.29.0...v6.30.0) (2022-02-05)

### Features

* add localization in danish, catalan, persian, serbian ([058a0f8](https://github.com/lwouis/alt-tab-macos/commit/058a0f8))
* allow cursor follow focus behavior ([be50758](https://github.com/lwouis/alt-tab-macos/commit/be50758))
* update some localizations ([17fbcc5](https://github.com/lwouis/alt-tab-macos/commit/17fbcc5))
2022-02-05 03:15:15 +00:00
Louis Pontoise 52c9e644b8 ci: dav protocol is no longer supported by apple 2022-02-05 11:55:24 +09:00
Louis Pontoise 058a0f82d3 feat: add localization in danish, catalan, persian, serbian 2022-02-05 01:56:27 +09:00
Louis Pontoise 17fbcc5f09 feat: update some localizations 2022-02-04 22:54:01 +09:00
Grzegorz Kazana be50758451 feat: allow cursor follow focus behavior 2022-02-04 22:54:01 +09:00
semantic-release-bot f5fc5ba813 chore(release): 6.29.0 [skip ci]
# [6.29.0](https://github.com/lwouis/alt-tab-macos/compare/v6.28.0...v6.29.0) (2021-12-01)

### Bug Fixes

* only make network calls to appcenter when necessary (closes [#1265](https://github.com/lwouis/alt-tab-macos/issues/1265)) ([79c2906](https://github.com/lwouis/alt-tab-macos/commit/79c2906))
* prevent setting min width to 0% in preferences (see [#1248](https://github.com/lwouis/alt-tab-macos/issues/1248)) ([467736c](https://github.com/lwouis/alt-tab-macos/commit/467736c))

### Features

* add apple screen sharing to default blacklist ([#1258](https://github.com/lwouis/alt-tab-macos/issues/1258)) ([d4780f6](https://github.com/lwouis/alt-tab-macos/commit/d4780f6))
* add vmware fusion to default blacklist (closes [#1258](https://github.com/lwouis/alt-tab-macos/issues/1258)) ([17f98b5](https://github.com/lwouis/alt-tab-macos/commit/17f98b5))
2021-12-01 16:02:14 +00:00
Louis Pontoise 64d4a78570 docs: update contributors 2021-12-02 00:41:04 +09:00
Zhenfu Shi d4780f61bc feat: add apple screen sharing to default blacklist (#1258) 2021-12-02 00:17:35 +09:00
Andre Borie 79c290603d fix: only make network calls to appcenter when necessary (closes #1265) 2021-12-02 00:12:47 +09:00
Louis Pontoise a6ea7a3950 ci: only build master/develop (pr builds were disabled on travis) 2021-12-02 00:12:47 +09:00
Zhenfu Shi 17f98b5c6b feat: add vmware fusion to default blacklist (closes #1258) 2021-12-02 00:12:47 +09:00
Louis Pontoise 467736ca2f fix: prevent setting min width to 0% in preferences (see #1248) 2021-12-02 00:12:47 +09:00
semantic-release-bot 74386d0c42 chore(release): 6.28.0 [skip ci]
# [6.28.0](https://github.com/lwouis/alt-tab-macos/compare/v6.27.1...v6.28.0) (2021-11-19)

### Bug Fixes

* would sometimes crash when opening preferences > appearance ([c66e106](https://github.com/lwouis/alt-tab-macos/commit/c66e106))

### Features

* native support for apple silicon (e.g. m1 mac) ([6f93130](https://github.com/lwouis/alt-tab-macos/commit/6f93130))
* support login-at-start on macos 11, 12, and m1 macs ([664c5b9](https://github.com/lwouis/alt-tab-macos/commit/664c5b9))
2021-11-19 14:41:15 +00:00
Louis Pontoise b51a790997 docs: update contributors 2021-11-19 23:22:38 +09:00
Louis Pontoise 6329cd35f9 ci: make release build on pull-requests as well 2021-11-19 23:06:31 +09:00
Martin Wilhelmi c66e106613 fix: would sometimes crash when opening preferences > appearance 2021-11-19 23:06:31 +09:00
Martin Wilhelmi 4368015435 ci: show architectures inside binary after build 2021-11-19 23:06:31 +09:00
Louis Pontoise 762b072c5e docs: fix error in qa scenario 2021-11-19 23:06:31 +09:00
Louis Pontoise 664c5b9628 feat: support login-at-start on macos 11, 12, and m1 macs 2021-11-19 23:06:31 +09:00
6f931305cc feat: native support for apple silicon (e.g. m1 mac)
Co-authored-by: Martin Wilhelmi <mnin@mnin.de>
Co-authored-by: Louis Pontoise <lwouis@gmail.com>
2021-11-19 23:06:31 +09:00
semantic-release-bot 92afb11668 chore(release): 6.27.1 [skip ci]
## [6.27.1](https://github.com/lwouis/alt-tab-macos/compare/v6.27.0...v6.27.1) (2021-11-13)

### Bug Fixes

* ghost windows in android studio (#closes 1224) ([b668928](https://github.com/lwouis/alt-tab-macos/commit/b668928))
2021-11-13 11:48:44 +00:00
Louis Pontoise b668928c89 fix: ghost windows in android studio (#closes 1224) 2021-11-13 20:28:12 +09:00
semantic-release-bot 3ad8619920 chore(release): 6.27.0 [skip ci]
# [6.27.0](https://github.com/lwouis/alt-tab-macos/compare/v6.26.0...v6.27.0) (2021-11-12)

### Bug Fixes

* display all windows from android studio ([e2d26f2](https://github.com/lwouis/alt-tab-macos/commit/e2d26f2))
* parallels windows wouldn't switch sometimes (closes [#1213](https://github.com/lwouis/alt-tab-macos/issues/1213)) ([21133ce](https://github.com/lwouis/alt-tab-macos/commit/21133ce))
* the app would sometimes freeze or lag (closes [#563](https://github.com/lwouis/alt-tab-macos/issues/563)) ([4a264ab](https://github.com/lwouis/alt-tab-macos/commit/4a264ab))

### Features

* improved spanish localization ([3709b62](https://github.com/lwouis/alt-tab-macos/commit/3709b62))
2021-11-12 17:54:14 +00:00
Louis Pontoise 3709b62084 feat: improved spanish localization 2021-11-13 02:35:18 +09:00
Louis Pontoise 1db15e041b refactor: split code to help pinpoint the issue in appcenter reports 2021-11-13 01:39:28 +09:00
Louis Pontoise f4eb6ff49d refactor: fix non-impactful compiler warnings 2021-11-13 01:39:28 +09:00
Zachary Wander 4a264abadd fix: the app would sometimes freeze or lag (closes #563) 2021-11-13 01:39:28 +09:00
Zachary Wander 21133ce118 fix: parallels windows wouldn't switch sometimes (closes #1213) 2021-11-13 01:39:28 +09:00
Zachary Wander e2d26f2abc fix: display all windows from android studio 2021-11-13 01:39:28 +09:00
semantic-release-bot 98c144efe8 chore(release): 6.26.0 [skip ci]
# [6.26.0](https://github.com/lwouis/alt-tab-macos/compare/v6.25.0...v6.26.0) (2021-10-13)

### Bug Fixes

* feedback form messages got broken by github ([1539727](https://github.com/lwouis/alt-tab-macos/commit/1539727))

### Features

* add bulgarian and improve arabic localizations ([f1be3cf](https://github.com/lwouis/alt-tab-macos/commit/f1be3cf))
2021-10-13 12:43:28 +00:00
Louis Pontoise f1be3cf3e3 feat: add bulgarian and improve arabic localizations 2021-10-13 21:24:45 +09:00
Louis Pontoise 1539727da1 fix: feedback form messages got broken by github 2021-10-13 21:24:45 +09:00
Louis Pontoise b55c9f1f6c docs: fix languages supported list on landing page 2021-10-13 21:24:45 +09:00
semantic-release-bot 9d2899d5b7 chore(release): 6.25.0 [skip ci]
# [6.25.0](https://github.com/lwouis/alt-tab-macos/compare/v6.24.0...v6.25.0) (2021-09-18)

### Bug Fixes

* "show on active screen" could show the wrong screen (closes [#1129](https://github.com/lwouis/alt-tab-macos/issues/1129)) ([23bbd64](https://github.com/lwouis/alt-tab-macos/commit/23bbd64))
* windows from the iina app would not show sometimes (closes [#1037](https://github.com/lwouis/alt-tab-macos/issues/1037)) ([47d283e](https://github.com/lwouis/alt-tab-macos/commit/47d283e))

### Features

* improve localization in hindi, arabic, vietnamese ([2905f7d](https://github.com/lwouis/alt-tab-macos/commit/2905f7d))
* improve voiceover and speech accessibility ([194e726](https://github.com/lwouis/alt-tab-macos/commit/194e726))
2021-09-18 14:24:26 +00:00
Louis Pontoise 2905f7d1aa feat: improve localization in hindi, arabic, vietnamese 2021-09-18 23:06:37 +09:00
Louis Pontoise 23bbd6498f fix: "show on active screen" could show the wrong screen (closes #1129) 2021-09-18 23:06:37 +09:00
Louis Pontoise 1ca7eb48db refactor: pre-emptively use pid instead of object references
no issue was reported, but pid should always be safer, so switching to it
2021-09-18 23:06:37 +09:00
Louis Pontoise 47d283eb61 fix: windows from the iina app would not show sometimes (closes #1037) 2021-09-18 23:06:37 +09:00
Louis Pontoise 194e7266bd feat: improve voiceover and speech accessibility 2021-09-18 23:06:37 +09:00
semantic-release-bot 2869603573 chore(release): 6.24.0 [skip ci]
# [6.24.0](https://github.com/lwouis/alt-tab-macos/compare/v6.23.0...v6.24.0) (2021-09-04)

### Bug Fixes

* main window would sometimes appear after a delay (closes [#1096](https://github.com/lwouis/alt-tab-macos/issues/1096)) ([8ab0e61](https://github.com/lwouis/alt-tab-macos/commit/8ab0e61))

### Features

* update dutch localization ([91821f7](https://github.com/lwouis/alt-tab-macos/commit/91821f7))
* update italian and turkish localizations ([5cd7b44](https://github.com/lwouis/alt-tab-macos/commit/5cd7b44))
2021-09-04 14:43:32 +00:00
Louis Pontoise 5cd7b44580 feat: update italian and turkish localizations 2021-09-04 23:27:55 +09:00
Louis Pontoise 8ab0e615c8 fix: main window would sometimes appear after a delay (closes #1096) 2021-09-04 23:27:55 +09:00
Louis Pontoise 9d2fd763e2 refactor: improve perf by getting pid once at init 2021-09-04 23:27:55 +09:00
Louis Pontoise 91821f7431 feat: update dutch localization 2021-09-04 23:27:55 +09:00
semantic-release-bot 3918c227c7 chore(release): 6.23.0 [skip ci]
# [6.23.0](https://github.com/lwouis/alt-tab-macos/compare/v6.22.1...v6.23.0) (2021-08-30)

### Bug Fixes

* fix situations from some crash reports ([c18aa4d](https://github.com/lwouis/alt-tab-macos/commit/c18aa4d))
* ghost popup windows in android studio (closes [#1056](https://github.com/lwouis/alt-tab-macos/issues/1056)) ([6f33e3a](https://github.com/lwouis/alt-tab-macos/commit/6f33e3a))
* hide window controls after a window is closed (closes [#925](https://github.com/lwouis/alt-tab-macos/issues/925)) ([0dad739](https://github.com/lwouis/alt-tab-macos/commit/0dad739))
* highlight right thumbnail when no window is focused (closes [#1044](https://github.com/lwouis/alt-tab-macos/issues/1044)) ([f4d3db7](https://github.com/lwouis/alt-tab-macos/commit/f4d3db7))
* showing windows of other screens when it shouldn't (closes [#1052](https://github.com/lwouis/alt-tab-macos/issues/1052)) ([b5b3c38](https://github.com/lwouis/alt-tab-macos/commit/b5b3c38))

### Features

* add vietnamese and luxembourgish localizations ([749db12](https://github.com/lwouis/alt-tab-macos/commit/749db12))
* improve french, portuguese and chinese localizations ([a7026a4](https://github.com/lwouis/alt-tab-macos/commit/a7026a4))
* remove "active space" from filter list ([4623e5b](https://github.com/lwouis/alt-tab-macos/commit/4623e5b))
* support voiceover + "speak items under the cursor" (closes [#1070](https://github.com/lwouis/alt-tab-macos/issues/1070)) ([c7911f3](https://github.com/lwouis/alt-tab-macos/commit/c7911f3))
2021-08-30 17:12:14 +00:00
Louis Pontoise f4d3db790e fix: highlight right thumbnail when no window is focused (closes #1044) 2021-08-31 01:36:15 +09:00
Louis Pontoise 4623e5b7c4 feat: remove "active space" from filter list 2021-08-31 01:36:15 +09:00
Louis Pontoise b5b3c38fec fix: showing windows of other screens when it shouldn't (closes #1052) 2021-08-31 01:36:15 +09:00
Louis Pontoise 749db12bbd feat: add vietnamese and luxembourgish localizations 2021-08-31 01:36:15 +09:00
Louis Pontoise a7026a4f24 feat: improve french, portuguese and chinese localizations 2021-08-30 23:19:43 +09:00
Louis Pontoise c7911f3f5c feat: support voiceover + "speak items under the cursor" (closes #1070) 2021-08-30 23:19:43 +09:00
Louis Pontoise c18aa4d91c fix: fix situations from some crash reports 2021-08-30 23:19:43 +09:00
Afzal Najam 6f33e3ae9f fix: ghost popup windows in android studio (closes #1056) 2021-08-30 23:19:41 +09:00
Allen Guan 46566a4fb5 docs: fix typo in Introduction 2021-07-29 12:33:06 +09:00
Louis Pontoise 0dad739b15 fix: hide window controls after a window is closed (closes #925) 2021-05-26 23:44:34 +09:00
Louis Pontoise c59368c601 docs: clarify compatibility on the landing website (#211) 2021-05-26 23:44:33 +09:00
semantic-release-bot 44ac1e1012 chore(release): 6.22.1 [skip ci]
## [6.22.1](https://github.com/lwouis/alt-tab-macos/compare/v6.22.0...v6.22.1) (2021-05-12)

### Bug Fixes

* certain jetbrain apps windows were not shown (closes [#948](https://github.com/lwouis/alt-tab-macos/issues/948)) ([5958107](https://github.com/lwouis/alt-tab-macos/commit/5958107))
2021-05-12 11:04:39 +00:00
Louis Pontoise 5958107cd9 fix: certain jetbrain apps windows were not shown (closes #948) 2021-05-12 17:28:49 +09:00
semantic-release-bot 25d36c8c2e chore(release): 6.22.0 [skip ci]
# [6.22.0](https://github.com/lwouis/alt-tab-macos/compare/v6.21.2...v6.22.0) (2021-05-10)

### Bug Fixes

* remove jetbrain app non-windows (closes [#885](https://github.com/lwouis/alt-tab-macos/issues/885)) ([a368af3](https://github.com/lwouis/alt-tab-macos/commit/a368af3))

### Features

* add citrix viewer in the default blacklist (see [#381](https://github.com/lwouis/alt-tab-macos/issues/381)) ([e630acf](https://github.com/lwouis/alt-tab-macos/commit/e630acf))
2021-05-10 18:44:47 +00:00
Louis Pontoise a368af3f01 fix: remove jetbrain app non-windows (closes #885) 2021-05-10 16:43:25 +09:00
Louis Pontoise e630acffe0 feat: add citrix viewer in the default blacklist (see #381) 2021-05-10 16:43:25 +09:00
semantic-release-bot dbd252a95c chore(release): 6.21.2 [skip ci]
## [6.21.2](https://github.com/lwouis/alt-tab-macos/compare/v6.21.1...v6.21.2) (2021-04-20)

### Bug Fixes

* selected thumbnail was sometimes wrong (closes [#926](https://github.com/lwouis/alt-tab-macos/issues/926)) ([1da3f32](https://github.com/lwouis/alt-tab-macos/commit/1da3f32))
2021-04-20 12:13:41 +00:00
Louis Pontoise 1da3f3219c fix: selected thumbnail was sometimes wrong (closes #926) 2021-04-20 20:54:29 +09:00
semantic-release-bot a880b3d830 chore(release): 6.21.1 [skip ci]
## [6.21.1](https://github.com/lwouis/alt-tab-macos/compare/v6.21.0...v6.21.1) (2021-04-19)

### Bug Fixes

* crash on launch on a new install (closes [#928](https://github.com/lwouis/alt-tab-macos/issues/928)) ([bed3351](https://github.com/lwouis/alt-tab-macos/commit/bed3351))
2021-04-19 14:17:16 +00:00
Louis Pontoise bed335132b fix: crash on launch on a new install (closes #928) 2021-04-19 22:33:48 +09:00
semantic-release-bot 6734379500 chore(release): 6.21.0 [skip ci]
# [6.21.0](https://github.com/lwouis/alt-tab-macos/compare/v6.20.0...v6.21.0) (2021-04-17)

### Bug Fixes

* apps could steal key focus from alt-tab main window ([#719](https://github.com/lwouis/alt-tab-macos/issues/719) [#916](https://github.com/lwouis/alt-tab-macos/issues/916)) ([6be72f3](https://github.com/lwouis/alt-tab-macos/commit/6be72f3))

### Features

* update korean location ([c1fc40d](https://github.com/lwouis/alt-tab-macos/commit/c1fc40d))
2021-04-17 11:27:38 +00:00
Louis Pontoise c1fc40d523 feat: update korean location 2021-04-17 20:07:30 +09:00
Louis Pontoise 6be72f36d7 fix: apps could steal key focus from alt-tab main window (#719 #916)
(closes #719, closes #916)
2021-04-17 20:07:30 +09:00
semantic-release-bot 682cd1ea8b chore(release): 6.20.0 [skip ci]
# [6.20.0](https://github.com/lwouis/alt-tab-macos/compare/v6.19.0...v6.20.0) (2021-04-15)

### Bug Fixes

* broken preferences window toolbar on macos 11 (closes [#914](https://github.com/lwouis/alt-tab-macos/issues/914)) ([1539030](https://github.com/lwouis/alt-tab-macos/commit/1539030))

### Features

* update contributors ([9847038](https://github.com/lwouis/alt-tab-macos/commit/9847038))
2021-04-15 10:44:16 +00:00
Louis Pontoise 9847038f26 feat: update contributors 2021-04-15 19:25:05 +09:00
Louis Pontoise 1539030469 fix: broken preferences window toolbar on macos 11 (closes #914) 2021-04-15 19:25:05 +09:00
semantic-release-bot 4e57c13a7e chore(release): 6.19.0 [skip ci]
# [6.19.0](https://github.com/lwouis/alt-tab-macos/compare/v6.18.1...v6.19.0) (2021-04-14)

### Bug Fixes

* correct Wikipedia link ([5a41561](https://github.com/lwouis/alt-tab-macos/commit/5a41561))
* intellij fullscreen windows sometimes not showing ([#824](https://github.com/lwouis/alt-tab-macos/issues/824)) ([4dcb6bb](https://github.com/lwouis/alt-tab-macos/commit/4dcb6bb))
* rare crash when the ui was kept open during space transition ([e869900](https://github.com/lwouis/alt-tab-macos/commit/e869900))

### Features

* added NICE DCV to the don't show list ([3a98628](https://github.com/lwouis/alt-tab-macos/commit/3a98628))
* update german, russian, swedish localization ([6f1a27a](https://github.com/lwouis/alt-tab-macos/commit/6f1a27a))
* update korean, polish, and brazilian localizations ([5bc8f82](https://github.com/lwouis/alt-tab-macos/commit/5bc8f82))
2021-04-14 07:50:00 +00:00
Louis Pontoise 5bc8f82015 feat: update korean, polish, and brazilian localizations 2021-04-14 16:33:40 +09:00
Hugh Lilly 5a41561261 fix: correct Wikipedia link 2021-04-14 16:33:40 +09:00
Marco Mastropaolo 3a9862899a feat: added NICE DCV to the don't show list 2021-04-14 16:33:40 +09:00
Louis Pontoise 6e4eb295dc docs: fix discord link 2021-04-14 16:33:40 +09:00
Louis Pontoise 96904ee917 ci: bump macos/xcode to match local dev env better 2021-04-02 18:12:51 +09:00
Ali Karbassi 01683af8ef docs: update homebrew instructions for newer versions 2021-04-02 18:10:01 +09:00
Louis Pontoise 6f1a27a84d feat: update german, russian, swedish localization 2021-04-02 02:06:49 +09:00
Louis Pontoise 4dcb6bbbc0 fix: intellij fullscreen windows sometimes not showing (#824) 2021-04-02 02:06:49 +09:00
Louis Pontoise e86990065d fix: rare crash when the ui was kept open during space transition 2021-04-01 01:06:41 +09:00
semantic-release-bot 4ee7d22dc0 chore(release): 6.18.1 [skip ci]
## [6.18.1](https://github.com/lwouis/alt-tab-macos/compare/v6.18.0...v6.18.1) (2021-03-13)

### Bug Fixes

* force new release ([1a098af](https://github.com/lwouis/alt-tab-macos/commit/1a098af))
2021-03-13 15:44:27 +00:00
698 changed files with 60850 additions and 14468 deletions

No files matched your search

+2
View File
@@ -0,0 +1,2 @@
github: lwouis
patreon: lwouis
+7 -1
View File
@@ -13,7 +13,7 @@ A clear and concise description of what the bug is. What happened, and what you
**Screenshots / video** **Screenshots / video**
Add screenshots to help explain your problem. You can also use Loom to easily record your screen to show the bug in action. That is *really* helpful! Add screenshots to help explain your problem. You can also record your screen to show the bug in action. That is *really* helpful!
**Steps to reproduce the bug** **Steps to reproduce the bug**
@@ -21,3 +21,9 @@ Add screenshots to help explain your problem. You can also use Loom to easily re
2. Click on '....' 2. Click on '....'
3. Scroll down to '....' 3. Scroll down to '....'
4. See error 4. See error
**Your environment**
* AltTab version:
* macOS version:
* Other relevant info: e.g. using external keyboard, multiple monitors, etc
+2 -1
View File
@@ -6,7 +6,8 @@ IDEWorkspaceChecks.plist
/DerivedData/ /DerivedData/
/build/ /build/
.DS_Store .DS_Store
docs/_site/ /docs/_site/
/docs/vendor/
codesign.conf codesign.conf
codesign.crt codesign.crt
codesign.key codesign.key
+8
View File
@@ -0,0 +1,8 @@
retain_objc_accessible: true
schemes:
- Release
targets:
- alt-tab-macos
workspace: alt-tab-macos.xcworkspace
report_exclude:
- src/api-wrappers/PrivateApis.swift
+6
View File
@@ -0,0 +1,6 @@
# We can find the rules here.
# https://github.com/nicklockwood/SwiftFormat/blob/main/Rules.md
--swiftversion 5.5
--maxwidth 120
+11
View File
@@ -0,0 +1,11 @@
# **/*.swift: Matches all .swift files in the current directory and all its subdirectories.
# src/**/*.swift: Matches all .swift files in the src directory and all its subdirectories.
# !node_modules/**: Excludes all files in the node_modules directory and all its subdirectories.
Pods/**
Generated/**
**/PrivateApis.swift
# We will open a new branch to deal with code format issues at the next release.
**/*
+6 -4
View File
@@ -1,11 +1,12 @@
branches: branches:
only: only:
- master - master
- develop
os: osx os: osx
osx_image: xcode11.5 osx_image: xcode13.4
language: node_js language: node_js
node_js: node_js:
- 10 - 16
addons: addons:
ssh_known_hosts: github.com ssh_known_hosts: github.com
homebrew: homebrew:
@@ -20,13 +21,14 @@ env:
- APP_NAME="$(awk -F ' = ' '/PRODUCT_NAME/ { print $2; }' < config/base.xcconfig)" - APP_NAME="$(awk -F ' = ' '/PRODUCT_NAME/ { print $2; }' < config/base.xcconfig)"
install: true # disable default install install: true # disable default install
script: scripts/travis.sh script: scripts/travis.sh
before_deploy: if [[ $TRAVIS_TEST_RESULT == 1 ]]; then echo "build failed; exiting to prevent deploy phases"; sleep 2; exit 1; fi
deploy: deploy:
provider: releases provider: releases
token: token:
secure: wcAMT2rbXhhdk6lsc6EG9VZZkSW0BjOwjYSyXzHjKrgiXsQcZAzAsOkuisj8EfeYN9/uhpa8XX7f5KsdkE5reMqVGGWqdmJU4NnmK5Aew0LmBbzFHfffliQecVCzMmGYPmhPcDxAjidYxgCMrMbvQFaElc0WXdIsQNcaNieSkEgZw6TwGsTxgHXABD2e575K3SN/PPcq7Nx5mRZkURI7YLmo2KfsD2OPR4IcEXFpJRFbPcAZIpKaHUIC2VzpayJA93pBe+siwU150p04PzfSs/nTH/nUO9m24SUi6kAIzVN77cExvX+JDnQoVLz0V45L0iJjkKDTVb07rVOsfm6Pcuaaj2ZVXlpujSb7B5LDUIspUn/NnqMLOtzbSTuaGcx2u+zCcC0b17KooznilQ/sFq3YpeNdmjL4VL5fsw1hdpjcP6S9DqZ90TJZqy6xBQP5NubuJukH//BRilhWGfnq5rOFUlqrN8aApJ7gYry0K2rB8rVWWvA9cU+zX351iy0EERICEU6q3rQwq8gFUbdNATPJJgNg7n0PaNXSQTTF9VluZTRVUtMrpA0hWe7dn+Tvrvhrnhmqvccw3Qfw/i3SECIDHHtsjwLqHCx5gkz/xUdf7+t3k6x+r6Veua0Z3jvyVhdHprU47VTSUhM/n87EiKyNRuKa9IpA18eSlZ59exU= secure: wZUHfOs+JQ0ikNMJ8BnM+8fuoQdhgOEQpNd01ueZxe760GAAjSbq1icME8qaYJJMk1G6n14jo9ecEhzxF0XV8hSdy4WtikK7l5SXiOx5Efuh/tNscmHggGk235eLwQD9pglePZsP3xJUB1BHEj260rypkjnSx5kVOfLUeB1ASeg4+KdxZd2vXjwel+YQf+dYbNUYtwoWqjiLbqT1ao+0q04MPgD2c9jb+HnsA94LUGb44lPXqfUJ+xG2LxBpcDW/q1JhFXL/AmJb0dOOEVzzrBqfWysPukgPMONexZse4c3BBqkMI52ZuF3OoEVAffofmuGKiR5OoyU/hW17xi9jGeb79r+Xt4RdaJAgwcn7/7GtemYKUJp8jhLGsy9XZJShENX7UHTkP3L4iyOrd2Wz+ctZWAebyNReLt985/xTaplpDiQrPcKAuQNBa4sgWk5rIsf7Z0tcBfZau/fQl9Q4100xTbwC+GeAbL0IyXG3kVzQGsGllXHr/2JM1sj7rmKA7lmDlp7xiOBCPscn2YCT87U+F6VbYoNvnxne0igQOUwrvX4qa4XlYrUXDeHcyKku0m8znY74nOu+m6LXkIt8r29pi6Xac0/ZGMwKZRUvKg/skamWPRoy9DAVd8TBQW1c91oYKmqDQRy0eWnD6X1djcKywJ7WlSQDejebJql0h+o=
file_glob: true file_glob: true
file: "$XCODE_BUILD_PATH/*.zip" file: "$XCODE_BUILD_PATH/*.zip"
skip_cleanup: true skip_cleanup: true
on: on:
repo: lwouis/alt-tab-macos repo: lwouis/alt-tab-macos
after_deploy: scripts/update_homebrew_cask.sh after_deploy: scripts/after_deploy.sh
+8 -2
View File
@@ -6,6 +6,12 @@ verify_ssl = true
[dev-packages] [dev-packages]
[packages] [packages]
fonttools = "*" fonttools = "==4.8.1"
googletrans = "==3.0.0"
[scripts] [requires]
python_version = "3.6"
[scripts]
font2png = "scripts/convert_font_to_png.sh"
translate = "python scripts/translate_i18n_tools.py resources/l10n --retry_translate"
Generated
+99 -1
View File
@@ -1,7 +1,7 @@
{ {
"_meta": { "_meta": {
"hash": { "hash": {
"sha256": "8f11c81dff5e32871b7cb2314acb76fd1fb4a06fdb403a65bc6749fe3770eda6" "sha256": "00c7c75d00988a027e56c90f3a0bbba05aec3b41b2f7fd9be24f3cb27bf15eaf"
}, },
"pipfile-spec": 6, "pipfile-spec": 6,
"requires": {}, "requires": {},
@@ -14,13 +14,111 @@
] ]
}, },
"default": { "default": {
"certifi": {
"hashes": [
"sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8",
"sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"
],
"markers": "python_version >= '3.6'",
"version": "==2024.8.30"
},
"chardet": {
"hashes": [
"sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
"sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"
],
"version": "==3.0.4"
},
"fonttools": { "fonttools": {
"hashes": [ "hashes": [
"sha256:596c0e8399c650dbf1048b7ca6fc7b12bd79a7db0981f3b87743de8c2b7512de", "sha256:596c0e8399c650dbf1048b7ca6fc7b12bd79a7db0981f3b87743de8c2b7512de",
"sha256:6d241d319ea9eae4c4ee27cbd1db8656dbd496dd9aa884401debfab3a4c7d82b" "sha256:6d241d319ea9eae4c4ee27cbd1db8656dbd496dd9aa884401debfab3a4c7d82b"
], ],
"index": "pypi", "index": "pypi",
"markers": "python_version >= '3.6'",
"version": "==4.8.1" "version": "==4.8.1"
},
"googletrans": {
"hashes": [
"sha256:44caeea42d91ff6ead5c2d49db2b88de66c45c2fe874c8ec03eb9b4ceb3a533d"
],
"index": "pypi",
"version": "==3.0.0"
},
"h11": {
"hashes": [
"sha256:33d4bca7be0fa039f4e84d50ab00531047e53d6ee8ffbc83501ea602c169cae1",
"sha256:4bc6d6a1238b7615b266ada57e0618568066f57dd6fa967d1290ec9309b2f2f1"
],
"version": "==0.9.0"
},
"h2": {
"hashes": [
"sha256:61e0f6601fa709f35cdb730863b4e5ec7ad449792add80d1410d4174ed139af5",
"sha256:875f41ebd6f2c44781259005b157faed1a5031df3ae5aa7bcb4628a6c0782f14"
],
"version": "==3.2.0"
},
"hpack": {
"hashes": [
"sha256:0edd79eda27a53ba5be2dfabf3b15780928a0dff6eb0c60a3d6767720e970c89",
"sha256:8eec9c1f4bfae3408a3f30500261f7e6a65912dc138526ea054f9ad98892e9d2"
],
"version": "==3.0.0"
},
"hstspreload": {
"hashes": [
"sha256:2ab4518495a132c4ae430c474afffd12938852c6eec68ce1368c8f7858dc3076",
"sha256:9c1b2d0313899d3ff9dac03ab39d53fed95c32eef9862e7eabee8dc07dfd589c"
],
"markers": "python_version >= '3.6'",
"version": "==2024.9.1"
},
"httpcore": {
"hashes": [
"sha256:9850fe97a166a794d7e920590d5ec49a05488884c9fc8b5dba8561effab0c2a0",
"sha256:ecc5949310d9dae4de64648a4ce529f86df1f232ce23dcfefe737c24d21dfbe9"
],
"markers": "python_version >= '3.6'",
"version": "==0.9.1"
},
"httpx": {
"hashes": [
"sha256:32d930858eab677bc29a742aaa4f096de259f1c78c68a90ad11f5c3c04f08335",
"sha256:3642bd13e90b80ba8a243a730275eb10a4c26ec96f5fc16b87e458d4ab21efae"
],
"markers": "python_version >= '3.6'",
"version": "==0.13.3"
},
"hyperframe": {
"hashes": [
"sha256:5187962cb16dcc078f23cb5a4b110098d546c3f41ff2d4038a9896893bbd0b40",
"sha256:a9f5c17f2cc3c719b917c4f33ed1c61bd1f8dfac4b1bd23b7c80b3400971b41f"
],
"version": "==5.2.0"
},
"idna": {
"hashes": [
"sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6",
"sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
"version": "==2.10"
},
"rfc3986": {
"hashes": [
"sha256:270aaf10d87d0d4e095063c65bf3ddbc6ee3d0b226328ce21e036f946e421835",
"sha256:a86d6e1f5b1dc238b218b012df0aa79409667bb209e58da56d0b94704e712a97"
],
"version": "==1.5.0"
},
"sniffio": {
"hashes": [
"sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2",
"sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"
],
"markers": "python_version >= '3.7'",
"version": "==1.3.1"
} }
}, },
"develop": {} "develop": {}
+4 -3
View File
@@ -3,8 +3,9 @@ platform :osx, '10.12'
target 'alt-tab-macos' do target 'alt-tab-macos' do
use_frameworks! use_frameworks!
pod 'LetsMove', :git => 'https://github.com/lwouis/LetsMove.git', :commit => '7abf4daed1a25218f2b52f2dfd190aee5a50071c' pod 'LetsMove', :git => 'https://github.com/lwouis/LetsMove.git', :commit => '7abf4daed1a25218f2b52f2dfd190aee5a50071c'
pod 'Sparkle', :podspec => 'https://raw.githubusercontent.com/lwouis/Sparkle/master/Sparkle.podspec' pod 'Sparkle', :podspec => 'https://raw.githubusercontent.com/lwouis/Sparkle/fix-iframe-popup-1.24/Sparkle.podspec'
pod 'ShortcutRecorder', :git => 'https://github.com/Kentzo/ShortcutRecorder.git', :commit => 'f718220854575bad86fa89dd2bb3decd0b14b2b0' pod 'ShortcutRecorder', :git => 'https://github.com/lwouis/ShortcutRecorder.git', :branch => 'alt-tab-current'
pod 'SwiftyMarkdown', '1.1.0' pod 'SwiftyMarkdown', '1.1.0'
pod 'AppCenter/Crashes', '3.3.1' pod 'AppCenter/Crashes', '4.3.0'
pod 'SwiftyBeaver', '1.9.0'
end end
+18 -14
View File
@@ -1,22 +1,25 @@
PODS: PODS:
- AppCenter/Core (3.3.1) - AppCenter/Core (4.3.0)
- AppCenter/Crashes (3.3.1): - AppCenter/Crashes (4.3.0):
- AppCenter/Core - AppCenter/Core
- LetsMove (1.24) - LetsMove (1.24)
- ShortcutRecorder (3.1) - ShortcutRecorder (3.1)
- Sparkle (1.23.1) - Sparkle (1.24.0)
- SwiftyBeaver (1.9.0)
- SwiftyMarkdown (1.1.0) - SwiftyMarkdown (1.1.0)
DEPENDENCIES: DEPENDENCIES:
- AppCenter/Crashes (= 3.3.1) - AppCenter/Crashes (= 4.3.0)
- LetsMove (from `https://github.com/lwouis/LetsMove.git`, commit `7abf4daed1a25218f2b52f2dfd190aee5a50071c`) - LetsMove (from `https://github.com/lwouis/LetsMove.git`, commit `7abf4daed1a25218f2b52f2dfd190aee5a50071c`)
- ShortcutRecorder (from `https://github.com/Kentzo/ShortcutRecorder.git`, commit `f718220854575bad86fa89dd2bb3decd0b14b2b0`) - ShortcutRecorder (from `https://github.com/lwouis/ShortcutRecorder.git`, branch `alt-tab-current`)
- Sparkle (from `https://raw.githubusercontent.com/lwouis/Sparkle/master/Sparkle.podspec`) - Sparkle (from `https://raw.githubusercontent.com/lwouis/Sparkle/fix-iframe-popup-1.24/Sparkle.podspec`)
- SwiftyBeaver (= 1.9.0)
- SwiftyMarkdown (= 1.1.0) - SwiftyMarkdown (= 1.1.0)
SPEC REPOS: SPEC REPOS:
trunk: trunk:
- AppCenter - AppCenter
- SwiftyBeaver
- SwiftyMarkdown - SwiftyMarkdown
EXTERNAL SOURCES: EXTERNAL SOURCES:
@@ -24,26 +27,27 @@ EXTERNAL SOURCES:
:commit: 7abf4daed1a25218f2b52f2dfd190aee5a50071c :commit: 7abf4daed1a25218f2b52f2dfd190aee5a50071c
:git: https://github.com/lwouis/LetsMove.git :git: https://github.com/lwouis/LetsMove.git
ShortcutRecorder: ShortcutRecorder:
:commit: f718220854575bad86fa89dd2bb3decd0b14b2b0 :branch: alt-tab-current
:git: https://github.com/Kentzo/ShortcutRecorder.git :git: https://github.com/lwouis/ShortcutRecorder.git
Sparkle: Sparkle:
:podspec: https://raw.githubusercontent.com/lwouis/Sparkle/master/Sparkle.podspec :podspec: https://raw.githubusercontent.com/lwouis/Sparkle/fix-iframe-popup-1.24/Sparkle.podspec
CHECKOUT OPTIONS: CHECKOUT OPTIONS:
LetsMove: LetsMove:
:commit: 7abf4daed1a25218f2b52f2dfd190aee5a50071c :commit: 7abf4daed1a25218f2b52f2dfd190aee5a50071c
:git: https://github.com/lwouis/LetsMove.git :git: https://github.com/lwouis/LetsMove.git
ShortcutRecorder: ShortcutRecorder:
:commit: f718220854575bad86fa89dd2bb3decd0b14b2b0 :commit: 5bb32febdab48038ce1762bf14f5ce8024b11fe7
:git: https://github.com/Kentzo/ShortcutRecorder.git :git: https://github.com/lwouis/ShortcutRecorder.git
SPEC CHECKSUMS: SPEC CHECKSUMS:
AppCenter: 76ecf7e959a68e36b0fd314e8dc5897660214423 AppCenter: 883369ab78427b0561c688158d689dfe1f993ea9
LetsMove: fefe56bc7bc7fb7d37049e28a14f297961229fc5 LetsMove: fefe56bc7bc7fb7d37049e28a14f297961229fc5
ShortcutRecorder: fdf620aca34101b0cba3b10fca815e0459254189 ShortcutRecorder: fdf620aca34101b0cba3b10fca815e0459254189
Sparkle: ea073ba9c69cee3ebaab8685ba1e732e14d249f7 Sparkle: 1fa490bb4ab2a9b37cfb9ea4feec19dd33b81cd2
SwiftyBeaver: d39e7c376bf15e9fffca8263b8fd1f42ea56aa2d
SwiftyMarkdown: 033abc9dad9a37903f81aec5188cade436f40520 SwiftyMarkdown: 033abc9dad9a37903f81aec5188cade436f40520
PODFILE CHECKSUM: 78df0a34910c4c031a65ac3b58dc004c21b552d0 PODFILE CHECKSUM: 6e94a2963d935455790ee55be0ce938834d1bba5
COCOAPODS: 1.9.1 COCOAPODS: 1.9.1
BIN
View File
Binary file not shown.
@@ -0,0 +1,99 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>AvailableLibraries</key>
<array>
<dict>
<key>LibraryIdentifier</key>
<string>tvos-arm64</string>
<key>LibraryPath</key>
<string>AppCenter.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
</array>
<key>SupportedPlatform</key>
<string>tvos</string>
</dict>
<dict>
<key>LibraryIdentifier</key>
<string>ios-arm64_x86_64-maccatalyst</string>
<key>LibraryPath</key>
<string>AppCenter.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
<string>x86_64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
<key>SupportedPlatformVariant</key>
<string>maccatalyst</string>
</dict>
<dict>
<key>LibraryIdentifier</key>
<string>ios-arm64_i386_x86_64-simulator</string>
<key>LibraryPath</key>
<string>AppCenter.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
<string>i386</string>
<string>x86_64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
<key>SupportedPlatformVariant</key>
<string>simulator</string>
</dict>
<dict>
<key>LibraryIdentifier</key>
<string>ios-arm64_arm64e_armv7_armv7s</string>
<key>LibraryPath</key>
<string>AppCenter.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
<string>arm64e</string>
<string>armv7</string>
<string>armv7s</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
</dict>
<dict>
<key>LibraryIdentifier</key>
<string>tvos-arm64_x86_64-simulator</string>
<key>LibraryPath</key>
<string>AppCenter.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
<string>x86_64</string>
</array>
<key>SupportedPlatform</key>
<string>tvos</string>
<key>SupportedPlatformVariant</key>
<string>simulator</string>
</dict>
<dict>
<key>LibraryIdentifier</key>
<string>macos-arm64_x86_64</string>
<key>LibraryPath</key>
<string>AppCenter.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
<string>x86_64</string>
</array>
<key>SupportedPlatform</key>
<string>macos</string>
</dict>
</array>
<key>CFBundlePackageType</key>
<string>XFWK</string>
<key>XCFrameworkFormatVersion</key>
<string>1.0</string>
</dict>
</plist>
@@ -0,0 +1,44 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#import <Foundation/Foundation.h>
#if __has_include(<AppCenter/MSACAppCenter.h>)
#import <AppCenter/MSACAbstractLog.h>
#import <AppCenter/MSACAppCenter.h>
#import <AppCenter/MSACAppCenterErrors.h>
#import <AppCenter/MSACChannelGroupProtocol.h>
#import <AppCenter/MSACChannelProtocol.h>
#import <AppCenter/MSACConstants+Flags.h>
#import <AppCenter/MSACConstants.h>
#import <AppCenter/MSACCustomProperties.h>
#import <AppCenter/MSACDevice.h>
#import <AppCenter/MSACEnable.h>
#import <AppCenter/MSACLog.h>
#import <AppCenter/MSACLogWithProperties.h>
#import <AppCenter/MSACLogger.h>
#import <AppCenter/MSACSerializableObject.h>
#import <AppCenter/MSACService.h>
#import <AppCenter/MSACServiceAbstract.h>
#import <AppCenter/MSACWrapperLogger.h>
#import <AppCenter/MSACWrapperSdk.h>
#else
#import "MSACAbstractLog.h"
#import "MSACAppCenter.h"
#import "MSACAppCenterErrors.h"
#import "MSACChannelGroupProtocol.h"
#import "MSACChannelProtocol.h"
#import "MSACConstants+Flags.h"
#import "MSACConstants.h"
#import "MSACCustomProperties.h"
#import "MSACDevice.h"
#import "MSACEnable.h"
#import "MSACLog.h"
#import "MSACLogWithProperties.h"
#import "MSACLogger.h"
#import "MSACSerializableObject.h"
#import "MSACService.h"
#import "MSACServiceAbstract.h"
#import "MSACWrapperLogger.h"
#import "MSACWrapperSdk.h"
#endif
@@ -1,12 +1,13 @@
// Copyright (c) Microsoft Corporation. All rights reserved. // Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. // Licensed under the MIT License.
#ifndef MS_ABSTRACT_LOG_H #ifndef MSAC_ABSTRACT_LOG_H
#define MS_ABSTRACT_LOG_H #define MSAC_ABSTRACT_LOG_H
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
@interface MSAbstractLog : NSObject NS_SWIFT_NAME(AbstractLog)
@interface MSACAbstractLog : NSObject
@end @end
@@ -3,18 +3,26 @@
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
#import "MSConstants.h" #ifndef MSAC_APP_CENTER
#define MSAC_APP_CENTER
@class MSWrapperSdk; #if __has_include(<AppCenter/MSACConstants.h>)
#import <AppCenter/MSACConstants.h>
#if !TARGET_OS_TV #else
@class MSCustomProperties; #import "MSACConstants.h"
#endif #endif
@interface MSAppCenter : NSObject @class MSACWrapperSdk;
#if !TARGET_OS_TV
@class MSACCustomProperties;
#endif
NS_SWIFT_NAME(AppCenter)
@interface MSACAppCenter : NSObject
/** /**
* Returns the singleton instance of MSAppCenter. * Returns the singleton instance of MSACAppCenter.
*/ */
+ (instancetype)sharedInstance; + (instancetype)sharedInstance;
@@ -25,7 +33,7 @@
* *
* @discussion This may be called only once per application process lifetime. * @discussion This may be called only once per application process lifetime.
*/ */
+ (void)configureWithAppSecret:(NSString *)appSecret; + (void)configureWithAppSecret:(NSString *)appSecret NS_SWIFT_NAME(configure(withAppSecret:));
/** /**
* Configure the SDK. * Configure the SDK.
@@ -42,7 +50,7 @@
* *
* @discussion This may be called only once per application process lifetime. * @discussion This may be called only once per application process lifetime.
*/ */
+ (void)start:(NSString *)appSecret withServices:(NSArray<Class> *)services; + (void)start:(NSString *)appSecret withServices:(NSArray<Class> *)services NS_SWIFT_NAME(start(withAppSecret:services:));
/** /**
* Start the SDK with an array of services. * Start the SDK with an array of services.
@@ -51,7 +59,7 @@
* *
* @discussion This may be called only once per application process lifetime. * @discussion This may be called only once per application process lifetime.
*/ */
+ (void)startWithServices:(NSArray<Class> *)services; + (void)startWithServices:(NSArray<Class> *)services NS_SWIFT_NAME(start(services:));
/** /**
* Start a service. * Start a service.
@@ -68,76 +76,53 @@
* *
* @param services Array of services to start. * @param services Array of services to start.
*/ */
+ (void)startFromLibraryWithServices:(NSArray<Class> *)services; + (void)startFromLibraryWithServices:(NSArray<Class> *)services NS_SWIFT_NAME(startFromLibrary(services:));
/** /**
* Check whether the SDK has already been configured or not. * The flag indicates whether the SDK has already been configured or not.
*
* @return YES if configured, NO otherwise.
*/ */
+ (BOOL)isConfigured; @property(class, atomic, readonly, getter=isConfigured) BOOL configured;
/** /**
* Check whether app is running in App Center Test Cloud. * The flag indicates whether app is running in App Center Test Cloud.
*
* @return true if running in App Center Test Cloud, false otherwise.
*/ */
+ (BOOL)isRunningInAppCenterTestCloud; @property(class, atomic, readonly, getter=isRunningInAppCenterTestCloud) BOOL runningInAppCenterTestCloud;
/** /**
* Change the base URL (schema + authority + port only) used to communicate with the backend. * The flag indicates whether or not the SDK was enabled as a whole
* *
* @param logUrl Base URL to use for backend communication.
*/
+ (void)setLogUrl:(NSString *)logUrl;
/**
* Enable or disable the SDK as a whole. In addition to AppCenter resources, it will also enable or disable all registered services.
* The state is persisted in the device's storage across application launches. * The state is persisted in the device's storage across application launches.
*
* @param isEnabled YES to enable, NO to disable.
*
* @see isEnabled
*/ */
+ (void)setEnabled:(BOOL)isEnabled; @property(class, nonatomic, getter=isEnabled, setter=setEnabled:) BOOL enabled NS_SWIFT_NAME(enabled);
/** /**
* Check whether the SDK is enabled or not as a whole. * Flag indicating whether SDK can send network requests.
* *
* @return YES if enabled, NO otherwise. * The state is persisted in the device's storage across application launches.
*
* @see setEnabled:
*/ */
+ (BOOL)isEnabled; @property(class, nonatomic, getter=isNetworkRequestsAllowed, setter=setNetworkRequestsAllowed:)
BOOL networkRequestsAllowed NS_SWIFT_NAME(networkRequestsAllowed);
/** /**
* Get log level. * The SDK's log level.
*
* @return Log level.
*/ */
+ (MSLogLevel)logLevel; @property(class, nonatomic) MSACLogLevel logLevel;
/** /**
* Set log level. * Base URL to use for backend communication.
*
* @param logLevel The log level.
*/ */
+ (void)setLogLevel:(MSLogLevel)logLevel; @property(class, nonatomic, strong) NSString *logUrl;
/** /**
* Set log level handler. * Set log handler.
*
* @param logHandler Handler.
*/ */
+ (void)setLogHandler:(MSLogHandler)logHandler; @property(class, nonatomic) MSACLogHandler logHandler;
/** /**
* Set wrapper SDK information to use when building device properties. This is intended in case you are building a SDK that uses the App * Set wrapper SDK information to use when building device properties. This is intended in case you are building a SDK that uses the App
* Center SDK under the hood, e.g. our Xamarin SDK or ReactNative SDk. * Center SDK under the hood, e.g. our Xamarin SDK or ReactNative SDk.
*
* @param wrapperSdk Wrapper SDK information.
*/ */
+ (void)setWrapperSdk:(MSWrapperSdk *)wrapperSdk; @property(class, nonatomic, strong) MSACWrapperSdk *wrapperSdk;
#if !TARGET_OS_TV #if !TARGET_OS_TV
/** /**
@@ -145,14 +130,12 @@
* *
* @param customProperties Custom properties object. * @param customProperties Custom properties object.
*/ */
+ (void)setCustomProperties:(MSCustomProperties *)customProperties; + (void)setCustomProperties:(MSACCustomProperties *)customProperties;
#endif #endif
/** /**
* Check whether the application delegate forwarder is enabled or not. * Check whether the application delegate forwarder is enabled or not.
* *
* @return YES if enabled, NO otherwise.
*
* @discussion The application delegate forwarder forwards messages that target your application delegate methods via swizzling to the SDK. * @discussion The application delegate forwarder forwards messages that target your application delegate methods via swizzling to the SDK.
* It simplifies the SDK integration but may not be suitable to any situations. For * It simplifies the SDK integration but may not be suitable to any situations. For
* instance it should be disabled if you or one of your third party SDK is doing message forwarding on the application delegate. Message * instance it should be disabled if you or one of your third party SDK is doing message forwarding on the application delegate. Message
@@ -160,29 +143,26 @@
* To disable the application delegate forwarder just add the `AppCenterAppDelegateForwarderEnabled` tag to your Info .plist file and set it * To disable the application delegate forwarder just add the `AppCenterAppDelegateForwarderEnabled` tag to your Info .plist file and set it
* to `0`. Then you will have to forward any application delegate needed by the SDK manually. * to `0`. Then you will have to forward any application delegate needed by the SDK manually.
*/ */
+ (BOOL)isAppDelegateForwarderEnabled; @property(class, readonly, nonatomic, getter=isAppDelegateForwarderEnabled) BOOL appDelegateForwarderEnabled;
/** /**
* Get unique installation identifier. * Unique installation identifier.
* *
* @return Unique installation identifier.
*/ */
+ (NSUUID *)installId; @property(class, readonly, nonatomic) NSUUID *installId;
/** /**
* Detect if a debugger is attached to the app process. This is only invoked once on app startup and can not detect * Detect if a debugger is attached to the app process. This is only invoked once on app startup and can not detect
* if the debugger is being attached during runtime! * if the debugger is being attached during runtime!
* *
* @return BOOL if the debugger is attached.
*/ */
+ (BOOL)isDebuggerAttached; @property(class, readonly, nonatomic, getter=isDebuggerAttached) BOOL debuggerAttached;
/** /**
* Get the current version of AppCenter SDK. * Current version of AppCenter SDK.
* *
* @return The current version of AppCenter SDK.
*/ */
+ (NSString *)sdkVersion; @property(class, readonly, nonatomic) NSString *sdkVersion;
/** /**
* Set the maximum size of the internal storage. This method must be called before App Center is started. This method is only intended for * Set the maximum size of the internal storage. This method must be called before App Center is started. This method is only intended for
@@ -202,22 +182,22 @@
/** /**
* Set the user identifier. * Set the user identifier.
* *
* @param userId User identifier.
*
* @discussion Set the user identifier for logs sent for the default target token when the secret passed in @c * @discussion Set the user identifier for logs sent for the default target token when the secret passed in @c
* MSAppCenter:start:withServices: contains "target={targetToken}". * MSACAppCenter:start:withServices: contains "target={targetToken}".
* *
* For App Center backend the user identifier maximum length is 256 characters. * For App Center backend the user identifier maximum length is 256 characters.
* *
* AppCenter must be configured or started before this API can be used. * AppCenter must be configured or started before this API can be used.
*/ */
+ (void)setUserId:(NSString *)userId; @property(class, nonatomic, strong) NSString *userId;
/** /**
* Set country code to use when building device properties. * Set country code to use when building device properties.
* *
* @param countryCode The two-letter ISO country code. @see https://www.iso.org/obp/ui/#search for more information. * @see https://www.iso.org/obp/ui/#search for more information.
*/ */
+ (void)setCountryCode:(NSString *)countryCode; @property(class, nonatomic, strong) NSString *countryCode;
@end @end
#endif
@@ -0,0 +1,41 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_APP_CENTER_ERRORS_H
#define MSAC_APP_CENTER_ERRORS_H
#import <Foundation/Foundation.h>
#define MSAC_APP_CENTER_BASE_DOMAIN @"com.Microsoft.AppCenter."
NS_ASSUME_NONNULL_BEGIN
#pragma mark - Domain
static NSString *const kMSACACErrorDomain = MSAC_APP_CENTER_BASE_DOMAIN @"ErrorDomain";
#pragma mark - General
// Error codes.
NS_ENUM(NSInteger){MSACACLogInvalidContainerErrorCode = 1, MSACACCanceledErrorCode = 2, MSACACDisabledErrorCode = 3};
// Error descriptions.
static NSString const *kMSACACLogInvalidContainerErrorDesc = @"Invalid log container.";
static NSString const *kMSACACCanceledErrorDesc = @"The operation was canceled.";
static NSString const *kMSACACDisabledErrorDesc = @"The service is disabled.";
#pragma mark - Connection
// Error codes.
NS_ENUM(NSInteger){MSACACConnectionPausedErrorCode = 100, MSACACConnectionHttpErrorCode = 101};
// Error descriptions.
static NSString const *kMSACACConnectionHttpErrorDesc = @"An HTTP error occured.";
static NSString const *kMSACACConnectionPausedErrorDesc = @"Canceled, connection paused with log deletion.";
// Error user info keys.
static NSString const *kMSACACConnectionHttpCodeErrorKey = @"MSConnectionHttpCode";
NS_ASSUME_NONNULL_END
#endif
@@ -0,0 +1,87 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_CHANNEL_GROUP_PROTOCOL_H
#define MSAC_CHANNEL_GROUP_PROTOCOL_H
#import <Foundation/Foundation.h>
#if __has_include(<AppCenter/MSACChannelProtocol.h>)
#import <AppCenter/MSACChannelProtocol.h>
#else
#import "MSACChannelProtocol.h"
#endif
NS_ASSUME_NONNULL_BEGIN
@class MSACChannelUnitConfiguration;
@protocol MSACIngestionProtocol;
@protocol MSACChannelUnitProtocol;
/**
* `MSACChannelGroupProtocol` represents a kind of channel that contains constituent MSACChannelUnit objects. When an operation from the
* `MSACChannelProtocol` is performed on the group, that operation should be propagated to its constituent MSACChannelUnit objects.
*/
NS_SWIFT_NAME(ChannelGroupProtocol)
@protocol MSACChannelGroupProtocol <MSACChannelProtocol>
/**
* Initialize a channel unit with the given configuration.
*
* @param configuration channel configuration.
*
* @return The added `MSACChannelUnitProtocol`. Use this object to enqueue logs.
*/
- (id<MSACChannelUnitProtocol>)addChannelUnitWithConfiguration:(MSACChannelUnitConfiguration *)configuration
NS_SWIFT_NAME(addChannelUnit(withConfiguration:));
/**
* Initialize a channel unit with the given configuration.
*
* @param configuration channel configuration.
* @param ingestion The alternative ingestion object
*
* @return The added `MSACChannelUnitProtocol`. Use this object to enqueue logs.
*/
- (id<MSACChannelUnitProtocol>)addChannelUnitWithConfiguration:(MSACChannelUnitConfiguration *)configuration
withIngestion:(nullable id<MSACIngestionProtocol>)ingestion
NS_SWIFT_NAME(addChannelUnit(_:ingestion:));
/**
* Change the base URL (schema + authority + port only) used to communicate with the backend.
*/
@property(nonatomic, strong) NSString *_Nullable logUrl;
/**
* Set the app secret.
*/
@property(nonatomic, strong) NSString *_Nullable appSecret;
/**
* Set the maximum size of the internal storage. This method must be called before App Center is started.
*
* @discussion The default maximum database size is 10485760 bytes (10 MiB).
*
* @param sizeInBytes Maximum size of the internal storage in bytes. This will be rounded up to the nearest multiple of a SQLite page size
* (default is 4096 bytes). Values below 24576 bytes (24 KiB) will be ignored.
* @param completionHandler Callback that is invoked when the database size has been set. The `BOOL` parameter is `YES` if changing the size
* is successful, and `NO` otherwise.
*/
- (void)setMaxStorageSize:(long)sizeInBytes
completionHandler:(nullable void (^)(BOOL))completionHandler NS_SWIFT_NAME(setMaxStorageSize(_:completionHandler:));
/**
* Return a channel unit instance for the given groupId.
*
* @param groupId The group ID for a channel unit.
*
* @return A channel unit instance or `nil`.
*/
- (nullable id<MSACChannelUnitProtocol>)channelUnitForGroupId:(NSString *)groupId;
@end
NS_ASSUME_NONNULL_END
#endif
@@ -1,36 +1,41 @@
// Copyright (c) Microsoft Corporation. All rights reserved. // Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. // Licensed under the MIT License.
#ifndef MS_CHANNEL_PROTOCOL_H #ifndef MSAC_CHANNEL_PROTOCOL_H
#define MS_CHANNEL_PROTOCOL_H #define MSAC_CHANNEL_PROTOCOL_H
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
#import "MSEnable.h" #if __has_include(<AppCenter/MSACEnable.h>)
#import <AppCenter/MSACEnable.h>
#else
#import "MSACEnable.h"
#endif
NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
@protocol MSChannelDelegate; @protocol MSACChannelDelegate;
/** /**
* `MSChannelProtocol` contains the essential operations of a channel. Channels are broadly responsible for enqueuing logs to be sent to the * `MSACChannelProtocol` contains the essential operations of a channel. Channels are broadly responsible for enqueuing logs to be sent to
* backend and/or stored on disk. * the backend and/or stored on disk.
*/ */
@protocol MSChannelProtocol <NSObject, MSEnable> NS_SWIFT_NAME(ChannelProtocol)
@protocol MSACChannelProtocol <NSObject, MSACEnable>
/** /**
* Add delegate. * Add delegate.
* *
* @param delegate delegate. * @param delegate delegate.
*/ */
- (void)addDelegate:(id<MSChannelDelegate>)delegate; - (void)addDelegate:(id<MSACChannelDelegate>)delegate;
/** /**
* Remove delegate. * Remove delegate.
* *
* @param delegate delegate. * @param delegate delegate.
*/ */
- (void)removeDelegate:(id<MSChannelDelegate>)delegate; - (void)removeDelegate:(id<MSACChannelDelegate>)delegate;
/** /**
* Pause operations, logs will be stored but not sent. * Pause operations, logs will be stored but not sent.
@@ -0,0 +1,18 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_CONSTANTS_FLAGS_H
#define MSAC_CONSTANTS_FLAGS_H
#import <Foundation/Foundation.h>
typedef NS_OPTIONS(NSUInteger, MSACFlags) {
MSACFlagsNone = (0 << 0), // => 00000000
MSACFlagsNormal = (1 << 0), // => 00000001
MSACFlagsCritical = (1 << 1), // => 00000010
MSACFlagsPersistenceNormal DEPRECATED_MSG_ATTRIBUTE("please use MSACFlagsNormal") = MSACFlagsNormal,
MSACFlagsPersistenceCritical DEPRECATED_MSG_ATTRIBUTE("please use MSACFlagsCritical") = MSACFlagsCritical,
MSACFlagsDefault = MSACFlagsNormal
} NS_SWIFT_NAME(Flags);
#endif
@@ -0,0 +1,170 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#import <Foundation/Foundation.h>
/**
* Log Levels
*/
typedef NS_ENUM(NSUInteger, MSACLogLevel) {
/**
* Logging will be very chatty
*/
MSACLogLevelVerbose = 2,
/**
* Debug information will be logged
*/
MSACLogLevelDebug = 3,
/**
* Information will be logged
*/
MSACLogLevelInfo = 4,
/**
* Errors and warnings will be logged
*/
MSACLogLevelWarning = 5,
/**
* Errors will be logged
*/
MSACLogLevelError = 6,
/**
* Only critical errors will be logged
*/
MSACLogLevelAssert = 7,
/**
* Logging is disabled
*/
MSACLogLevelNone = 99
} NS_SWIFT_NAME(LogLevel);
typedef NSString * (^MSACLogMessageProvider)(void)NS_SWIFT_NAME(LogMessageProvider);
typedef void (^MSACLogHandler)(MSACLogMessageProvider messageProvider, MSACLogLevel logLevel, NSString *tag, const char *file,
const char *function, uint line) NS_SWIFT_NAME(LogHandler);
/**
* Channel priorities, check the kMSACPriorityCount if you add a new value.
* The order matters here! Values NEED to range from low priority to high priority.
*/
typedef NS_ENUM(NSInteger, MSACPriority) { MSACPriorityBackground, MSACPriorityDefault, MSACPriorityHigh } NS_SWIFT_NAME(Priority);
static short const kMSACPriorityCount = MSACPriorityHigh + 1;
/**
* The priority by which the modules are initialized.
* MSACPriorityMax is reserved for only 1 module and this needs to be Crashes.
* Crashes needs to be initialized first to catch crashes in our other SDK Modules (which will hopefully never happen) and to avoid losing
* any log at crash time.
*/
typedef NS_ENUM(NSInteger, MSACInitializationPriority) {
MSACInitializationPriorityDefault = 500,
MSACInitializationPriorityHigh = 750,
MSACInitializationPriorityMax = 999
} NS_SWIFT_NAME(InitializationPriority);
/**
* Enum with the different HTTP status codes.
*/
typedef NS_ENUM(NSInteger, MSACHTTPCodesNo) {
// Invalid
MSACHTTPCodesNo0XXInvalidUnknown = 0,
// Informational
MSACHTTPCodesNo1XXInformationalUnknown = 1,
MSACHTTPCodesNo100Continue = 100,
MSACHTTPCodesNo101SwitchingProtocols = 101,
MSACHTTPCodesNo102Processing = 102,
// Success
MSACHTTPCodesNo2XXSuccessUnknown = 2,
MSACHTTPCodesNo200OK = 200,
MSACHTTPCodesNo201Created = 201,
MSACHTTPCodesNo202Accepted = 202,
MSACHTTPCodesNo203NonAuthoritativeInformation = 203,
MSACHTTPCodesNo204NoContent = 204,
MSACHTTPCodesNo205ResetContent = 205,
MSACHTTPCodesNo206PartialContent = 206,
MSACHTTPCodesNo207MultiStatus = 207,
MSACHTTPCodesNo208AlreadyReported = 208,
MSACHTTPCodesNo209IMUsed = 209,
// Redirection
MSACHTTPCodesNo3XXSuccessUnknown = 3,
MSACHTTPCodesNo300MultipleChoices = 300,
MSACHTTPCodesNo301MovedPermanently = 301,
MSACHTTPCodesNo302Found = 302,
MSACHTTPCodesNo303SeeOther = 303,
MSACHTTPCodesNo304NotModified = 304,
MSACHTTPCodesNo305UseProxy = 305,
MSACHTTPCodesNo306SwitchProxy = 306,
MSACHTTPCodesNo307TemporaryRedirect = 307,
MSACHTTPCodesNo308PermanentRedirect = 308,
// Client error
MSACHTTPCodesNo4XXSuccessUnknown = 4,
MSACHTTPCodesNo400BadRequest = 400,
MSACHTTPCodesNo401Unauthorised = 401,
MSACHTTPCodesNo402PaymentRequired = 402,
MSACHTTPCodesNo403Forbidden = 403,
MSACHTTPCodesNo404NotFound = 404,
MSACHTTPCodesNo405MethodNotAllowed = 405,
MSACHTTPCodesNo406NotAcceptable = 406,
MSACHTTPCodesNo407ProxyAuthenticationRequired = 407,
MSACHTTPCodesNo408RequestTimeout = 408,
MSACHTTPCodesNo409Conflict = 409,
MSACHTTPCodesNo410Gone = 410,
MSACHTTPCodesNo411LengthRequired = 411,
MSACHTTPCodesNo412PreconditionFailed = 412,
MSACHTTPCodesNo413RequestEntityTooLarge = 413,
MSACHTTPCodesNo414RequestURITooLong = 414,
MSACHTTPCodesNo415UnsupportedMediaType = 415,
MSACHTTPCodesNo416RequestedRangeNotSatisfiable = 416,
MSACHTTPCodesNo417ExpectationFailed = 417,
MSACHTTPCodesNo418IamATeapot = 418,
MSACHTTPCodesNo419AuthenticationTimeout = 419,
MSACHTTPCodesNo420MethodFailureSpringFramework = 420,
MSACHTTPCodesNo420EnhanceYourCalmTwitter = 4200,
MSACHTTPCodesNo422UnprocessableEntity = 422,
MSACHTTPCodesNo423Locked = 423,
MSACHTTPCodesNo424FailedDependency = 424,
MSACHTTPCodesNo424MethodFailureWebDaw = 4240,
MSACHTTPCodesNo425UnorderedCollection = 425,
MSACHTTPCodesNo426UpgradeRequired = 426,
MSACHTTPCodesNo428PreconditionRequired = 428,
MSACHTTPCodesNo429TooManyRequests = 429,
MSACHTTPCodesNo431RequestHeaderFieldsTooLarge = 431,
MSACHTTPCodesNo444NoResponseNginx = 444,
MSACHTTPCodesNo449RetryWithMicrosoft = 449,
MSACHTTPCodesNo450BlockedByWindowsParentalControls = 450,
MSACHTTPCodesNo451RedirectMicrosoft = 451,
MSACHTTPCodesNo451UnavailableForLegalReasons = 4510,
MSACHTTPCodesNo494RequestHeaderTooLargeNginx = 494,
MSACHTTPCodesNo495CertErrorNginx = 495,
MSACHTTPCodesNo496NoCertNginx = 496,
MSACHTTPCodesNo497HTTPToHTTPSNginx = 497,
MSACHTTPCodesNo499ClientClosedRequestNginx = 499,
// Server error
MSACHTTPCodesNo5XXSuccessUnknown = 5,
MSACHTTPCodesNo500InternalServerError = 500,
MSACHTTPCodesNo501NotImplemented = 501,
MSACHTTPCodesNo502BadGateway = 502,
MSACHTTPCodesNo503ServiceUnavailable = 503,
MSACHTTPCodesNo504GatewayTimeout = 504,
MSACHTTPCodesNo505HTTPVersionNotSupported = 505,
MSACHTTPCodesNo506VariantAlsoNegotiates = 506,
MSACHTTPCodesNo507InsufficientStorage = 507,
MSACHTTPCodesNo508LoopDetected = 508,
MSACHTTPCodesNo509BandwidthLimitExceeded = 509,
MSACHTTPCodesNo510NotExtended = 510,
MSACHTTPCodesNo511NetworkAuthenticationRequired = 511,
MSACHTTPCodesNo522ConnectionTimedOut = 522,
MSACHTTPCodesNo598NetworkReadTimeoutErrorUnknown = 598,
MSACHTTPCodesNo599NetworkConnectTimeoutErrorUnknown = 599
} NS_SWIFT_NAME(HTTPCodesNo);
@@ -1,8 +1,8 @@
// Copyright (c) Microsoft Corporation. All rights reserved. // Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. // Licensed under the MIT License.
#ifndef MS_CUSTOM_PROPERTIES_H #ifndef MSAC_CUSTOM_PROPERTIES_H
#define MS_CUSTOM_PROPERTIES_H #define MSAC_CUSTOM_PROPERTIES_H
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
@@ -10,7 +10,8 @@
* Custom properties builder. * Custom properties builder.
* Collects multiple properties to send in one log. * Collects multiple properties to send in one log.
*/ */
@interface MSCustomProperties : NSObject NS_SWIFT_NAME(CustomProperties)
@interface MSACCustomProperties : NSObject
/** /**
* Set the specified property value with the specified key. * Set the specified property value with the specified key.
@@ -21,7 +22,7 @@
* *
* @return This instance. * @return This instance.
*/ */
- (instancetype)setString:(NSString *)value forKey:(NSString *)key; - (instancetype)setString:(NSString *)value forKey:(NSString *)key NS_SWIFT_NAME(set(_:forKey:));
/** /**
* Set the specified property value with the specified key. * Set the specified property value with the specified key.
@@ -32,7 +33,7 @@
* *
* @return This instance. * @return This instance.
*/ */
- (instancetype)setNumber:(NSNumber *)value forKey:(NSString *)key; - (instancetype)setNumber:(NSNumber *)value forKey:(NSString *)key NS_SWIFT_NAME(set(_:forKey:));
/** /**
* Set the specified property value with the specified key. * Set the specified property value with the specified key.
@@ -43,7 +44,7 @@
* *
* @return This instance. * @return This instance.
*/ */
- (instancetype)setBool:(BOOL)value forKey:(NSString *)key; - (instancetype)setBool:(BOOL)value forKey:(NSString *)key NS_SWIFT_NAME(set(_:forKey:));
/** /**
* Set the specified property value with the specified key. * Set the specified property value with the specified key.
@@ -54,7 +55,7 @@
* *
* @return This instance. * @return This instance.
*/ */
- (instancetype)setDate:(NSDate *)value forKey:(NSString *)key; - (instancetype)setDate:(NSDate *)value forKey:(NSString *)key NS_SWIFT_NAME(set(_:forKey:));
/** /**
* Clear the property for the specified key. * Clear the property for the specified key.
@@ -63,7 +64,7 @@
* *
* @return This instance. * @return This instance.
*/ */
- (instancetype)clearPropertyForKey:(NSString *)key; - (instancetype)clearPropertyForKey:(NSString *)key NS_SWIFT_NAME(clearProperty(forKey:));
@end @end
@@ -1,14 +1,19 @@
// Copyright (c) Microsoft Corporation. All rights reserved. // Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. // Licensed under the MIT License.
#ifndef MS_DEVICE_H #ifndef MSAC_DEVICE_H
#define MS_DEVICE_H #define MSAC_DEVICE_H
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
#import "MSWrapperSdk.h" #if __has_include(<AppCenter/MSACWrapperSdk.h>)
#import <AppCenter/MSACWrapperSdk.h>
#else
#import "MSACWrapperSdk.h"
#endif
@interface MSDevice : MSWrapperSdk NS_SWIFT_NAME(Device)
@interface MSACDevice : MSACWrapperSdk
/* /*
* Name of the SDK. Consists of the name of the SDK and the platform, e.g. "appcenter.ios", "appcenter.android" * Name of the SDK. Consists of the name of the SDK and the platform, e.g. "appcenter.ios", "appcenter.android"
@@ -1,15 +1,16 @@
// Copyright (c) Microsoft Corporation. All rights reserved. // Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. // Licensed under the MIT License.
#ifndef MS_ENABLE_H #ifndef MSAC_ENABLE_H
#define MS_ENABLE_H #define MSAC_ENABLE_H
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
/** /**
* Protocol to define an instance that can be enabled/disabled. * Protocol to define an instance that can be enabled/disabled.
*/ */
@protocol MSEnable <NSObject> NS_SWIFT_NAME(Enable)
@protocol MSACEnable <NSObject>
@required @required
@@ -19,7 +20,7 @@
* @param isEnabled A boolean value set to YES to enable the instance or NO to disable it. * @param isEnabled A boolean value set to YES to enable the instance or NO to disable it.
* @param deleteData A boolean value set to YES to delete data or NO to keep it. * @param deleteData A boolean value set to YES to delete data or NO to keep it.
*/ */
- (void)setEnabled:(BOOL)isEnabled andDeleteDataOnDisabled:(BOOL)deleteData; - (void)setEnabled:(BOOL)isEnabled andDeleteDataOnDisabled:(BOOL)deleteData NS_SWIFT_NAME(setEnabled(_:deleteDataOnDisabled:));
@end @end
@@ -1,14 +1,15 @@
// Copyright (c) Microsoft Corporation. All rights reserved. // Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. // Licensed under the MIT License.
#ifndef MS_LOG_H #ifndef MSAC_LOG_H
#define MS_LOG_H #define MSAC_LOG_H
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
@class MSDevice; @class MSACDevice;
@protocol MSLog <NSObject> NS_SWIFT_NAME(Log)
@protocol MSACLog <NSObject>
/** /**
* Log type. * Log type.
@@ -39,7 +40,7 @@
/** /**
* Device properties associated to this log. * Device properties associated to this log.
*/ */
@property(nonatomic, strong) MSDevice *device; @property(nonatomic, strong) MSACDevice *device;
/** /**
* Transient object tag. For example, a log can be tagged with a transmission target. We do this currently to prevent properties being * Transient object tag. For example, a log can be tagged with a transmission target. We do this currently to prevent properties being
@@ -1,14 +1,19 @@
// Copyright (c) Microsoft Corporation. All rights reserved. // Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. // Licensed under the MIT License.
#ifndef MS_LOG_WITH_PROPERTIES_H #ifndef MSAC_LOG_WITH_PROPERTIES_H
#define MS_LOG_WITH_PROPERTIES_H #define MSAC_LOG_WITH_PROPERTIES_H
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
#import "MSAbstractLog.h" #if __has_include(<AppCenter/MSACAbstractLog.h>)
#import <AppCenter/MSACAbstractLog.h>
#else
#import "MSACAbstractLog.h"
#endif
@interface MSLogWithProperties : MSAbstractLog NS_SWIFT_NAME(LogWithProperties)
@interface MSACLogWithProperties : MSACAbstractLog
/** /**
* Additional key/value pair parameters. [optional] * Additional key/value pair parameters. [optional]
@@ -0,0 +1,54 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#import <Foundation/Foundation.h>
#ifndef MSAC_LOGGER
#define MSAC_LOGGER
#if __has_include(<AppCenter/MSACConstants.h>)
#import <AppCenter/MSACConstants.h>
#else
#import "MSACConstants.h"
#endif
#define MSACLog(_level, _tag, _message) \
[MSACLogger logMessage:_message level:_level tag:_tag file:__FILE__ function:__PRETTY_FUNCTION__ line:__LINE__]
#define MSACLogAssert(tag, format, ...) \
MSACLog(MSACLogLevelAssert, tag, (^{ \
return [NSString stringWithFormat:(format), ##__VA_ARGS__]; \
}))
#define MSACLogError(tag, format, ...) \
MSACLog(MSACLogLevelError, tag, (^{ \
return [NSString stringWithFormat:(format), ##__VA_ARGS__]; \
}))
#define MSACLogWarning(tag, format, ...) \
MSACLog(MSACLogLevelWarning, tag, (^{ \
return [NSString stringWithFormat:(format), ##__VA_ARGS__]; \
}))
#define MSACLogInfo(tag, format, ...) \
MSACLog(MSACLogLevelInfo, tag, (^{ \
return [NSString stringWithFormat:(format), ##__VA_ARGS__]; \
}))
#define MSACLogDebug(tag, format, ...) \
MSACLog(MSACLogLevelDebug, tag, (^{ \
return [NSString stringWithFormat:(format), ##__VA_ARGS__]; \
}))
#define MSACLogVerbose(tag, format, ...) \
MSACLog(MSACLogLevelVerbose, tag, (^{ \
return [NSString stringWithFormat:(format), ##__VA_ARGS__]; \
}))
NS_SWIFT_NAME(Logger)
@interface MSACLogger : NSObject
+ (void)logMessage:(MSACLogMessageProvider)messageProvider
level:(MSACLogLevel)loglevel
tag:(NSString *)tag
file:(const char *)file
function:(const char *)function
line:(uint)line;
@end
#endif
@@ -0,0 +1,19 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#import <Foundation/Foundation.h>
#ifndef SERIALIZABLE_OBJECT_H
#define SERIALIZABLE_OBJECT_H
@protocol MSACSerializableObject <NSCoding>
/**
* Serialize this object to a dictionary.
*
* @return A dictionary representing this object.
*/
- (NSMutableDictionary *)serializeToDictionary;
@end
#endif
@@ -0,0 +1,23 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_SERVICE_H
#define MSAC_SERVICE_H
#import <Foundation/Foundation.h>
/**
* Protocol declaring service logic.
*/
NS_SWIFT_NAME(Service)
@protocol MSACService <NSObject>
/**
* Indicates whether this service is enabled.
* The state is persisted in the device's storage across application launches.
*/
@property(class, nonatomic, getter=isEnabled, setter=setEnabled:) BOOL enabled NS_SWIFT_NAME(enabled);
@end
#endif
@@ -1,20 +1,25 @@
// Copyright (c) Microsoft Corporation. All rights reserved. // Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. // Licensed under the MIT License.
#ifndef MS_SERVICE_ABSTRACT_H #ifndef MSAC_SERVICE_ABSTRACT_H
#define MS_SERVICE_ABSTRACT_H #define MSAC_SERVICE_ABSTRACT_H
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
#import "MSService.h" #if __has_include(<AppCenter/MSACService.h>)
#import <AppCenter/MSACService.h>
#else
#import "MSACService.h"
#endif
@protocol MSChannelGroupProtocol; @protocol MSACChannelGroupProtocol;
/** /**
* Abstraction of services common logic. * Abstraction of services common logic.
* This class is intended to be subclassed only not instantiated directly. * This class is intended to be subclassed only not instantiated directly.
*/ */
@interface MSServiceAbstract : NSObject <MSService> NS_SWIFT_NAME(ServiceAbstract)
@interface MSACServiceAbstract : NSObject <MSACService>
/** /**
* The flag indicates whether the service is started from application or not. * The flag indicates whether the service is started from application or not.
@@ -29,7 +34,7 @@
* @param token default transmission target token for this service. * @param token default transmission target token for this service.
* @param fromApplication indicates whether the service started from an application or not. * @param fromApplication indicates whether the service started from an application or not.
*/ */
- (void)startWithChannelGroup:(id<MSChannelGroupProtocol>)channelGroup - (void)startWithChannelGroup:(id<MSACChannelGroupProtocol>)channelGroup
appSecret:(NSString *)appSecret appSecret:(NSString *)appSecret
transmissionTargetToken:(NSString *)token transmissionTargetToken:(NSString *)token
fromApplication:(BOOL)fromApplication; fromApplication:(BOOL)fromApplication;
@@ -44,11 +49,9 @@
- (void)updateConfigurationWithAppSecret:(NSString *)appSecret transmissionTargetToken:(NSString *)token; - (void)updateConfigurationWithAppSecret:(NSString *)appSecret transmissionTargetToken:(NSString *)token;
/** /**
* Checks if the service needs the application secret. * The flag indicate whether the service needs the application secret or not.
*
* @return `YES` if the application secret is required, `NO` otherwise.
*/ */
- (BOOL)isAppSecretRequired; @property(atomic, readonly) BOOL isAppSecretRequired;
@end @end
@@ -3,14 +3,19 @@
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
#import "MSConstants.h" #if __has_include(<AppCenter/MSACConstants.h>)
#import <AppCenter/MSACConstants.h>
#else
#import "MSACConstants.h"
#endif
/** /**
* This is a utility for producing App Center style log messages. It is only intended for use by App Center services and wrapper SDKs of App * This is a utility for producing App Center style log messages. It is only intended for use by App Center services and wrapper SDKs of App
* Center. * Center.
*/ */
@interface MSWrapperLogger : NSObject NS_SWIFT_NAME(WrapperLogger)
@interface MSACWrapperLogger : NSObject
+ (void)MSWrapperLog:(MSLogMessageProvider)message tag:(NSString *)tag level:(MSLogLevel)level; + (void)MSACWrapperLog:(MSACLogMessageProvider)message tag:(NSString *)tag level:(MSACLogLevel)level;
@end @end
@@ -1,12 +1,13 @@
// Copyright (c) Microsoft Corporation. All rights reserved. // Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. // Licensed under the MIT License.
#ifndef MS_WRAPPER_SDK_H #ifndef MSAC_WRAPPER_SDK_H
#define MS_WRAPPER_SDK_H #define MSAC_WRAPPER_SDK_H
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
@interface MSWrapperSdk : NSObject NS_SWIFT_NAME(WrapperSdk)
@interface MSACWrapperSdk : NSObject
/* /*
* Version of the wrapper SDK. When the SDK is embedding another base SDK (for example Xamarin.Android wraps Android), the Xamarin specific * Version of the wrapper SDK. When the SDK is embedding another base SDK (for example Xamarin.Android wraps Android), the Xamarin specific
@@ -0,0 +1,13 @@
framework module AppCenter {
umbrella header "AppCenter.h"
export *
module * { export * }
link framework "Foundation"
link framework "CoreTelephony"
link framework "SystemConfiguration"
link framework "UIKit"
link "sqlite3"
link "z"
}
@@ -3,14 +3,16 @@
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
#import "MSConstants+Flags.h" #import "MSACConstants+Flags.h"
@protocol MSChannelUnitProtocol; @protocol MSACChannelUnitProtocol;
@protocol MSChannelGroupProtocol; @protocol MSACChannelGroupProtocol;
@protocol MSChannelProtocol; @protocol MSACChannelProtocol;
@protocol MSLog; @protocol MSACLog;
@protocol MSChannelDelegate <NSObject> NS_ASSUME_NONNULL_BEGIN
@protocol MSACChannelDelegate <NSObject>
@optional @optional
@@ -20,14 +22,14 @@
* @param channelGroup The channel group. * @param channelGroup The channel group.
* @param channel The newly added channel. * @param channel The newly added channel.
*/ */
- (void)channelGroup:(id<MSChannelGroupProtocol>)channelGroup didAddChannelUnit:(id<MSChannelUnitProtocol>)channel; - (void)channelGroup:(id<MSACChannelGroupProtocol>)channelGroup didAddChannelUnit:(id<MSACChannelUnitProtocol>)channel;
/** /**
* A callback that is called when a log is just enqueued. Delegates may want to prepare the log a little more before further processing. * A callback that is called when a log is just enqueued. Delegates may want to prepare the log a little more before further processing.
* *
* @param log The log to prepare. * @param log The log to prepare.
*/ */
- (void)channel:(id<MSChannelProtocol>)channel prepareLog:(id<MSLog>)log; - (void)channel:(id<MSACChannelProtocol>)channel prepareLog:(id<MSACLog>)log;
/** /**
* A callback that is called after a log is definitely prepared. * A callback that is called after a log is definitely prepared.
@@ -36,7 +38,7 @@
* @param internalId An internal Id to keep track of logs. * @param internalId An internal Id to keep track of logs.
* @param flags Options for the log. * @param flags Options for the log.
*/ */
- (void)channel:(id<MSChannelProtocol>)channel didPrepareLog:(id<MSLog>)log internalId:(NSString *)internalId flags:(MSFlags)flags; - (void)channel:(id<MSACChannelProtocol>)channel didPrepareLog:(id<MSACLog>)log internalId:(NSString *)internalId flags:(MSACFlags)flags;
/** /**
* A callback that is called after a log completed the enqueueing process whether it was successful or not. * A callback that is called after a log completed the enqueueing process whether it was successful or not.
@@ -44,7 +46,7 @@
* @param log The log. * @param log The log.
* @param internalId An internal Id to keep track of logs. * @param internalId An internal Id to keep track of logs.
*/ */
- (void)channel:(id<MSChannelProtocol>)channel didCompleteEnqueueingLog:(id<MSLog>)log internalId:(NSString *)internalId; - (void)channel:(id<MSACChannelProtocol>)channel didCompleteEnqueueingLog:(id<MSACLog>)log internalId:(NSString *)internalId;
/** /**
* Callback method that will be called before each log will be send to the server. * Callback method that will be called before each log will be send to the server.
@@ -52,7 +54,7 @@
* @param channel The channel object. * @param channel The channel object.
* @param log The log to be sent. * @param log The log to be sent.
*/ */
- (void)channel:(id<MSChannelProtocol>)channel willSendLog:(id<MSLog>)log; - (void)channel:(id<MSACChannelProtocol>)channel willSendLog:(id<MSACLog>)log;
/** /**
* Callback method that will be called in case the SDK was able to send a log. * Callback method that will be called in case the SDK was able to send a log.
@@ -60,7 +62,7 @@
* @param channel The channel object. * @param channel The channel object.
* @param log The log to be sent. * @param log The log to be sent.
*/ */
- (void)channel:(id<MSChannelProtocol>)channel didSucceedSendingLog:(id<MSLog>)log; - (void)channel:(id<MSACChannelProtocol>)channel didSucceedSendingLog:(id<MSACLog>)log;
/** /**
* Callback method that will be called in case the SDK was unable to send a log. * Callback method that will be called in case the SDK was unable to send a log.
@@ -69,7 +71,7 @@
* @param log The log to be sent. * @param log The log to be sent.
* @param error The error that occured. * @param error The error that occured.
*/ */
- (void)channel:(id<MSChannelProtocol>)channel didFailSendingLog:(id<MSLog>)log withError:(NSError *)error; - (void)channel:(id<MSACChannelProtocol>)channel didFailSendingLog:(id<MSACLog>)log withError:(nullable NSError *)error;
/** /**
* A callback that is called when setEnabled has been invoked. * A callback that is called when setEnabled has been invoked.
@@ -78,7 +80,7 @@
* @param isEnabled The boolean that indicates enabled. * @param isEnabled The boolean that indicates enabled.
* @param deletedData The boolean that indicates deleting data on disabled. * @param deletedData The boolean that indicates deleting data on disabled.
*/ */
- (void)channel:(id<MSChannelProtocol>)channel didSetEnabled:(BOOL)isEnabled andDeleteDataOnDisabled:(BOOL)deletedData; - (void)channel:(id<MSACChannelProtocol>)channel didSetEnabled:(BOOL)isEnabled andDeleteDataOnDisabled:(BOOL)deletedData;
/** /**
* A callback that is called when pause has been invoked. * A callback that is called when pause has been invoked.
@@ -86,7 +88,7 @@
* @param channel The channel. * @param channel The channel.
* @param identifyingObject The identifying object used to pause the channel. * @param identifyingObject The identifying object used to pause the channel.
*/ */
- (void)channel:(id<MSChannelProtocol>)channel didPauseWithIdentifyingObject:(id<NSObject>)identifyingObject; - (void)channel:(id<MSACChannelProtocol>)channel didPauseWithIdentifyingObject:(id<NSObject>)identifyingObject;
/** /**
* A callback that is called when resume has been invoked. * A callback that is called when resume has been invoked.
@@ -94,7 +96,7 @@
* @param channel The channel. * @param channel The channel.
* @param identifyingObject The identifying object used to resume the channel. * @param identifyingObject The identifying object used to resume the channel.
*/ */
- (void)channel:(id<MSChannelProtocol>)channel didResumeWithIdentifyingObject:(id<NSObject>)identifyingObject; - (void)channel:(id<MSACChannelProtocol>)channel didResumeWithIdentifyingObject:(id<NSObject>)identifyingObject;
/** /**
* Callback method that will determine if a log should be filtered out from the usual processing pipeline. If any delegate returns true, the * Callback method that will determine if a log should be filtered out from the usual processing pipeline. If any delegate returns true, the
@@ -105,6 +107,8 @@
* *
* @return `true` if the log should be filtered out. * @return `true` if the log should be filtered out.
*/ */
- (BOOL)channelUnit:(id<MSChannelUnitProtocol>)channelUnit shouldFilterLog:(id<MSLog>)log; - (BOOL)channelUnit:(id<MSACChannelUnitProtocol>)channelUnit shouldFilterLog:(id<MSACLog>)log;
@end @end
NS_ASSUME_NONNULL_END
@@ -0,0 +1,44 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#import <Foundation/Foundation.h>
#if __has_include(<AppCenter/MSACAppCenter.h>)
#import <AppCenter/MSACAbstractLog.h>
#import <AppCenter/MSACAppCenter.h>
#import <AppCenter/MSACAppCenterErrors.h>
#import <AppCenter/MSACChannelGroupProtocol.h>
#import <AppCenter/MSACChannelProtocol.h>
#import <AppCenter/MSACConstants+Flags.h>
#import <AppCenter/MSACConstants.h>
#import <AppCenter/MSACCustomProperties.h>
#import <AppCenter/MSACDevice.h>
#import <AppCenter/MSACEnable.h>
#import <AppCenter/MSACLog.h>
#import <AppCenter/MSACLogWithProperties.h>
#import <AppCenter/MSACLogger.h>
#import <AppCenter/MSACSerializableObject.h>
#import <AppCenter/MSACService.h>
#import <AppCenter/MSACServiceAbstract.h>
#import <AppCenter/MSACWrapperLogger.h>
#import <AppCenter/MSACWrapperSdk.h>
#else
#import "MSACAbstractLog.h"
#import "MSACAppCenter.h"
#import "MSACAppCenterErrors.h"
#import "MSACChannelGroupProtocol.h"
#import "MSACChannelProtocol.h"
#import "MSACConstants+Flags.h"
#import "MSACConstants.h"
#import "MSACCustomProperties.h"
#import "MSACDevice.h"
#import "MSACEnable.h"
#import "MSACLog.h"
#import "MSACLogWithProperties.h"
#import "MSACLogger.h"
#import "MSACSerializableObject.h"
#import "MSACService.h"
#import "MSACServiceAbstract.h"
#import "MSACWrapperLogger.h"
#import "MSACWrapperSdk.h"
#endif
@@ -1,12 +1,13 @@
// Copyright (c) Microsoft Corporation. All rights reserved. // Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. // Licensed under the MIT License.
#ifndef MS_ABSTRACT_LOG_H #ifndef MSAC_ABSTRACT_LOG_H
#define MS_ABSTRACT_LOG_H #define MSAC_ABSTRACT_LOG_H
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
@interface MSAbstractLog : NSObject NS_SWIFT_NAME(AbstractLog)
@interface MSACAbstractLog : NSObject
@end @end
@@ -0,0 +1,203 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#import <Foundation/Foundation.h>
#ifndef MSAC_APP_CENTER
#define MSAC_APP_CENTER
#if __has_include(<AppCenter/MSACConstants.h>)
#import <AppCenter/MSACConstants.h>
#else
#import "MSACConstants.h"
#endif
@class MSACWrapperSdk;
#if !TARGET_OS_TV
@class MSACCustomProperties;
#endif
NS_SWIFT_NAME(AppCenter)
@interface MSACAppCenter : NSObject
/**
* Returns the singleton instance of MSACAppCenter.
*/
+ (instancetype)sharedInstance;
/**
* Configure the SDK with an application secret.
*
* @param appSecret A unique and secret key used to identify the application.
*
* @discussion This may be called only once per application process lifetime.
*/
+ (void)configureWithAppSecret:(NSString *)appSecret NS_SWIFT_NAME(configure(withAppSecret:));
/**
* Configure the SDK.
*
* @discussion This may be called only once per application process lifetime.
*/
+ (void)configure;
/**
* Configure the SDK with an application secret and an array of services to start.
*
* @param appSecret A unique and secret key used to identify the application.
* @param services Array of services to start.
*
* @discussion This may be called only once per application process lifetime.
*/
+ (void)start:(NSString *)appSecret withServices:(NSArray<Class> *)services NS_SWIFT_NAME(start(withAppSecret:services:));
/**
* Start the SDK with an array of services.
*
* @param services Array of services to start.
*
* @discussion This may be called only once per application process lifetime.
*/
+ (void)startWithServices:(NSArray<Class> *)services NS_SWIFT_NAME(start(services:));
/**
* Start a service.
*
* @param service A service to start.
*
* @discussion This may be called only once per service per application process lifetime.
*/
+ (void)startService:(Class)service;
/**
* Configure the SDK with an array of services to start from a library. This will not start the service at application level, it will enable
* the service only for the library.
*
* @param services Array of services to start.
*/
+ (void)startFromLibraryWithServices:(NSArray<Class> *)services NS_SWIFT_NAME(startFromLibrary(services:));
/**
* The flag indicates whether the SDK has already been configured or not.
*/
@property(class, atomic, readonly, getter=isConfigured) BOOL configured;
/**
* The flag indicates whether app is running in App Center Test Cloud.
*/
@property(class, atomic, readonly, getter=isRunningInAppCenterTestCloud) BOOL runningInAppCenterTestCloud;
/**
* The flag indicates whether or not the SDK was enabled as a whole
*
* The state is persisted in the device's storage across application launches.
*/
@property(class, nonatomic, getter=isEnabled, setter=setEnabled:) BOOL enabled NS_SWIFT_NAME(enabled);
/**
* Flag indicating whether SDK can send network requests.
*
* The state is persisted in the device's storage across application launches.
*/
@property(class, nonatomic, getter=isNetworkRequestsAllowed, setter=setNetworkRequestsAllowed:)
BOOL networkRequestsAllowed NS_SWIFT_NAME(networkRequestsAllowed);
/**
* The SDK's log level.
*/
@property(class, nonatomic) MSACLogLevel logLevel;
/**
* Base URL to use for backend communication.
*/
@property(class, nonatomic, strong) NSString *logUrl;
/**
* Set log handler.
*/
@property(class, nonatomic) MSACLogHandler logHandler;
/**
* Set wrapper SDK information to use when building device properties. This is intended in case you are building a SDK that uses the App
* Center SDK under the hood, e.g. our Xamarin SDK or ReactNative SDk.
*/
@property(class, nonatomic, strong) MSACWrapperSdk *wrapperSdk;
#if !TARGET_OS_TV
/**
* Set the custom properties.
*
* @param customProperties Custom properties object.
*/
+ (void)setCustomProperties:(MSACCustomProperties *)customProperties;
#endif
/**
* Check whether the application delegate forwarder is enabled or not.
*
* @discussion The application delegate forwarder forwards messages that target your application delegate methods via swizzling to the SDK.
* It simplifies the SDK integration but may not be suitable to any situations. For
* instance it should be disabled if you or one of your third party SDK is doing message forwarding on the application delegate. Message
* forwarding usually implies the implementation of @see NSObject#forwardingTargetForSelector: or @see NSObject#forwardInvocation: methods.
* To disable the application delegate forwarder just add the `AppCenterAppDelegateForwarderEnabled` tag to your Info .plist file and set it
* to `0`. Then you will have to forward any application delegate needed by the SDK manually.
*/
@property(class, readonly, nonatomic, getter=isAppDelegateForwarderEnabled) BOOL appDelegateForwarderEnabled;
/**
* Unique installation identifier.
*
*/
@property(class, readonly, nonatomic) NSUUID *installId;
/**
* Detect if a debugger is attached to the app process. This is only invoked once on app startup and can not detect
* if the debugger is being attached during runtime!
*
*/
@property(class, readonly, nonatomic, getter=isDebuggerAttached) BOOL debuggerAttached;
/**
* Current version of AppCenter SDK.
*
*/
@property(class, readonly, nonatomic) NSString *sdkVersion;
/**
* Set the maximum size of the internal storage. This method must be called before App Center is started. This method is only intended for
* applications.
*
* @param sizeInBytes Maximum size of the internal storage in bytes. This will be rounded up to the nearest multiple of a SQLite page size
* (default is 4096 bytes). Values below 20,480 bytes (20 KiB) will be ignored.
*
* @param completionHandler Callback that is invoked when the database size has been set. The `BOOL` parameter is `YES` if changing the size
* is successful, and `NO` otherwise. This parameter can be null.
*
* @discussion This only sets the maximum size of the database, but App Center modules might store additional data.
* The value passed to this method is not persisted on disk. The default maximum database size is 10485760 bytes (10 MiB).
*/
+ (void)setMaxStorageSize:(long)sizeInBytes completionHandler:(void (^)(BOOL))completionHandler;
/**
* Set the user identifier.
*
* @discussion Set the user identifier for logs sent for the default target token when the secret passed in @c
* MSACAppCenter:start:withServices: contains "target={targetToken}".
*
* For App Center backend the user identifier maximum length is 256 characters.
*
* AppCenter must be configured or started before this API can be used.
*/
@property(class, nonatomic, strong) NSString *userId;
/**
* Set country code to use when building device properties.
*
* @see https://www.iso.org/obp/ui/#search for more information.
*/
@property(class, nonatomic, strong) NSString *countryCode;
@end
#endif
@@ -0,0 +1,41 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_APP_CENTER_ERRORS_H
#define MSAC_APP_CENTER_ERRORS_H
#import <Foundation/Foundation.h>
#define MSAC_APP_CENTER_BASE_DOMAIN @"com.Microsoft.AppCenter."
NS_ASSUME_NONNULL_BEGIN
#pragma mark - Domain
static NSString *const kMSACACErrorDomain = MSAC_APP_CENTER_BASE_DOMAIN @"ErrorDomain";
#pragma mark - General
// Error codes.
NS_ENUM(NSInteger){MSACACLogInvalidContainerErrorCode = 1, MSACACCanceledErrorCode = 2, MSACACDisabledErrorCode = 3};
// Error descriptions.
static NSString const *kMSACACLogInvalidContainerErrorDesc = @"Invalid log container.";
static NSString const *kMSACACCanceledErrorDesc = @"The operation was canceled.";
static NSString const *kMSACACDisabledErrorDesc = @"The service is disabled.";
#pragma mark - Connection
// Error codes.
NS_ENUM(NSInteger){MSACACConnectionPausedErrorCode = 100, MSACACConnectionHttpErrorCode = 101};
// Error descriptions.
static NSString const *kMSACACConnectionHttpErrorDesc = @"An HTTP error occured.";
static NSString const *kMSACACConnectionPausedErrorDesc = @"Canceled, connection paused with log deletion.";
// Error user info keys.
static NSString const *kMSACACConnectionHttpCodeErrorKey = @"MSConnectionHttpCode";
NS_ASSUME_NONNULL_END
#endif
@@ -0,0 +1,87 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_CHANNEL_GROUP_PROTOCOL_H
#define MSAC_CHANNEL_GROUP_PROTOCOL_H
#import <Foundation/Foundation.h>
#if __has_include(<AppCenter/MSACChannelProtocol.h>)
#import <AppCenter/MSACChannelProtocol.h>
#else
#import "MSACChannelProtocol.h"
#endif
NS_ASSUME_NONNULL_BEGIN
@class MSACChannelUnitConfiguration;
@protocol MSACIngestionProtocol;
@protocol MSACChannelUnitProtocol;
/**
* `MSACChannelGroupProtocol` represents a kind of channel that contains constituent MSACChannelUnit objects. When an operation from the
* `MSACChannelProtocol` is performed on the group, that operation should be propagated to its constituent MSACChannelUnit objects.
*/
NS_SWIFT_NAME(ChannelGroupProtocol)
@protocol MSACChannelGroupProtocol <MSACChannelProtocol>
/**
* Initialize a channel unit with the given configuration.
*
* @param configuration channel configuration.
*
* @return The added `MSACChannelUnitProtocol`. Use this object to enqueue logs.
*/
- (id<MSACChannelUnitProtocol>)addChannelUnitWithConfiguration:(MSACChannelUnitConfiguration *)configuration
NS_SWIFT_NAME(addChannelUnit(withConfiguration:));
/**
* Initialize a channel unit with the given configuration.
*
* @param configuration channel configuration.
* @param ingestion The alternative ingestion object
*
* @return The added `MSACChannelUnitProtocol`. Use this object to enqueue logs.
*/
- (id<MSACChannelUnitProtocol>)addChannelUnitWithConfiguration:(MSACChannelUnitConfiguration *)configuration
withIngestion:(nullable id<MSACIngestionProtocol>)ingestion
NS_SWIFT_NAME(addChannelUnit(_:ingestion:));
/**
* Change the base URL (schema + authority + port only) used to communicate with the backend.
*/
@property(nonatomic, strong) NSString *_Nullable logUrl;
/**
* Set the app secret.
*/
@property(nonatomic, strong) NSString *_Nullable appSecret;
/**
* Set the maximum size of the internal storage. This method must be called before App Center is started.
*
* @discussion The default maximum database size is 10485760 bytes (10 MiB).
*
* @param sizeInBytes Maximum size of the internal storage in bytes. This will be rounded up to the nearest multiple of a SQLite page size
* (default is 4096 bytes). Values below 24576 bytes (24 KiB) will be ignored.
* @param completionHandler Callback that is invoked when the database size has been set. The `BOOL` parameter is `YES` if changing the size
* is successful, and `NO` otherwise.
*/
- (void)setMaxStorageSize:(long)sizeInBytes
completionHandler:(nullable void (^)(BOOL))completionHandler NS_SWIFT_NAME(setMaxStorageSize(_:completionHandler:));
/**
* Return a channel unit instance for the given groupId.
*
* @param groupId The group ID for a channel unit.
*
* @return A channel unit instance or `nil`.
*/
- (nullable id<MSACChannelUnitProtocol>)channelUnitForGroupId:(NSString *)groupId;
@end
NS_ASSUME_NONNULL_END
#endif
@@ -0,0 +1,68 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_CHANNEL_PROTOCOL_H
#define MSAC_CHANNEL_PROTOCOL_H
#import <Foundation/Foundation.h>
#if __has_include(<AppCenter/MSACEnable.h>)
#import <AppCenter/MSACEnable.h>
#else
#import "MSACEnable.h"
#endif
NS_ASSUME_NONNULL_BEGIN
@protocol MSACChannelDelegate;
/**
* `MSACChannelProtocol` contains the essential operations of a channel. Channels are broadly responsible for enqueuing logs to be sent to
* the backend and/or stored on disk.
*/
NS_SWIFT_NAME(ChannelProtocol)
@protocol MSACChannelProtocol <NSObject, MSACEnable>
/**
* Add delegate.
*
* @param delegate delegate.
*/
- (void)addDelegate:(id<MSACChannelDelegate>)delegate;
/**
* Remove delegate.
*
* @param delegate delegate.
*/
- (void)removeDelegate:(id<MSACChannelDelegate>)delegate;
/**
* Pause operations, logs will be stored but not sent.
*
* @param identifyingObject Object used to identify the pause request.
*
* @discussion A paused channel doesn't forward logs to the ingestion. The identifying object used to pause the channel can be any unique
* object. The same identifying object must be used to call resume. For simplicity if the caller is the one owning the channel then @c self
* can be used as identifying object.
*
* @see resumeWithIdentifyingObject:
*/
- (void)pauseWithIdentifyingObject:(id<NSObject>)identifyingObject;
/**
* Resume operations, logs can be sent again.
*
* @param identifyingObject Object used to passed to the pause method.
*
* @discussion The channel only resume when all the outstanding identifying objects have been resumed.
*
* @see pauseWithIdentifyingObject:
*/
- (void)resumeWithIdentifyingObject:(id<NSObject>)identifyingObject;
@end
NS_ASSUME_NONNULL_END
#endif
@@ -0,0 +1,18 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_CONSTANTS_FLAGS_H
#define MSAC_CONSTANTS_FLAGS_H
#import <Foundation/Foundation.h>
typedef NS_OPTIONS(NSUInteger, MSACFlags) {
MSACFlagsNone = (0 << 0), // => 00000000
MSACFlagsNormal = (1 << 0), // => 00000001
MSACFlagsCritical = (1 << 1), // => 00000010
MSACFlagsPersistenceNormal DEPRECATED_MSG_ATTRIBUTE("please use MSACFlagsNormal") = MSACFlagsNormal,
MSACFlagsPersistenceCritical DEPRECATED_MSG_ATTRIBUTE("please use MSACFlagsCritical") = MSACFlagsCritical,
MSACFlagsDefault = MSACFlagsNormal
} NS_SWIFT_NAME(Flags);
#endif
@@ -0,0 +1,170 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#import <Foundation/Foundation.h>
/**
* Log Levels
*/
typedef NS_ENUM(NSUInteger, MSACLogLevel) {
/**
* Logging will be very chatty
*/
MSACLogLevelVerbose = 2,
/**
* Debug information will be logged
*/
MSACLogLevelDebug = 3,
/**
* Information will be logged
*/
MSACLogLevelInfo = 4,
/**
* Errors and warnings will be logged
*/
MSACLogLevelWarning = 5,
/**
* Errors will be logged
*/
MSACLogLevelError = 6,
/**
* Only critical errors will be logged
*/
MSACLogLevelAssert = 7,
/**
* Logging is disabled
*/
MSACLogLevelNone = 99
} NS_SWIFT_NAME(LogLevel);
typedef NSString * (^MSACLogMessageProvider)(void)NS_SWIFT_NAME(LogMessageProvider);
typedef void (^MSACLogHandler)(MSACLogMessageProvider messageProvider, MSACLogLevel logLevel, NSString *tag, const char *file,
const char *function, uint line) NS_SWIFT_NAME(LogHandler);
/**
* Channel priorities, check the kMSACPriorityCount if you add a new value.
* The order matters here! Values NEED to range from low priority to high priority.
*/
typedef NS_ENUM(NSInteger, MSACPriority) { MSACPriorityBackground, MSACPriorityDefault, MSACPriorityHigh } NS_SWIFT_NAME(Priority);
static short const kMSACPriorityCount = MSACPriorityHigh + 1;
/**
* The priority by which the modules are initialized.
* MSACPriorityMax is reserved for only 1 module and this needs to be Crashes.
* Crashes needs to be initialized first to catch crashes in our other SDK Modules (which will hopefully never happen) and to avoid losing
* any log at crash time.
*/
typedef NS_ENUM(NSInteger, MSACInitializationPriority) {
MSACInitializationPriorityDefault = 500,
MSACInitializationPriorityHigh = 750,
MSACInitializationPriorityMax = 999
} NS_SWIFT_NAME(InitializationPriority);
/**
* Enum with the different HTTP status codes.
*/
typedef NS_ENUM(NSInteger, MSACHTTPCodesNo) {
// Invalid
MSACHTTPCodesNo0XXInvalidUnknown = 0,
// Informational
MSACHTTPCodesNo1XXInformationalUnknown = 1,
MSACHTTPCodesNo100Continue = 100,
MSACHTTPCodesNo101SwitchingProtocols = 101,
MSACHTTPCodesNo102Processing = 102,
// Success
MSACHTTPCodesNo2XXSuccessUnknown = 2,
MSACHTTPCodesNo200OK = 200,
MSACHTTPCodesNo201Created = 201,
MSACHTTPCodesNo202Accepted = 202,
MSACHTTPCodesNo203NonAuthoritativeInformation = 203,
MSACHTTPCodesNo204NoContent = 204,
MSACHTTPCodesNo205ResetContent = 205,
MSACHTTPCodesNo206PartialContent = 206,
MSACHTTPCodesNo207MultiStatus = 207,
MSACHTTPCodesNo208AlreadyReported = 208,
MSACHTTPCodesNo209IMUsed = 209,
// Redirection
MSACHTTPCodesNo3XXSuccessUnknown = 3,
MSACHTTPCodesNo300MultipleChoices = 300,
MSACHTTPCodesNo301MovedPermanently = 301,
MSACHTTPCodesNo302Found = 302,
MSACHTTPCodesNo303SeeOther = 303,
MSACHTTPCodesNo304NotModified = 304,
MSACHTTPCodesNo305UseProxy = 305,
MSACHTTPCodesNo306SwitchProxy = 306,
MSACHTTPCodesNo307TemporaryRedirect = 307,
MSACHTTPCodesNo308PermanentRedirect = 308,
// Client error
MSACHTTPCodesNo4XXSuccessUnknown = 4,
MSACHTTPCodesNo400BadRequest = 400,
MSACHTTPCodesNo401Unauthorised = 401,
MSACHTTPCodesNo402PaymentRequired = 402,
MSACHTTPCodesNo403Forbidden = 403,
MSACHTTPCodesNo404NotFound = 404,
MSACHTTPCodesNo405MethodNotAllowed = 405,
MSACHTTPCodesNo406NotAcceptable = 406,
MSACHTTPCodesNo407ProxyAuthenticationRequired = 407,
MSACHTTPCodesNo408RequestTimeout = 408,
MSACHTTPCodesNo409Conflict = 409,
MSACHTTPCodesNo410Gone = 410,
MSACHTTPCodesNo411LengthRequired = 411,
MSACHTTPCodesNo412PreconditionFailed = 412,
MSACHTTPCodesNo413RequestEntityTooLarge = 413,
MSACHTTPCodesNo414RequestURITooLong = 414,
MSACHTTPCodesNo415UnsupportedMediaType = 415,
MSACHTTPCodesNo416RequestedRangeNotSatisfiable = 416,
MSACHTTPCodesNo417ExpectationFailed = 417,
MSACHTTPCodesNo418IamATeapot = 418,
MSACHTTPCodesNo419AuthenticationTimeout = 419,
MSACHTTPCodesNo420MethodFailureSpringFramework = 420,
MSACHTTPCodesNo420EnhanceYourCalmTwitter = 4200,
MSACHTTPCodesNo422UnprocessableEntity = 422,
MSACHTTPCodesNo423Locked = 423,
MSACHTTPCodesNo424FailedDependency = 424,
MSACHTTPCodesNo424MethodFailureWebDaw = 4240,
MSACHTTPCodesNo425UnorderedCollection = 425,
MSACHTTPCodesNo426UpgradeRequired = 426,
MSACHTTPCodesNo428PreconditionRequired = 428,
MSACHTTPCodesNo429TooManyRequests = 429,
MSACHTTPCodesNo431RequestHeaderFieldsTooLarge = 431,
MSACHTTPCodesNo444NoResponseNginx = 444,
MSACHTTPCodesNo449RetryWithMicrosoft = 449,
MSACHTTPCodesNo450BlockedByWindowsParentalControls = 450,
MSACHTTPCodesNo451RedirectMicrosoft = 451,
MSACHTTPCodesNo451UnavailableForLegalReasons = 4510,
MSACHTTPCodesNo494RequestHeaderTooLargeNginx = 494,
MSACHTTPCodesNo495CertErrorNginx = 495,
MSACHTTPCodesNo496NoCertNginx = 496,
MSACHTTPCodesNo497HTTPToHTTPSNginx = 497,
MSACHTTPCodesNo499ClientClosedRequestNginx = 499,
// Server error
MSACHTTPCodesNo5XXSuccessUnknown = 5,
MSACHTTPCodesNo500InternalServerError = 500,
MSACHTTPCodesNo501NotImplemented = 501,
MSACHTTPCodesNo502BadGateway = 502,
MSACHTTPCodesNo503ServiceUnavailable = 503,
MSACHTTPCodesNo504GatewayTimeout = 504,
MSACHTTPCodesNo505HTTPVersionNotSupported = 505,
MSACHTTPCodesNo506VariantAlsoNegotiates = 506,
MSACHTTPCodesNo507InsufficientStorage = 507,
MSACHTTPCodesNo508LoopDetected = 508,
MSACHTTPCodesNo509BandwidthLimitExceeded = 509,
MSACHTTPCodesNo510NotExtended = 510,
MSACHTTPCodesNo511NetworkAuthenticationRequired = 511,
MSACHTTPCodesNo522ConnectionTimedOut = 522,
MSACHTTPCodesNo598NetworkReadTimeoutErrorUnknown = 598,
MSACHTTPCodesNo599NetworkConnectTimeoutErrorUnknown = 599
} NS_SWIFT_NAME(HTTPCodesNo);
@@ -0,0 +1,71 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_CUSTOM_PROPERTIES_H
#define MSAC_CUSTOM_PROPERTIES_H
#import <Foundation/Foundation.h>
/**
* Custom properties builder.
* Collects multiple properties to send in one log.
*/
NS_SWIFT_NAME(CustomProperties)
@interface MSACCustomProperties : NSObject
/**
* Set the specified property value with the specified key.
* If the properties previously contained a property for the key, the old value is replaced.
*
* @param key Key with which the specified value is to be set.
* @param value Value to be set with the specified key.
*
* @return This instance.
*/
- (instancetype)setString:(NSString *)value forKey:(NSString *)key NS_SWIFT_NAME(set(_:forKey:));
/**
* Set the specified property value with the specified key.
* If the properties previously contained a property for the key, the old value is replaced.
*
* @param key Key with which the specified value is to be set.
* @param value Value to be set with the specified key.
*
* @return This instance.
*/
- (instancetype)setNumber:(NSNumber *)value forKey:(NSString *)key NS_SWIFT_NAME(set(_:forKey:));
/**
* Set the specified property value with the specified key.
* If the properties previously contained a property for the key, the old value is replaced.
*
* @param key Key with which the specified value is to be set.
* @param value Value to be set with the specified key.
*
* @return This instance.
*/
- (instancetype)setBool:(BOOL)value forKey:(NSString *)key NS_SWIFT_NAME(set(_:forKey:));
/**
* Set the specified property value with the specified key.
* If the properties previously contained a property for the key, the old value is replaced.
*
* @param key Key with which the specified value is to be set.
* @param value Value to be set with the specified key.
*
* @return This instance.
*/
- (instancetype)setDate:(NSDate *)value forKey:(NSString *)key NS_SWIFT_NAME(set(_:forKey:));
/**
* Clear the property for the specified key.
*
* @param key Key whose mapping is to be cleared.
*
* @return This instance.
*/
- (instancetype)clearPropertyForKey:(NSString *)key NS_SWIFT_NAME(clearProperty(forKey:));
@end
#endif
@@ -0,0 +1,101 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_DEVICE_H
#define MSAC_DEVICE_H
#import <Foundation/Foundation.h>
#if __has_include(<AppCenter/MSACWrapperSdk.h>)
#import <AppCenter/MSACWrapperSdk.h>
#else
#import "MSACWrapperSdk.h"
#endif
NS_SWIFT_NAME(Device)
@interface MSACDevice : MSACWrapperSdk
/*
* Name of the SDK. Consists of the name of the SDK and the platform, e.g. "appcenter.ios", "appcenter.android"
*/
@property(nonatomic, copy, readonly) NSString *sdkName;
/*
* Version of the SDK in semver format, e.g. "1.2.0" or "0.12.3-alpha.1".
*/
@property(nonatomic, copy, readonly) NSString *sdkVersion;
/*
* Device model (example: iPad2,3).
*/
@property(nonatomic, copy, readonly) NSString *model;
/*
* Device manufacturer (example: HTC).
*/
@property(nonatomic, copy, readonly) NSString *oemName;
/*
* OS name (example: iOS).
*/
@property(nonatomic, copy, readonly) NSString *osName;
/*
* OS version (example: 9.3.0).
*/
@property(nonatomic, copy, readonly) NSString *osVersion;
/*
* OS build code (example: LMY47X). [optional]
*/
@property(nonatomic, copy, readonly) NSString *osBuild;
/*
* API level when applicable like in Android (example: 15). [optional]
*/
@property(nonatomic, copy, readonly) NSNumber *osApiLevel;
/*
* Language code (example: en_US).
*/
@property(nonatomic, copy, readonly) NSString *locale;
/*
* The offset in minutes from UTC for the device time zone, including daylight savings time.
*/
@property(nonatomic, readonly, strong) NSNumber *timeZoneOffset;
/*
* Screen size of the device in pixels (example: 640x480).
*/
@property(nonatomic, copy, readonly) NSString *screenSize;
/*
* Application version name, e.g. 1.1.0
*/
@property(nonatomic, copy, readonly) NSString *appVersion;
/*
* Carrier name (for mobile devices). [optional]
*/
@property(nonatomic, copy, readonly) NSString *carrierName;
/*
* Carrier country code (for mobile devices). [optional]
*/
@property(nonatomic, copy, readonly) NSString *carrierCountry;
/*
* The app's build number, e.g. 42.
*/
@property(nonatomic, copy, readonly) NSString *appBuild;
/*
* The bundle identifier, package identifier, or namespace, depending on what the individual plattforms use, .e.g com.microsoft.example.
* [optional]
*/
@property(nonatomic, copy, readonly) NSString *appNamespace;
@end
#endif
@@ -0,0 +1,27 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_ENABLE_H
#define MSAC_ENABLE_H
#import <Foundation/Foundation.h>
/**
* Protocol to define an instance that can be enabled/disabled.
*/
NS_SWIFT_NAME(Enable)
@protocol MSACEnable <NSObject>
@required
/**
* Enable/disable this instance and delete data on disabled state.
*
* @param isEnabled A boolean value set to YES to enable the instance or NO to disable it.
* @param deleteData A boolean value set to YES to delete data or NO to keep it.
*/
- (void)setEnabled:(BOOL)isEnabled andDeleteDataOnDisabled:(BOOL)deleteData NS_SWIFT_NAME(setEnabled(_:deleteDataOnDisabled:));
@end
#endif
@@ -0,0 +1,74 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_LOG_H
#define MSAC_LOG_H
#import <Foundation/Foundation.h>
@class MSACDevice;
NS_SWIFT_NAME(Log)
@protocol MSACLog <NSObject>
/**
* Log type.
*/
@property(nonatomic, copy) NSString *type;
/**
* Log timestamp.
*/
@property(nonatomic, strong) NSDate *timestamp;
/**
* A session identifier is used to correlate logs together. A session is an abstract concept in the API and is not necessarily an analytics
* session, it can be used to only track crashes.
*/
@property(nonatomic, copy) NSString *sid;
/**
* Optional distribution group ID value.
*/
@property(nonatomic, copy) NSString *distributionGroupId;
/**
* Optional user identifier.
*/
@property(nonatomic, copy) NSString *userId;
/**
* Device properties associated to this log.
*/
@property(nonatomic, strong) MSACDevice *device;
/**
* Transient object tag. For example, a log can be tagged with a transmission target. We do this currently to prevent properties being
* applied retroactively to previous logs by comparing their tags.
*/
@property(nonatomic, strong) NSObject *tag;
/**
* Checks if the object's values are valid.
*
* @return YES, if the object is valid.
*/
- (BOOL)isValid;
/**
* Adds a transmission target token that this log should be sent to.
*
* @param token The transmission target token.
*/
- (void)addTransmissionTargetToken:(NSString *)token;
/**
* Gets all transmission target tokens that this log should be sent to.
*
* @returns Collection of transmission target tokens that this log should be sent to.
*/
- (NSSet *)transmissionTargetTokens;
@end
#endif
@@ -0,0 +1,25 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_LOG_WITH_PROPERTIES_H
#define MSAC_LOG_WITH_PROPERTIES_H
#import <Foundation/Foundation.h>
#if __has_include(<AppCenter/MSACAbstractLog.h>)
#import <AppCenter/MSACAbstractLog.h>
#else
#import "MSACAbstractLog.h"
#endif
NS_SWIFT_NAME(LogWithProperties)
@interface MSACLogWithProperties : MSACAbstractLog
/**
* Additional key/value pair parameters. [optional]
*/
@property(nonatomic, strong) NSDictionary<NSString *, NSString *> *properties;
@end
#endif
@@ -0,0 +1,54 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#import <Foundation/Foundation.h>
#ifndef MSAC_LOGGER
#define MSAC_LOGGER
#if __has_include(<AppCenter/MSACConstants.h>)
#import <AppCenter/MSACConstants.h>
#else
#import "MSACConstants.h"
#endif
#define MSACLog(_level, _tag, _message) \
[MSACLogger logMessage:_message level:_level tag:_tag file:__FILE__ function:__PRETTY_FUNCTION__ line:__LINE__]
#define MSACLogAssert(tag, format, ...) \
MSACLog(MSACLogLevelAssert, tag, (^{ \
return [NSString stringWithFormat:(format), ##__VA_ARGS__]; \
}))
#define MSACLogError(tag, format, ...) \
MSACLog(MSACLogLevelError, tag, (^{ \
return [NSString stringWithFormat:(format), ##__VA_ARGS__]; \
}))
#define MSACLogWarning(tag, format, ...) \
MSACLog(MSACLogLevelWarning, tag, (^{ \
return [NSString stringWithFormat:(format), ##__VA_ARGS__]; \
}))
#define MSACLogInfo(tag, format, ...) \
MSACLog(MSACLogLevelInfo, tag, (^{ \
return [NSString stringWithFormat:(format), ##__VA_ARGS__]; \
}))
#define MSACLogDebug(tag, format, ...) \
MSACLog(MSACLogLevelDebug, tag, (^{ \
return [NSString stringWithFormat:(format), ##__VA_ARGS__]; \
}))
#define MSACLogVerbose(tag, format, ...) \
MSACLog(MSACLogLevelVerbose, tag, (^{ \
return [NSString stringWithFormat:(format), ##__VA_ARGS__]; \
}))
NS_SWIFT_NAME(Logger)
@interface MSACLogger : NSObject
+ (void)logMessage:(MSACLogMessageProvider)messageProvider
level:(MSACLogLevel)loglevel
tag:(NSString *)tag
file:(const char *)file
function:(const char *)function
line:(uint)line;
@end
#endif
@@ -0,0 +1,19 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#import <Foundation/Foundation.h>
#ifndef SERIALIZABLE_OBJECT_H
#define SERIALIZABLE_OBJECT_H
@protocol MSACSerializableObject <NSCoding>
/**
* Serialize this object to a dictionary.
*
* @return A dictionary representing this object.
*/
- (NSMutableDictionary *)serializeToDictionary;
@end
#endif
@@ -0,0 +1,23 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_SERVICE_H
#define MSAC_SERVICE_H
#import <Foundation/Foundation.h>
/**
* Protocol declaring service logic.
*/
NS_SWIFT_NAME(Service)
@protocol MSACService <NSObject>
/**
* Indicates whether this service is enabled.
* The state is persisted in the device's storage across application launches.
*/
@property(class, nonatomic, getter=isEnabled, setter=setEnabled:) BOOL enabled NS_SWIFT_NAME(enabled);
@end
#endif
@@ -1,20 +1,25 @@
// Copyright (c) Microsoft Corporation. All rights reserved. // Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. // Licensed under the MIT License.
#ifndef MS_SERVICE_ABSTRACT_H #ifndef MSAC_SERVICE_ABSTRACT_H
#define MS_SERVICE_ABSTRACT_H #define MSAC_SERVICE_ABSTRACT_H
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
#import "MSService.h" #if __has_include(<AppCenter/MSACService.h>)
#import <AppCenter/MSACService.h>
#else
#import "MSACService.h"
#endif
@protocol MSChannelGroupProtocol; @protocol MSACChannelGroupProtocol;
/** /**
* Abstraction of services common logic. * Abstraction of services common logic.
* This class is intended to be subclassed only not instantiated directly. * This class is intended to be subclassed only not instantiated directly.
*/ */
@interface MSServiceAbstract : NSObject <MSService> NS_SWIFT_NAME(ServiceAbstract)
@interface MSACServiceAbstract : NSObject <MSACService>
/** /**
* The flag indicates whether the service is started from application or not. * The flag indicates whether the service is started from application or not.
@@ -29,7 +34,7 @@
* @param token default transmission target token for this service. * @param token default transmission target token for this service.
* @param fromApplication indicates whether the service started from an application or not. * @param fromApplication indicates whether the service started from an application or not.
*/ */
- (void)startWithChannelGroup:(id<MSChannelGroupProtocol>)channelGroup - (void)startWithChannelGroup:(id<MSACChannelGroupProtocol>)channelGroup
appSecret:(NSString *)appSecret appSecret:(NSString *)appSecret
transmissionTargetToken:(NSString *)token transmissionTargetToken:(NSString *)token
fromApplication:(BOOL)fromApplication; fromApplication:(BOOL)fromApplication;
@@ -44,11 +49,9 @@
- (void)updateConfigurationWithAppSecret:(NSString *)appSecret transmissionTargetToken:(NSString *)token; - (void)updateConfigurationWithAppSecret:(NSString *)appSecret transmissionTargetToken:(NSString *)token;
/** /**
* Checks if the service needs the application secret. * The flag indicate whether the service needs the application secret or not.
*
* @return `YES` if the application secret is required, `NO` otherwise.
*/ */
- (BOOL)isAppSecretRequired; @property(atomic, readonly) BOOL isAppSecretRequired;
@end @end
@@ -0,0 +1,21 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#import <Foundation/Foundation.h>
#if __has_include(<AppCenter/MSACConstants.h>)
#import <AppCenter/MSACConstants.h>
#else
#import "MSACConstants.h"
#endif
/**
* This is a utility for producing App Center style log messages. It is only intended for use by App Center services and wrapper SDKs of App
* Center.
*/
NS_SWIFT_NAME(WrapperLogger)
@interface MSACWrapperLogger : NSObject
+ (void)MSACWrapperLog:(MSACLogMessageProvider)message tag:(NSString *)tag level:(MSACLogLevel)level;
@end
@@ -0,0 +1,60 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_WRAPPER_SDK_H
#define MSAC_WRAPPER_SDK_H
#import <Foundation/Foundation.h>
NS_SWIFT_NAME(WrapperSdk)
@interface MSACWrapperSdk : NSObject
/*
* Version of the wrapper SDK. When the SDK is embedding another base SDK (for example Xamarin.Android wraps Android), the Xamarin specific
* version is populated into this field while sdkVersion refers to the original Android SDK. [optional]
*/
@property(nonatomic, copy, readonly) NSString *wrapperSdkVersion;
/*
* Name of the wrapper SDK (examples: Xamarin, Cordova). [optional]
*/
@property(nonatomic, copy, readonly) NSString *wrapperSdkName;
/*
* Version of the wrapper technology framework (Xamarin runtime version or ReactNative or Cordova etc...). [optional]
*/
@property(nonatomic, copy, readonly) NSString *wrapperRuntimeVersion;
/*
* Label that is used to identify application code 'version' released via Live Update beacon running on device.
*/
@property(nonatomic, copy, readonly) NSString *liveUpdateReleaseLabel;
/*
* Identifier of environment that current application release belongs to, deployment key then maps to environment like Production, Staging.
*/
@property(nonatomic, copy, readonly) NSString *liveUpdateDeploymentKey;
/*
* Hash of all files (ReactNative or Cordova) deployed to device via LiveUpdate beacon. Helps identify the Release version on device or need
* to download updates in future
*/
@property(nonatomic, copy, readonly) NSString *liveUpdatePackageHash;
- (instancetype)initWithWrapperSdkVersion:(NSString *)wrapperSdkVersion
wrapperSdkName:(NSString *)wrapperSdkName
wrapperRuntimeVersion:(NSString *)wrapperRuntimeVersion
liveUpdateReleaseLabel:(NSString *)liveUpdateReleaseLabel
liveUpdateDeploymentKey:(NSString *)liveUpdateDeploymentKey
liveUpdatePackageHash:(NSString *)liveUpdatePackageHash;
/**
* Checks if the object's values are valid.
*
* @return YES, if the object is valid.
*/
- (BOOL)isValid;
@end
#endif
@@ -0,0 +1,13 @@
framework module AppCenter {
umbrella header "AppCenter.h"
export *
module * { export * }
link framework "Foundation"
link framework "CoreTelephony"
link framework "SystemConfiguration"
link framework "UIKit"
link "sqlite3"
link "z"
}
@@ -0,0 +1,114 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#import <Foundation/Foundation.h>
#import "MSACConstants+Flags.h"
@protocol MSACChannelUnitProtocol;
@protocol MSACChannelGroupProtocol;
@protocol MSACChannelProtocol;
@protocol MSACLog;
NS_ASSUME_NONNULL_BEGIN
@protocol MSACChannelDelegate <NSObject>
@optional
/**
* A callback that is called when a channel unit is added to the channel group.
*
* @param channelGroup The channel group.
* @param channel The newly added channel.
*/
- (void)channelGroup:(id<MSACChannelGroupProtocol>)channelGroup didAddChannelUnit:(id<MSACChannelUnitProtocol>)channel;
/**
* A callback that is called when a log is just enqueued. Delegates may want to prepare the log a little more before further processing.
*
* @param log The log to prepare.
*/
- (void)channel:(id<MSACChannelProtocol>)channel prepareLog:(id<MSACLog>)log;
/**
* A callback that is called after a log is definitely prepared.
*
* @param log The log.
* @param internalId An internal Id to keep track of logs.
* @param flags Options for the log.
*/
- (void)channel:(id<MSACChannelProtocol>)channel didPrepareLog:(id<MSACLog>)log internalId:(NSString *)internalId flags:(MSACFlags)flags;
/**
* A callback that is called after a log completed the enqueueing process whether it was successful or not.
*
* @param log The log.
* @param internalId An internal Id to keep track of logs.
*/
- (void)channel:(id<MSACChannelProtocol>)channel didCompleteEnqueueingLog:(id<MSACLog>)log internalId:(NSString *)internalId;
/**
* Callback method that will be called before each log will be send to the server.
*
* @param channel The channel object.
* @param log The log to be sent.
*/
- (void)channel:(id<MSACChannelProtocol>)channel willSendLog:(id<MSACLog>)log;
/**
* Callback method that will be called in case the SDK was able to send a log.
*
* @param channel The channel object.
* @param log The log to be sent.
*/
- (void)channel:(id<MSACChannelProtocol>)channel didSucceedSendingLog:(id<MSACLog>)log;
/**
* Callback method that will be called in case the SDK was unable to send a log.
*
* @param channel The channel object.
* @param log The log to be sent.
* @param error The error that occured.
*/
- (void)channel:(id<MSACChannelProtocol>)channel didFailSendingLog:(id<MSACLog>)log withError:(nullable NSError *)error;
/**
* A callback that is called when setEnabled has been invoked.
*
* @param channel The channel.
* @param isEnabled The boolean that indicates enabled.
* @param deletedData The boolean that indicates deleting data on disabled.
*/
- (void)channel:(id<MSACChannelProtocol>)channel didSetEnabled:(BOOL)isEnabled andDeleteDataOnDisabled:(BOOL)deletedData;
/**
* A callback that is called when pause has been invoked.
*
* @param channel The channel.
* @param identifyingObject The identifying object used to pause the channel.
*/
- (void)channel:(id<MSACChannelProtocol>)channel didPauseWithIdentifyingObject:(id<NSObject>)identifyingObject;
/**
* A callback that is called when resume has been invoked.
*
* @param channel The channel.
* @param identifyingObject The identifying object used to resume the channel.
*/
- (void)channel:(id<MSACChannelProtocol>)channel didResumeWithIdentifyingObject:(id<NSObject>)identifyingObject;
/**
* Callback method that will determine if a log should be filtered out from the usual processing pipeline. If any delegate returns true, the
* log is filtered.
*
* @param channelUnit The channel unit that is going to send the log.
* @param log The log to be filtered or not.
*
* @return `true` if the log should be filtered out.
*/
- (BOOL)channelUnit:(id<MSACChannelUnitProtocol>)channelUnit shouldFilterLog:(id<MSACLog>)log;
@end
NS_ASSUME_NONNULL_END
@@ -0,0 +1,417 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>files</key>
<dict>
<key>Headers/AppCenter.h</key>
<data>
w9sW6K7DVhGfORLCjGXijaR25m0=
</data>
<key>Headers/MSACAbstractLog.h</key>
<data>
+Ikfy/fTOpqwPZM3Fpii3cpsx8Y=
</data>
<key>Headers/MSACAppCenter.h</key>
<data>
2cUgfgx3odOGivdk+n6FXq94KgU=
</data>
<key>Headers/MSACAppCenterErrors.h</key>
<data>
x7h4qpHD4GI3jrJ3F7n4UXAANsk=
</data>
<key>Headers/MSACChannelGroupProtocol.h</key>
<data>
jyWCHN4PSygLVy0IM5565DvDQAc=
</data>
<key>Headers/MSACChannelProtocol.h</key>
<data>
Y1rKi/TsirTR0MGBf1rIO/TTG0A=
</data>
<key>Headers/MSACConstants+Flags.h</key>
<data>
GK1gUSyIjWdv7KBP68wNxjxaH+E=
</data>
<key>Headers/MSACConstants.h</key>
<data>
d9HwKA0/VH3+pLRj1Pd49mqn2gI=
</data>
<key>Headers/MSACCustomProperties.h</key>
<data>
m7A9hEgL3d0gV4SyKmXJYRtwqoQ=
</data>
<key>Headers/MSACDevice.h</key>
<data>
suv4Wkt36Nkscy7jX2SSYzrkLRs=
</data>
<key>Headers/MSACEnable.h</key>
<data>
3DnplEFkD1LImYNk+84TqcQvBho=
</data>
<key>Headers/MSACLog.h</key>
<data>
1/7NIwYuYLGHIVMZps8b6/zOpJg=
</data>
<key>Headers/MSACLogWithProperties.h</key>
<data>
I4y13KVE36pyXv85mc5OWlCjplE=
</data>
<key>Headers/MSACLogger.h</key>
<data>
CaYHmB3+psy5/txfMvd2+bWGJkc=
</data>
<key>Headers/MSACSerializableObject.h</key>
<data>
or5nqKvOQVn2ZieUCmYK6fIZkWY=
</data>
<key>Headers/MSACService.h</key>
<data>
lz5atiMe+oTdu9e6g74KPC0CjOs=
</data>
<key>Headers/MSACServiceAbstract.h</key>
<data>
rBHatSAJK78PLgsMIpFqkby4tgA=
</data>
<key>Headers/MSACWrapperLogger.h</key>
<data>
qBVuNkF12BZYytRhCKwZ7zkiKhc=
</data>
<key>Headers/MSACWrapperSdk.h</key>
<data>
W9sdhEGnIGk/aFHS3gWwQ6FxUfI=
</data>
<key>Info.plist</key>
<data>
vQsDzcm1lLcpUNIaE5cw31rdoVk=
</data>
<key>Modules/module.modulemap</key>
<data>
go9b9XYQJIVcGlS/K5PS+8A+0dI=
</data>
<key>PrivateHeaders/MSACChannelDelegate.h</key>
<data>
Msff4BZ/b1IjaYeKTDBHtNtT7wI=
</data>
</dict>
<key>files2</key>
<dict>
<key>Headers/AppCenter.h</key>
<dict>
<key>hash</key>
<data>
w9sW6K7DVhGfORLCjGXijaR25m0=
</data>
<key>hash2</key>
<data>
e9qe35Ew1pz0RMBfwa2Jv+3188p8iTwwktkIgCa/ztg=
</data>
</dict>
<key>Headers/MSACAbstractLog.h</key>
<dict>
<key>hash</key>
<data>
+Ikfy/fTOpqwPZM3Fpii3cpsx8Y=
</data>
<key>hash2</key>
<data>
7hsXFv3UkGsJLcc3eh2pMUrGbGYP2hCUC854z05SzNQ=
</data>
</dict>
<key>Headers/MSACAppCenter.h</key>
<dict>
<key>hash</key>
<data>
2cUgfgx3odOGivdk+n6FXq94KgU=
</data>
<key>hash2</key>
<data>
C10z0NrhN4J4qdWbypOdjlQ8QLlq4tvPMP21geOS4vI=
</data>
</dict>
<key>Headers/MSACAppCenterErrors.h</key>
<dict>
<key>hash</key>
<data>
x7h4qpHD4GI3jrJ3F7n4UXAANsk=
</data>
<key>hash2</key>
<data>
OcNwIIu4yFxG62mZtiABP3/9DoN9tj1fL/7nSvF8u8s=
</data>
</dict>
<key>Headers/MSACChannelGroupProtocol.h</key>
<dict>
<key>hash</key>
<data>
jyWCHN4PSygLVy0IM5565DvDQAc=
</data>
<key>hash2</key>
<data>
d36rCjxsURqDkFv+g5BwWNybz5Zksc9B91gqArFcJbk=
</data>
</dict>
<key>Headers/MSACChannelProtocol.h</key>
<dict>
<key>hash</key>
<data>
Y1rKi/TsirTR0MGBf1rIO/TTG0A=
</data>
<key>hash2</key>
<data>
fI1fLkJvo9SXh2bAUWKIYlretRCOoGWJwlyvqMfQZNc=
</data>
</dict>
<key>Headers/MSACConstants+Flags.h</key>
<dict>
<key>hash</key>
<data>
GK1gUSyIjWdv7KBP68wNxjxaH+E=
</data>
<key>hash2</key>
<data>
UDnw7GyNXzip13MvAvNKQQsWIUgU296uJHjPEkReCY8=
</data>
</dict>
<key>Headers/MSACConstants.h</key>
<dict>
<key>hash</key>
<data>
d9HwKA0/VH3+pLRj1Pd49mqn2gI=
</data>
<key>hash2</key>
<data>
xx69UfYa0qw6aSDuVsUAqd/1+t90QCPkQUae+elZwZ0=
</data>
</dict>
<key>Headers/MSACCustomProperties.h</key>
<dict>
<key>hash</key>
<data>
m7A9hEgL3d0gV4SyKmXJYRtwqoQ=
</data>
<key>hash2</key>
<data>
FveTXq+kqUdHHlSdLAoQisgT+95bzAuXTrTOQG/b/P8=
</data>
</dict>
<key>Headers/MSACDevice.h</key>
<dict>
<key>hash</key>
<data>
suv4Wkt36Nkscy7jX2SSYzrkLRs=
</data>
<key>hash2</key>
<data>
i3TVX2C+DfcRKn2HTBaydWBYHjryX2Cy/eJJxjTFiT8=
</data>
</dict>
<key>Headers/MSACEnable.h</key>
<dict>
<key>hash</key>
<data>
3DnplEFkD1LImYNk+84TqcQvBho=
</data>
<key>hash2</key>
<data>
XrDKc7bXZaW8JW4NMItSBrHLR6a+LRG1JSLXZ0U0NsI=
</data>
</dict>
<key>Headers/MSACLog.h</key>
<dict>
<key>hash</key>
<data>
1/7NIwYuYLGHIVMZps8b6/zOpJg=
</data>
<key>hash2</key>
<data>
3GF6xCTfpLDmOqKnacEOEDr5mkM/llKm0IoIEyISZKA=
</data>
</dict>
<key>Headers/MSACLogWithProperties.h</key>
<dict>
<key>hash</key>
<data>
I4y13KVE36pyXv85mc5OWlCjplE=
</data>
<key>hash2</key>
<data>
WIrz7Xsi04AboAmZ5dA3d3t8D/8PomKLwsp7oorznVM=
</data>
</dict>
<key>Headers/MSACLogger.h</key>
<dict>
<key>hash</key>
<data>
CaYHmB3+psy5/txfMvd2+bWGJkc=
</data>
<key>hash2</key>
<data>
GipSaz+D+Z5eWauQP+10U8xvbAnxPeIRD4HTvn0F5DQ=
</data>
</dict>
<key>Headers/MSACSerializableObject.h</key>
<dict>
<key>hash</key>
<data>
or5nqKvOQVn2ZieUCmYK6fIZkWY=
</data>
<key>hash2</key>
<data>
TdCeoNla8kUqc5HPES6WNwi7ycy+4vRr3HGDipEXNVE=
</data>
</dict>
<key>Headers/MSACService.h</key>
<dict>
<key>hash</key>
<data>
lz5atiMe+oTdu9e6g74KPC0CjOs=
</data>
<key>hash2</key>
<data>
aiO/PWAQDwhbPW1HDGqNM0kn4xYSwqPmdpmcTgpW/CE=
</data>
</dict>
<key>Headers/MSACServiceAbstract.h</key>
<dict>
<key>hash</key>
<data>
rBHatSAJK78PLgsMIpFqkby4tgA=
</data>
<key>hash2</key>
<data>
vi9/mVDQylipTtHNfUe9r4GXjlc2bEnKFV8wmN/IXaE=
</data>
</dict>
<key>Headers/MSACWrapperLogger.h</key>
<dict>
<key>hash</key>
<data>
qBVuNkF12BZYytRhCKwZ7zkiKhc=
</data>
<key>hash2</key>
<data>
h2VHxvALAogCMocFQMUjmOkhCm+qkJwpGTzxwdxTdwo=
</data>
</dict>
<key>Headers/MSACWrapperSdk.h</key>
<dict>
<key>hash</key>
<data>
W9sdhEGnIGk/aFHS3gWwQ6FxUfI=
</data>
<key>hash2</key>
<data>
5x+0epJnQN2wZKY2xjvsjAYrr6H1QGYIGz0ptux72dU=
</data>
</dict>
<key>Modules/module.modulemap</key>
<dict>
<key>hash</key>
<data>
go9b9XYQJIVcGlS/K5PS+8A+0dI=
</data>
<key>hash2</key>
<data>
o0lkqm4+xeVosltUC3U+jCZnS35Tg8gUiUaKXbo0ZbQ=
</data>
</dict>
<key>PrivateHeaders/MSACChannelDelegate.h</key>
<dict>
<key>hash</key>
<data>
Msff4BZ/b1IjaYeKTDBHtNtT7wI=
</data>
<key>hash2</key>
<data>
d1uS+ptvOX/o3CCB23FEJAtvcf7KIf/8ozlruAf1f0g=
</data>
</dict>
</dict>
<key>rules</key>
<dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^version.plist$</key>
<true/>
</dict>
<key>rules2</key>
<dict>
<key>.*\.dSYM($|/)</key>
<dict>
<key>weight</key>
<real>11</real>
</dict>
<key>^(.*/)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>2000</real>
</dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^Info\.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^PkgInfo$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^embedded\.provisionprofile$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^version\.plist$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
</dict>
</dict>
</plist>
@@ -0,0 +1,44 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#import <Foundation/Foundation.h>
#if __has_include(<AppCenter/MSACAppCenter.h>)
#import <AppCenter/MSACAbstractLog.h>
#import <AppCenter/MSACAppCenter.h>
#import <AppCenter/MSACAppCenterErrors.h>
#import <AppCenter/MSACChannelGroupProtocol.h>
#import <AppCenter/MSACChannelProtocol.h>
#import <AppCenter/MSACConstants+Flags.h>
#import <AppCenter/MSACConstants.h>
#import <AppCenter/MSACCustomProperties.h>
#import <AppCenter/MSACDevice.h>
#import <AppCenter/MSACEnable.h>
#import <AppCenter/MSACLog.h>
#import <AppCenter/MSACLogWithProperties.h>
#import <AppCenter/MSACLogger.h>
#import <AppCenter/MSACSerializableObject.h>
#import <AppCenter/MSACService.h>
#import <AppCenter/MSACServiceAbstract.h>
#import <AppCenter/MSACWrapperLogger.h>
#import <AppCenter/MSACWrapperSdk.h>
#else
#import "MSACAbstractLog.h"
#import "MSACAppCenter.h"
#import "MSACAppCenterErrors.h"
#import "MSACChannelGroupProtocol.h"
#import "MSACChannelProtocol.h"
#import "MSACConstants+Flags.h"
#import "MSACConstants.h"
#import "MSACCustomProperties.h"
#import "MSACDevice.h"
#import "MSACEnable.h"
#import "MSACLog.h"
#import "MSACLogWithProperties.h"
#import "MSACLogger.h"
#import "MSACSerializableObject.h"
#import "MSACService.h"
#import "MSACServiceAbstract.h"
#import "MSACWrapperLogger.h"
#import "MSACWrapperSdk.h"
#endif
@@ -0,0 +1,14 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_ABSTRACT_LOG_H
#define MSAC_ABSTRACT_LOG_H
#import <Foundation/Foundation.h>
NS_SWIFT_NAME(AbstractLog)
@interface MSACAbstractLog : NSObject
@end
#endif
@@ -0,0 +1,203 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#import <Foundation/Foundation.h>
#ifndef MSAC_APP_CENTER
#define MSAC_APP_CENTER
#if __has_include(<AppCenter/MSACConstants.h>)
#import <AppCenter/MSACConstants.h>
#else
#import "MSACConstants.h"
#endif
@class MSACWrapperSdk;
#if !TARGET_OS_TV
@class MSACCustomProperties;
#endif
NS_SWIFT_NAME(AppCenter)
@interface MSACAppCenter : NSObject
/**
* Returns the singleton instance of MSACAppCenter.
*/
+ (instancetype)sharedInstance;
/**
* Configure the SDK with an application secret.
*
* @param appSecret A unique and secret key used to identify the application.
*
* @discussion This may be called only once per application process lifetime.
*/
+ (void)configureWithAppSecret:(NSString *)appSecret NS_SWIFT_NAME(configure(withAppSecret:));
/**
* Configure the SDK.
*
* @discussion This may be called only once per application process lifetime.
*/
+ (void)configure;
/**
* Configure the SDK with an application secret and an array of services to start.
*
* @param appSecret A unique and secret key used to identify the application.
* @param services Array of services to start.
*
* @discussion This may be called only once per application process lifetime.
*/
+ (void)start:(NSString *)appSecret withServices:(NSArray<Class> *)services NS_SWIFT_NAME(start(withAppSecret:services:));
/**
* Start the SDK with an array of services.
*
* @param services Array of services to start.
*
* @discussion This may be called only once per application process lifetime.
*/
+ (void)startWithServices:(NSArray<Class> *)services NS_SWIFT_NAME(start(services:));
/**
* Start a service.
*
* @param service A service to start.
*
* @discussion This may be called only once per service per application process lifetime.
*/
+ (void)startService:(Class)service;
/**
* Configure the SDK with an array of services to start from a library. This will not start the service at application level, it will enable
* the service only for the library.
*
* @param services Array of services to start.
*/
+ (void)startFromLibraryWithServices:(NSArray<Class> *)services NS_SWIFT_NAME(startFromLibrary(services:));
/**
* The flag indicates whether the SDK has already been configured or not.
*/
@property(class, atomic, readonly, getter=isConfigured) BOOL configured;
/**
* The flag indicates whether app is running in App Center Test Cloud.
*/
@property(class, atomic, readonly, getter=isRunningInAppCenterTestCloud) BOOL runningInAppCenterTestCloud;
/**
* The flag indicates whether or not the SDK was enabled as a whole
*
* The state is persisted in the device's storage across application launches.
*/
@property(class, nonatomic, getter=isEnabled, setter=setEnabled:) BOOL enabled NS_SWIFT_NAME(enabled);
/**
* Flag indicating whether SDK can send network requests.
*
* The state is persisted in the device's storage across application launches.
*/
@property(class, nonatomic, getter=isNetworkRequestsAllowed, setter=setNetworkRequestsAllowed:)
BOOL networkRequestsAllowed NS_SWIFT_NAME(networkRequestsAllowed);
/**
* The SDK's log level.
*/
@property(class, nonatomic) MSACLogLevel logLevel;
/**
* Base URL to use for backend communication.
*/
@property(class, nonatomic, strong) NSString *logUrl;
/**
* Set log handler.
*/
@property(class, nonatomic) MSACLogHandler logHandler;
/**
* Set wrapper SDK information to use when building device properties. This is intended in case you are building a SDK that uses the App
* Center SDK under the hood, e.g. our Xamarin SDK or ReactNative SDk.
*/
@property(class, nonatomic, strong) MSACWrapperSdk *wrapperSdk;
#if !TARGET_OS_TV
/**
* Set the custom properties.
*
* @param customProperties Custom properties object.
*/
+ (void)setCustomProperties:(MSACCustomProperties *)customProperties;
#endif
/**
* Check whether the application delegate forwarder is enabled or not.
*
* @discussion The application delegate forwarder forwards messages that target your application delegate methods via swizzling to the SDK.
* It simplifies the SDK integration but may not be suitable to any situations. For
* instance it should be disabled if you or one of your third party SDK is doing message forwarding on the application delegate. Message
* forwarding usually implies the implementation of @see NSObject#forwardingTargetForSelector: or @see NSObject#forwardInvocation: methods.
* To disable the application delegate forwarder just add the `AppCenterAppDelegateForwarderEnabled` tag to your Info .plist file and set it
* to `0`. Then you will have to forward any application delegate needed by the SDK manually.
*/
@property(class, readonly, nonatomic, getter=isAppDelegateForwarderEnabled) BOOL appDelegateForwarderEnabled;
/**
* Unique installation identifier.
*
*/
@property(class, readonly, nonatomic) NSUUID *installId;
/**
* Detect if a debugger is attached to the app process. This is only invoked once on app startup and can not detect
* if the debugger is being attached during runtime!
*
*/
@property(class, readonly, nonatomic, getter=isDebuggerAttached) BOOL debuggerAttached;
/**
* Current version of AppCenter SDK.
*
*/
@property(class, readonly, nonatomic) NSString *sdkVersion;
/**
* Set the maximum size of the internal storage. This method must be called before App Center is started. This method is only intended for
* applications.
*
* @param sizeInBytes Maximum size of the internal storage in bytes. This will be rounded up to the nearest multiple of a SQLite page size
* (default is 4096 bytes). Values below 20,480 bytes (20 KiB) will be ignored.
*
* @param completionHandler Callback that is invoked when the database size has been set. The `BOOL` parameter is `YES` if changing the size
* is successful, and `NO` otherwise. This parameter can be null.
*
* @discussion This only sets the maximum size of the database, but App Center modules might store additional data.
* The value passed to this method is not persisted on disk. The default maximum database size is 10485760 bytes (10 MiB).
*/
+ (void)setMaxStorageSize:(long)sizeInBytes completionHandler:(void (^)(BOOL))completionHandler;
/**
* Set the user identifier.
*
* @discussion Set the user identifier for logs sent for the default target token when the secret passed in @c
* MSACAppCenter:start:withServices: contains "target={targetToken}".
*
* For App Center backend the user identifier maximum length is 256 characters.
*
* AppCenter must be configured or started before this API can be used.
*/
@property(class, nonatomic, strong) NSString *userId;
/**
* Set country code to use when building device properties.
*
* @see https://www.iso.org/obp/ui/#search for more information.
*/
@property(class, nonatomic, strong) NSString *countryCode;
@end
#endif
@@ -0,0 +1,41 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_APP_CENTER_ERRORS_H
#define MSAC_APP_CENTER_ERRORS_H
#import <Foundation/Foundation.h>
#define MSAC_APP_CENTER_BASE_DOMAIN @"com.Microsoft.AppCenter."
NS_ASSUME_NONNULL_BEGIN
#pragma mark - Domain
static NSString *const kMSACACErrorDomain = MSAC_APP_CENTER_BASE_DOMAIN @"ErrorDomain";
#pragma mark - General
// Error codes.
NS_ENUM(NSInteger){MSACACLogInvalidContainerErrorCode = 1, MSACACCanceledErrorCode = 2, MSACACDisabledErrorCode = 3};
// Error descriptions.
static NSString const *kMSACACLogInvalidContainerErrorDesc = @"Invalid log container.";
static NSString const *kMSACACCanceledErrorDesc = @"The operation was canceled.";
static NSString const *kMSACACDisabledErrorDesc = @"The service is disabled.";
#pragma mark - Connection
// Error codes.
NS_ENUM(NSInteger){MSACACConnectionPausedErrorCode = 100, MSACACConnectionHttpErrorCode = 101};
// Error descriptions.
static NSString const *kMSACACConnectionHttpErrorDesc = @"An HTTP error occured.";
static NSString const *kMSACACConnectionPausedErrorDesc = @"Canceled, connection paused with log deletion.";
// Error user info keys.
static NSString const *kMSACACConnectionHttpCodeErrorKey = @"MSConnectionHttpCode";
NS_ASSUME_NONNULL_END
#endif
@@ -0,0 +1,87 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_CHANNEL_GROUP_PROTOCOL_H
#define MSAC_CHANNEL_GROUP_PROTOCOL_H
#import <Foundation/Foundation.h>
#if __has_include(<AppCenter/MSACChannelProtocol.h>)
#import <AppCenter/MSACChannelProtocol.h>
#else
#import "MSACChannelProtocol.h"
#endif
NS_ASSUME_NONNULL_BEGIN
@class MSACChannelUnitConfiguration;
@protocol MSACIngestionProtocol;
@protocol MSACChannelUnitProtocol;
/**
* `MSACChannelGroupProtocol` represents a kind of channel that contains constituent MSACChannelUnit objects. When an operation from the
* `MSACChannelProtocol` is performed on the group, that operation should be propagated to its constituent MSACChannelUnit objects.
*/
NS_SWIFT_NAME(ChannelGroupProtocol)
@protocol MSACChannelGroupProtocol <MSACChannelProtocol>
/**
* Initialize a channel unit with the given configuration.
*
* @param configuration channel configuration.
*
* @return The added `MSACChannelUnitProtocol`. Use this object to enqueue logs.
*/
- (id<MSACChannelUnitProtocol>)addChannelUnitWithConfiguration:(MSACChannelUnitConfiguration *)configuration
NS_SWIFT_NAME(addChannelUnit(withConfiguration:));
/**
* Initialize a channel unit with the given configuration.
*
* @param configuration channel configuration.
* @param ingestion The alternative ingestion object
*
* @return The added `MSACChannelUnitProtocol`. Use this object to enqueue logs.
*/
- (id<MSACChannelUnitProtocol>)addChannelUnitWithConfiguration:(MSACChannelUnitConfiguration *)configuration
withIngestion:(nullable id<MSACIngestionProtocol>)ingestion
NS_SWIFT_NAME(addChannelUnit(_:ingestion:));
/**
* Change the base URL (schema + authority + port only) used to communicate with the backend.
*/
@property(nonatomic, strong) NSString *_Nullable logUrl;
/**
* Set the app secret.
*/
@property(nonatomic, strong) NSString *_Nullable appSecret;
/**
* Set the maximum size of the internal storage. This method must be called before App Center is started.
*
* @discussion The default maximum database size is 10485760 bytes (10 MiB).
*
* @param sizeInBytes Maximum size of the internal storage in bytes. This will be rounded up to the nearest multiple of a SQLite page size
* (default is 4096 bytes). Values below 24576 bytes (24 KiB) will be ignored.
* @param completionHandler Callback that is invoked when the database size has been set. The `BOOL` parameter is `YES` if changing the size
* is successful, and `NO` otherwise.
*/
- (void)setMaxStorageSize:(long)sizeInBytes
completionHandler:(nullable void (^)(BOOL))completionHandler NS_SWIFT_NAME(setMaxStorageSize(_:completionHandler:));
/**
* Return a channel unit instance for the given groupId.
*
* @param groupId The group ID for a channel unit.
*
* @return A channel unit instance or `nil`.
*/
- (nullable id<MSACChannelUnitProtocol>)channelUnitForGroupId:(NSString *)groupId;
@end
NS_ASSUME_NONNULL_END
#endif
@@ -0,0 +1,68 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_CHANNEL_PROTOCOL_H
#define MSAC_CHANNEL_PROTOCOL_H
#import <Foundation/Foundation.h>
#if __has_include(<AppCenter/MSACEnable.h>)
#import <AppCenter/MSACEnable.h>
#else
#import "MSACEnable.h"
#endif
NS_ASSUME_NONNULL_BEGIN
@protocol MSACChannelDelegate;
/**
* `MSACChannelProtocol` contains the essential operations of a channel. Channels are broadly responsible for enqueuing logs to be sent to
* the backend and/or stored on disk.
*/
NS_SWIFT_NAME(ChannelProtocol)
@protocol MSACChannelProtocol <NSObject, MSACEnable>
/**
* Add delegate.
*
* @param delegate delegate.
*/
- (void)addDelegate:(id<MSACChannelDelegate>)delegate;
/**
* Remove delegate.
*
* @param delegate delegate.
*/
- (void)removeDelegate:(id<MSACChannelDelegate>)delegate;
/**
* Pause operations, logs will be stored but not sent.
*
* @param identifyingObject Object used to identify the pause request.
*
* @discussion A paused channel doesn't forward logs to the ingestion. The identifying object used to pause the channel can be any unique
* object. The same identifying object must be used to call resume. For simplicity if the caller is the one owning the channel then @c self
* can be used as identifying object.
*
* @see resumeWithIdentifyingObject:
*/
- (void)pauseWithIdentifyingObject:(id<NSObject>)identifyingObject;
/**
* Resume operations, logs can be sent again.
*
* @param identifyingObject Object used to passed to the pause method.
*
* @discussion The channel only resume when all the outstanding identifying objects have been resumed.
*
* @see pauseWithIdentifyingObject:
*/
- (void)resumeWithIdentifyingObject:(id<NSObject>)identifyingObject;
@end
NS_ASSUME_NONNULL_END
#endif
@@ -0,0 +1,18 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_CONSTANTS_FLAGS_H
#define MSAC_CONSTANTS_FLAGS_H
#import <Foundation/Foundation.h>
typedef NS_OPTIONS(NSUInteger, MSACFlags) {
MSACFlagsNone = (0 << 0), // => 00000000
MSACFlagsNormal = (1 << 0), // => 00000001
MSACFlagsCritical = (1 << 1), // => 00000010
MSACFlagsPersistenceNormal DEPRECATED_MSG_ATTRIBUTE("please use MSACFlagsNormal") = MSACFlagsNormal,
MSACFlagsPersistenceCritical DEPRECATED_MSG_ATTRIBUTE("please use MSACFlagsCritical") = MSACFlagsCritical,
MSACFlagsDefault = MSACFlagsNormal
} NS_SWIFT_NAME(Flags);
#endif
@@ -0,0 +1,170 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#import <Foundation/Foundation.h>
/**
* Log Levels
*/
typedef NS_ENUM(NSUInteger, MSACLogLevel) {
/**
* Logging will be very chatty
*/
MSACLogLevelVerbose = 2,
/**
* Debug information will be logged
*/
MSACLogLevelDebug = 3,
/**
* Information will be logged
*/
MSACLogLevelInfo = 4,
/**
* Errors and warnings will be logged
*/
MSACLogLevelWarning = 5,
/**
* Errors will be logged
*/
MSACLogLevelError = 6,
/**
* Only critical errors will be logged
*/
MSACLogLevelAssert = 7,
/**
* Logging is disabled
*/
MSACLogLevelNone = 99
} NS_SWIFT_NAME(LogLevel);
typedef NSString * (^MSACLogMessageProvider)(void)NS_SWIFT_NAME(LogMessageProvider);
typedef void (^MSACLogHandler)(MSACLogMessageProvider messageProvider, MSACLogLevel logLevel, NSString *tag, const char *file,
const char *function, uint line) NS_SWIFT_NAME(LogHandler);
/**
* Channel priorities, check the kMSACPriorityCount if you add a new value.
* The order matters here! Values NEED to range from low priority to high priority.
*/
typedef NS_ENUM(NSInteger, MSACPriority) { MSACPriorityBackground, MSACPriorityDefault, MSACPriorityHigh } NS_SWIFT_NAME(Priority);
static short const kMSACPriorityCount = MSACPriorityHigh + 1;
/**
* The priority by which the modules are initialized.
* MSACPriorityMax is reserved for only 1 module and this needs to be Crashes.
* Crashes needs to be initialized first to catch crashes in our other SDK Modules (which will hopefully never happen) and to avoid losing
* any log at crash time.
*/
typedef NS_ENUM(NSInteger, MSACInitializationPriority) {
MSACInitializationPriorityDefault = 500,
MSACInitializationPriorityHigh = 750,
MSACInitializationPriorityMax = 999
} NS_SWIFT_NAME(InitializationPriority);
/**
* Enum with the different HTTP status codes.
*/
typedef NS_ENUM(NSInteger, MSACHTTPCodesNo) {
// Invalid
MSACHTTPCodesNo0XXInvalidUnknown = 0,
// Informational
MSACHTTPCodesNo1XXInformationalUnknown = 1,
MSACHTTPCodesNo100Continue = 100,
MSACHTTPCodesNo101SwitchingProtocols = 101,
MSACHTTPCodesNo102Processing = 102,
// Success
MSACHTTPCodesNo2XXSuccessUnknown = 2,
MSACHTTPCodesNo200OK = 200,
MSACHTTPCodesNo201Created = 201,
MSACHTTPCodesNo202Accepted = 202,
MSACHTTPCodesNo203NonAuthoritativeInformation = 203,
MSACHTTPCodesNo204NoContent = 204,
MSACHTTPCodesNo205ResetContent = 205,
MSACHTTPCodesNo206PartialContent = 206,
MSACHTTPCodesNo207MultiStatus = 207,
MSACHTTPCodesNo208AlreadyReported = 208,
MSACHTTPCodesNo209IMUsed = 209,
// Redirection
MSACHTTPCodesNo3XXSuccessUnknown = 3,
MSACHTTPCodesNo300MultipleChoices = 300,
MSACHTTPCodesNo301MovedPermanently = 301,
MSACHTTPCodesNo302Found = 302,
MSACHTTPCodesNo303SeeOther = 303,
MSACHTTPCodesNo304NotModified = 304,
MSACHTTPCodesNo305UseProxy = 305,
MSACHTTPCodesNo306SwitchProxy = 306,
MSACHTTPCodesNo307TemporaryRedirect = 307,
MSACHTTPCodesNo308PermanentRedirect = 308,
// Client error
MSACHTTPCodesNo4XXSuccessUnknown = 4,
MSACHTTPCodesNo400BadRequest = 400,
MSACHTTPCodesNo401Unauthorised = 401,
MSACHTTPCodesNo402PaymentRequired = 402,
MSACHTTPCodesNo403Forbidden = 403,
MSACHTTPCodesNo404NotFound = 404,
MSACHTTPCodesNo405MethodNotAllowed = 405,
MSACHTTPCodesNo406NotAcceptable = 406,
MSACHTTPCodesNo407ProxyAuthenticationRequired = 407,
MSACHTTPCodesNo408RequestTimeout = 408,
MSACHTTPCodesNo409Conflict = 409,
MSACHTTPCodesNo410Gone = 410,
MSACHTTPCodesNo411LengthRequired = 411,
MSACHTTPCodesNo412PreconditionFailed = 412,
MSACHTTPCodesNo413RequestEntityTooLarge = 413,
MSACHTTPCodesNo414RequestURITooLong = 414,
MSACHTTPCodesNo415UnsupportedMediaType = 415,
MSACHTTPCodesNo416RequestedRangeNotSatisfiable = 416,
MSACHTTPCodesNo417ExpectationFailed = 417,
MSACHTTPCodesNo418IamATeapot = 418,
MSACHTTPCodesNo419AuthenticationTimeout = 419,
MSACHTTPCodesNo420MethodFailureSpringFramework = 420,
MSACHTTPCodesNo420EnhanceYourCalmTwitter = 4200,
MSACHTTPCodesNo422UnprocessableEntity = 422,
MSACHTTPCodesNo423Locked = 423,
MSACHTTPCodesNo424FailedDependency = 424,
MSACHTTPCodesNo424MethodFailureWebDaw = 4240,
MSACHTTPCodesNo425UnorderedCollection = 425,
MSACHTTPCodesNo426UpgradeRequired = 426,
MSACHTTPCodesNo428PreconditionRequired = 428,
MSACHTTPCodesNo429TooManyRequests = 429,
MSACHTTPCodesNo431RequestHeaderFieldsTooLarge = 431,
MSACHTTPCodesNo444NoResponseNginx = 444,
MSACHTTPCodesNo449RetryWithMicrosoft = 449,
MSACHTTPCodesNo450BlockedByWindowsParentalControls = 450,
MSACHTTPCodesNo451RedirectMicrosoft = 451,
MSACHTTPCodesNo451UnavailableForLegalReasons = 4510,
MSACHTTPCodesNo494RequestHeaderTooLargeNginx = 494,
MSACHTTPCodesNo495CertErrorNginx = 495,
MSACHTTPCodesNo496NoCertNginx = 496,
MSACHTTPCodesNo497HTTPToHTTPSNginx = 497,
MSACHTTPCodesNo499ClientClosedRequestNginx = 499,
// Server error
MSACHTTPCodesNo5XXSuccessUnknown = 5,
MSACHTTPCodesNo500InternalServerError = 500,
MSACHTTPCodesNo501NotImplemented = 501,
MSACHTTPCodesNo502BadGateway = 502,
MSACHTTPCodesNo503ServiceUnavailable = 503,
MSACHTTPCodesNo504GatewayTimeout = 504,
MSACHTTPCodesNo505HTTPVersionNotSupported = 505,
MSACHTTPCodesNo506VariantAlsoNegotiates = 506,
MSACHTTPCodesNo507InsufficientStorage = 507,
MSACHTTPCodesNo508LoopDetected = 508,
MSACHTTPCodesNo509BandwidthLimitExceeded = 509,
MSACHTTPCodesNo510NotExtended = 510,
MSACHTTPCodesNo511NetworkAuthenticationRequired = 511,
MSACHTTPCodesNo522ConnectionTimedOut = 522,
MSACHTTPCodesNo598NetworkReadTimeoutErrorUnknown = 598,
MSACHTTPCodesNo599NetworkConnectTimeoutErrorUnknown = 599
} NS_SWIFT_NAME(HTTPCodesNo);
@@ -0,0 +1,71 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_CUSTOM_PROPERTIES_H
#define MSAC_CUSTOM_PROPERTIES_H
#import <Foundation/Foundation.h>
/**
* Custom properties builder.
* Collects multiple properties to send in one log.
*/
NS_SWIFT_NAME(CustomProperties)
@interface MSACCustomProperties : NSObject
/**
* Set the specified property value with the specified key.
* If the properties previously contained a property for the key, the old value is replaced.
*
* @param key Key with which the specified value is to be set.
* @param value Value to be set with the specified key.
*
* @return This instance.
*/
- (instancetype)setString:(NSString *)value forKey:(NSString *)key NS_SWIFT_NAME(set(_:forKey:));
/**
* Set the specified property value with the specified key.
* If the properties previously contained a property for the key, the old value is replaced.
*
* @param key Key with which the specified value is to be set.
* @param value Value to be set with the specified key.
*
* @return This instance.
*/
- (instancetype)setNumber:(NSNumber *)value forKey:(NSString *)key NS_SWIFT_NAME(set(_:forKey:));
/**
* Set the specified property value with the specified key.
* If the properties previously contained a property for the key, the old value is replaced.
*
* @param key Key with which the specified value is to be set.
* @param value Value to be set with the specified key.
*
* @return This instance.
*/
- (instancetype)setBool:(BOOL)value forKey:(NSString *)key NS_SWIFT_NAME(set(_:forKey:));
/**
* Set the specified property value with the specified key.
* If the properties previously contained a property for the key, the old value is replaced.
*
* @param key Key with which the specified value is to be set.
* @param value Value to be set with the specified key.
*
* @return This instance.
*/
- (instancetype)setDate:(NSDate *)value forKey:(NSString *)key NS_SWIFT_NAME(set(_:forKey:));
/**
* Clear the property for the specified key.
*
* @param key Key whose mapping is to be cleared.
*
* @return This instance.
*/
- (instancetype)clearPropertyForKey:(NSString *)key NS_SWIFT_NAME(clearProperty(forKey:));
@end
#endif
@@ -0,0 +1,101 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_DEVICE_H
#define MSAC_DEVICE_H
#import <Foundation/Foundation.h>
#if __has_include(<AppCenter/MSACWrapperSdk.h>)
#import <AppCenter/MSACWrapperSdk.h>
#else
#import "MSACWrapperSdk.h"
#endif
NS_SWIFT_NAME(Device)
@interface MSACDevice : MSACWrapperSdk
/*
* Name of the SDK. Consists of the name of the SDK and the platform, e.g. "appcenter.ios", "appcenter.android"
*/
@property(nonatomic, copy, readonly) NSString *sdkName;
/*
* Version of the SDK in semver format, e.g. "1.2.0" or "0.12.3-alpha.1".
*/
@property(nonatomic, copy, readonly) NSString *sdkVersion;
/*
* Device model (example: iPad2,3).
*/
@property(nonatomic, copy, readonly) NSString *model;
/*
* Device manufacturer (example: HTC).
*/
@property(nonatomic, copy, readonly) NSString *oemName;
/*
* OS name (example: iOS).
*/
@property(nonatomic, copy, readonly) NSString *osName;
/*
* OS version (example: 9.3.0).
*/
@property(nonatomic, copy, readonly) NSString *osVersion;
/*
* OS build code (example: LMY47X). [optional]
*/
@property(nonatomic, copy, readonly) NSString *osBuild;
/*
* API level when applicable like in Android (example: 15). [optional]
*/
@property(nonatomic, copy, readonly) NSNumber *osApiLevel;
/*
* Language code (example: en_US).
*/
@property(nonatomic, copy, readonly) NSString *locale;
/*
* The offset in minutes from UTC for the device time zone, including daylight savings time.
*/
@property(nonatomic, readonly, strong) NSNumber *timeZoneOffset;
/*
* Screen size of the device in pixels (example: 640x480).
*/
@property(nonatomic, copy, readonly) NSString *screenSize;
/*
* Application version name, e.g. 1.1.0
*/
@property(nonatomic, copy, readonly) NSString *appVersion;
/*
* Carrier name (for mobile devices). [optional]
*/
@property(nonatomic, copy, readonly) NSString *carrierName;
/*
* Carrier country code (for mobile devices). [optional]
*/
@property(nonatomic, copy, readonly) NSString *carrierCountry;
/*
* The app's build number, e.g. 42.
*/
@property(nonatomic, copy, readonly) NSString *appBuild;
/*
* The bundle identifier, package identifier, or namespace, depending on what the individual plattforms use, .e.g com.microsoft.example.
* [optional]
*/
@property(nonatomic, copy, readonly) NSString *appNamespace;
@end
#endif
@@ -0,0 +1,27 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_ENABLE_H
#define MSAC_ENABLE_H
#import <Foundation/Foundation.h>
/**
* Protocol to define an instance that can be enabled/disabled.
*/
NS_SWIFT_NAME(Enable)
@protocol MSACEnable <NSObject>
@required
/**
* Enable/disable this instance and delete data on disabled state.
*
* @param isEnabled A boolean value set to YES to enable the instance or NO to disable it.
* @param deleteData A boolean value set to YES to delete data or NO to keep it.
*/
- (void)setEnabled:(BOOL)isEnabled andDeleteDataOnDisabled:(BOOL)deleteData NS_SWIFT_NAME(setEnabled(_:deleteDataOnDisabled:));
@end
#endif
@@ -0,0 +1,74 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_LOG_H
#define MSAC_LOG_H
#import <Foundation/Foundation.h>
@class MSACDevice;
NS_SWIFT_NAME(Log)
@protocol MSACLog <NSObject>
/**
* Log type.
*/
@property(nonatomic, copy) NSString *type;
/**
* Log timestamp.
*/
@property(nonatomic, strong) NSDate *timestamp;
/**
* A session identifier is used to correlate logs together. A session is an abstract concept in the API and is not necessarily an analytics
* session, it can be used to only track crashes.
*/
@property(nonatomic, copy) NSString *sid;
/**
* Optional distribution group ID value.
*/
@property(nonatomic, copy) NSString *distributionGroupId;
/**
* Optional user identifier.
*/
@property(nonatomic, copy) NSString *userId;
/**
* Device properties associated to this log.
*/
@property(nonatomic, strong) MSACDevice *device;
/**
* Transient object tag. For example, a log can be tagged with a transmission target. We do this currently to prevent properties being
* applied retroactively to previous logs by comparing their tags.
*/
@property(nonatomic, strong) NSObject *tag;
/**
* Checks if the object's values are valid.
*
* @return YES, if the object is valid.
*/
- (BOOL)isValid;
/**
* Adds a transmission target token that this log should be sent to.
*
* @param token The transmission target token.
*/
- (void)addTransmissionTargetToken:(NSString *)token;
/**
* Gets all transmission target tokens that this log should be sent to.
*
* @returns Collection of transmission target tokens that this log should be sent to.
*/
- (NSSet *)transmissionTargetTokens;
@end
#endif
@@ -0,0 +1,25 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_LOG_WITH_PROPERTIES_H
#define MSAC_LOG_WITH_PROPERTIES_H
#import <Foundation/Foundation.h>
#if __has_include(<AppCenter/MSACAbstractLog.h>)
#import <AppCenter/MSACAbstractLog.h>
#else
#import "MSACAbstractLog.h"
#endif
NS_SWIFT_NAME(LogWithProperties)
@interface MSACLogWithProperties : MSACAbstractLog
/**
* Additional key/value pair parameters. [optional]
*/
@property(nonatomic, strong) NSDictionary<NSString *, NSString *> *properties;
@end
#endif
@@ -0,0 +1,54 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#import <Foundation/Foundation.h>
#ifndef MSAC_LOGGER
#define MSAC_LOGGER
#if __has_include(<AppCenter/MSACConstants.h>)
#import <AppCenter/MSACConstants.h>
#else
#import "MSACConstants.h"
#endif
#define MSACLog(_level, _tag, _message) \
[MSACLogger logMessage:_message level:_level tag:_tag file:__FILE__ function:__PRETTY_FUNCTION__ line:__LINE__]
#define MSACLogAssert(tag, format, ...) \
MSACLog(MSACLogLevelAssert, tag, (^{ \
return [NSString stringWithFormat:(format), ##__VA_ARGS__]; \
}))
#define MSACLogError(tag, format, ...) \
MSACLog(MSACLogLevelError, tag, (^{ \
return [NSString stringWithFormat:(format), ##__VA_ARGS__]; \
}))
#define MSACLogWarning(tag, format, ...) \
MSACLog(MSACLogLevelWarning, tag, (^{ \
return [NSString stringWithFormat:(format), ##__VA_ARGS__]; \
}))
#define MSACLogInfo(tag, format, ...) \
MSACLog(MSACLogLevelInfo, tag, (^{ \
return [NSString stringWithFormat:(format), ##__VA_ARGS__]; \
}))
#define MSACLogDebug(tag, format, ...) \
MSACLog(MSACLogLevelDebug, tag, (^{ \
return [NSString stringWithFormat:(format), ##__VA_ARGS__]; \
}))
#define MSACLogVerbose(tag, format, ...) \
MSACLog(MSACLogLevelVerbose, tag, (^{ \
return [NSString stringWithFormat:(format), ##__VA_ARGS__]; \
}))
NS_SWIFT_NAME(Logger)
@interface MSACLogger : NSObject
+ (void)logMessage:(MSACLogMessageProvider)messageProvider
level:(MSACLogLevel)loglevel
tag:(NSString *)tag
file:(const char *)file
function:(const char *)function
line:(uint)line;
@end
#endif
@@ -0,0 +1,19 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#import <Foundation/Foundation.h>
#ifndef SERIALIZABLE_OBJECT_H
#define SERIALIZABLE_OBJECT_H
@protocol MSACSerializableObject <NSCoding>
/**
* Serialize this object to a dictionary.
*
* @return A dictionary representing this object.
*/
- (NSMutableDictionary *)serializeToDictionary;
@end
#endif
@@ -0,0 +1,23 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_SERVICE_H
#define MSAC_SERVICE_H
#import <Foundation/Foundation.h>
/**
* Protocol declaring service logic.
*/
NS_SWIFT_NAME(Service)
@protocol MSACService <NSObject>
/**
* Indicates whether this service is enabled.
* The state is persisted in the device's storage across application launches.
*/
@property(class, nonatomic, getter=isEnabled, setter=setEnabled:) BOOL enabled NS_SWIFT_NAME(enabled);
@end
#endif
@@ -0,0 +1,58 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_SERVICE_ABSTRACT_H
#define MSAC_SERVICE_ABSTRACT_H
#import <Foundation/Foundation.h>
#if __has_include(<AppCenter/MSACService.h>)
#import <AppCenter/MSACService.h>
#else
#import "MSACService.h"
#endif
@protocol MSACChannelGroupProtocol;
/**
* Abstraction of services common logic.
* This class is intended to be subclassed only not instantiated directly.
*/
NS_SWIFT_NAME(ServiceAbstract)
@interface MSACServiceAbstract : NSObject <MSACService>
/**
* The flag indicates whether the service is started from application or not.
*/
@property(nonatomic, assign) BOOL startedFromApplication;
/**
* Start this service with a channel group. Also sets the flag that indicates that a service has been started.
*
* @param channelGroup channel group used to persist and send logs.
* @param appSecret app secret for the SDK.
* @param token default transmission target token for this service.
* @param fromApplication indicates whether the service started from an application or not.
*/
- (void)startWithChannelGroup:(id<MSACChannelGroupProtocol>)channelGroup
appSecret:(NSString *)appSecret
transmissionTargetToken:(NSString *)token
fromApplication:(BOOL)fromApplication;
/**
* Update configuration when the service requires to start again. This method should only be called if the service is started from libraries
* and then is being started from an application.
*
* @param appSecret app secret for the SDK.
* @param token default transmission target token for this service.
*/
- (void)updateConfigurationWithAppSecret:(NSString *)appSecret transmissionTargetToken:(NSString *)token;
/**
* The flag indicate whether the service needs the application secret or not.
*/
@property(atomic, readonly) BOOL isAppSecretRequired;
@end
#endif
@@ -0,0 +1,21 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#import <Foundation/Foundation.h>
#if __has_include(<AppCenter/MSACConstants.h>)
#import <AppCenter/MSACConstants.h>
#else
#import "MSACConstants.h"
#endif
/**
* This is a utility for producing App Center style log messages. It is only intended for use by App Center services and wrapper SDKs of App
* Center.
*/
NS_SWIFT_NAME(WrapperLogger)
@interface MSACWrapperLogger : NSObject
+ (void)MSACWrapperLog:(MSACLogMessageProvider)message tag:(NSString *)tag level:(MSACLogLevel)level;
@end
@@ -0,0 +1,60 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_WRAPPER_SDK_H
#define MSAC_WRAPPER_SDK_H
#import <Foundation/Foundation.h>
NS_SWIFT_NAME(WrapperSdk)
@interface MSACWrapperSdk : NSObject
/*
* Version of the wrapper SDK. When the SDK is embedding another base SDK (for example Xamarin.Android wraps Android), the Xamarin specific
* version is populated into this field while sdkVersion refers to the original Android SDK. [optional]
*/
@property(nonatomic, copy, readonly) NSString *wrapperSdkVersion;
/*
* Name of the wrapper SDK (examples: Xamarin, Cordova). [optional]
*/
@property(nonatomic, copy, readonly) NSString *wrapperSdkName;
/*
* Version of the wrapper technology framework (Xamarin runtime version or ReactNative or Cordova etc...). [optional]
*/
@property(nonatomic, copy, readonly) NSString *wrapperRuntimeVersion;
/*
* Label that is used to identify application code 'version' released via Live Update beacon running on device.
*/
@property(nonatomic, copy, readonly) NSString *liveUpdateReleaseLabel;
/*
* Identifier of environment that current application release belongs to, deployment key then maps to environment like Production, Staging.
*/
@property(nonatomic, copy, readonly) NSString *liveUpdateDeploymentKey;
/*
* Hash of all files (ReactNative or Cordova) deployed to device via LiveUpdate beacon. Helps identify the Release version on device or need
* to download updates in future
*/
@property(nonatomic, copy, readonly) NSString *liveUpdatePackageHash;
- (instancetype)initWithWrapperSdkVersion:(NSString *)wrapperSdkVersion
wrapperSdkName:(NSString *)wrapperSdkName
wrapperRuntimeVersion:(NSString *)wrapperRuntimeVersion
liveUpdateReleaseLabel:(NSString *)liveUpdateReleaseLabel
liveUpdateDeploymentKey:(NSString *)liveUpdateDeploymentKey
liveUpdatePackageHash:(NSString *)liveUpdatePackageHash;
/**
* Checks if the object's values are valid.
*
* @return YES, if the object is valid.
*/
- (BOOL)isValid;
@end
#endif
@@ -0,0 +1,13 @@
framework module AppCenter {
umbrella header "AppCenter.h"
export *
module * { export * }
link framework "Foundation"
link framework "CoreTelephony"
link framework "SystemConfiguration"
link framework "UIKit"
link "sqlite3"
link "z"
}
@@ -0,0 +1,114 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#import <Foundation/Foundation.h>
#import "MSACConstants+Flags.h"
@protocol MSACChannelUnitProtocol;
@protocol MSACChannelGroupProtocol;
@protocol MSACChannelProtocol;
@protocol MSACLog;
NS_ASSUME_NONNULL_BEGIN
@protocol MSACChannelDelegate <NSObject>
@optional
/**
* A callback that is called when a channel unit is added to the channel group.
*
* @param channelGroup The channel group.
* @param channel The newly added channel.
*/
- (void)channelGroup:(id<MSACChannelGroupProtocol>)channelGroup didAddChannelUnit:(id<MSACChannelUnitProtocol>)channel;
/**
* A callback that is called when a log is just enqueued. Delegates may want to prepare the log a little more before further processing.
*
* @param log The log to prepare.
*/
- (void)channel:(id<MSACChannelProtocol>)channel prepareLog:(id<MSACLog>)log;
/**
* A callback that is called after a log is definitely prepared.
*
* @param log The log.
* @param internalId An internal Id to keep track of logs.
* @param flags Options for the log.
*/
- (void)channel:(id<MSACChannelProtocol>)channel didPrepareLog:(id<MSACLog>)log internalId:(NSString *)internalId flags:(MSACFlags)flags;
/**
* A callback that is called after a log completed the enqueueing process whether it was successful or not.
*
* @param log The log.
* @param internalId An internal Id to keep track of logs.
*/
- (void)channel:(id<MSACChannelProtocol>)channel didCompleteEnqueueingLog:(id<MSACLog>)log internalId:(NSString *)internalId;
/**
* Callback method that will be called before each log will be send to the server.
*
* @param channel The channel object.
* @param log The log to be sent.
*/
- (void)channel:(id<MSACChannelProtocol>)channel willSendLog:(id<MSACLog>)log;
/**
* Callback method that will be called in case the SDK was able to send a log.
*
* @param channel The channel object.
* @param log The log to be sent.
*/
- (void)channel:(id<MSACChannelProtocol>)channel didSucceedSendingLog:(id<MSACLog>)log;
/**
* Callback method that will be called in case the SDK was unable to send a log.
*
* @param channel The channel object.
* @param log The log to be sent.
* @param error The error that occured.
*/
- (void)channel:(id<MSACChannelProtocol>)channel didFailSendingLog:(id<MSACLog>)log withError:(nullable NSError *)error;
/**
* A callback that is called when setEnabled has been invoked.
*
* @param channel The channel.
* @param isEnabled The boolean that indicates enabled.
* @param deletedData The boolean that indicates deleting data on disabled.
*/
- (void)channel:(id<MSACChannelProtocol>)channel didSetEnabled:(BOOL)isEnabled andDeleteDataOnDisabled:(BOOL)deletedData;
/**
* A callback that is called when pause has been invoked.
*
* @param channel The channel.
* @param identifyingObject The identifying object used to pause the channel.
*/
- (void)channel:(id<MSACChannelProtocol>)channel didPauseWithIdentifyingObject:(id<NSObject>)identifyingObject;
/**
* A callback that is called when resume has been invoked.
*
* @param channel The channel.
* @param identifyingObject The identifying object used to resume the channel.
*/
- (void)channel:(id<MSACChannelProtocol>)channel didResumeWithIdentifyingObject:(id<NSObject>)identifyingObject;
/**
* Callback method that will determine if a log should be filtered out from the usual processing pipeline. If any delegate returns true, the
* log is filtered.
*
* @param channelUnit The channel unit that is going to send the log.
* @param log The log to be filtered or not.
*
* @return `true` if the log should be filtered out.
*/
- (BOOL)channelUnit:(id<MSACChannelUnitProtocol>)channelUnit shouldFilterLog:(id<MSACLog>)log;
@end
NS_ASSUME_NONNULL_END
@@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildMachineOSBuild</key>
<string>19H1323</string>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>AppCenter</string>
<key>CFBundleIdentifier</key>
<string>com.microsoft.appcenter</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>AppCenter</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1</string>
<key>CFBundleSupportedPlatforms</key>
<array>
<string>MacOSX</string>
</array>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>DTCompiler</key>
<string>com.apple.compilers.llvm.clang.1_0</string>
<key>DTPlatformBuild</key>
<string>11C505</string>
<key>DTPlatformVersion</key>
<string>GM</string>
<key>DTSDKBuild</key>
<string>19B90</string>
<key>DTSDKName</key>
<string>macosx10.15</string>
<key>DTXcode</key>
<string>1130</string>
<key>DTXcodeBuild</key>
<string>11C505</string>
<key>LSMinimumSystemVersion</key>
<string>10.15</string>
<key>UIDeviceFamily</key>
<array>
<integer>2</integer>
</array>
</dict>
</plist>
@@ -0,0 +1 @@
Versions/Current/AppCenter
@@ -0,0 +1 @@
Versions/Current/PrivateHeaders
@@ -0,0 +1,44 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#import <Foundation/Foundation.h>
#if __has_include(<AppCenter/MSACAppCenter.h>)
#import <AppCenter/MSACAbstractLog.h>
#import <AppCenter/MSACAppCenter.h>
#import <AppCenter/MSACAppCenterErrors.h>
#import <AppCenter/MSACChannelGroupProtocol.h>
#import <AppCenter/MSACChannelProtocol.h>
#import <AppCenter/MSACConstants+Flags.h>
#import <AppCenter/MSACConstants.h>
#import <AppCenter/MSACCustomProperties.h>
#import <AppCenter/MSACDevice.h>
#import <AppCenter/MSACEnable.h>
#import <AppCenter/MSACLog.h>
#import <AppCenter/MSACLogWithProperties.h>
#import <AppCenter/MSACLogger.h>
#import <AppCenter/MSACSerializableObject.h>
#import <AppCenter/MSACService.h>
#import <AppCenter/MSACServiceAbstract.h>
#import <AppCenter/MSACWrapperLogger.h>
#import <AppCenter/MSACWrapperSdk.h>
#else
#import "MSACAbstractLog.h"
#import "MSACAppCenter.h"
#import "MSACAppCenterErrors.h"
#import "MSACChannelGroupProtocol.h"
#import "MSACChannelProtocol.h"
#import "MSACConstants+Flags.h"
#import "MSACConstants.h"
#import "MSACCustomProperties.h"
#import "MSACDevice.h"
#import "MSACEnable.h"
#import "MSACLog.h"
#import "MSACLogWithProperties.h"
#import "MSACLogger.h"
#import "MSACSerializableObject.h"
#import "MSACService.h"
#import "MSACServiceAbstract.h"
#import "MSACWrapperLogger.h"
#import "MSACWrapperSdk.h"
#endif
Loaded 100 of 698 files, more files were not shown because too many files have changed in this diff. Show more