Commit dfa21bff by Dmitriy Stepanets

OneWeaterCore integration

parent d0ecc49d
......@@ -10,10 +10,7 @@
34EAFD887EF2D1D7449A016C /* Pods_1Weather.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B543196B99BA697763514F6 /* Pods_1Weather.framework */; };
87C171ED25FF79CC00DA3464 /* LocalConfig.plist in Resources */ = {isa = PBXBuildFile; fileRef = 87C171E925FF79CC00DA3464 /* LocalConfig.plist */; };
87C171F425FF7A4000DA3464 /* PopularCitiesManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87C171F325FF7A4000DA3464 /* PopularCitiesManager.swift */; };
87C1720D25FF870600DA3464 /* GeoNamesPlace.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87C1720C25FF870600DA3464 /* GeoNamesPlace.swift */; };
87C1721025FF874B00DA3464 /* PartialLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87C1720F25FF874B00DA3464 /* PartialLocation.swift */; };
87C1724925FF94F400DA3464 /* ConfigManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87C1724825FF94F400DA3464 /* ConfigManager.swift */; };
87D81582262EFC9B0015A6D1 /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87D81581262EFC9A0015A6D1 /* Notifications.swift */; };
87D815AA2636D5E60015A6D1 /* NWSAlertCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87D815A92636D5E60015A6D1 /* NWSAlertCoordinator.swift */; };
87D815AC2636D61D0015A6D1 /* NWSAlertViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87D815AB2636D61D0015A6D1 /* NWSAlertViewModel.swift */; };
87DE8C81263BFBCE00E1C8D4 /* LegacyMigrationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87DE8C80263BFBCE00E1C8D4 /* LegacyMigrationManager.swift */; };
......@@ -23,7 +20,6 @@
C27F92C189A9C9E637AF6C3A /* Pods_OneWeatherNotificationServiceExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 871EA87D239E6F89F6F8818E /* Pods_OneWeatherNotificationServiceExtension.framework */; };
CD1237C3255D5C5900C98139 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD1237C2255D5C5900C98139 /* AppDelegate.swift */; };
CD1237CC255D5C5C00C98139 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CD1237CB255D5C5C00C98139 /* Assets.xcassets */; };
CD1237F1255D83C500C98139 /* UIColor+Hex.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD1237F0255D83C500C98139 /* UIColor+Hex.swift */; };
CD1237F4255D889F00C98139 /* GradientView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD1237F3255D889F00C98139 /* GradientView.swift */; };
CD15DB3D25DA6C5100024727 /* ForecastTimePeriodControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD15DB3C25DA6C5100024727 /* ForecastTimePeriodControl.swift */; };
CD15DB4225DA806C00024727 /* TodayForecastTimePeriodCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD15DB4125DA806C00024727 /* TodayForecastTimePeriodCell.swift */; };
......@@ -38,7 +34,6 @@
CD251ED82603633800ED7A65 /* ForecastPrecipitationCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD251ED72603633800ED7A65 /* ForecastPrecipitationCell.swift */; };
CD251EDC26036E5400ED7A65 /* DayTimePrecipitationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD251EDB26036E5400ED7A65 /* DayTimePrecipitationView.swift */; };
CD2ABF32261489F700C1A92E /* LocationCellFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD2ABF31261489F700C1A92E /* LocationCellFactory.swift */; };
CD2B2140260A366B00AB918A /* UIView+InterfaceStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD2B213F260A366B00AB918A /* UIView+InterfaceStyle.swift */; };
CD32CDFF260B2E5400235081 /* ForecastDescriptionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD32CDFE260B2E5400235081 /* ForecastDescriptionView.swift */; };
CD32CE04260C742300235081 /* MenuViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD32CE03260C742300235081 /* MenuViewController.swift */; };
CD32CE08260C743B00235081 /* MenuViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD32CE07260C743B00235081 /* MenuViewModel.swift */; };
......@@ -46,13 +41,10 @@
CD32CE0E260C770E00235081 /* MenuHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD32CE0D260C770E00235081 /* MenuHeaderView.swift */; };
CD32CE12260C77B400235081 /* MenuBuyButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD32CE11260C77B400235081 /* MenuBuyButton.swift */; };
CD32CE16260C77C600235081 /* MenuHeaderButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD32CE15260C77C600235081 /* MenuHeaderButton.swift */; };
CD35DFCC260341B000F2138F /* Calendar+TimeZone.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD35DFCB260341B000F2138F /* Calendar+TimeZone.swift */; };
CD35DFD0260344A500F2138F /* ForecastConditionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD35DFCF260344A500F2138F /* ForecastConditionView.swift */; };
CD35DFD426034BCD00F2138F /* UIStackView+RemoveAll.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD35DFD326034BCD00F2138F /* UIStackView+RemoveAll.swift */; };
CD37D3D6260C93B3002669D6 /* MenuCellFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD37D3D5260C93B3002669D6 /* MenuCellFactory.swift */; };
CD37D3DE260C9E37002669D6 /* MenuCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD37D3DD260C9E37002669D6 /* MenuCell.swift */; };
CD37D3E5260CB05C002669D6 /* MenuFooterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD37D3E4260CB05C002669D6 /* MenuFooterView.swift */; };
CD37D3EB260DD30F002669D6 /* Settings.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD37D3EA260DD30F002669D6 /* Settings.swift */; };
CD37D3EF260DF4E6002669D6 /* SettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD37D3EE260DF4E6002669D6 /* SettingsViewController.swift */; };
CD37D3F3260DF4FB002669D6 /* SettingsCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD37D3F2260DF4FB002669D6 /* SettingsCoordinator.swift */; };
CD37D3F6260DF5BA002669D6 /* SettingsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD37D3F5260DF5BA002669D6 /* SettingsViewModel.swift */; };
......@@ -60,36 +52,30 @@
CD37D3FE260DF726002669D6 /* SettingsCellFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD37D3FD260DF726002669D6 /* SettingsCellFactory.swift */; };
CD37D401260DF744002669D6 /* SettingsCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD37D400260DF744002669D6 /* SettingsCell.swift */; };
CD37D405260DFFDD002669D6 /* CellFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD37D404260DFFDD002669D6 /* CellFactory.swift */; };
CD39F2EE25DE858D009FE398 /* NotificationName+Localization.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD39F2ED25DE858D009FE398 /* NotificationName+Localization.swift */; };
CD39F2F225DE94C4009FE398 /* SunPhaseCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD39F2F125DE94C4009FE398 /* SunPhaseCell.swift */; };
CD39F2F525DE9571009FE398 /* ArrowButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD39F2F425DE9571009FE398 /* ArrowButton.swift */; };
CD3F6E6925FA59D4002DB99B /* ForecastDetailPeriodButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD3F6E6825FA59D4002DB99B /* ForecastDetailPeriodButton.swift */; };
CD3F6E6C25FA5A90002DB99B /* PeriodButtonProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD3F6E6B25FA5A90002DB99B /* PeriodButtonProtocol.swift */; };
CD43DF032636C6640010C9F7 /* CACornerMask+All.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD43DF022636C6640010C9F7 /* CACornerMask+All.swift */; };
CD4742D0261200500061AC95 /* TodayAlertCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD4742CF261200500061AC95 /* TodayAlertCell.swift */; };
CD55E0BB2615EE2400CC4DC7 /* PollutantView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD55E0BA2615EE2400CC4DC7 /* PollutantView.swift */; };
CD5692B42653D46200A3CDBE /* SplashAnimationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD5692B32653D46100A3CDBE /* SplashAnimationViewController.swift */; };
CD5692B62653D56700A3CDBE /* splash.json in Resources */ = {isa = PBXBuildFile; fileRef = CD5692B52653D56700A3CDBE /* splash.json */; };
CD593BC226088A5900C93428 /* TimePeriodOffsetHolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD593BC126088A5900C93428 /* TimePeriodOffsetHolder.swift */; };
CD593BC926089FC100C93428 /* UITableView+HeaderSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD593BC826089FC100C93428 /* UITableView+HeaderSize.swift */; };
CD593BCC2608A4F200C93428 /* ForecastDailyCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD593BCB2608A4F200C93428 /* ForecastDailyCell.swift */; };
CD593BCF2608A50900C93428 /* ForecastHourlyCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD593BCE2608A50900C93428 /* ForecastHourlyCell.swift */; };
CD593BD32608BC3F00C93428 /* ForecastDayCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD593BD22608BC3F00C93428 /* ForecastDayCell.swift */; };
CD593BDC2608CDF100C93428 /* Date+Now.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD593BDB2608CDF100C93428 /* Date+Now.swift */; };
CD59E9EF262D62DA00322329 /* WeatherLayerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD59E9EE262D62DA00322329 /* WeatherLayerType.swift */; };
CD59E9F2262D630900322329 /* SevereLayerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD59E9F1262D630900322329 /* SevereLayerType.swift */; };
CD59E9F6262D639C00322329 /* RadarLayerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD59E9F5262D639C00322329 /* RadarLayerType.swift */; };
CD615F7E265523BD00B717DB /* OneWeatherCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD615F7D265523BD00B717DB /* OneWeatherCore.framework */; };
CD615F7F265523BD00B717DB /* OneWeatherCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = CD615F7D265523BD00B717DB /* OneWeatherCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
CD615FCC2655299A00B717DB /* NotificationName+Localization.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615FCB2655299A00B717DB /* NotificationName+Localization.swift */; };
CD647D0225ED07D60034578B /* TodayViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD647D0125ED07D60034578B /* TodayViewModel.swift */; };
CD647D0625ED08050034578B /* ViewModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD647D0525ED08050034578B /* ViewModelProtocol.swift */; };
CD67616A262575CD0079D273 /* MapLegendGradientView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD676169262575CD0079D273 /* MapLegendGradientView.swift */; };
CD67616D262587D30079D273 /* UITabBarController+Hide.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD67616C262587D30079D273 /* UITabBarController+Hide.swift */; };
CD67617026259D220079D273 /* RadarMapLayersController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD67616F26259D220079D273 /* RadarMapLayersController.swift */; };
CD67617726259DD70079D273 /* MapLayersPresentationAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD67617626259DD70079D273 /* MapLayersPresentationAnimator.swift */; };
CD67617C2625A60B0079D273 /* MapLayersDismissAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD67617B2625A60B0079D273 /* MapLayersDismissAnimator.swift */; };
CD6761802625B0F50079D273 /* RadarLayerCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD67617F2625B0F50079D273 /* RadarLayerCell.swift */; };
CD6761842625B6A10079D273 /* RadarLayersCellFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD6761832625B6A10079D273 /* RadarLayersCellFactory.swift */; };
CD6761882625C3360079D273 /* RadarViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD6761872625C3360079D273 /* RadarViewModel.swift */; };
CD6B3036257262C2004B34B3 /* UIColor+Highlight.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD6B3035257262C2004B34B3 /* UIColor+Highlight.swift */; };
CD6B303B2572680C004B34B3 /* SelfSizingButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD6B303A2572680C004B34B3 /* SelfSizingButton.swift */; };
CD6B303E25726960004B34B3 /* ThemeProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD6B303D25726960004B34B3 /* ThemeProtocol.swift */; };
CD6B304325726AD1004B34B3 /* DefaultTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD6B304225726AD1004B34B3 /* DefaultTheme.swift */; };
......@@ -97,7 +83,6 @@
CD7BF15526203E6900A30DF5 /* RadarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD7BF15426203E6900A30DF5 /* RadarViewController.swift */; };
CD7BF1582620410800A30DF5 /* RadarCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD7BF1572620410800A30DF5 /* RadarCoordinator.swift */; };
CD7F3ABD262443260041C478 /* MapPinnedLayersView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD7F3ABC262443260041C478 /* MapPinnedLayersView.swift */; };
CD80917B2578E4A8003541A4 /* UIViewController+Alert.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD80917A2578E4A8003541A4 /* UIViewController+Alert.swift */; };
CD822FF525D6817000A05501 /* TodayForecastCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD822FF425D6817000A05501 /* TodayForecastCell.swift */; };
CD822FFA25D6890900A05501 /* OneWeatherColorsAsset.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CD822FF925D6890900A05501 /* OneWeatherColorsAsset.xcassets */; };
CD822FFE25D6976F00A05501 /* AdCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD822FFD25D6976F00A05501 /* AdCell.swift */; };
......@@ -109,7 +94,6 @@
CD86246525E66E8A0097F3FB /* PrecipitationCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD86246425E66E8A0097F3FB /* PrecipitationCell.swift */; };
CD86246925E672A20097F3FB /* PrecipButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD86246825E672A20097F3FB /* PrecipButton.swift */; };
CD86246C25E6826A0097F3FB /* InnerShadowLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD86246B25E6826A0097F3FB /* InnerShadowLayer.swift */; };
CD866A62260F596B00E96A5C /* Dimension+Name.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD866A61260F596B00E96A5C /* Dimension+Name.swift */; };
CD866A65260F642600E96A5C /* SettingsDetailsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD866A64260F642600E96A5C /* SettingsDetailsViewController.swift */; };
CD866A6C260F676400E96A5C /* SettingsDetailsCellFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD866A6B260F676400E96A5C /* SettingsDetailsCellFactory.swift */; };
CD866A6F260F67F200E96A5C /* SettingsDetailsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD866A6E260F67F200E96A5C /* SettingsDetailsViewModel.swift */; };
......@@ -129,7 +113,6 @@
CD9B6B1425DBCDE2001D9B80 /* GraphView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD9B6B1325DBCDE2001D9B80 /* GraphView.swift */; };
CDA5542825EF734200A2E08C /* TodayCellFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDA5542725EF734200A2E08C /* TodayCellFactory.swift */; };
CDA5542D25EF7C9700A2E08C /* ReusableCellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDA5542C25EF7C9700A2E08C /* ReusableCellProtocol.swift */; };
CDA5543025EFA13F00A2E08C /* Measurement+String.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDA5542F25EFA13F00A2E08C /* Measurement+String.swift */; };
CDAC9B8526319B0500AC1BF4 /* MapTimeControlItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDAC9B8426319B0500AC1BF4 /* MapTimeControlItem.swift */; };
CDAD97B1262042B2007FCFB1 /* MapButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDAD97B0262042B2007FCFB1 /* MapButton.swift */; };
CDAD97B426207D14007FCFB1 /* MapTimeControlView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDAD97B326207D14007FCFB1 /* MapTimeControlView.swift */; };
......@@ -139,23 +122,18 @@
CDC6126225E8DAB800188DA7 /* MoonPhaseCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDC6126125E8DAB800188DA7 /* MoonPhaseCell.swift */; };
CDC6126625E9085600188DA7 /* GraphLine.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDC6126525E9085600188DA7 /* GraphLine.swift */; };
CDC6126A25E90C8800188DA7 /* GraphLineSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDC6126925E90C8800188DA7 /* GraphLineSettings.swift */; };
CDC70833260FBFD4004A1974 /* UnitPressure+Atmosphere.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDC70832260FBFD3004A1974 /* UnitPressure+Atmosphere.swift */; };
CDD0F1E52572425200CF5017 /* SF-Pro.ttf in Resources */ = {isa = PBXBuildFile; fileRef = CDD0F1E42572425200CF5017 /* SF-Pro.ttf */; };
CDD0F1E82572429E00CF5017 /* AppFont.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDD0F1E72572429E00CF5017 /* AppFont.swift */; };
CDD0F1EE25725BCF00CF5017 /* ThemeManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDD0F1ED25725BCF00CF5017 /* ThemeManager.swift */; };
CDD75F0D25DE68B10099ACDB /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = CDD75F0F25DE68B10099ACDB /* Localizable.strings */; };
CDDE8D7C262EED3C00267931 /* MapLegendSevereView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDDE8D7B262EED3C00267931 /* MapLegendSevereView.swift */; };
CDDE8D7F262EED4D00267931 /* MapLegendWeatherView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDDE8D7E262EED4D00267931 /* MapLegendWeatherView.swift */; };
CDE18DCA25D165F100C80ED9 /* UITabBarController+Append.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDE18DC925D165F100C80ED9 /* UITabBarController+Append.swift */; };
CDE18DCD25D1666700C80ED9 /* ForecastCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDE18DCC25D1666700C80ED9 /* ForecastCoordinator.swift */; };
CDE18DD125D166F900C80ED9 /* ForecastViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDE18DD025D166F900C80ED9 /* ForecastViewController.swift */; };
CDE18DD825D16CB200C80ED9 /* NavigationCityButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDE18DD725D16CB200C80ED9 /* NavigationCityButton.swift */; };
CDE2BF222609D4250085C930 /* ForecastWindSpeedCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDE2BF212609D4250085C930 /* ForecastWindSpeedCell.swift */; };
CDE2BF252609D9140085C930 /* ForecastWindButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDE2BF242609D9140085C930 /* ForecastWindButton.swift */; };
CDECDB052629A6600087F9F2 /* RadarLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDECDB042629A6600087F9F2 /* RadarLayer.swift */; };
CDEE8AD725DA882200C289DE /* ForecastPeriodButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDEE8AD625DA882200C289DE /* ForecastPeriodButton.swift */; };
CDF4808F261727E00076E9F5 /* CLAuthorizationStatus+Localized.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDF4808E261727E00076E9F5 /* CLAuthorizationStatus+Localized.swift */; };
CDF48092261729680076E9F5 /* UIApplication+Settings.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDF48091261729680076E9F5 /* UIApplication+Settings.swift */; };
CDF8F12A262089A200DB384A /* MapTimeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDF8F129262089A200DB384A /* MapTimeView.swift */; };
CDF8F12D26208E7B00DB384A /* MapCurrentTimeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDF8F12C26208E7B00DB384A /* MapCurrentTimeView.swift */; };
CDF9BF8E26133D050037847D /* LocationSearchCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDF9BF8D26133D050037847D /* LocationSearchCoordinator.swift */; };
......@@ -163,12 +141,7 @@
CE0456242629C04C003D252B /* NWSAlertsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE0456232629C04C003D252B /* NWSAlertsManager.swift */; };
CE0457902632B3BC00B3C19A /* NotificationsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE04578F2632B3BC00B3C19A /* NotificationsViewModel.swift */; };
CE0457952632B3F900B3C19A /* NotificationsCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE0457942632B3F900B3C19A /* NotificationsCoordinator.swift */; };
CE13B72826245CE2007CBD4D /* AirQuality.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE13B72726245CE2007CBD4D /* AirQuality.swift */; };
CE13B72B26245D0D007CBD4D /* HealthStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE13B72A26245D0D007CBD4D /* HealthStatus.swift */; };
CE13B72E26245D42007CBD4D /* Pollutant.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE13B72D26245D42007CBD4D /* Pollutant.swift */; };
CE13B76326246743007CBD4D /* CCPAHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE13B76226246743007CBD4D /* CCPAHelper.swift */; };
CE13B7E126247BF9007CBD4D /* UserDefaultsOptionalValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE13B7DF26247BF9007CBD4D /* UserDefaultsOptionalValue.swift */; };
CE13B7E226247BF9007CBD4D /* UserDefaultsValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE13B7E026247BF9007CBD4D /* UserDefaultsValue.swift */; };
CE13B7EB2624805F007CBD4D /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE13B7EA2624805F007CBD4D /* Constants.swift */; };
CE13B80A262480B3007CBD4D /* EnvironmentManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE13B7EE262480B3007CBD4D /* EnvironmentManager.swift */; };
CE13B80C262480B3007CBD4D /* AdConfigManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE13B7F0262480B3007CBD4D /* AdConfigManager.swift */; };
......@@ -196,15 +169,9 @@
CE13B88F26248A77007CBD4D /* GoogleService-Info-Staging.plist in Resources */ = {isa = PBXBuildFile; fileRef = CE13B88D26248A77007CBD4D /* GoogleService-Info-Staging.plist */; };
CE13B97B2626FB11007CBD4D /* PSMLocationSDK.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE13B7DC262478E7007CBD4D /* PSMLocationSDK.xcframework */; };
CE13B97C2626FB11007CBD4D /* PSMLocationSDK.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = CE13B7DC262478E7007CBD4D /* PSMLocationSDK.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
CE13B98726273236007CBD4D /* NWSAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE13B98626273236007CBD4D /* NWSAlert.swift */; };
CE14445F2638B6CF008E2162 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE14445E2638B6CF008E2162 /* StoreKit.framework */; };
CE1842CB264164900001D8E4 /* DefaultSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE1842CA264164900001D8E4 /* DefaultSettings.swift */; };
CE1842CE264164C50001D8E4 /* DefaultSettingsImperial.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE1842CD264164C50001D8E4 /* DefaultSettingsImperial.swift */; };
CE1842D1264164D90001D8E4 /* DefaultSettingsFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE1842D0264164D90001D8E4 /* DefaultSettingsFactory.swift */; };
CE1842D4264164E90001D8E4 /* DefaultSettingsMetric.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE1842D3264164E90001D8E4 /* DefaultSettingsMetric.swift */; };
CE28474F26159857006C8DC5 /* HealthSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE28474E26159857006C8DC5 /* HealthSource.swift */; };
CE28475226159A32006C8DC5 /* BlendHealthModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE28475126159A32006C8DC5 /* BlendHealthModels.swift */; };
CE28475D2615A5B3006C8DC5 /* Health.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE28475C2615A5B3006C8DC5 /* Health.swift */; };
CE2847602615A8AD006C8DC5 /* BlendHealthSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE28475F2615A8AD006C8DC5 /* BlendHealthSource.swift */; };
CE308B262637EA88001ECD8A /* CoreNotifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE308B242637EA87001ECD8A /* CoreNotifications.swift */; };
CE308B272637EA88001ECD8A /* CoreNWSAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE308B252637EA87001ECD8A /* CoreNWSAlert.swift */; };
......@@ -213,7 +180,6 @@
CE376C98261EE484000B1159 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CE376C97261EE484000B1159 /* LaunchScreen.storyboard */; };
CE3A36C72638A77E002CACC3 /* BlendFIPSSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE3A36C62638A77E002CACC3 /* BlendFIPSSource.swift */; };
CE3A36ED2638A825002CACC3 /* FIPSResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE3A36EC2638A825002CACC3 /* FIPSResponse.swift */; };
CE578FD325F7E89400E8B85D /* DayTimeWeather.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE578FD225F7E89400E8B85D /* DayTimeWeather.swift */; };
CE578FE525FB415F00E8B85D /* CityCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE578FE225FB415F00E8B85D /* CityCell.swift */; };
CE578FE625FB415F00E8B85D /* LocationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE578FE325FB415F00E8B85D /* LocationViewController.swift */; };
CE578FE725FB415F00E8B85D /* LocationsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE578FE425FB415F00E8B85D /* LocationsViewModel.swift */; };
......@@ -222,7 +188,6 @@
CE849DB82638C33600DEFFBD /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE849DB72638C33600DEFFBD /* NotificationService.swift */; };
CE849DBC2638C33600DEFFBD /* OneWeatherNotificationServiceExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = CE849DB52638C33600DEFFBD /* OneWeatherNotificationServiceExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
CE849E382638CE8000DEFFBD /* UserNotifications.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE849E372638CE8000DEFFBD /* UserNotifications.framework */; };
CE8805D3263AEEE6003C53B7 /* UIDevice+Convenience.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE8805D2263AEEE6003C53B7 /* UIDevice+Convenience.swift */; };
CE895F0F26393FD800214175 /* WeatherImageProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE895F0E26393FD800214175 /* WeatherImageProvider.swift */; };
CE89628C26175D8D00CA274A /* regenerate_objects.sh in Resources */ = {isa = PBXBuildFile; fileRef = CE89628B26175D8D00CA274A /* regenerate_objects.sh */; };
CE8962A226175DF500CA274A /* _CoreAirQuality.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE89629126175DF400CA274A /* _CoreAirQuality.swift */; };
......@@ -239,8 +204,6 @@
CE8962AE26175DF500CA274A /* CoreLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE89629E26175DF500CA274A /* CoreLocation.swift */; };
CE8962AF26175DF500CA274A /* CoreDailyWeather.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE89629F26175DF500CA274A /* CoreDailyWeather.swift */; };
CE8962B126175DF500CA274A /* CoreHourlyWeather.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE8962A126175DF500CA274A /* CoreHourlyWeather.swift */; };
CE9D181625ECB8370028D9D7 /* MulticastDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE9D181525ECB8370028D9D7 /* MulticastDelegate.swift */; };
CE9D181925ECB9A70028D9D7 /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE9D181825ECB9A70028D9D7 /* Logger.swift */; };
CE9F01B5261B2DB1009BA500 /* CoreAppData.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE9F01B4261B2DB1009BA500 /* CoreAppData.swift */; };
CE9F01B8261B2DB6009BA500 /* _CoreAppData.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE9F01B7261B2DB6009BA500 /* _CoreAppData.swift */; };
CE9F01BB261B31A6009BA500 /* CoreDataError.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE9F01BA261B31A6009BA500 /* CoreDataError.swift */; };
......@@ -248,22 +211,15 @@
CE9F01C1261B3776009BA500 /* CoreDataUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE9F01C0261B3776009BA500 /* CoreDataUtils.swift */; };
CE9F01CC261C9A6E009BA500 /* AppData.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE9F01CB261C9A6D009BA500 /* AppData.swift */; };
CEAD00A12577B2D5003596AD /* StuffThatIsPresentInTheMainProject.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEAD00A02577B2D5003596AD /* StuffThatIsPresentInTheMainProject.swift */; };
CEAFF08325DFC67F00DF4EBF /* Location.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEAFF08225DFC67F00DF4EBF /* Location.swift */; };
CEAFF08925DFC6B200DF4EBF /* CurrentWeather.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEAFF08825DFC6B200DF4EBF /* CurrentWeather.swift */; };
CEAFF08C25DFC6BD00DF4EBF /* DailyWeather.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEAFF08B25DFC6BC00DF4EBF /* DailyWeather.swift */; };
CEAFF08F25DFC6ED00DF4EBF /* HourlyWeather.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEAFF08E25DFC6ED00DF4EBF /* HourlyWeather.swift */; };
CEAFF09225DFC71D00DF4EBF /* HelperTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEAFF09125DFC71D00DF4EBF /* HelperTypes.swift */; };
CEAFF0A325E0FF0800DF4EBF /* LocationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEAFF0A225E0FF0800DF4EBF /* LocationManager.swift */; };
CEBAC1C62638236D00A89681 /* PushNotificationsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEBAC1C52638236D00A89681 /* PushNotificationsManager.swift */; };
CEBAC1C82638240800A89681 /* DeeplinksRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEBAC1C72638240800A89681 /* DeeplinksRouter.swift */; };
CEBAC2122638968D00A89681 /* FIPSSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEBAC2112638968D00A89681 /* FIPSSource.swift */; };
CEC526FA25E7959A00DA58A5 /* WeatherSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC526F925E7959A00DA58A5 /* WeatherSource.swift */; };
CEC526FD25E795F700DA58A5 /* WdtWeatherSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC526FC25E795F700DA58A5 /* WdtWeatherSource.swift */; };
CEC5270025E7BACB00DA58A5 /* WdtLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC526FF25E7BACB00DA58A5 /* WdtLocation.swift */; };
CEC5270325E7BB4000DA58A5 /* WdtSurfaceObservation.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC5270225E7BB4000DA58A5 /* WdtSurfaceObservation.swift */; };
CEC5275D25E8E50B00DA58A5 /* WdtDailySummary.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC5275C25E8E50B00DA58A5 /* WdtDailySummary.swift */; };
CEC5276025E92DDA00DA58A5 /* WdtHourlySummary.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC5275F25E92DDA00DA58A5 /* WdtHourlySummary.swift */; };
CEC7D8C42639FAF600B8836D /* Global.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC7D8C32639FAF500B8836D /* Global.swift */; };
CEC7D8EE2639FE2700B8836D /* OLInAppStoreManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC7D8ED2639FE2700B8836D /* OLInAppStoreManager.swift */; };
CEC8FBAF2639756A0001A6BF /* OnboardingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC8FBAE2639756A0001A6BF /* OnboardingViewController.swift */; };
CEC8FBB2263976240001A6BF /* OnboardingCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC8FBB1263976240001A6BF /* OnboardingCoordinator.swift */; };
......@@ -273,12 +229,7 @@
CEDE4E8425EEFD56007457E9 /* WdtDailySummariesArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEDE4E8025EEFD56007457E9 /* WdtDailySummariesArray.swift */; };
CEDE4E8525EEFD56007457E9 /* WdtHourlySummariesArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEDE4E8125EEFD56007457E9 /* WdtHourlySummariesArray.swift */; };
CEDE4E8925EEFFEF007457E9 /* WdtDayNight.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEDE4E8825EEFFEF007457E9 /* WdtDayNight.swift */; };
CEDE4F0B25EFA3A7007457E9 /* UpdatableModelObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEDE4F0A25EFA3A7007457E9 /* UpdatableModelObject.swift */; };
CEDE4F0F25EFA3B4007457E9 /* UpdatableModelObjectInTime.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEDE4F0E25EFA3B4007457E9 /* UpdatableModelObjectInTime.swift */; };
CEE0A179262FA9650044C257 /* DelayedSaveStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEE0A178262FA9650044C257 /* DelayedSaveStorage.swift */; };
CEE0A17B263179E60044C257 /* NWSAlertInfoBlock.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEE0A17A263179E50044C257 /* NWSAlertInfoBlock.swift */; };
CEE0A1A026317A1E0044C257 /* NWSAlertExtendedInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEE0A19F26317A1E0044C257 /* NWSAlertExtendedInfo.swift */; };
CEE0A1A226317A3F0044C257 /* NWSSeverityLevel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEE0A1A126317A3F0044C257 /* NWSSeverityLevel.swift */; };
CEE0A1A426317A8F0044C257 /* NWSAlertInfoParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEE0A1A326317A8F0044C257 /* NWSAlertInfoParser.swift */; };
CEF959652600C2F900975FAA /* AnalyticsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEF959642600C2F900975FAA /* AnalyticsService.swift */; };
CEF959692600C30500975FAA /* AnalyticsGlobal.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEF959682600C30500975FAA /* AnalyticsGlobal.swift */; };
......@@ -311,6 +262,7 @@
dstSubfolderSpec = 10;
files = (
CE13B97C2626FB11007CBD4D /* PSMLocationSDK.xcframework in Embed Frameworks */,
CD615F7F265523BD00B717DB /* OneWeatherCore.framework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
......@@ -334,10 +286,7 @@
871EA87D239E6F89F6F8818E /* Pods_OneWeatherNotificationServiceExtension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_OneWeatherNotificationServiceExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; };
87C171E925FF79CC00DA3464 /* LocalConfig.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = LocalConfig.plist; sourceTree = "<group>"; };
87C171F325FF7A4000DA3464 /* PopularCitiesManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PopularCitiesManager.swift; sourceTree = "<group>"; };
87C1720C25FF870600DA3464 /* GeoNamesPlace.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeoNamesPlace.swift; sourceTree = "<group>"; };
87C1720F25FF874B00DA3464 /* PartialLocation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PartialLocation.swift; sourceTree = "<group>"; };
87C1724825FF94F400DA3464 /* ConfigManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConfigManager.swift; sourceTree = "<group>"; };
87D81581262EFC9A0015A6D1 /* Notifications.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Notifications.swift; sourceTree = "<group>"; };
87D815842636CFFD0015A6D1 /* NWSAlertViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NWSAlertViewController.swift; sourceTree = "<group>"; };
87D815A92636D5E60015A6D1 /* NWSAlertCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NWSAlertCoordinator.swift; sourceTree = "<group>"; };
87D815AB2636D61D0015A6D1 /* NWSAlertViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NWSAlertViewModel.swift; sourceTree = "<group>"; };
......@@ -354,11 +303,10 @@
CD1237CB255D5C5C00C98139 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
CD1237D0255D5C5C00C98139 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
CD1237DA255D5DFA00C98139 /* PG.playground */ = {isa = PBXFileReference; lastKnownFileType = file.playground; path = PG.playground; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
CD1237F0255D83C500C98139 /* UIColor+Hex.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+Hex.swift"; sourceTree = "<group>"; };
CD1237F3255D889F00C98139 /* GradientView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GradientView.swift; sourceTree = "<group>"; };
CD15DB3C25DA6C5100024727 /* ForecastTimePeriodControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForecastTimePeriodControl.swift; sourceTree = "<group>"; };
CD15DB4125DA806C00024727 /* TodayForecastTimePeriodCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TodayForecastTimePeriodCell.swift; sourceTree = "<group>"; };
CD16A179262D81880028E74A /* UserDefaultsWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDefaultsWrapper.swift; sourceTree = "<group>"; };
CD16A179262D81880028E74A /* UserDefaultsWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = UserDefaultsWrapper.swift; path = ../../OneWeatherCore/OneWeatherCore/Common/UserDefaultsWrapper.swift; sourceTree = "<group>"; };
CD17C5F525D15B4400EE884E /* TodayViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TodayViewController.swift; sourceTree = "<group>"; };
CD17C5FA25D15B6B00EE884E /* AppCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppCoordinator.swift; sourceTree = "<group>"; };
CD17C5FE25D15B7C00EE884E /* TodayCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TodayCoordinator.swift; sourceTree = "<group>"; };
......@@ -369,7 +317,6 @@
CD251ED72603633800ED7A65 /* ForecastPrecipitationCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForecastPrecipitationCell.swift; sourceTree = "<group>"; };
CD251EDB26036E5400ED7A65 /* DayTimePrecipitationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DayTimePrecipitationView.swift; sourceTree = "<group>"; };
CD2ABF31261489F700C1A92E /* LocationCellFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationCellFactory.swift; sourceTree = "<group>"; };
CD2B213F260A366B00AB918A /* UIView+InterfaceStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+InterfaceStyle.swift"; sourceTree = "<group>"; };
CD32CDFE260B2E5400235081 /* ForecastDescriptionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForecastDescriptionView.swift; sourceTree = "<group>"; };
CD32CE03260C742300235081 /* MenuViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuViewController.swift; sourceTree = "<group>"; };
CD32CE07260C743B00235081 /* MenuViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuViewModel.swift; sourceTree = "<group>"; };
......@@ -377,13 +324,10 @@
CD32CE0D260C770E00235081 /* MenuHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuHeaderView.swift; sourceTree = "<group>"; };
CD32CE11260C77B400235081 /* MenuBuyButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuBuyButton.swift; sourceTree = "<group>"; };
CD32CE15260C77C600235081 /* MenuHeaderButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuHeaderButton.swift; sourceTree = "<group>"; };
CD35DFCB260341B000F2138F /* Calendar+TimeZone.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Calendar+TimeZone.swift"; sourceTree = "<group>"; };
CD35DFCF260344A500F2138F /* ForecastConditionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForecastConditionView.swift; sourceTree = "<group>"; };
CD35DFD326034BCD00F2138F /* UIStackView+RemoveAll.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIStackView+RemoveAll.swift"; sourceTree = "<group>"; };
CD37D3D5260C93B3002669D6 /* MenuCellFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuCellFactory.swift; sourceTree = "<group>"; };
CD37D3DD260C9E37002669D6 /* MenuCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuCell.swift; sourceTree = "<group>"; };
CD37D3E4260CB05C002669D6 /* MenuFooterView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuFooterView.swift; sourceTree = "<group>"; };
CD37D3EA260DD30F002669D6 /* Settings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Settings.swift; sourceTree = "<group>"; };
CD37D3EE260DF4E6002669D6 /* SettingsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsViewController.swift; sourceTree = "<group>"; };
CD37D3F2260DF4FB002669D6 /* SettingsCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsCoordinator.swift; sourceTree = "<group>"; };
CD37D3F5260DF5BA002669D6 /* SettingsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsViewModel.swift; sourceTree = "<group>"; };
......@@ -391,36 +335,29 @@
CD37D3FD260DF726002669D6 /* SettingsCellFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsCellFactory.swift; sourceTree = "<group>"; };
CD37D400260DF744002669D6 /* SettingsCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsCell.swift; sourceTree = "<group>"; };
CD37D404260DFFDD002669D6 /* CellFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CellFactory.swift; sourceTree = "<group>"; };
CD39F2ED25DE858D009FE398 /* NotificationName+Localization.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NotificationName+Localization.swift"; sourceTree = "<group>"; };
CD39F2F125DE94C4009FE398 /* SunPhaseCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SunPhaseCell.swift; sourceTree = "<group>"; };
CD39F2F425DE9571009FE398 /* ArrowButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArrowButton.swift; sourceTree = "<group>"; };
CD3F6E6825FA59D4002DB99B /* ForecastDetailPeriodButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForecastDetailPeriodButton.swift; sourceTree = "<group>"; };
CD3F6E6B25FA5A90002DB99B /* PeriodButtonProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PeriodButtonProtocol.swift; sourceTree = "<group>"; };
CD43DF022636C6640010C9F7 /* CACornerMask+All.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CACornerMask+All.swift"; sourceTree = "<group>"; };
CD4742CF261200500061AC95 /* TodayAlertCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TodayAlertCell.swift; sourceTree = "<group>"; };
CD55E0BA2615EE2400CC4DC7 /* PollutantView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PollutantView.swift; sourceTree = "<group>"; };
CD5692B32653D46100A3CDBE /* SplashAnimationViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SplashAnimationViewController.swift; sourceTree = "<group>"; };
CD5692B52653D56700A3CDBE /* splash.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = splash.json; sourceTree = "<group>"; };
CD593BC126088A5900C93428 /* TimePeriodOffsetHolder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimePeriodOffsetHolder.swift; sourceTree = "<group>"; };
CD593BC826089FC100C93428 /* UITableView+HeaderSize.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITableView+HeaderSize.swift"; sourceTree = "<group>"; };
CD593BCB2608A4F200C93428 /* ForecastDailyCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForecastDailyCell.swift; sourceTree = "<group>"; };
CD593BCE2608A50900C93428 /* ForecastHourlyCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForecastHourlyCell.swift; sourceTree = "<group>"; };
CD593BD22608BC3F00C93428 /* ForecastDayCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForecastDayCell.swift; sourceTree = "<group>"; };
CD593BDB2608CDF100C93428 /* Date+Now.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Date+Now.swift"; sourceTree = "<group>"; };
CD59E9EE262D62DA00322329 /* WeatherLayerType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WeatherLayerType.swift; sourceTree = "<group>"; };
CD59E9F1262D630900322329 /* SevereLayerType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SevereLayerType.swift; sourceTree = "<group>"; };
CD59E9F5262D639C00322329 /* RadarLayerType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadarLayerType.swift; sourceTree = "<group>"; };
CD615F7D265523BD00B717DB /* OneWeatherCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = OneWeatherCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
CD615FCB2655299A00B717DB /* NotificationName+Localization.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NotificationName+Localization.swift"; sourceTree = "<group>"; };
CD647D0125ED07D60034578B /* TodayViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TodayViewModel.swift; sourceTree = "<group>"; };
CD647D0525ED08050034578B /* ViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewModelProtocol.swift; sourceTree = "<group>"; };
CD676169262575CD0079D273 /* MapLegendGradientView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapLegendGradientView.swift; sourceTree = "<group>"; };
CD67616C262587D30079D273 /* UITabBarController+Hide.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITabBarController+Hide.swift"; sourceTree = "<group>"; };
CD67616F26259D220079D273 /* RadarMapLayersController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadarMapLayersController.swift; sourceTree = "<group>"; };
CD67617626259DD70079D273 /* MapLayersPresentationAnimator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapLayersPresentationAnimator.swift; sourceTree = "<group>"; };
CD67617B2625A60B0079D273 /* MapLayersDismissAnimator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapLayersDismissAnimator.swift; sourceTree = "<group>"; };
CD67617F2625B0F50079D273 /* RadarLayerCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadarLayerCell.swift; sourceTree = "<group>"; };
CD6761832625B6A10079D273 /* RadarLayersCellFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadarLayersCellFactory.swift; sourceTree = "<group>"; };
CD6761872625C3360079D273 /* RadarViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadarViewModel.swift; sourceTree = "<group>"; };
CD6B3035257262C2004B34B3 /* UIColor+Highlight.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+Highlight.swift"; sourceTree = "<group>"; };
CD6B303A2572680C004B34B3 /* SelfSizingButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelfSizingButton.swift; sourceTree = "<group>"; };
CD6B303D25726960004B34B3 /* ThemeProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThemeProtocol.swift; sourceTree = "<group>"; };
CD6B304225726AD1004B34B3 /* DefaultTheme.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultTheme.swift; sourceTree = "<group>"; };
......@@ -428,7 +365,6 @@
CD7BF15426203E6900A30DF5 /* RadarViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadarViewController.swift; sourceTree = "<group>"; };
CD7BF1572620410800A30DF5 /* RadarCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadarCoordinator.swift; sourceTree = "<group>"; };
CD7F3ABC262443260041C478 /* MapPinnedLayersView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapPinnedLayersView.swift; sourceTree = "<group>"; };
CD80917A2578E4A8003541A4 /* UIViewController+Alert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+Alert.swift"; sourceTree = "<group>"; };
CD822FF425D6817000A05501 /* TodayForecastCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TodayForecastCell.swift; sourceTree = "<group>"; };
CD822FF925D6890900A05501 /* OneWeatherColorsAsset.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = OneWeatherColorsAsset.xcassets; sourceTree = "<group>"; };
CD822FFD25D6976F00A05501 /* AdCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdCell.swift; sourceTree = "<group>"; };
......@@ -440,7 +376,6 @@
CD86246425E66E8A0097F3FB /* PrecipitationCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrecipitationCell.swift; sourceTree = "<group>"; };
CD86246825E672A20097F3FB /* PrecipButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrecipButton.swift; sourceTree = "<group>"; };
CD86246B25E6826A0097F3FB /* InnerShadowLayer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InnerShadowLayer.swift; sourceTree = "<group>"; };
CD866A61260F596B00E96A5C /* Dimension+Name.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Dimension+Name.swift"; sourceTree = "<group>"; };
CD866A64260F642600E96A5C /* SettingsDetailsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsDetailsViewController.swift; sourceTree = "<group>"; };
CD866A6B260F676400E96A5C /* SettingsDetailsCellFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsDetailsCellFactory.swift; sourceTree = "<group>"; };
CD866A6E260F67F200E96A5C /* SettingsDetailsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsDetailsViewModel.swift; sourceTree = "<group>"; };
......@@ -460,7 +395,6 @@
CD9B6B1325DBCDE2001D9B80 /* GraphView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GraphView.swift; sourceTree = "<group>"; };
CDA5542725EF734200A2E08C /* TodayCellFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TodayCellFactory.swift; sourceTree = "<group>"; };
CDA5542C25EF7C9700A2E08C /* ReusableCellProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReusableCellProtocol.swift; sourceTree = "<group>"; };
CDA5542F25EFA13F00A2E08C /* Measurement+String.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Measurement+String.swift"; sourceTree = "<group>"; };
CDAC9B8426319B0500AC1BF4 /* MapTimeControlItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapTimeControlItem.swift; sourceTree = "<group>"; };
CDAD97B0262042B2007FCFB1 /* MapButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapButton.swift; sourceTree = "<group>"; };
CDAD97B326207D14007FCFB1 /* MapTimeControlView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapTimeControlView.swift; sourceTree = "<group>"; };
......@@ -470,23 +404,18 @@
CDC6126125E8DAB800188DA7 /* MoonPhaseCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoonPhaseCell.swift; sourceTree = "<group>"; };
CDC6126525E9085600188DA7 /* GraphLine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GraphLine.swift; sourceTree = "<group>"; };
CDC6126925E90C8800188DA7 /* GraphLineSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GraphLineSettings.swift; sourceTree = "<group>"; };
CDC70832260FBFD3004A1974 /* UnitPressure+Atmosphere.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UnitPressure+Atmosphere.swift"; sourceTree = "<group>"; };
CDD0F1E42572425200CF5017 /* SF-Pro.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SF-Pro.ttf"; sourceTree = "<group>"; };
CDD0F1E72572429E00CF5017 /* AppFont.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppFont.swift; sourceTree = "<group>"; };
CDD0F1ED25725BCF00CF5017 /* ThemeManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThemeManager.swift; sourceTree = "<group>"; };
CDD75F0E25DE68B10099ACDB /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
CDDE8D7B262EED3C00267931 /* MapLegendSevereView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapLegendSevereView.swift; sourceTree = "<group>"; };
CDDE8D7E262EED4D00267931 /* MapLegendWeatherView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapLegendWeatherView.swift; sourceTree = "<group>"; };
CDE18DC925D165F100C80ED9 /* UITabBarController+Append.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITabBarController+Append.swift"; sourceTree = "<group>"; };
CDE18DCC25D1666700C80ED9 /* ForecastCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForecastCoordinator.swift; sourceTree = "<group>"; };
CDE18DD025D166F900C80ED9 /* ForecastViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForecastViewController.swift; sourceTree = "<group>"; };
CDE18DD725D16CB200C80ED9 /* NavigationCityButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationCityButton.swift; sourceTree = "<group>"; };
CDE2BF212609D4250085C930 /* ForecastWindSpeedCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForecastWindSpeedCell.swift; sourceTree = "<group>"; };
CDE2BF242609D9140085C930 /* ForecastWindButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForecastWindButton.swift; sourceTree = "<group>"; };
CDECDB042629A6600087F9F2 /* RadarLayer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadarLayer.swift; sourceTree = "<group>"; };
CDEE8AD625DA882200C289DE /* ForecastPeriodButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForecastPeriodButton.swift; sourceTree = "<group>"; };
CDF4808E261727E00076E9F5 /* CLAuthorizationStatus+Localized.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CLAuthorizationStatus+Localized.swift"; sourceTree = "<group>"; };
CDF48091261729680076E9F5 /* UIApplication+Settings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIApplication+Settings.swift"; sourceTree = "<group>"; };
CDF8F129262089A200DB384A /* MapTimeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapTimeView.swift; sourceTree = "<group>"; };
CDF8F12C26208E7B00DB384A /* MapCurrentTimeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapCurrentTimeView.swift; sourceTree = "<group>"; };
CDF9BF8D26133D050037847D /* LocationSearchCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationSearchCoordinator.swift; sourceTree = "<group>"; };
......@@ -496,13 +425,8 @@
CE0457922632B3DD00B3C19A /* NotificationsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationsViewController.swift; sourceTree = "<group>"; };
CE0457942632B3F900B3C19A /* NotificationsCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationsCoordinator.swift; sourceTree = "<group>"; };
CE0457972632E47B00B3C19A /* NWSAlertCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NWSAlertCell.swift; sourceTree = "<group>"; };
CE13B72726245CE2007CBD4D /* AirQuality.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AirQuality.swift; sourceTree = "<group>"; };
CE13B72A26245D0D007CBD4D /* HealthStatus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HealthStatus.swift; sourceTree = "<group>"; };
CE13B72D26245D42007CBD4D /* Pollutant.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Pollutant.swift; sourceTree = "<group>"; };
CE13B76226246743007CBD4D /* CCPAHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CCPAHelper.swift; sourceTree = "<group>"; };
CE13B7DC262478E7007CBD4D /* PSMLocationSDK.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = PSMLocationSDK.xcframework; sourceTree = "<group>"; };
CE13B7DF26247BF9007CBD4D /* UserDefaultsOptionalValue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserDefaultsOptionalValue.swift; sourceTree = "<group>"; };
CE13B7E026247BF9007CBD4D /* UserDefaultsValue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserDefaultsValue.swift; sourceTree = "<group>"; };
CE13B7EA2624805F007CBD4D /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = "<group>"; };
CE13B7EE262480B3007CBD4D /* EnvironmentManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EnvironmentManager.swift; sourceTree = "<group>"; };
CE13B7F0262480B3007CBD4D /* AdConfigManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AdConfigManager.swift; sourceTree = "<group>"; };
......@@ -529,16 +453,10 @@
CE13B809262480B3007CBD4D /* Scheduler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Scheduler.swift; sourceTree = "<group>"; };
CE13B88C26248A77007CBD4D /* GoogleService-Info-Production.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info-Production.plist"; sourceTree = "<group>"; };
CE13B88D26248A77007CBD4D /* GoogleService-Info-Staging.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info-Staging.plist"; sourceTree = "<group>"; };
CE13B98626273236007CBD4D /* NWSAlert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NWSAlert.swift; sourceTree = "<group>"; };
CE14445D2638B6A8008E2162 /* 1Weather.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = 1Weather.entitlements; sourceTree = "<group>"; };
CE14445E2638B6CF008E2162 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; };
CE1842CA264164900001D8E4 /* DefaultSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultSettings.swift; sourceTree = "<group>"; };
CE1842CD264164C50001D8E4 /* DefaultSettingsImperial.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultSettingsImperial.swift; sourceTree = "<group>"; };
CE1842D0264164D90001D8E4 /* DefaultSettingsFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultSettingsFactory.swift; sourceTree = "<group>"; };
CE1842D3264164E90001D8E4 /* DefaultSettingsMetric.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultSettingsMetric.swift; sourceTree = "<group>"; };
CE28474E26159857006C8DC5 /* HealthSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HealthSource.swift; sourceTree = "<group>"; };
CE28475126159A32006C8DC5 /* BlendHealthModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlendHealthModels.swift; sourceTree = "<group>"; };
CE28475C2615A5B3006C8DC5 /* Health.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Health.swift; sourceTree = "<group>"; };
CE28475F2615A8AD006C8DC5 /* BlendHealthSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlendHealthSource.swift; sourceTree = "<group>"; };
CE308B242637EA87001ECD8A /* CoreNotifications.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreNotifications.swift; sourceTree = "<group>"; };
CE308B252637EA87001ECD8A /* CoreNWSAlert.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreNWSAlert.swift; sourceTree = "<group>"; };
......@@ -547,7 +465,6 @@
CE376C97261EE484000B1159 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = "<group>"; };
CE3A36C62638A77E002CACC3 /* BlendFIPSSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlendFIPSSource.swift; sourceTree = "<group>"; };
CE3A36EC2638A825002CACC3 /* FIPSResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FIPSResponse.swift; sourceTree = "<group>"; };
CE578FD225F7E89400E8B85D /* DayTimeWeather.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DayTimeWeather.swift; sourceTree = "<group>"; };
CE578FE225FB415F00E8B85D /* CityCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CityCell.swift; sourceTree = "<group>"; };
CE578FE325FB415F00E8B85D /* LocationViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LocationViewController.swift; sourceTree = "<group>"; };
CE578FE425FB415F00E8B85D /* LocationsViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LocationsViewModel.swift; sourceTree = "<group>"; };
......@@ -558,7 +475,6 @@
CE849DB92638C33600DEFFBD /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
CE849DE82638C59800DEFFBD /* OneWeatherNotificationServiceExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = OneWeatherNotificationServiceExtension.entitlements; sourceTree = "<group>"; };
CE849E372638CE8000DEFFBD /* UserNotifications.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UserNotifications.framework; path = System/Library/Frameworks/UserNotifications.framework; sourceTree = SDKROOT; };
CE8805D2263AEEE6003C53B7 /* UIDevice+Convenience.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIDevice+Convenience.swift"; sourceTree = "<group>"; };
CE895F0E26393FD800214175 /* WeatherImageProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WeatherImageProvider.swift; sourceTree = "<group>"; };
CE89628B26175D8D00CA274A /* regenerate_objects.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = regenerate_objects.sh; sourceTree = "<group>"; };
CE89629126175DF400CA274A /* _CoreAirQuality.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = _CoreAirQuality.swift; sourceTree = "<group>"; };
......@@ -575,8 +491,6 @@
CE89629E26175DF500CA274A /* CoreLocation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreLocation.swift; sourceTree = "<group>"; };
CE89629F26175DF500CA274A /* CoreDailyWeather.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreDailyWeather.swift; sourceTree = "<group>"; };
CE8962A126175DF500CA274A /* CoreHourlyWeather.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreHourlyWeather.swift; sourceTree = "<group>"; };
CE9D181525ECB8370028D9D7 /* MulticastDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MulticastDelegate.swift; sourceTree = "<group>"; };
CE9D181825ECB9A70028D9D7 /* Logger.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Logger.swift; sourceTree = "<group>"; };
CE9F01B4261B2DB1009BA500 /* CoreAppData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreAppData.swift; sourceTree = "<group>"; };
CE9F01B7261B2DB6009BA500 /* _CoreAppData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = _CoreAppData.swift; sourceTree = "<group>"; };
CE9F01BA261B31A6009BA500 /* CoreDataError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreDataError.swift; sourceTree = "<group>"; };
......@@ -584,22 +498,15 @@
CE9F01C0261B3776009BA500 /* CoreDataUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreDataUtils.swift; sourceTree = "<group>"; };
CE9F01CB261C9A6D009BA500 /* AppData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppData.swift; sourceTree = "<group>"; };
CEAD00A02577B2D5003596AD /* StuffThatIsPresentInTheMainProject.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StuffThatIsPresentInTheMainProject.swift; sourceTree = "<group>"; };
CEAFF08225DFC67F00DF4EBF /* Location.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Location.swift; sourceTree = "<group>"; };
CEAFF08825DFC6B200DF4EBF /* CurrentWeather.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CurrentWeather.swift; sourceTree = "<group>"; };
CEAFF08B25DFC6BC00DF4EBF /* DailyWeather.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DailyWeather.swift; sourceTree = "<group>"; };
CEAFF08E25DFC6ED00DF4EBF /* HourlyWeather.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HourlyWeather.swift; sourceTree = "<group>"; };
CEAFF09125DFC71D00DF4EBF /* HelperTypes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HelperTypes.swift; sourceTree = "<group>"; };
CEAFF0A225E0FF0800DF4EBF /* LocationManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationManager.swift; sourceTree = "<group>"; };
CEBAC1C52638236D00A89681 /* PushNotificationsManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PushNotificationsManager.swift; sourceTree = "<group>"; };
CEBAC1C72638240800A89681 /* DeeplinksRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeeplinksRouter.swift; sourceTree = "<group>"; };
CEBAC2112638968D00A89681 /* FIPSSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FIPSSource.swift; sourceTree = "<group>"; };
CEC526F925E7959A00DA58A5 /* WeatherSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WeatherSource.swift; sourceTree = "<group>"; };
CEC526FC25E795F700DA58A5 /* WdtWeatherSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WdtWeatherSource.swift; sourceTree = "<group>"; };
CEC526FF25E7BACB00DA58A5 /* WdtLocation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WdtLocation.swift; sourceTree = "<group>"; };
CEC5270225E7BB4000DA58A5 /* WdtSurfaceObservation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WdtSurfaceObservation.swift; sourceTree = "<group>"; };
CEC5275C25E8E50B00DA58A5 /* WdtDailySummary.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WdtDailySummary.swift; sourceTree = "<group>"; };
CEC5275F25E92DDA00DA58A5 /* WdtHourlySummary.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WdtHourlySummary.swift; sourceTree = "<group>"; };
CEC7D8C32639FAF500B8836D /* Global.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Global.swift; sourceTree = "<group>"; };
CEC7D8ED2639FE2700B8836D /* OLInAppStoreManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OLInAppStoreManager.swift; sourceTree = "<group>"; };
CEC8FBAE2639756A0001A6BF /* OnboardingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingViewController.swift; sourceTree = "<group>"; };
CEC8FBB1263976240001A6BF /* OnboardingCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingCoordinator.swift; sourceTree = "<group>"; };
......@@ -609,12 +516,7 @@
CEDE4E8025EEFD56007457E9 /* WdtDailySummariesArray.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WdtDailySummariesArray.swift; sourceTree = "<group>"; };
CEDE4E8125EEFD56007457E9 /* WdtHourlySummariesArray.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WdtHourlySummariesArray.swift; sourceTree = "<group>"; };
CEDE4E8825EEFFEF007457E9 /* WdtDayNight.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WdtDayNight.swift; sourceTree = "<group>"; };
CEDE4F0A25EFA3A7007457E9 /* UpdatableModelObject.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdatableModelObject.swift; sourceTree = "<group>"; };
CEDE4F0E25EFA3B4007457E9 /* UpdatableModelObjectInTime.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdatableModelObjectInTime.swift; sourceTree = "<group>"; };
CEE0A178262FA9650044C257 /* DelayedSaveStorage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DelayedSaveStorage.swift; sourceTree = "<group>"; };
CEE0A17A263179E50044C257 /* NWSAlertInfoBlock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NWSAlertInfoBlock.swift; sourceTree = "<group>"; };
CEE0A19F26317A1E0044C257 /* NWSAlertExtendedInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NWSAlertExtendedInfo.swift; sourceTree = "<group>"; };
CEE0A1A126317A3F0044C257 /* NWSSeverityLevel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NWSSeverityLevel.swift; sourceTree = "<group>"; };
CEE0A1A326317A8F0044C257 /* NWSAlertInfoParser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NWSAlertInfoParser.swift; sourceTree = "<group>"; };
CEF959642600C2F900975FAA /* AnalyticsService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsService.swift; sourceTree = "<group>"; };
CEF959682600C30500975FAA /* AnalyticsGlobal.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsGlobal.swift; sourceTree = "<group>"; };
......@@ -639,6 +541,7 @@
CE14445F2638B6CF008E2162 /* StoreKit.framework in Frameworks */,
CE13B97B2626FB11007CBD4D /* PSMLocationSDK.xcframework in Frameworks */,
34EAFD887EF2D1D7449A016C /* Pods_1Weather.framework in Frameworks */,
CD615F7E265523BD00B717DB /* OneWeatherCore.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
......@@ -677,7 +580,6 @@
isa = PBXGroup;
children = (
CEAFF09A25DFC79100DF4EBF /* Model */,
CEC526F925E7959A00DA58A5 /* WeatherSource.swift */,
CEC526FC25E795F700DA58A5 /* WdtWeatherSource.swift */,
);
path = Weather;
......@@ -720,6 +622,7 @@
CD1237C1255D5C5900C98139 /* 1Weather */ = {
isa = PBXGroup;
children = (
CD615FCA2655297B00B717DB /* Extensions */,
CEC7D8EC2639FE1B00B8836D /* InApps */,
CE14445D2638B6A8008E2162 /* 1Weather.entitlements */,
CE13B78926247474007CBD4D /* External */,
......@@ -734,7 +637,6 @@
CD647D0025ED07AF0034578B /* ViewModels */,
CD17C5F925D15B5500EE884E /* Coordinators */,
CDD0F1DC2572400200CF5017 /* UI */,
CD1237EF255D838600C98139 /* Extensions */,
CDD0F1E2257240DA00CF5017 /* Resources */,
CD1237C2255D5C5900C98139 /* AppDelegate.swift */,
CD1237D0255D5C5C00C98139 /* Info.plist */,
......@@ -743,31 +645,6 @@
path = 1Weather;
sourceTree = "<group>";
};
CD1237EF255D838600C98139 /* Extensions */ = {
isa = PBXGroup;
children = (
CD1237F0255D83C500C98139 /* UIColor+Hex.swift */,
CD6B3035257262C2004B34B3 /* UIColor+Highlight.swift */,
CD80917A2578E4A8003541A4 /* UIViewController+Alert.swift */,
CDE18DC925D165F100C80ED9 /* UITabBarController+Append.swift */,
CD39F2ED25DE858D009FE398 /* NotificationName+Localization.swift */,
CDA5542F25EFA13F00A2E08C /* Measurement+String.swift */,
CD35DFCB260341B000F2138F /* Calendar+TimeZone.swift */,
CD35DFD326034BCD00F2138F /* UIStackView+RemoveAll.swift */,
CD593BC826089FC100C93428 /* UITableView+HeaderSize.swift */,
CD593BDB2608CDF100C93428 /* Date+Now.swift */,
CD2B213F260A366B00AB918A /* UIView+InterfaceStyle.swift */,
CD866A61260F596B00E96A5C /* Dimension+Name.swift */,
CDC70832260FBFD3004A1974 /* UnitPressure+Atmosphere.swift */,
CDF4808E261727E00076E9F5 /* CLAuthorizationStatus+Localized.swift */,
CDF48091261729680076E9F5 /* UIApplication+Settings.swift */,
CD67616C262587D30079D273 /* UITabBarController+Hide.swift */,
CD43DF022636C6640010C9F7 /* CACornerMask+All.swift */,
CE8805D2263AEEE6003C53B7 /* UIDevice+Convenience.swift */,
);
path = Extensions;
sourceTree = "<group>";
};
CD15DB3B25DA6C2800024727 /* Controls */ = {
isa = PBXGroup;
children = (
......@@ -902,6 +779,14 @@
path = Buttons;
sourceTree = "<group>";
};
CD615FCA2655297B00B717DB /* Extensions */ = {
isa = PBXGroup;
children = (
CD615FCB2655299A00B717DB /* NotificationName+Localization.swift */,
);
path = Extensions;
sourceTree = "<group>";
};
CD647D0025ED07AF0034578B /* ViewModels */ = {
isa = PBXGroup;
children = (
......@@ -1213,17 +1098,6 @@
path = Forecast;
sourceTree = "<group>";
};
CDECDB022629A5F50087F9F2 /* RadarLayers */ = {
isa = PBXGroup;
children = (
CDECDB042629A6600087F9F2 /* RadarLayer.swift */,
CD59E9F5262D639C00322329 /* RadarLayerType.swift */,
CD59E9EE262D62DA00322329 /* WeatherLayerType.swift */,
CD59E9F1262D630900322329 /* SevereLayerType.swift */,
);
path = RadarLayers;
sourceTree = "<group>";
};
CE13B76126246743007CBD4D /* CCPA */ = {
isa = PBXGroup;
children = (
......@@ -1248,15 +1122,6 @@
path = PSMLocationSDK;
sourceTree = "<group>";
};
CE13B7DE26247BF9007CBD4D /* PropertyWrappers */ = {
isa = PBXGroup;
children = (
CE13B7DF26247BF9007CBD4D /* UserDefaultsOptionalValue.swift */,
CE13B7E026247BF9007CBD4D /* UserDefaultsValue.swift */,
);
path = PropertyWrappers;
sourceTree = "<group>";
};
CE13B7EC262480B3007CBD4D /* Ads */ = {
isa = PBXGroup;
children = (
......@@ -1345,43 +1210,11 @@
isa = PBXGroup;
children = (
CE04561E26282325003D252B /* NWSCurrentEventsReponse.swift */,
CE13B98626273236007CBD4D /* NWSAlert.swift */,
CEE0A1A126317A3F0044C257 /* NWSSeverityLevel.swift */,
CEE0A19F26317A1E0044C257 /* NWSAlertExtendedInfo.swift */,
CEE0A17A263179E50044C257 /* NWSAlertInfoBlock.swift */,
CE3A36EC2638A825002CACC3 /* FIPSResponse.swift */,
);
path = Model;
sourceTree = "<group>";
};
CE13B98326272A59007CBD4D /* Notifications */ = {
isa = PBXGroup;
children = (
87D81581262EFC9A0015A6D1 /* Notifications.swift */,
);
path = Notifications;
sourceTree = "<group>";
};
CE1842A12641647E0001D8E4 /* Settings */ = {
isa = PBXGroup;
children = (
CD37D3EA260DD30F002669D6 /* Settings.swift */,
CE1842D6264165130001D8E4 /* DefaultSettings */,
);
path = Settings;
sourceTree = "<group>";
};
CE1842D6264165130001D8E4 /* DefaultSettings */ = {
isa = PBXGroup;
children = (
CE1842D0264164D90001D8E4 /* DefaultSettingsFactory.swift */,
CE1842CA264164900001D8E4 /* DefaultSettings.swift */,
CE1842CD264164C50001D8E4 /* DefaultSettingsImperial.swift */,
CE1842D3264164E90001D8E4 /* DefaultSettingsMetric.swift */,
);
path = DefaultSettings;
sourceTree = "<group>";
};
CE28474C261597EB006C8DC5 /* Health */ = {
isa = PBXGroup;
children = (
......@@ -1400,28 +1233,6 @@
path = Model;
sourceTree = "<group>";
};
CE28475726159B78006C8DC5 /* Weather */ = {
isa = PBXGroup;
children = (
CEAFF08825DFC6B200DF4EBF /* CurrentWeather.swift */,
CEAFF08B25DFC6BC00DF4EBF /* DailyWeather.swift */,
CEAFF08E25DFC6ED00DF4EBF /* HourlyWeather.swift */,
CE578FD225F7E89400E8B85D /* DayTimeWeather.swift */,
);
path = Weather;
sourceTree = "<group>";
};
CE28475926159B85006C8DC5 /* Health */ = {
isa = PBXGroup;
children = (
CE28475C2615A5B3006C8DC5 /* Health.swift */,
CE13B72726245CE2007CBD4D /* AirQuality.swift */,
CE13B72A26245D0D007CBD4D /* HealthStatus.swift */,
CE13B72D26245D42007CBD4D /* Pollutant.swift */,
);
path = Health;
sourceTree = "<group>";
};
CE578FE025FB415E00E8B85D /* Locations */ = {
isa = PBXGroup;
children = (
......@@ -1498,13 +1309,9 @@
CE9D181425ECB8370028D9D7 /* Common */ = {
isa = PBXGroup;
children = (
CE13B7DE26247BF9007CBD4D /* PropertyWrappers */,
CE9D181825ECB9A70028D9D7 /* Logger.swift */,
CE9D181525ECB8370028D9D7 /* MulticastDelegate.swift */,
CDA5542C25EF7C9700A2E08C /* ReusableCellProtocol.swift */,
CD37D404260DFFDD002669D6 /* CellFactory.swift */,
CE13B7EA2624805F007CBD4D /* Constants.swift */,
CEC7D8C32639FAF500B8836D /* Global.swift */,
);
path = Common;
sourceTree = "<group>";
......@@ -1513,13 +1320,8 @@
isa = PBXGroup;
children = (
CE13B76126246743007CBD4D /* CCPA */,
CDECDB022629A5F50087F9F2 /* RadarLayers */,
CEAFF09125DFC71D00DF4EBF /* HelperTypes.swift */,
CEDE4F0925EFA376007457E9 /* Protocols */,
CEAFF0A025E0FEF100DF4EBF /* ModelObjects */,
CEAFF0A225E0FF0800DF4EBF /* LocationManager.swift */,
CEF959A526035A2600975FAA /* DeviceLocationMonitor.swift */,
CE1842A12641647E0001D8E4 /* Settings */,
CE6BE4932634170800626822 /* USStateCode.swift */,
CE895F0E26393FD800214175 /* WeatherImageProvider.swift */,
CE6F5F0B263C8B3C00973137 /* SmartTextProvider.swift */,
......@@ -1553,18 +1355,6 @@
path = Model;
sourceTree = "<group>";
};
CEAFF0A025E0FEF100DF4EBF /* ModelObjects */ = {
isa = PBXGroup;
children = (
87C1720C25FF870600DA3464 /* GeoNamesPlace.swift */,
CEAFF08225DFC67F00DF4EBF /* Location.swift */,
CE28475726159B78006C8DC5 /* Weather */,
CE28475926159B85006C8DC5 /* Health */,
CE13B98326272A59007CBD4D /* Notifications */,
);
path = ModelObjects;
sourceTree = "<group>";
};
CEC7D8EC2639FE1B00B8836D /* InApps */ = {
isa = PBXGroup;
children = (
......@@ -1593,16 +1383,6 @@
path = HelperObjects;
sourceTree = "<group>";
};
CEDE4F0925EFA376007457E9 /* Protocols */ = {
isa = PBXGroup;
children = (
CEDE4F0A25EFA3A7007457E9 /* UpdatableModelObject.swift */,
CEDE4F0E25EFA3B4007457E9 /* UpdatableModelObjectInTime.swift */,
87C1720F25FF874B00DA3464 /* PartialLocation.swift */,
);
path = Protocols;
sourceTree = "<group>";
};
CEF959632600C2E300975FAA /* Analytics */ = {
isa = PBXGroup;
children = (
......@@ -1656,6 +1436,7 @@
DBFD169AA2AA6A3CB5B68BB5 /* Frameworks */ = {
isa = PBXGroup;
children = (
CD615F7D265523BD00B717DB /* OneWeatherCore.framework */,
CE849E372638CE8000DEFFBD /* UserNotifications.framework */,
CE14445E2638B6CF008E2162 /* StoreKit.framework */,
6B543196B99BA697763514F6 /* Pods_1Weather.framework */,
......@@ -1719,7 +1500,7 @@
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 1240;
LastUpgradeCheck = 1240;
LastUpgradeCheck = 1250;
TargetAttributes = {
CD1237BE255D5C5900C98139 = {
CreatedOnToolsVersion = 12.1;
......@@ -1949,28 +1730,20 @@
CD32CE08260C743B00235081 /* MenuViewModel.swift in Sources */,
CD866A76260F77C500E96A5C /* SettingsDetailsCoordinator.swift in Sources */,
CE0457902632B3BC00B3C19A /* NotificationsViewModel.swift in Sources */,
CEAFF09225DFC71D00DF4EBF /* HelperTypes.swift in Sources */,
CE13B81A262480B3007CBD4D /* AdManager.swift in Sources */,
CE13B76326246743007CBD4D /* CCPAHelper.swift in Sources */,
CD866A62260F596B00E96A5C /* Dimension+Name.swift in Sources */,
CDE2BF222609D4250085C930 /* ForecastWindSpeedCell.swift in Sources */,
CD866A6C260F676400E96A5C /* SettingsDetailsCellFactory.swift in Sources */,
CDDE8D7F262EED4D00267931 /* MapLegendWeatherView.swift in Sources */,
CDA5543025EFA13F00A2E08C /* Measurement+String.swift in Sources */,
CE13B815262480B3007CBD4D /* StoriesNativeAd.swift in Sources */,
CE13B72E26245D42007CBD4D /* Pollutant.swift in Sources */,
CEF9596C2600C32E00975FAA /* AnalyticsEvent.swift in Sources */,
CEF959982600C88100975FAA /* AnalyticsParameter.swift in Sources */,
87C171F425FF7A4000DA3464 /* PopularCitiesManager.swift in Sources */,
87C1724925FF94F400DA3464 /* ConfigManager.swift in Sources */,
CE9D181925ECB9A70028D9D7 /* Logger.swift in Sources */,
CE1842D1264164D90001D8E4 /* DefaultSettingsFactory.swift in Sources */,
CE8962AE26175DF500CA274A /* CoreLocation.swift in Sources */,
CD67616A262575CD0079D273 /* MapLegendGradientView.swift in Sources */,
CE578FD325F7E89400E8B85D /* DayTimeWeather.swift in Sources */,
CD593BCC2608A4F200C93428 /* ForecastDailyCell.swift in Sources */,
CEF959692600C30500975FAA /* AnalyticsGlobal.swift in Sources */,
CEAFF08925DFC6B200DF4EBF /* CurrentWeather.swift in Sources */,
CD866A72260F6A5300E96A5C /* SettingsDetailsCell.swift in Sources */,
CD6761802625B0F50079D273 /* RadarLayerCell.swift in Sources */,
CEC5270325E7BB4000DA58A5 /* WdtSurfaceObservation.swift in Sources */,
......@@ -1978,12 +1751,8 @@
CE13B80F262480B3007CBD4D /* BRNativeBannerContainerView.swift in Sources */,
CD6761842625B6A10079D273 /* RadarLayersCellFactory.swift in Sources */,
CD67617C2625A60B0079D273 /* MapLayersDismissAnimator.swift in Sources */,
CE1842CB264164900001D8E4 /* DefaultSettings.swift in Sources */,
CEAFF08C25DFC6BD00DF4EBF /* DailyWeather.swift in Sources */,
CEDE4F0B25EFA3A7007457E9 /* UpdatableModelObject.swift in Sources */,
CE3A36C72638A77E002CACC3 /* BlendFIPSSource.swift in Sources */,
CE13B814262480B3007CBD4D /* BRNativeBannerView.swift in Sources */,
CE13B7E126247BF9007CBD4D /* UserDefaultsOptionalValue.swift in Sources */,
CE8962A626175DF500CA274A /* _CoreHealth.swift in Sources */,
CE308B2B2637EA8E001ECD8A /* _CoreNotifications.swift in Sources */,
CD18728B2624763000AFEDAA /* MapLegendView.swift in Sources */,
......@@ -1994,9 +1763,6 @@
CE13B818262480B3007CBD4D /* A9BidObject.swift in Sources */,
CDD0F1E82572429E00CF5017 /* AppFont.swift in Sources */,
CE8962AA26175DF500CA274A /* CoreAirQuality.swift in Sources */,
CE28475D2615A5B3006C8DC5 /* Health.swift in Sources */,
CEE0A1A026317A1E0044C257 /* NWSAlertExtendedInfo.swift in Sources */,
CD43DF032636C6640010C9F7 /* CACornerMask+All.swift in Sources */,
CDC6124F25E7964700188DA7 /* TodayDayTimesCell.swift in Sources */,
CD593BC226088A5900C93428 /* TimePeriodOffsetHolder.swift in Sources */,
CEC8FBB5263976400001A6BF /* OnboardingViewModel.swift in Sources */,
......@@ -2007,14 +1773,12 @@
CD15DB3D25DA6C5100024727 /* ForecastTimePeriodControl.swift in Sources */,
CD67617726259DD70079D273 /* MapLayersPresentationAnimator.swift in Sources */,
87DE8CB2263C09BA00E1C8D4 /* LegacyWdtLocation.swift in Sources */,
CD1237F1255D83C500C98139 /* UIColor+Hex.swift in Sources */,
CD7BF1582620410800A30DF5 /* RadarCoordinator.swift in Sources */,
CDD0F1EE25725BCF00CF5017 /* ThemeManager.swift in Sources */,
CD1237F4255D889F00C98139 /* GradientView.swift in Sources */,
CE308B262637EA88001ECD8A /* CoreNotifications.swift in Sources */,
CD37D3EF260DF4E6002669D6 /* SettingsViewController.swift in Sources */,
CE6BE4942634170800626822 /* USStateCode.swift in Sources */,
CD593BC926089FC100C93428 /* UITableView+HeaderSize.swift in Sources */,
CD37D3F3260DF4FB002669D6 /* SettingsCoordinator.swift in Sources */,
CD1237C3255D5C5900C98139 /* AppDelegate.swift in Sources */,
CEF959652600C2F900975FAA /* AnalyticsService.swift in Sources */,
......@@ -2023,56 +1787,43 @@
CEC8FBB2263976240001A6BF /* OnboardingCoordinator.swift in Sources */,
CD8B60B626381E0F0055CB3F /* AdsUserDefaultsWrapper.swift in Sources */,
CD9B6B1425DBCDE2001D9B80 /* GraphView.swift in Sources */,
CD39F2EE25DE858D009FE398 /* NotificationName+Localization.swift in Sources */,
CEAFF08F25DFC6ED00DF4EBF /* HourlyWeather.swift in Sources */,
87DE8C81263BFBCE00E1C8D4 /* LegacyMigrationManager.swift in Sources */,
87C1721025FF874B00DA3464 /* PartialLocation.swift in Sources */,
CD866A6F260F67F200E96A5C /* SettingsDetailsViewModel.swift in Sources */,
CD71709025FA317700A63C27 /* ForecastTimePeriodView.swift in Sources */,
CD35DFD426034BCD00F2138F /* UIStackView+RemoveAll.swift in Sources */,
CE13B812262480B3007CBD4D /* NativeAdItem.swift in Sources */,
CE13B811262480B3007CBD4D /* StoriesNativeAdCell.swift in Sources */,
CD37D3E5260CB05C002669D6 /* MenuFooterView.swift in Sources */,
CDE18DD825D16CB200C80ED9 /* NavigationCityButton.swift in Sources */,
CDAD97B1262042B2007FCFB1 /* MapButton.swift in Sources */,
CD593BDC2608CDF100C93428 /* Date+Now.swift in Sources */,
CD17C60225D15C8500EE884E /* CoordinatorProtocol.swift in Sources */,
CDA5542825EF734200A2E08C /* TodayCellFactory.swift in Sources */,
CE9F01CC261C9A6E009BA500 /* AppData.swift in Sources */,
CEF959742600C3A400975FAA /* FlurryAnalyticsService.swift in Sources */,
CD59E9F6262D639C00322329 /* RadarLayerType.swift in Sources */,
CE2847602615A8AD006C8DC5 /* BlendHealthSource.swift in Sources */,
CD86C22225F0DCCB00F38A16 /* PrecipitationView.swift in Sources */,
CE8962AD26175DF500CA274A /* CoreHealth.swift in Sources */,
CD17C5FF25D15B7C00EE884E /* TodayCoordinator.swift in Sources */,
CE9F01BE261B34C0009BA500 /* CoreDataAppModelConvertable.swift in Sources */,
CD822FF525D6817000A05501 /* TodayForecastCell.swift in Sources */,
CD2B2140260A366B00AB918A /* UIView+InterfaceStyle.swift in Sources */,
CD37D401260DF744002669D6 /* SettingsCell.swift in Sources */,
CEDE4E8525EEFD56007457E9 /* WdtHourlySummariesArray.swift in Sources */,
CDC6125725E7AB1A00188DA7 /* TodayAirQualityCell.swift in Sources */,
CD8B60AE263819400055CB3F /* NWSAlertViewController.swift in Sources */,
CD593BCF2608A50900C93428 /* ForecastHourlyCell.swift in Sources */,
CD6B3036257262C2004B34B3 /* UIColor+Highlight.swift in Sources */,
87DE8CF4263C267B00E1C8D4 /* LegacySettings.swift in Sources */,
CEE0A17B263179E60044C257 /* NWSAlertInfoBlock.swift in Sources */,
CD1DDD332602305200AC62B2 /* ForecastInfoCell.swift in Sources */,
CEDE4E8425EEFD56007457E9 /* WdtDailySummariesArray.swift in Sources */,
CDEE8AD725DA882200C289DE /* ForecastPeriodButton.swift in Sources */,
CD59E9EF262D62DA00322329 /* WeatherLayerType.swift in Sources */,
CDE18DD125D166F900C80ED9 /* ForecastViewController.swift in Sources */,
CE8962AC26175DF500CA274A /* CoreCurrentWeather.swift in Sources */,
CE9F01BB261B31A6009BA500 /* CoreDataError.swift in Sources */,
CD39F2F525DE9571009FE398 /* ArrowButton.swift in Sources */,
CE13B72826245CE2007CBD4D /* AirQuality.swift in Sources */,
CE8962A526175DF500CA274A /* _CoreHourlyWeather.swift in Sources */,
CEDE4E8325EEFD56007457E9 /* WdtLocationResponse.swift in Sources */,
CD37D3FE260DF726002669D6 /* SettingsCellFactory.swift in Sources */,
CD8E041625F8F91B001785B6 /* ForecastCellFactory.swift in Sources */,
87C1720D25FF870600DA3464 /* GeoNamesPlace.swift in Sources */,
CE8962A826175DF500CA274A /* _CoreCurrentWeather.swift in Sources */,
CEFB857A2617510700C5CDD2 /* 1WModel.xcdatamodeld in Sources */,
CDC70833260FBFD4004A1974 /* UnitPressure+Atmosphere.swift in Sources */,
CDC6125325E79C8F00188DA7 /* DayTimeView.swift in Sources */,
CE13B81B262480B3007CBD4D /* AdView.swift in Sources */,
CD251EDC26036E5400ED7A65 /* DayTimePrecipitationView.swift in Sources */,
......@@ -2083,13 +1834,10 @@
CEDE4E8225EEFD56007457E9 /* WdtWeatherCode.swift in Sources */,
CE04561F26282325003D252B /* NWSCurrentEventsReponse.swift in Sources */,
CD1DDD30260218AE00AC62B2 /* DaysControlView.swift in Sources */,
CE9D181625ECB8370028D9D7 /* MulticastDelegate.swift in Sources */,
CE578FE725FB415F00E8B85D /* LocationsViewModel.swift in Sources */,
CD82300A25D6B2AF00A05501 /* AppTabBarController.swift in Sources */,
CE9F01C1261B3776009BA500 /* CoreDataUtils.swift in Sources */,
CD67616D262587D30079D273 /* UITabBarController+Hide.swift in Sources */,
CDC6126225E8DAB800188DA7 /* MoonPhaseCell.swift in Sources */,
CE1842CE264164C50001D8E4 /* DefaultSettingsImperial.swift in Sources */,
CEBAC2122638968D00A89681 /* FIPSSource.swift in Sources */,
CD37D3D6260C93B3002669D6 /* MenuCellFactory.swift in Sources */,
CD8B60AD263819400055CB3F /* NWSAlertInfoBlockTableViewCell.swift in Sources */,
......@@ -2097,10 +1845,8 @@
CD37D3FA260DF714002669D6 /* SettingsThemeCell.swift in Sources */,
CD6B303E25726960004B34B3 /* ThemeProtocol.swift in Sources */,
CD6B303B2572680C004B34B3 /* SelfSizingButton.swift in Sources */,
CD35DFCC260341B000F2138F /* Calendar+TimeZone.swift in Sources */,
CD9B6B1125DBC723001D9B80 /* CubicCurveAlgorithm.swift in Sources */,
CD8B60B4263819790055CB3F /* NotificationsViewController.swift in Sources */,
CE8805D3263AEEE6003C53B7 /* UIDevice+Convenience.swift in Sources */,
CEC5270025E7BACB00DA58A5 /* WdtLocation.swift in Sources */,
CE8962A726175DF500CA274A /* _CoreLocation.swift in Sources */,
CD67617026259D220079D273 /* RadarMapLayersController.swift in Sources */,
......@@ -2111,6 +1857,7 @@
CD8B60AB263819400055CB3F /* NWSAlertCellFactory.swift in Sources */,
CDAC9B8526319B0500AC1BF4 /* MapTimeControlItem.swift in Sources */,
CD4742D0261200500061AC95 /* TodayAlertCell.swift in Sources */,
CD615FCC2655299A00B717DB /* NotificationName+Localization.swift in Sources */,
CD15DB4225DA806C00024727 /* TodayForecastTimePeriodCell.swift in Sources */,
CEE0A179262FA9650044C257 /* DelayedSaveStorage.swift in Sources */,
CE0456242629C04C003D252B /* NWSAlertsManager.swift in Sources */,
......@@ -2119,7 +1866,6 @@
CE8962AB26175DF500CA274A /* CorePollutant.swift in Sources */,
87D815AA2636D5E60015A6D1 /* NWSAlertCoordinator.swift in Sources */,
CEC5276025E92DDA00DA58A5 /* WdtHourlySummary.swift in Sources */,
CDE18DCA25D165F100C80ED9 /* UITabBarController+Append.swift in Sources */,
CE8962AF26175DF500CA274A /* CoreDailyWeather.swift in Sources */,
CDE2BF252609D9140085C930 /* ForecastWindButton.swift in Sources */,
CD32CE16260C77C600235081 /* MenuHeaderButton.swift in Sources */,
......@@ -2138,14 +1884,11 @@
CDDE8D7C262EED3C00267931 /* MapLegendSevereView.swift in Sources */,
CD6761882625C3360079D273 /* RadarViewModel.swift in Sources */,
CDF8F12A262089A200DB384A /* MapTimeView.swift in Sources */,
CEC526FA25E7959A00DA58A5 /* WeatherSource.swift in Sources */,
CDF4808F261727E00076E9F5 /* CLAuthorizationStatus+Localized.swift in Sources */,
CE13B81D262480B3007CBD4D /* BRMoPubAdView.m in Sources */,
CD37D3DE260C9E37002669D6 /* MenuCell.swift in Sources */,
CD822FFE25D6976F00A05501 /* AdCell.swift in Sources */,
CEF959A626035A2600975FAA /* DeviceLocationMonitor.swift in Sources */,
CD32CDFF260B2E5400235081 /* ForecastDescriptionView.swift in Sources */,
CD59E9F2262D630900322329 /* SevereLayerType.swift in Sources */,
CD16A17A262D81880028E74A /* UserDefaultsWrapper.swift in Sources */,
CEC5275D25E8E50B00DA58A5 /* WdtDailySummary.swift in Sources */,
CD8B60AC263819400055CB3F /* NWSForecastOfficeTableViewCell.swift in Sources */,
......@@ -2153,35 +1896,26 @@
CDE18DCD25D1666700C80ED9 /* ForecastCoordinator.swift in Sources */,
CE895F0F26393FD800214175 /* WeatherImageProvider.swift in Sources */,
CDC6126625E9085600188DA7 /* GraphLine.swift in Sources */,
CE13B98726273236007CBD4D /* NWSAlert.swift in Sources */,
CE13B819262480B3007CBD4D /* A9Cache.swift in Sources */,
CE578FE625FB415F00E8B85D /* LocationViewController.swift in Sources */,
CEE0A1A226317A3F0044C257 /* NWSSeverityLevel.swift in Sources */,
CD86246525E66E8A0097F3FB /* PrecipitationCell.swift in Sources */,
CD80917B2578E4A8003541A4 /* UIViewController+Alert.swift in Sources */,
CEF959932600C63500975FAA /* Analytics.swift in Sources */,
CEE0A1A426317A8F0044C257 /* NWSAlertInfoParser.swift in Sources */,
CEBAC1C62638236D00A89681 /* PushNotificationsManager.swift in Sources */,
CE13B821262480B3007CBD4D /* Scheduler.swift in Sources */,
CEDE4F0F25EFA3B4007457E9 /* UpdatableModelObjectInTime.swift in Sources */,
CE13B81E262480B3007CBD4D /* AdCacheManager.swift in Sources */,
CEC7D8C42639FAF600B8836D /* Global.swift in Sources */,
CE13B72B26245D0D007CBD4D /* HealthStatus.swift in Sources */,
CE8962A426175DF500CA274A /* _CorePollutant.swift in Sources */,
CEBAC1C82638240800A89681 /* DeeplinksRouter.swift in Sources */,
CD3F6E6925FA59D4002DB99B /* ForecastDetailPeriodButton.swift in Sources */,
CD37D405260DFFDD002669D6 /* CellFactory.swift in Sources */,
CD37D3F6260DF5BA002669D6 /* SettingsViewModel.swift in Sources */,
CD37D3EB260DD30F002669D6 /* Settings.swift in Sources */,
CE13B80C262480B3007CBD4D /* AdConfigManager.swift in Sources */,
CD17C5F625D15B4400EE884E /* TodayViewController.swift in Sources */,
CE308B272637EA88001ECD8A /* CoreNWSAlert.swift in Sources */,
CD86245E25E646350097F3FB /* SunUvView.swift in Sources */,
CDF8F12D26208E7B00DB384A /* MapCurrentTimeView.swift in Sources */,
CEAFF08325DFC67F00DF4EBF /* Location.swift in Sources */,
CE6F5F0C263C8B3D00973137 /* SmartTextProvider.swift in Sources */,
CEC7D8EE2639FE2700B8836D /* OLInAppStoreManager.swift in Sources */,
CDECDB052629A6600087F9F2 /* RadarLayer.swift in Sources */,
CEFB857226174F7A00C5CDD2 /* Storage.swift in Sources */,
87DE8D01263C4ADD00E1C8D4 /* WdtHealth.swift in Sources */,
CD82300725D6A73F00A05501 /* TodayConditionButton.swift in Sources */,
......@@ -2193,14 +1927,10 @@
CD32CE12260C77B400235081 /* MenuBuyButton.swift in Sources */,
CD86246C25E6826A0097F3FB /* InnerShadowLayer.swift in Sources */,
CE578FE525FB415F00E8B85D /* CityCell.swift in Sources */,
87D81582262EFC9B0015A6D1 /* Notifications.swift in Sources */,
CE1842D4264164E90001D8E4 /* DefaultSettingsMetric.swift in Sources */,
CEAFF0A325E0FF0800DF4EBF /* LocationManager.swift in Sources */,
CE13B7E226247BF9007CBD4D /* UserDefaultsValue.swift in Sources */,
CEAD00A12577B2D5003596AD /* StuffThatIsPresentInTheMainProject.swift in Sources */,
CEDE4E8925EEFFEF007457E9 /* WdtDayNight.swift in Sources */,
CE13B820262480B3007CBD4D /* AdLogger.swift in Sources */,
CDF48092261729680076E9F5 /* UIApplication+Settings.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
......
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1240"
LastUpgradeVersion = "1250"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
......
......@@ -12,7 +12,7 @@
<key>OneWeatherNotificationServiceExtension.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>41</integer>
<integer>44</integer>
</dict>
<key>PG (Playground) 1.xcscheme</key>
<dict>
......
......@@ -2,6 +2,9 @@
<Workspace
version = "1.0">
<FileRef
location = "group:OneWeatherCore/OneWeatherCore.xcodeproj">
</FileRef>
<FileRef
location = "group:1Weather.xcodeproj">
</FileRef>
<FileRef
......
......@@ -9,49 +9,49 @@
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>4</integer>
<integer>42</integer>
</dict>
<key>PG (Playground) 2.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>6</integer>
<integer>43</integer>
</dict>
<key>PG (Playground) 3.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>7</integer>
<integer>44</integer>
</dict>
<key>PG (Playground) 4.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>10</integer>
<integer>46</integer>
</dict>
<key>PG (Playground) 5.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>11</integer>
<integer>47</integer>
</dict>
<key>PG (Playground) 6.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>12</integer>
<integer>48</integer>
</dict>
<key>PG (Playground).xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>1</integer>
<integer>2</integer>
</dict>
</dict>
</dict>
......
......@@ -6,6 +6,7 @@
//
import Foundation
import OneWeatherCore
enum WdtWeatherCode: String, Codable {
// "ic_static_smoke"
......
......@@ -6,6 +6,7 @@
//
import Foundation
import OneWeatherCore
struct WdtSurfaceObservation: Codable {
public var dateTimeLocal: String? // can be nil for MICRO (partial) update
......
......@@ -7,23 +7,6 @@
import UIKit
public enum AppTheme: Int {
case light = 0
case dark
case system
var nameForEvent: String {
switch self {
case .light:
return "light"
case .dark:
return "dark"
case .system:
return "system"
}
}
}
public struct ThemeManager {
public struct Colors {
static let locationBlue = UIColor(hex: 0x1071F0)
......
......@@ -6,6 +6,8 @@
//
import UIKit
import OneWeatherCore
import Localize_Swift
class ForecastConditionView: UIView {
//Private
......
......@@ -6,6 +6,7 @@
//
import UIKit
import OneWeatherCore
protocol RadarLayerCellDelegate: AnyObject {
func cellPinButtonTouched(atLayer:RadarLayer)
......
......@@ -6,6 +6,7 @@
//
import UIKit
import OneWeatherCore
class SettingsDetailsCell: UITableViewCell {
//Private
......
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 50;
objects = {
/* Begin PBXBuildFile section */
CD2D55D526553384007B70F4 /* UserDefaultsOptionalValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD2D55D22655336F007B70F4 /* UserDefaultsOptionalValue.swift */; };
CD2D55D626553384007B70F4 /* UserDefaultsValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD2D55D32655336F007B70F4 /* UserDefaultsValue.swift */; };
CD2D55D8265533F4007B70F4 /* UserDefaultsWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD2D55D7265533F3007B70F4 /* UserDefaultsWrapper.swift */; };
CD2D55DA26553751007B70F4 /* NWSAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD2D55D926553750007B70F4 /* NWSAlert.swift */; };
CD2D55DD2655377F007B70F4 /* NWSAlertExtendedInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD2D55DB2655377F007B70F4 /* NWSAlertExtendedInfo.swift */; };
CD2D55DE2655377F007B70F4 /* NWSSeverityLevel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD2D55DC2655377F007B70F4 /* NWSSeverityLevel.swift */; };
CD2D55E0265537DC007B70F4 /* NWSAlertInfoBlock.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD2D55DF265537DC007B70F4 /* NWSAlertInfoBlock.swift */; };
CD550FBA265531A100257FB5 /* RadarLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD550FB52655318D00257FB5 /* RadarLayer.swift */; };
CD550FBB265531A100257FB5 /* RadarLayerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD550FB62655318D00257FB5 /* RadarLayerType.swift */; };
CD550FBC265531A100257FB5 /* WeatherLayerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD550FB72655318D00257FB5 /* WeatherLayerType.swift */; };
CD550FBD265531A100257FB5 /* SevereLayerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD550FB82655318D00257FB5 /* SevereLayerType.swift */; };
CD615F6D265523A400B717DB /* OneWeatherCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD615F63265523A400B717DB /* OneWeatherCore.framework */; };
CD615F72265523A400B717DB /* OneWeatherCoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615F71265523A400B717DB /* OneWeatherCoreTests.swift */; };
CD615F74265523A400B717DB /* OneWeatherCore.h in Headers */ = {isa = PBXBuildFile; fileRef = CD615F66265523A400B717DB /* OneWeatherCore.h */; settings = {ATTRIBUTES = (Public, ); }; };
CD615F812655243C00B717DB /* WeatherSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615F802655243C00B717DB /* WeatherSource.swift */; };
CD615F95265526E700B717DB /* UpdatableModelObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615F822655269100B717DB /* UpdatableModelObject.swift */; };
CD615F96265526E700B717DB /* UpdatableModelObjectInTime.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615F832655269100B717DB /* UpdatableModelObjectInTime.swift */; };
CD615F97265526E700B717DB /* PartialLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615F842655269100B717DB /* PartialLocation.swift */; };
CD615F98265526E700B717DB /* GeoNamesPlace.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615F862655269200B717DB /* GeoNamesPlace.swift */; };
CD615F99265526E700B717DB /* Location.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615F872655269200B717DB /* Location.swift */; };
CD615F9A265526E700B717DB /* CurrentWeather.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615F882655269200B717DB /* CurrentWeather.swift */; };
CD615F9B265526E700B717DB /* DailyWeather.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615F892655269200B717DB /* DailyWeather.swift */; };
CD615F9C265526E700B717DB /* HourlyWeather.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615F8A2655269200B717DB /* HourlyWeather.swift */; };
CD615F9D265526E700B717DB /* DayTimeWeather.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615F8B2655269200B717DB /* DayTimeWeather.swift */; };
CD615F9E265526E700B717DB /* Health.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615F8D2655269200B717DB /* Health.swift */; };
CD615F9F265526E700B717DB /* AirQuality.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615F8E2655269200B717DB /* AirQuality.swift */; };
CD615FA0265526E700B717DB /* HealthStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615F8F2655269200B717DB /* HealthStatus.swift */; };
CD615FA1265526E700B717DB /* Pollutant.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615F902655269200B717DB /* Pollutant.swift */; };
CD615FA2265526E700B717DB /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615F922655269200B717DB /* Notifications.swift */; };
CD615FA4265528F000B717DB /* HelperTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615FA3265528F000B717DB /* HelperTypes.swift */; };
CD615FB82655295C00B717DB /* UIColor+Hex.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615FA52655293100B717DB /* UIColor+Hex.swift */; };
CD615FB92655295C00B717DB /* UIColor+Highlight.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615FA62655293100B717DB /* UIColor+Highlight.swift */; };
CD615FBA2655295C00B717DB /* UIViewController+Alert.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615FA72655293100B717DB /* UIViewController+Alert.swift */; };
CD615FBB2655295C00B717DB /* UITabBarController+Append.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615FA82655293100B717DB /* UITabBarController+Append.swift */; };
CD615FBD2655295C00B717DB /* Measurement+String.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615FAA2655293100B717DB /* Measurement+String.swift */; };
CD615FBE2655295C00B717DB /* Calendar+TimeZone.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615FAB2655293100B717DB /* Calendar+TimeZone.swift */; };
CD615FBF2655295C00B717DB /* UIStackView+RemoveAll.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615FAC2655293100B717DB /* UIStackView+RemoveAll.swift */; };
CD615FC02655295C00B717DB /* UITableView+HeaderSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615FAD2655293100B717DB /* UITableView+HeaderSize.swift */; };
CD615FC12655295C00B717DB /* Date+Now.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615FAE2655293100B717DB /* Date+Now.swift */; };
CD615FC22655295C00B717DB /* UIView+InterfaceStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615FAF2655293100B717DB /* UIView+InterfaceStyle.swift */; };
CD615FC32655295C00B717DB /* Dimension+Name.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615FB02655293100B717DB /* Dimension+Name.swift */; };
CD615FC42655295C00B717DB /* UnitPressure+Atmosphere.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615FB12655293100B717DB /* UnitPressure+Atmosphere.swift */; };
CD615FC52655295C00B717DB /* CLAuthorizationStatus+Localized.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615FB22655293100B717DB /* CLAuthorizationStatus+Localized.swift */; };
CD615FC62655295C00B717DB /* UIApplication+Settings.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615FB32655293100B717DB /* UIApplication+Settings.swift */; };
CD615FC72655295C00B717DB /* UITabBarController+Hide.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615FB42655293100B717DB /* UITabBarController+Hide.swift */; };
CD615FC82655295C00B717DB /* CACornerMask+All.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615FB52655293100B717DB /* CACornerMask+All.swift */; };
CD615FC92655295C00B717DB /* UIDevice+Convenience.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615FB62655293100B717DB /* UIDevice+Convenience.swift */; };
CD91685426552F7500EC04EF /* Settings.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615FCD265529DE00B717DB /* Settings.swift */; };
CD91685726552FAE00EC04EF /* MulticastDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD91685626552FAE00EC04EF /* MulticastDelegate.swift */; };
CD91685826552FD000EC04EF /* DefaultSettingsFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615FCE265529DE00B717DB /* DefaultSettingsFactory.swift */; };
CD91685926552FD000EC04EF /* DefaultSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615FCF265529DE00B717DB /* DefaultSettings.swift */; };
CD91685A26552FD000EC04EF /* DefaultSettingsImperial.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615FD0265529DE00B717DB /* DefaultSettingsImperial.swift */; };
CD91685B26552FD000EC04EF /* DefaultSettingsMetric.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD615FD1265529DE00B717DB /* DefaultSettingsMetric.swift */; };
CD91685E26552FEC00EC04EF /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD91685C26552FEB00EC04EF /* Logger.swift */; };
CD91685F26552FEC00EC04EF /* Global.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD91685D26552FEC00EC04EF /* Global.swift */; };
CFF31454D7A391AB1E363560 /* Pods_OneWeatherCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F6ED82DCC42318CBA9646976 /* Pods_OneWeatherCore.framework */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
CD615F6E265523A400B717DB /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = CD615F5A265523A400B717DB /* Project object */;
proxyType = 1;
remoteGlobalIDString = CD615F62265523A400B717DB;
remoteInfo = OneWeatherCore;
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
8898932BAE27C5A2F7D2BD3A /* Pods-OneWeatherCore.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OneWeatherCore.release.xcconfig"; path = "Target Support Files/Pods-OneWeatherCore/Pods-OneWeatherCore.release.xcconfig"; sourceTree = "<group>"; };
992D8E8EF2BB1628F4E6A042 /* Pods-OneWeatherCore.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OneWeatherCore.debug.xcconfig"; path = "Target Support Files/Pods-OneWeatherCore/Pods-OneWeatherCore.debug.xcconfig"; sourceTree = "<group>"; };
CD2D55D22655336F007B70F4 /* UserDefaultsOptionalValue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserDefaultsOptionalValue.swift; sourceTree = "<group>"; };
CD2D55D32655336F007B70F4 /* UserDefaultsValue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserDefaultsValue.swift; sourceTree = "<group>"; };
CD2D55D7265533F3007B70F4 /* UserDefaultsWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDefaultsWrapper.swift; sourceTree = "<group>"; };
CD2D55D926553750007B70F4 /* NWSAlert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NWSAlert.swift; sourceTree = "<group>"; };
CD2D55DB2655377F007B70F4 /* NWSAlertExtendedInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NWSAlertExtendedInfo.swift; sourceTree = "<group>"; };
CD2D55DC2655377F007B70F4 /* NWSSeverityLevel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NWSSeverityLevel.swift; sourceTree = "<group>"; };
CD2D55DF265537DC007B70F4 /* NWSAlertInfoBlock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NWSAlertInfoBlock.swift; sourceTree = "<group>"; };
CD550FB52655318D00257FB5 /* RadarLayer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadarLayer.swift; sourceTree = "<group>"; };
CD550FB62655318D00257FB5 /* RadarLayerType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadarLayerType.swift; sourceTree = "<group>"; };
CD550FB72655318D00257FB5 /* WeatherLayerType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WeatherLayerType.swift; sourceTree = "<group>"; };
CD550FB82655318D00257FB5 /* SevereLayerType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SevereLayerType.swift; sourceTree = "<group>"; };
CD615F63265523A400B717DB /* OneWeatherCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OneWeatherCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
CD615F66265523A400B717DB /* OneWeatherCore.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OneWeatherCore.h; sourceTree = "<group>"; };
CD615F67265523A400B717DB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
CD615F6C265523A400B717DB /* OneWeatherCoreTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = OneWeatherCoreTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
CD615F71265523A400B717DB /* OneWeatherCoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OneWeatherCoreTests.swift; sourceTree = "<group>"; };
CD615F73265523A400B717DB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
CD615F802655243C00B717DB /* WeatherSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WeatherSource.swift; sourceTree = "<group>"; };
CD615F822655269100B717DB /* UpdatableModelObject.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdatableModelObject.swift; sourceTree = "<group>"; };
CD615F832655269100B717DB /* UpdatableModelObjectInTime.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdatableModelObjectInTime.swift; sourceTree = "<group>"; };
CD615F842655269100B717DB /* PartialLocation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PartialLocation.swift; sourceTree = "<group>"; };
CD615F862655269200B717DB /* GeoNamesPlace.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeoNamesPlace.swift; sourceTree = "<group>"; };
CD615F872655269200B717DB /* Location.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Location.swift; sourceTree = "<group>"; };
CD615F882655269200B717DB /* CurrentWeather.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CurrentWeather.swift; sourceTree = "<group>"; };
CD615F892655269200B717DB /* DailyWeather.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DailyWeather.swift; sourceTree = "<group>"; };
CD615F8A2655269200B717DB /* HourlyWeather.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HourlyWeather.swift; sourceTree = "<group>"; };
CD615F8B2655269200B717DB /* DayTimeWeather.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DayTimeWeather.swift; sourceTree = "<group>"; };
CD615F8D2655269200B717DB /* Health.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Health.swift; sourceTree = "<group>"; };
CD615F8E2655269200B717DB /* AirQuality.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AirQuality.swift; sourceTree = "<group>"; };
CD615F8F2655269200B717DB /* HealthStatus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HealthStatus.swift; sourceTree = "<group>"; };
CD615F902655269200B717DB /* Pollutant.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Pollutant.swift; sourceTree = "<group>"; };
CD615F922655269200B717DB /* Notifications.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Notifications.swift; sourceTree = "<group>"; };
CD615FA3265528F000B717DB /* HelperTypes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HelperTypes.swift; sourceTree = "<group>"; };
CD615FA52655293100B717DB /* UIColor+Hex.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+Hex.swift"; sourceTree = "<group>"; };
CD615FA62655293100B717DB /* UIColor+Highlight.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+Highlight.swift"; sourceTree = "<group>"; };
CD615FA72655293100B717DB /* UIViewController+Alert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+Alert.swift"; sourceTree = "<group>"; };
CD615FA82655293100B717DB /* UITabBarController+Append.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITabBarController+Append.swift"; sourceTree = "<group>"; };
CD615FAA2655293100B717DB /* Measurement+String.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Measurement+String.swift"; sourceTree = "<group>"; };
CD615FAB2655293100B717DB /* Calendar+TimeZone.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Calendar+TimeZone.swift"; sourceTree = "<group>"; };
CD615FAC2655293100B717DB /* UIStackView+RemoveAll.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIStackView+RemoveAll.swift"; sourceTree = "<group>"; };
CD615FAD2655293100B717DB /* UITableView+HeaderSize.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITableView+HeaderSize.swift"; sourceTree = "<group>"; };
CD615FAE2655293100B717DB /* Date+Now.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Date+Now.swift"; sourceTree = "<group>"; };
CD615FAF2655293100B717DB /* UIView+InterfaceStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+InterfaceStyle.swift"; sourceTree = "<group>"; };
CD615FB02655293100B717DB /* Dimension+Name.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Dimension+Name.swift"; sourceTree = "<group>"; };
CD615FB12655293100B717DB /* UnitPressure+Atmosphere.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UnitPressure+Atmosphere.swift"; sourceTree = "<group>"; };
CD615FB22655293100B717DB /* CLAuthorizationStatus+Localized.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CLAuthorizationStatus+Localized.swift"; sourceTree = "<group>"; };
CD615FB32655293100B717DB /* UIApplication+Settings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIApplication+Settings.swift"; sourceTree = "<group>"; };
CD615FB42655293100B717DB /* UITabBarController+Hide.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITabBarController+Hide.swift"; sourceTree = "<group>"; };
CD615FB52655293100B717DB /* CACornerMask+All.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CACornerMask+All.swift"; sourceTree = "<group>"; };
CD615FB62655293100B717DB /* UIDevice+Convenience.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIDevice+Convenience.swift"; sourceTree = "<group>"; };
CD615FCD265529DE00B717DB /* Settings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Settings.swift; sourceTree = "<group>"; };
CD615FCE265529DE00B717DB /* DefaultSettingsFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultSettingsFactory.swift; sourceTree = "<group>"; };
CD615FCF265529DE00B717DB /* DefaultSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultSettings.swift; sourceTree = "<group>"; };
CD615FD0265529DE00B717DB /* DefaultSettingsImperial.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultSettingsImperial.swift; sourceTree = "<group>"; };
CD615FD1265529DE00B717DB /* DefaultSettingsMetric.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultSettingsMetric.swift; sourceTree = "<group>"; };
CD91685626552FAE00EC04EF /* MulticastDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MulticastDelegate.swift; sourceTree = "<group>"; };
CD91685C26552FEB00EC04EF /* Logger.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Logger.swift; sourceTree = "<group>"; };
CD91685D26552FEC00EC04EF /* Global.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Global.swift; sourceTree = "<group>"; };
F6ED82DCC42318CBA9646976 /* Pods_OneWeatherCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_OneWeatherCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
CD615F60265523A400B717DB /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
CFF31454D7A391AB1E363560 /* Pods_OneWeatherCore.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
CD615F69265523A400B717DB /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
CD615F6D265523A400B717DB /* OneWeatherCore.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
3D58F25CF613751B3D1BC287 /* Pods */ = {
isa = PBXGroup;
children = (
992D8E8EF2BB1628F4E6A042 /* Pods-OneWeatherCore.debug.xcconfig */,
8898932BAE27C5A2F7D2BD3A /* Pods-OneWeatherCore.release.xcconfig */,
);
name = Pods;
path = ../Pods;
sourceTree = "<group>";
};
CD2D55D42655336F007B70F4 /* PropertyWrappers */ = {
isa = PBXGroup;
children = (
CD2D55D22655336F007B70F4 /* UserDefaultsOptionalValue.swift */,
CD2D55D32655336F007B70F4 /* UserDefaultsValue.swift */,
);
path = PropertyWrappers;
sourceTree = "<group>";
};
CD550FB92655318D00257FB5 /* RadarLayers */ = {
isa = PBXGroup;
children = (
CD550FB52655318D00257FB5 /* RadarLayer.swift */,
CD550FB62655318D00257FB5 /* RadarLayerType.swift */,
CD550FB72655318D00257FB5 /* WeatherLayerType.swift */,
CD550FB82655318D00257FB5 /* SevereLayerType.swift */,
);
path = RadarLayers;
sourceTree = "<group>";
};
CD615F59265523A400B717DB = {
isa = PBXGroup;
children = (
CD615F65265523A400B717DB /* OneWeatherCore */,
CD615F70265523A400B717DB /* OneWeatherCoreTests */,
CD615F64265523A400B717DB /* Products */,
3D58F25CF613751B3D1BC287 /* Pods */,
F74D258AC48F534A8A9B9EDB /* Frameworks */,
);
sourceTree = "<group>";
};
CD615F64265523A400B717DB /* Products */ = {
isa = PBXGroup;
children = (
CD615F63265523A400B717DB /* OneWeatherCore.framework */,
CD615F6C265523A400B717DB /* OneWeatherCoreTests.xctest */,
);
name = Products;
sourceTree = "<group>";
};
CD615F65265523A400B717DB /* OneWeatherCore */ = {
isa = PBXGroup;
children = (
CD615F852655269100B717DB /* Protocols */,
CD615F942655269200B717DB /* ModelObjects */,
CD615FB72655293100B717DB /* Extensions */,
CD615FD3265529DE00B717DB /* Settings */,
CD91685526552F9900EC04EF /* Common */,
CD615FA3265528F000B717DB /* HelperTypes.swift */,
CD615F66265523A400B717DB /* OneWeatherCore.h */,
CD615F802655243C00B717DB /* WeatherSource.swift */,
CD615F67265523A400B717DB /* Info.plist */,
);
path = OneWeatherCore;
sourceTree = "<group>";
};
CD615F70265523A400B717DB /* OneWeatherCoreTests */ = {
isa = PBXGroup;
children = (
CD615F71265523A400B717DB /* OneWeatherCoreTests.swift */,
CD615F73265523A400B717DB /* Info.plist */,
);
path = OneWeatherCoreTests;
sourceTree = "<group>";
};
CD615F852655269100B717DB /* Protocols */ = {
isa = PBXGroup;
children = (
CD615F822655269100B717DB /* UpdatableModelObject.swift */,
CD615F832655269100B717DB /* UpdatableModelObjectInTime.swift */,
CD615F842655269100B717DB /* PartialLocation.swift */,
);
path = Protocols;
sourceTree = "<group>";
};
CD615F8C2655269200B717DB /* Weather */ = {
isa = PBXGroup;
children = (
CD615F882655269200B717DB /* CurrentWeather.swift */,
CD615F892655269200B717DB /* DailyWeather.swift */,
CD615F8A2655269200B717DB /* HourlyWeather.swift */,
CD615F8B2655269200B717DB /* DayTimeWeather.swift */,
);
path = Weather;
sourceTree = "<group>";
};
CD615F912655269200B717DB /* Health */ = {
isa = PBXGroup;
children = (
CD615F8D2655269200B717DB /* Health.swift */,
CD615F8E2655269200B717DB /* AirQuality.swift */,
CD615F8F2655269200B717DB /* HealthStatus.swift */,
CD615F902655269200B717DB /* Pollutant.swift */,
);
path = Health;
sourceTree = "<group>";
};
CD615F932655269200B717DB /* Notifications */ = {
isa = PBXGroup;
children = (
CD2D55DF265537DC007B70F4 /* NWSAlertInfoBlock.swift */,
CD2D55DC2655377F007B70F4 /* NWSSeverityLevel.swift */,
CD2D55DB2655377F007B70F4 /* NWSAlertExtendedInfo.swift */,
CD2D55D926553750007B70F4 /* NWSAlert.swift */,
CD615F922655269200B717DB /* Notifications.swift */,
);
path = Notifications;
sourceTree = "<group>";
};
CD615F942655269200B717DB /* ModelObjects */ = {
isa = PBXGroup;
children = (
CD615F862655269200B717DB /* GeoNamesPlace.swift */,
CD615F872655269200B717DB /* Location.swift */,
CD550FB92655318D00257FB5 /* RadarLayers */,
CD615F8C2655269200B717DB /* Weather */,
CD615F912655269200B717DB /* Health */,
CD615F932655269200B717DB /* Notifications */,
);
path = ModelObjects;
sourceTree = "<group>";
};
CD615FB72655293100B717DB /* Extensions */ = {
isa = PBXGroup;
children = (
CD615FA52655293100B717DB /* UIColor+Hex.swift */,
CD615FA62655293100B717DB /* UIColor+Highlight.swift */,
CD615FA72655293100B717DB /* UIViewController+Alert.swift */,
CD615FA82655293100B717DB /* UITabBarController+Append.swift */,
CD615FAA2655293100B717DB /* Measurement+String.swift */,
CD615FAB2655293100B717DB /* Calendar+TimeZone.swift */,
CD615FAC2655293100B717DB /* UIStackView+RemoveAll.swift */,
CD615FAD2655293100B717DB /* UITableView+HeaderSize.swift */,
CD615FAE2655293100B717DB /* Date+Now.swift */,
CD615FAF2655293100B717DB /* UIView+InterfaceStyle.swift */,
CD615FB02655293100B717DB /* Dimension+Name.swift */,
CD615FB12655293100B717DB /* UnitPressure+Atmosphere.swift */,
CD615FB22655293100B717DB /* CLAuthorizationStatus+Localized.swift */,
CD615FB32655293100B717DB /* UIApplication+Settings.swift */,
CD615FB42655293100B717DB /* UITabBarController+Hide.swift */,
CD615FB52655293100B717DB /* CACornerMask+All.swift */,
CD615FB62655293100B717DB /* UIDevice+Convenience.swift */,
);
path = Extensions;
sourceTree = "<group>";
};
CD615FD2265529DE00B717DB /* DefaultSettings */ = {
isa = PBXGroup;
children = (
CD615FCE265529DE00B717DB /* DefaultSettingsFactory.swift */,
CD615FCF265529DE00B717DB /* DefaultSettings.swift */,
CD615FD0265529DE00B717DB /* DefaultSettingsImperial.swift */,
CD615FD1265529DE00B717DB /* DefaultSettingsMetric.swift */,
);
path = DefaultSettings;
sourceTree = "<group>";
};
CD615FD3265529DE00B717DB /* Settings */ = {
isa = PBXGroup;
children = (
CD615FCD265529DE00B717DB /* Settings.swift */,
CD615FD2265529DE00B717DB /* DefaultSettings */,
);
path = Settings;
sourceTree = "<group>";
};
CD91685526552F9900EC04EF /* Common */ = {
isa = PBXGroup;
children = (
CD2D55D42655336F007B70F4 /* PropertyWrappers */,
CD91685C26552FEB00EC04EF /* Logger.swift */,
CD91685D26552FEC00EC04EF /* Global.swift */,
CD91685626552FAE00EC04EF /* MulticastDelegate.swift */,
CD2D55D7265533F3007B70F4 /* UserDefaultsWrapper.swift */,
);
path = Common;
sourceTree = "<group>";
};
F74D258AC48F534A8A9B9EDB /* Frameworks */ = {
isa = PBXGroup;
children = (
F6ED82DCC42318CBA9646976 /* Pods_OneWeatherCore.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
CD615F5E265523A400B717DB /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
CD615F74265523A400B717DB /* OneWeatherCore.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
CD615F62265523A400B717DB /* OneWeatherCore */ = {
isa = PBXNativeTarget;
buildConfigurationList = CD615F77265523A400B717DB /* Build configuration list for PBXNativeTarget "OneWeatherCore" */;
buildPhases = (
155AD35EF65224185D0066D9 /* [CP] Check Pods Manifest.lock */,
CD615F5E265523A400B717DB /* Headers */,
CD615F5F265523A400B717DB /* Sources */,
CD615F60265523A400B717DB /* Frameworks */,
CD615F61265523A400B717DB /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = OneWeatherCore;
productName = OneWeatherCore;
productReference = CD615F63265523A400B717DB /* OneWeatherCore.framework */;
productType = "com.apple.product-type.framework";
};
CD615F6B265523A400B717DB /* OneWeatherCoreTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = CD615F7A265523A400B717DB /* Build configuration list for PBXNativeTarget "OneWeatherCoreTests" */;
buildPhases = (
CD615F68265523A400B717DB /* Sources */,
CD615F69265523A400B717DB /* Frameworks */,
CD615F6A265523A400B717DB /* Resources */,
);
buildRules = (
);
dependencies = (
CD615F6F265523A400B717DB /* PBXTargetDependency */,
);
name = OneWeatherCoreTests;
productName = OneWeatherCoreTests;
productReference = CD615F6C265523A400B717DB /* OneWeatherCoreTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
CD615F5A265523A400B717DB /* Project object */ = {
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 1250;
LastUpgradeCheck = 1250;
TargetAttributes = {
CD615F62265523A400B717DB = {
CreatedOnToolsVersion = 12.5;
};
CD615F6B265523A400B717DB = {
CreatedOnToolsVersion = 12.5;
};
};
};
buildConfigurationList = CD615F5D265523A400B717DB /* Build configuration list for PBXProject "OneWeatherCore" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = CD615F59265523A400B717DB;
productRefGroup = CD615F64265523A400B717DB /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
CD615F62265523A400B717DB /* OneWeatherCore */,
CD615F6B265523A400B717DB /* OneWeatherCoreTests */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
CD615F61265523A400B717DB /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
CD615F6A265523A400B717DB /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
155AD35EF65224185D0066D9 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-OneWeatherCore-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
CD615F5F265523A400B717DB /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
CD2D55DA26553751007B70F4 /* NWSAlert.swift in Sources */,
CD2D55D526553384007B70F4 /* UserDefaultsOptionalValue.swift in Sources */,
CD2D55D626553384007B70F4 /* UserDefaultsValue.swift in Sources */,
CD550FBA265531A100257FB5 /* RadarLayer.swift in Sources */,
CD550FBB265531A100257FB5 /* RadarLayerType.swift in Sources */,
CD550FBC265531A100257FB5 /* WeatherLayerType.swift in Sources */,
CD550FBD265531A100257FB5 /* SevereLayerType.swift in Sources */,
CD91685826552FD000EC04EF /* DefaultSettingsFactory.swift in Sources */,
CD91685926552FD000EC04EF /* DefaultSettings.swift in Sources */,
CD91685A26552FD000EC04EF /* DefaultSettingsImperial.swift in Sources */,
CD91685B26552FD000EC04EF /* DefaultSettingsMetric.swift in Sources */,
CD91685426552F7500EC04EF /* Settings.swift in Sources */,
CD615FB82655295C00B717DB /* UIColor+Hex.swift in Sources */,
CD2D55E0265537DC007B70F4 /* NWSAlertInfoBlock.swift in Sources */,
CD91685726552FAE00EC04EF /* MulticastDelegate.swift in Sources */,
CD615FB92655295C00B717DB /* UIColor+Highlight.swift in Sources */,
CD615FBA2655295C00B717DB /* UIViewController+Alert.swift in Sources */,
CD615FBB2655295C00B717DB /* UITabBarController+Append.swift in Sources */,
CD615FBD2655295C00B717DB /* Measurement+String.swift in Sources */,
CD615FBE2655295C00B717DB /* Calendar+TimeZone.swift in Sources */,
CD91685F26552FEC00EC04EF /* Global.swift in Sources */,
CD615FBF2655295C00B717DB /* UIStackView+RemoveAll.swift in Sources */,
CD615FC02655295C00B717DB /* UITableView+HeaderSize.swift in Sources */,
CD615FC12655295C00B717DB /* Date+Now.swift in Sources */,
CD91685E26552FEC00EC04EF /* Logger.swift in Sources */,
CD615FC22655295C00B717DB /* UIView+InterfaceStyle.swift in Sources */,
CD615FC32655295C00B717DB /* Dimension+Name.swift in Sources */,
CD615FC42655295C00B717DB /* UnitPressure+Atmosphere.swift in Sources */,
CD615FC52655295C00B717DB /* CLAuthorizationStatus+Localized.swift in Sources */,
CD615FC62655295C00B717DB /* UIApplication+Settings.swift in Sources */,
CD2D55D8265533F4007B70F4 /* UserDefaultsWrapper.swift in Sources */,
CD615FC72655295C00B717DB /* UITabBarController+Hide.swift in Sources */,
CD615FC82655295C00B717DB /* CACornerMask+All.swift in Sources */,
CD2D55DD2655377F007B70F4 /* NWSAlertExtendedInfo.swift in Sources */,
CD615FC92655295C00B717DB /* UIDevice+Convenience.swift in Sources */,
CD615F95265526E700B717DB /* UpdatableModelObject.swift in Sources */,
CD615FA4265528F000B717DB /* HelperTypes.swift in Sources */,
CD615F96265526E700B717DB /* UpdatableModelObjectInTime.swift in Sources */,
CD615F97265526E700B717DB /* PartialLocation.swift in Sources */,
CD615F98265526E700B717DB /* GeoNamesPlace.swift in Sources */,
CD615F99265526E700B717DB /* Location.swift in Sources */,
CD615F9A265526E700B717DB /* CurrentWeather.swift in Sources */,
CD615F9B265526E700B717DB /* DailyWeather.swift in Sources */,
CD615F9C265526E700B717DB /* HourlyWeather.swift in Sources */,
CD615F9D265526E700B717DB /* DayTimeWeather.swift in Sources */,
CD615F9E265526E700B717DB /* Health.swift in Sources */,
CD2D55DE2655377F007B70F4 /* NWSSeverityLevel.swift in Sources */,
CD615F9F265526E700B717DB /* AirQuality.swift in Sources */,
CD615FA0265526E700B717DB /* HealthStatus.swift in Sources */,
CD615FA1265526E700B717DB /* Pollutant.swift in Sources */,
CD615FA2265526E700B717DB /* Notifications.swift in Sources */,
CD615F812655243C00B717DB /* WeatherSource.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
CD615F68265523A400B717DB /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
CD615F72265523A400B717DB /* OneWeatherCoreTests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
CD615F6F265523A400B717DB /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = CD615F62265523A400B717DB /* OneWeatherCore */;
targetProxy = CD615F6E265523A400B717DB /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
CD615F75265523A400B717DB /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 14.5;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = Debug;
};
CD615F76265523A400B717DB /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 14.5;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = Release;
};
CD615F78265523A400B717DB /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 992D8E8EF2BB1628F4E6A042 /* Pods-OneWeatherCore.debug.xcconfig */;
buildSettings = {
CODE_SIGN_STYLE = Automatic;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 24W4XMQ38L;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = OneWeatherCore/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 11.4;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.inmobi.OneWeatherCore;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
SKIP_INSTALL = YES;
SUPPORTS_MACCATALYST = NO;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
CD615F79265523A400B717DB /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 8898932BAE27C5A2F7D2BD3A /* Pods-OneWeatherCore.release.xcconfig */;
buildSettings = {
CODE_SIGN_STYLE = Automatic;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 24W4XMQ38L;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = OneWeatherCore/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 11.4;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.inmobi.OneWeatherCore;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
SKIP_INSTALL = YES;
SUPPORTS_MACCATALYST = NO;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Release;
};
CD615F7B265523A400B717DB /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = 24W4XMQ38L;
INFOPLIST_FILE = OneWeatherCoreTests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.inmobi.OneWeatherCoreTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
CD615F7C265523A400B717DB /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = 24W4XMQ38L;
INFOPLIST_FILE = OneWeatherCoreTests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.inmobi.OneWeatherCoreTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
CD615F5D265523A400B717DB /* Build configuration list for PBXProject "OneWeatherCore" */ = {
isa = XCConfigurationList;
buildConfigurations = (
CD615F75265523A400B717DB /* Debug */,
CD615F76265523A400B717DB /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
CD615F77265523A400B717DB /* Build configuration list for PBXNativeTarget "OneWeatherCore" */ = {
isa = XCConfigurationList;
buildConfigurations = (
CD615F78265523A400B717DB /* Debug */,
CD615F79265523A400B717DB /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
CD615F7A265523A400B717DB /* Build configuration list for PBXNativeTarget "OneWeatherCoreTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
CD615F7B265523A400B717DB /* Debug */,
CD615F7C265523A400B717DB /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = CD615F5A265523A400B717DB /* Project object */;
}
......@@ -8,8 +8,8 @@
import Foundation
import FirebaseCrashlytics
final class Logger {
public final class Logger {
public var minLogLevel: LogLevel
public enum LogLevel: Int {
......@@ -20,18 +20,18 @@ final class Logger {
case error
}
static let prefix = "psm_1w"
public static let prefix = "psm_1w"
var componentName: String
init(componentName: String, minLogLevel: LogLevel = .debug) {
public init(componentName: String, minLogLevel: LogLevel = .debug) {
self.componentName = componentName
self.minLogLevel = minLogLevel
}
private let maxCharsPerMessage = 900 // The Apple limit for NSLog is 1024. Leaving some space for timestamp, etc. Not sure if they are a part of 1024, but I think they are. Also, account for our own prefix (roughly)
func log(level: LogLevel, message: String) {
public func log(level: LogLevel, message: String) {
#if DEBUG
guard level.rawValue >= minLogLevel.rawValue else {
return
......@@ -55,23 +55,23 @@ final class Logger {
#endif
}
func verbose(_ message: String) {
public func verbose(_ message: String) {
log(level: .verbose, message: message)
}
func debug(_ message: String) {
public func debug(_ message: String) {
log(level: .debug, message: message)
}
func info(_ message: String) {
public func info(_ message: String) {
log(level: .info, message: message)
}
func warning(_ message: String) {
public func warning(_ message: String) {
log(level: .warning, message: message)
}
func error(_ message: String) {
public func error(_ message: String) {
log(level: .error, message: message)
}
......
//
// MulticastDelegate.swift
// OneWeather
//
// Created by Demid Merzlyakov on 11.01.2021.
// Copyright © 2021 OneLouder, Inc. All rights reserved.
//
import Foundation
public class MulticastDelegate <T> {
public init() {}
private let delegates: NSHashTable<AnyObject> = NSHashTable.weakObjects()
public func add(delegate: T) {
if delegates.contains(delegate as AnyObject) {
return
}
delegates.add(delegate as AnyObject)
}
public func remove(delegate: T) {
for oneDelegate in delegates.allObjects.reversed() {
if oneDelegate === delegate as AnyObject {
delegates.remove(oneDelegate)
}
}
}
public func invoke(invocation: (T) -> ()) {
for delegate in delegates.allObjects.reversed() {
invocation(delegate as! T)
}
}
}
public func += <T: AnyObject> (left: MulticastDelegate<T>, right: T) {
left.add(delegate: right)
}
public func -= <T: AnyObject> (left: MulticastDelegate<T>, right: T) {
left.remove(delegate: right)
}
......@@ -47,8 +47,8 @@ struct UserDefaultsUnitValue<T> {
}
@propertyWrapper
struct UserDefaultsBasicValue<T> {
var wrappedValue: T {
public struct UserDefaultsBasicValue<T> {
public var wrappedValue: T {
get {
let value = UserDefaults.standard.value(forKey: key) as? T
return value ?? defaultValue
......
......@@ -7,11 +7,11 @@
import Foundation
extension MeasurementFormatter {
public extension MeasurementFormatter {
fileprivate static let oneWeatherSharedFormatter = MeasurementFormatter()
}
extension Measurement {
public extension Measurement {
private static func formatter(style: Formatter.UnitStyle, unitOptions: MeasurementFormatter.UnitOptions = .providedUnit) -> MeasurementFormatter {
let fmt = MeasurementFormatter.oneWeatherSharedFormatter
fmt.locale = Settings.shared.locale
......@@ -34,7 +34,7 @@ extension Measurement {
}
}
extension Temperature {
public extension Temperature {
var settingsConvertedValue:Double {
return self.converted(to: Settings.shared.temperatureType).value.rounded(.down)
}
......@@ -48,7 +48,7 @@ extension Temperature {
}
}
extension WindSpeed {
public extension WindSpeed {
var settingsConvertedValue:Double {
return self.converted(to: Settings.shared.windSpeedType).value.rounded(.down)
}
......@@ -58,7 +58,7 @@ extension WindSpeed {
}
}
extension Visibility {
public extension Visibility {
var settingsConvertedValue:Double {
return self.converted(to: Settings.shared.distanceType).value.rounded(.down)
}
......@@ -68,7 +68,7 @@ extension Visibility {
}
}
extension Pressure {
public extension Pressure {
var settingsConvertedValue:Double {
return self.converted(to: Settings.shared.pressureType).value.rounded(.down)
}
......
......@@ -7,7 +7,7 @@
import UIKit
extension UIColor {
public extension UIColor {
convenience init(hex: Int) {
let components = (
R: CGFloat((hex >> 16) & 0xff) / 255,
......@@ -33,7 +33,7 @@ extension UIColor {
self.init(red: CGFloat(r) / 255, green: CGFloat(g) / 255, blue: CGFloat(b) / 255, alpha: CGFloat(255 * alpha) / 255)
}
public func toHex(alpha: Bool = false) -> String? {
func toHex(alpha: Bool = false) -> String? {
guard let components = cgColor.components, components.count >= 3 else {
return nil
}
......
......@@ -12,7 +12,7 @@ public enum AppInterfaceStyle {
case dark
}
extension UIView {
public extension UIView {
var interfaceStyle:AppInterfaceStyle {
switch Settings.shared.appTheme {
case .light:
......
......@@ -7,6 +7,7 @@
import Foundation
import UIKit
import Localize_Swift
public enum WeatherType: String, CaseIterable {
case clear = "clear"
......@@ -59,7 +60,7 @@ public enum WeatherConditionType: CaseIterable {
case visibility
case wind
var localized:String {
public var localized:String {
switch self {
case .precipitation:
return "condition.precipitation".localized()
......@@ -78,7 +79,7 @@ public enum WeatherConditionType: CaseIterable {
}
}
var image:UIImage? {
public var image:UIImage? {
switch self {
case .precipitation:
return UIImage(named: "precipitation")
......@@ -116,7 +117,7 @@ public enum WindDirection: String, Codable, CaseIterable {
case northWest = "NW"
case northNorthWest = "NNW"
var degrees:CGFloat {
public var degrees:CGFloat {
switch self {
case .north:
return 0
......@@ -153,7 +154,7 @@ public enum WindDirection: String, Codable, CaseIterable {
}
}
var fullLocalized: String {
public var fullLocalized: String {
return ("wind.direction." + self.rawValue).localized()
}
}
......@@ -254,7 +255,7 @@ public enum MoonPhase: String, Codable {
case waningCrescentMoon = "Waning Crescent Moon"
case unknown = ""
var localized:String {
public var localized:String {
switch self {
case .newMoon:
return "moon.phase.new".localized()
......@@ -277,7 +278,7 @@ public enum MoonPhase: String, Codable {
}
}
var image:UIImage? {
public var image:UIImage? {
switch self {
case .newMoon:
return UIImage(named: "moon_new")
......@@ -300,7 +301,7 @@ public enum MoonPhase: String, Codable {
}
}
var pathImage:UIImage? {
public var pathImage:UIImage? {
switch self {
case .newMoon:
return UIImage(named: "moon_path_new")
......
<?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>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
</dict>
</plist>
......@@ -61,7 +61,7 @@ final class GeoNamesPlace: NSObject {
sb.append(", ")
}
if (sb.count > 0) {
sb = sb.trim()
sb = sb.trimmingCharacters(in: CharacterSet.whitespaces)
}
return sb
}
......
......@@ -7,7 +7,7 @@
import UIKit
struct RadarLayer {
var pinned = false
let layer:RadarLayerType
public struct RadarLayer {
public var pinned = false
public let layer:RadarLayerType
}
......@@ -7,7 +7,7 @@
import UIKit
protocol RadarLayerType {
public protocol RadarLayerType {
var id:String { get }
var name:String { get }
var values:[String] { get }
......
......@@ -21,15 +21,15 @@ public enum SevereLayerType:String, CaseIterable, RadarLayerType {
case wind = "radar.severeLayer.wind"
case winter = "radar.severeLayer.winter"
var id:String {
public var id:String {
return self.rawValue
}
var name:String {
public var name:String {
return self.rawValue.localized()
}
var swarmLayer:SwarmGroup {
public var swarmLayer:SwarmGroup {
switch self {
case .fire:
return .fire
......@@ -56,7 +56,7 @@ public enum SevereLayerType:String, CaseIterable, RadarLayerType {
}
}
var images:[UIImage?] {
public var images:[UIImage?] {
if self == .hurricaneTropicalTracks {
return [UIImage(named: "severe_forecastTrack"),
UIImage(named: "severe_pastTrack"),
......@@ -70,7 +70,7 @@ public enum SevereLayerType:String, CaseIterable, RadarLayerType {
return []
}
var values:[String] {
public var values:[String] {
switch self {
case .fire:
return ["Watch", "Warning"]
......@@ -97,7 +97,7 @@ public enum SevereLayerType:String, CaseIterable, RadarLayerType {
}
}
var colors:[CGColor] {
public var colors:[CGColor] {
switch self {
case .fire:
return [UIColor(hex: 0xFFDDAD),
......
......@@ -17,15 +17,15 @@ public enum WeatherLayerType:String, CaseIterable, RadarLayerType {
case windSpeed = "radar.weatherLayer.windSpeed"
case uvIndex = "radar.weatherLayer.uvIndex"
var id:String {
public var id:String {
return self.rawValue
}
var name:String {
public var name:String {
return self.rawValue.localized()
}
var swarmLayer:SwarmBaseLayer {
public var swarmLayer:SwarmBaseLayer {
switch self {
case .radar:
return .radar
......@@ -44,7 +44,7 @@ public enum WeatherLayerType:String, CaseIterable, RadarLayerType {
}
}
var values:[String] {
public var values:[String] {
switch self {
case .radar:
return ["Rain" , "Mixed", "Snow"]
......@@ -63,7 +63,7 @@ public enum WeatherLayerType:String, CaseIterable, RadarLayerType {
}
}
var colors:[CGColor] {
public var colors:[CGColor] {
switch self {
case .radar:
return [UIColor.red, UIColor.black].map{$0.cgColor}
......
......@@ -38,6 +38,35 @@ public struct CurrentWeather: Equatable, Hashable {
public var approximateMoonrise: Date?
public var moonState: CelestialState? = .normal
public var moonPhase: MoonPhase? = .unknown
public init(lastTimeUpdated: Date, date: Date, timeZone: TimeZone, weekDay: WeekDay, type: WeatherType = .unknown, isDay: Bool, uv: Int? = nil, minTemp: Temperature? = nil, maxTemp: Temperature? = nil, windSpeed: WindSpeed? = nil, windDirection: WindDirection? = nil, precipitationProbability: Percent? = nil, temp: Temperature? = nil, dewPoint: Temperature? = nil, apparentTemp: Temperature? = nil, humidity: Percent? = nil, visibility: Visibility? = nil, pressure: Pressure? = nil, sunrise: Date? = nil, sunset: Date? = nil, sunState: CelestialState? = .normal, moonrise: Date? = nil, moonset: Date? = nil, approximateMoonrise: Date? = nil, moonState: CelestialState? = .normal, moonPhase: MoonPhase? = .unknown) {
self.lastTimeUpdated = lastTimeUpdated
self.date = date
self.timeZone = timeZone
self.weekDay = weekDay
self.type = type
self.isDay = isDay
self.uv = uv
self.minTemp = minTemp
self.maxTemp = maxTemp
self.windSpeed = windSpeed
self.windDirection = windDirection
self.precipitationProbability = precipitationProbability
self.temp = temp
self.dewPoint = dewPoint
self.apparentTemp = apparentTemp
self.humidity = humidity
self.visibility = visibility
self.pressure = pressure
self.sunrise = sunrise
self.sunset = sunset
self.sunState = sunState
self.moonrise = moonrise
self.moonset = moonset
self.approximateMoonrise = approximateMoonrise
self.moonState = moonState
self.moonPhase = moonPhase
}
}
extension CurrentWeather: UpdatableModelObjectInTime {
......
//
// OneWeatherCore.h
// OneWeatherCore
//
// Created by Dmitry Stepanets on 19.05.2021.
//
#import <Foundation/Foundation.h>
//! Project version number for OneWeatherCore.
FOUNDATION_EXPORT double OneWeatherCoreVersionNumber;
//! Project version string for OneWeatherCore.
FOUNDATION_EXPORT const unsigned char OneWeatherCoreVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <OneWeatherCore/PublicHeader.h>
......@@ -12,7 +12,24 @@ protocol SettingsDelegate: AnyObject {
func settingsDidChange()
}
class Settings {
public enum AppTheme: Int {
case light = 0
case dark
case system
var nameForEvent: String {
switch self {
case .light:
return "light"
case .dark:
return "dark"
case .system:
return "system"
}
}
}
public class Settings {
static let shared = Settings()
let delegate = MulticastDelegate<SettingsDelegate>()
private init() {}
......
<?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>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
</dict>
</plist>
//
// OneWeatherCoreTests.swift
// OneWeatherCoreTests
//
// Created by Dmitry Stepanets on 19.05.2021.
//
import XCTest
@testable import OneWeatherCore
class OneWeatherCoreTests: XCTestCase {
override func setUpWithError() throws {
// Put setup code here. This method is called before the invocation of each test method in the class.
}
override func tearDownWithError() throws {
// Put teardown code here. This method is called after the invocation of each test method in the class.
}
func testExample() throws {
// This is an example of a functional test case.
// Use XCTAssert and related functions to verify your tests produce the correct results.
}
func testPerformanceExample() throws {
// This is an example of a performance test case.
self.measure {
// Put the code you want to measure the time of here.
}
}
}
# Uncomment the next line to define a global platform for your project
platform :ios, '11.0'
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
workspace '1Weather'
#Shared pods
def shared_pods
pod 'Localize-Swift'
pod 'Firebase/Crashlytics'
pod 'GoogleUtilities'
# If updating the podspec, make sure to add a tag and push it to origin
pod 'Swarm', :git => 'git@gitlab.pinsightmedia.com:oneweather/wdt-skywisetilekit-ios.git', :branch => 'develop'
end
#Application
target '1Weather' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
shared_pods
# Pods for 1Weather
pod 'SnapKit'
pod 'BezierKit'
pod 'Localize-Swift'
pod 'lottie-ios'
pod 'Cirque', :git => 'https://github.com/StepanetsDmtry/Cirque.git'
pod 'XMLCoder', '~> 0.12.0'
......@@ -16,10 +29,6 @@ target '1Weather' do
pod 'Flurry-iOS-SDK/FlurrySDK'
pod 'MoEngage-iOS-SDK'
# If updating the podspec, make sure to add a tag and push it to origin
pod 'Swarm', :git => 'git@gitlab.pinsightmedia.com:oneweather/wdt-skywisetilekit-ios.git', :branch => 'develop'
pod 'Firebase/Crashlytics'
# Recommended: Add the Firebase pod for Google Analytics
pod 'Firebase/Analytics'
pod 'Firebase/RemoteConfig'
......@@ -35,6 +44,11 @@ target '1Weather' do
pod 'PKHUD', '~> 5.0'
end
#Core
target 'OneWeatherCore' do
project 'OneWeatherCore/OneWeatherCore.project'
shared_pods
end
target 'OneWeatherNotificationServiceExtension' do
use_frameworks!
......
......@@ -115,12 +115,24 @@ PODS:
- Google-Mobile-Ads-SDK (>= 8.2.0)
- mopub-ios-sdk (= 5.16.2)
- GoogleUserMessagingPlatform (2.0.0)
- GoogleUtilities (7.4.1):
- GoogleUtilities/AppDelegateSwizzler (= 7.4.1)
- GoogleUtilities/Environment (= 7.4.1)
- GoogleUtilities/ISASwizzler (= 7.4.1)
- GoogleUtilities/Logger (= 7.4.1)
- GoogleUtilities/MethodSwizzler (= 7.4.1)
- GoogleUtilities/Network (= 7.4.1)
- "GoogleUtilities/NSData+zlib (= 7.4.1)"
- GoogleUtilities/Reachability (= 7.4.1)
- GoogleUtilities/SwizzlerTestHelpers (= 7.4.1)
- GoogleUtilities/UserDefaults (= 7.4.1)
- GoogleUtilities/AppDelegateSwizzler (7.4.1):
- GoogleUtilities/Environment
- GoogleUtilities/Logger
- GoogleUtilities/Network
- GoogleUtilities/Environment (7.4.1):
- PromisesObjC (~> 1.2)
- GoogleUtilities/ISASwizzler (7.4.1)
- GoogleUtilities/Logger (7.4.1):
- GoogleUtilities/Environment
- GoogleUtilities/MethodSwizzler (7.4.1):
......@@ -132,6 +144,8 @@ PODS:
- "GoogleUtilities/NSData+zlib (7.4.1)"
- GoogleUtilities/Reachability (7.4.1):
- GoogleUtilities/Logger
- GoogleUtilities/SwizzlerTestHelpers (7.4.1):
- GoogleUtilities/MethodSwizzler
- GoogleUtilities/UserDefaults (7.4.1):
- GoogleUtilities/Logger
- Localize-Swift (3.2.0):
......@@ -177,6 +191,7 @@ DEPENDENCIES:
- GoogleMobileAdsMediationFacebook
- GoogleMobileAdsMediationFyber
- GoogleMobileAdsMediationMoPub
- GoogleUtilities
- Localize-Swift
- lottie-ios
- MoEngage-iOS-SDK
......@@ -276,6 +291,6 @@ SPEC CHECKSUMS:
Swarm: 95393cd52715744c94e3a8475bc20b4de5d79f35
XMLCoder: f884dfa894a6f8b7dce465e4f6c02963bf17e028
PODFILE CHECKSUM: 2a940ee71b11c8df13e5b37774edf13ede6b06bb
PODFILE CHECKSUM: 0c2405861201a6f3431e069ff33505c571f65b68
COCOAPODS: 1.10.1
// Copyright 2019 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#import "GoogleUtilities/ISASwizzler/Public/GoogleUtilities/GULObjectSwizzler.h"
FOUNDATION_EXPORT NSString *kGULSwizzlerAssociatedObjectKey;
@interface GULObjectSwizzler (Internal)
- (void)swizzledObjectHasBeenDeallocatedWithGeneratedSubclass:(BOOL)isInstanceOfGeneratedSubclass;
@end
// Copyright 2018 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#import "GoogleUtilities/ISASwizzler/Public/GoogleUtilities/GULObjectSwizzler.h"
#import <objc/runtime.h>
#import "GoogleUtilities/ISASwizzler/GULObjectSwizzler+Internal.h"
#import "GoogleUtilities/ISASwizzler/Public/GoogleUtilities/GULSwizzledObject.h"
@implementation GULObjectSwizzler {
// The swizzled object.
__weak id _swizzledObject;
// The original class of the object.
Class _originalClass;
// The dynamically generated subclass of _originalClass.
Class _generatedClass;
}
#pragma mark - Class methods
+ (void)setAssociatedObject:(id)object
key:(NSString *)key
value:(nullable id)value
association:(GUL_ASSOCIATION)association {
objc_AssociationPolicy resolvedAssociation;
switch (association) {
case GUL_ASSOCIATION_ASSIGN:
resolvedAssociation = OBJC_ASSOCIATION_ASSIGN;
break;
case GUL_ASSOCIATION_RETAIN_NONATOMIC:
resolvedAssociation = OBJC_ASSOCIATION_RETAIN_NONATOMIC;
break;
case GUL_ASSOCIATION_COPY_NONATOMIC:
resolvedAssociation = OBJC_ASSOCIATION_COPY_NONATOMIC;
break;
case GUL_ASSOCIATION_RETAIN:
resolvedAssociation = OBJC_ASSOCIATION_RETAIN;
break;
case GUL_ASSOCIATION_COPY:
resolvedAssociation = OBJC_ASSOCIATION_COPY;
break;
default:
break;
}
objc_setAssociatedObject(object, key.UTF8String, value, resolvedAssociation);
}
+ (nullable id)getAssociatedObject:(id)object key:(NSString *)key {
return objc_getAssociatedObject(object, key.UTF8String);
}
#pragma mark - Instance methods
/** Instantiates an instance of this class.
*
* @param object The object to swizzle.
* @return An instance of this class.
*/
- (instancetype)initWithObject:(id)object {
if (object == nil) {
return nil;
}
GULObjectSwizzler *existingSwizzler =
[[self class] getAssociatedObject:object key:kGULSwizzlerAssociatedObjectKey];
if ([existingSwizzler isKindOfClass:[GULObjectSwizzler class]]) {
// The object has been swizzled already, no need to swizzle again.
return existingSwizzler;
}
self = [super init];
if (self) {
_swizzledObject = object;
_originalClass = object_getClass(object);
NSString *newClassName = [NSString stringWithFormat:@"fir_%@_%@", [[NSUUID UUID] UUIDString],
NSStringFromClass(_originalClass)];
_generatedClass = objc_allocateClassPair(_originalClass, newClassName.UTF8String, 0);
NSAssert(_generatedClass, @"Wasn't able to allocate the class pair.");
}
return self;
}
- (void)copySelector:(SEL)selector fromClass:(Class)aClass isClassSelector:(BOOL)isClassSelector {
NSAssert(_generatedClass, @"This object has already been unswizzled.");
Method method = isClassSelector ? class_getClassMethod(aClass, selector)
: class_getInstanceMethod(aClass, selector);
Class targetClass = isClassSelector ? object_getClass(_generatedClass) : _generatedClass;
IMP implementation = method_getImplementation(method);
const char *typeEncoding = method_getTypeEncoding(method);
class_replaceMethod(targetClass, selector, implementation, typeEncoding);
}
- (void)setAssociatedObjectWithKey:(NSString *)key
value:(id)value
association:(GUL_ASSOCIATION)association {
__strong id swizzledObject = _swizzledObject;
if (swizzledObject) {
[[self class] setAssociatedObject:swizzledObject key:key value:value association:association];
}
}
- (nullable id)getAssociatedObjectForKey:(NSString *)key {
__strong id swizzledObject = _swizzledObject;
if (swizzledObject) {
return [[self class] getAssociatedObject:swizzledObject key:key];
}
return nil;
}
- (void)swizzle {
__strong id swizzledObject = _swizzledObject;
GULObjectSwizzler *existingSwizzler =
[[self class] getAssociatedObject:swizzledObject key:kGULSwizzlerAssociatedObjectKey];
if (existingSwizzler != nil) {
NSAssert(existingSwizzler == self, @"The swizzled object has a different swizzler.");
// The object has been swizzled already.
return;
}
if (swizzledObject) {
[GULObjectSwizzler setAssociatedObject:swizzledObject
key:kGULSwizzlerAssociatedObjectKey
value:self
association:GUL_ASSOCIATION_RETAIN];
[GULSwizzledObject copyDonorSelectorsUsingObjectSwizzler:self];
NSAssert(_originalClass == object_getClass(swizzledObject),
@"The original class is not the reported class now.");
NSAssert(class_getInstanceSize(_originalClass) == class_getInstanceSize(_generatedClass),
@"The instance size of the generated class must be equal to the original class.");
objc_registerClassPair(_generatedClass);
Class doubleCheckOriginalClass __unused = object_setClass(_swizzledObject, _generatedClass);
NSAssert(_originalClass == doubleCheckOriginalClass,
@"The original class must be the same as the class returned by object_setClass");
} else {
NSAssert(NO, @"You can't swizzle a nil object");
}
}
- (void)dealloc {
if (_generatedClass) {
if (_swizzledObject == nil) {
// The swizzled object has been deallocated already, so the generated class can be disposed
// now.
objc_disposeClassPair(_generatedClass);
return;
}
// GULSwizzledObject is retained by the swizzled object which means that the swizzled object is
// being deallocated now. Let's see if we should schedule the generated class disposal.
// If the swizzled object has a different class, it most likely indicates that the object was
// ISA swizzled one more time. In this case it is not safe to dispose the generated class. We
// will have to keep it to prevent a crash.
// TODO: Consider adding a flag that can be set by the host application to dispose the class
// pair unconditionally. It may be used by apps that use ISA Swizzling themself and are
// confident in disposing their subclasses.
BOOL isSwizzledObjectInstanceOfGeneratedClass =
object_getClass(_swizzledObject) == _generatedClass;
if (isSwizzledObjectInstanceOfGeneratedClass) {
Class generatedClass = _generatedClass;
// Schedule the generated class disposal after the swizzled object has been deallocated.
dispatch_async(dispatch_get_main_queue(), ^{
objc_disposeClassPair(generatedClass);
});
}
}
}
- (BOOL)isSwizzlingProxyObject {
return [_swizzledObject isProxy];
}
@end
// Copyright 2018 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#import <objc/runtime.h>
#import "GoogleUtilities/ISASwizzler/GULObjectSwizzler+Internal.h"
#import "GoogleUtilities/ISASwizzler/Public/GoogleUtilities/GULSwizzledObject.h"
NSString *kGULSwizzlerAssociatedObjectKey = @"gul_objectSwizzler";
@interface GULSwizzledObject ()
@end
@implementation GULSwizzledObject
+ (void)copyDonorSelectorsUsingObjectSwizzler:(GULObjectSwizzler *)objectSwizzler {
[objectSwizzler copySelector:@selector(gul_objectSwizzler) fromClass:self isClassSelector:NO];
[objectSwizzler copySelector:@selector(gul_class) fromClass:self isClassSelector:NO];
// This is needed because NSProxy objects usually override -[NSObjectProtocol respondsToSelector:]
// and ask this question to the underlying object. Since we don't swizzle the underlying object
// but swizzle the proxy, when someone calls -[NSObjectProtocol respondsToSelector:] on the proxy,
// the answer ends up being NO even if we added new methods to the subclass through ISA Swizzling.
// To solve that, we override -[NSObjectProtocol respondsToSelector:] in such a way that takes
// into account the fact that we've added new methods.
if ([objectSwizzler isSwizzlingProxyObject]) {
[objectSwizzler copySelector:@selector(respondsToSelector:) fromClass:self isClassSelector:NO];
}
}
- (instancetype)init {
NSAssert(NO, @"Do not instantiate this class, it's only a donor class");
return nil;
}
- (GULObjectSwizzler *)gul_objectSwizzler {
return [GULObjectSwizzler getAssociatedObject:self key:kGULSwizzlerAssociatedObjectKey];
}
#pragma mark - Donor methods
- (Class)gul_class {
return [[self gul_objectSwizzler] generatedClass];
}
// Only added to a class when we detect it is a proxy.
- (BOOL)respondsToSelector:(SEL)aSelector {
Class gulClass = [[self gul_objectSwizzler] generatedClass];
return [gulClass instancesRespondToSelector:aSelector] || [super respondsToSelector:aSelector];
}
@end
/*
* Copyright 2018 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
/** Enums that map to their OBJC-prefixed counterparts. */
typedef OBJC_ENUM(uintptr_t, GUL_ASSOCIATION){
// Is a weak association.
GUL_ASSOCIATION_ASSIGN,
// Is a nonatomic strong association.
GUL_ASSOCIATION_RETAIN_NONATOMIC,
// Is a nonatomic copy association.
GUL_ASSOCIATION_COPY_NONATOMIC,
// Is an atomic strong association.
GUL_ASSOCIATION_RETAIN,
// Is an atomic copy association.
GUL_ASSOCIATION_COPY};
/** This class handles swizzling a specific instance of a class by generating a
* dynamic subclass and installing selectors and properties onto the dynamic
* subclass. Then, the instance's class is set to the dynamic subclass. There
* should be a 1:1 ratio of object swizzlers to swizzled instances.
*/
@interface GULObjectSwizzler : NSObject
/** The subclass that is generated. */
@property(nullable, nonatomic, readonly) Class generatedClass;
/** Sets an associated object in the runtime. This mechanism can be used to
* simulate adding properties.
*
* @param object The object that will be queried for the associated object.
* @param key The key of the associated object.
* @param value The value to associate to the swizzled object.
* @param association The mechanism to use when associating the objects.
*/
+ (void)setAssociatedObject:(id)object
key:(NSString *)key
value:(nullable id)value
association:(GUL_ASSOCIATION)association;
/** Gets an associated object in the runtime. This mechanism can be used to
* simulate adding properties.
*
* @param object The object that will be queried for the associated object.
* @param key The key of the associated object.
*/
+ (nullable id)getAssociatedObject:(id)object key:(NSString *)key;
/** Please use the designated initializer. */
- (instancetype)init NS_UNAVAILABLE;
/** Instantiates an object swizzler using an object it will operate on.
* Generates a new class pair.
*
* @note There is no need to store this object. After calling -swizzle, this
* object can be found by calling -gul_objectSwizzler
*
* @param object The object to be swizzled.
* @return An instance of this class.
*/
- (instancetype)initWithObject:(id)object NS_DESIGNATED_INITIALIZER;
/** Sets an associated object in the runtime. This mechanism can be used to
* simulate adding properties.
*
* @param key The key of the associated object.
* @param value The value to associate to the swizzled object.
* @param association The mechanism to use when associating the objects.
*/
- (void)setAssociatedObjectWithKey:(NSString *)key
value:(id)value
association:(GUL_ASSOCIATION)association;
/** Gets an associated object in the runtime. This mechanism can be used to
* simulate adding properties.
*
* @param key The key of the associated object.
*/
- (nullable id)getAssociatedObjectForKey:(NSString *)key;
/** Copies a selector from an existing class onto the generated dynamic subclass
* that this object will adopt. This mechanism can be used to add methods to
* specific instances of a class.
*
* @note Should not be called after calling -swizzle.
* @param selector The selector to add to the instance.
* @param aClass The class supplying an implementation of the method.
* @param isClassSelector A BOOL specifying whether the selector is a class or
* instance selector.
*/
- (void)copySelector:(SEL)selector fromClass:(Class)aClass isClassSelector:(BOOL)isClassSelector;
/** Swizzles the object, changing its class to the generated class. Registers
* the class pair. */
- (void)swizzle;
/** @return The value of -[objectBeingSwizzled isProxy] */
- (BOOL)isSwizzlingProxyObject;
@end
NS_ASSUME_NONNULL_END
/*
* Copyright 2018 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#import <Foundation/Foundation.h>
@class GULObjectSwizzler;
/** This class exists as a method donor. These methods will be added to all objects that are
* swizzled by the object swizzler. This class should not be instantiated.
*/
@interface GULSwizzledObject : NSObject
- (instancetype)init NS_UNAVAILABLE;
/** Copies the methods below to the swizzled object.
*
* @param objectSwizzler The swizzler to use when adding the methods below.
*/
+ (void)copyDonorSelectorsUsingObjectSwizzler:(GULObjectSwizzler *)objectSwizzler;
#pragma mark - Donor methods.
/** @return The generated subclass. Used in respondsToSelector: calls. */
- (Class)gul_class;
/** @return The object swizzler that manages this object. */
- (GULObjectSwizzler *)gul_objectSwizzler;
@end
/*
* Copyright 2018 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#import <Foundation/Foundation.h>
/** An example NSProxy that could be used to wrap an object that we have to ISA Swizzle. */
@interface GULProxy : NSProxy
+ (instancetype)proxyWithDelegate:(id)delegate;
@end
/*
* Copyright 2018 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#import "GoogleUtilities/SwizzlerTestHelpers/GULProxy.h"
@interface GULProxy ()
@property(nonatomic, strong) id delegateObject;
@end
@implementation GULProxy
- (instancetype)initWithDelegate:(id)delegate {
_delegateObject = delegate;
return self;
}
+ (instancetype)proxyWithDelegate:(id)delegate {
return [[GULProxy alloc] initWithDelegate:delegate];
}
- (id)forwardingTargetForSelector:(SEL)selector {
return _delegateObject;
}
- (void)forwardInvocation:(NSInvocation *)invocation {
if (_delegateObject != nil) {
[invocation setTarget:_delegateObject];
[invocation invoke];
}
}
- (NSMethodSignature *)methodSignatureForSelector:(SEL)selector {
return [_delegateObject instanceMethodSignatureForSelector:selector];
}
- (BOOL)respondsToSelector:(SEL)aSelector {
return [_delegateObject respondsToSelector:aSelector];
}
- (BOOL)isEqual:(id)object {
return [_delegateObject isEqual:object];
}
- (NSUInteger)hash {
return [_delegateObject hash];
}
- (Class)superclass {
return [_delegateObject superclass];
}
- (Class)class {
return [_delegateObject class];
}
- (BOOL)isKindOfClass:(Class)aClass {
return [_delegateObject isKindOfClass:aClass];
}
- (BOOL)isMemberOfClass:(Class)aClass {
return [_delegateObject isMemberOfClass:aClass];
}
- (BOOL)conformsToProtocol:(Protocol *)aProtocol {
return [_delegateObject conformsToProtocol:aProtocol];
}
- (BOOL)isProxy {
return YES;
}
- (NSString *)description {
return [_delegateObject description];
}
- (NSString *)debugDescription {
return [_delegateObject debugDescription];
}
@end
/*
* Copyright 2018 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
/** A simple container class for representing the diff of a class. */
@interface GULRuntimeClassDiff : NSObject
/** The class this diff is with respect to. */
@property(nonatomic, nullable, weak) Class aClass;
/** The added class properties (as opposed to instance properties). */
@property(nonatomic) NSSet<NSString *> *addedClassProperties;
/** The added instance properties. */
@property(nonatomic) NSSet<NSString *> *addedInstanceProperties;
/** The added class selectors. */
@property(nonatomic) NSSet<NSString *> *addedClassSelectors;
/** The added instance selectors. */
@property(nonatomic) NSSet<NSString *> *addedInstanceSelectors;
/** The modified imps. */
@property(nonatomic) NSSet<NSString *> *modifiedImps;
@end
NS_ASSUME_NONNULL_END
// Copyright 2018 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#import "GoogleUtilities/SwizzlerTestHelpers/GULRuntimeClassDiff.h"
/** Computes the equality of possibly nil or empty NSSets.
*
* @param firstSet The first set of strings.
* @param secondSet The second set of strings.
* @return YES if both sets are zero length or nil, or the result of `isEqualToSet:`.
*/
FOUNDATION_STATIC_INLINE
BOOL IsEqual(NSSet *firstSet, NSSet *secondSet) {
return ((!firstSet || firstSet.count == 0) && (!secondSet || secondSet.count == 0)) ||
[firstSet isEqualToSet:secondSet];
}
@implementation GULRuntimeClassDiff
- (NSUInteger)hash {
return [_aClass hash] ^ [_addedClassProperties hash] ^ [_addedInstanceProperties hash] ^
[_addedClassSelectors hash] ^ [_addedInstanceSelectors hash] ^ [_modifiedImps hash];
}
- (BOOL)isEqual:(id)object {
GULRuntimeClassDiff *otherObject = (GULRuntimeClassDiff *)object;
return _aClass == otherObject->_aClass &&
IsEqual(_addedClassProperties, otherObject->_addedClassProperties) &&
IsEqual(_addedInstanceProperties, otherObject->_addedInstanceProperties) &&
IsEqual(_addedClassSelectors, otherObject->_addedClassSelectors) &&
IsEqual(_addedInstanceSelectors, otherObject->_addedInstanceSelectors) &&
IsEqual(_modifiedImps, otherObject->_modifiedImps);
}
- (NSString *)description {
NSMutableString *description = [[NSMutableString alloc] init];
[description appendFormat:@"%@:\n", NSStringFromClass(self.aClass)];
if (_addedClassProperties.count) {
[description appendString:@"\tAdded class properties:\n"];
for (NSString *addedClassProperty in _addedClassProperties) {
[description appendFormat:@"\t\t%@\n", addedClassProperty];
}
}
if (_addedInstanceProperties.count) {
[description appendString:@"\tAdded instance properties:\n"];
for (NSString *addedInstanceProperty in _addedInstanceProperties) {
[description appendFormat:@"\t\t%@\n", addedInstanceProperty];
}
}
if (_addedClassSelectors.count) {
[description appendString:@"\tAdded class selectors:\n"];
for (NSString *addedClassSelector in _addedClassSelectors) {
[description appendFormat:@"\t\t%@\n", addedClassSelector];
}
}
if (_addedInstanceSelectors.count) {
[description appendString:@"\tAdded instance selectors:\n"];
for (NSString *addedInstanceSelector in _addedInstanceSelectors) {
[description appendFormat:@"\t\t%@\n", addedInstanceSelector];
}
}
if (_modifiedImps.count) {
[description appendString:@"\tModified IMPs:\n"];
for (NSString *modifiedImp in _modifiedImps) {
[description appendFormat:@"\t\t%@\n", modifiedImp];
}
}
return description;
}
@end
/*
* Copyright 2018 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#import <Foundation/Foundation.h>
@class GULRuntimeClassDiff;
NS_ASSUME_NONNULL_BEGIN
/** This class is able to capture the runtime state of a given class. */
@interface GULRuntimeClassSnapshot : NSObject
- (instancetype)init NS_UNAVAILABLE;
/** Instantiates an instance of this class with the given class.
*
* @param aClass The class that will be snapshot.
* @return An instance of this class.
*/
- (instancetype)initWithClass:(Class)aClass NS_DESIGNATED_INITIALIZER;
/** Captures the runtime state of this class. */
- (void)capture;
/** Calculates the diff between snapshots and returns a diff object populated with information.
*
* @param otherClassSnapshot The other snapshot to compare it to. It's assumed that the
* otherClassSnapshot was created after the caller.
* @return A diff object representing the diff between the two snapshots.
*/
- (GULRuntimeClassDiff *)diff:(GULRuntimeClassSnapshot *)otherClassSnapshot;
@end
NS_ASSUME_NONNULL_END
// Copyright 2018 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#import "GoogleUtilities/SwizzlerTestHelpers/GULRuntimeClassSnapshot.h"
#import <objc/runtime.h>
#import "GoogleUtilities/SwizzlerTestHelpers/GULRuntimeClassDiff.h"
@implementation GULRuntimeClassSnapshot {
/** The class this snapshot is related to. */
Class _aClass;
/** The metaclass of aClass. */
Class _metaclass;
/** The current set of class properties on aClass. */
NSMutableSet<NSString *> *_classProperties;
/** The current set of instance properties on aClass. */
NSMutableSet<NSString *> *_instanceProperties;
/** The current set of class selectors on aClass. */
NSMutableSet<NSString *> *_classSelectors;
/** The current set of instance selectors on aClass. */
NSMutableSet<NSString *> *_instanceSelectors;
/** The current set of class and instance selector IMPs on aClass. */
NSMutableSet<NSString *> *_imps;
/** The current hash of this object, updated as the state of this instance changes. */
NSUInteger _runningHash;
}
- (instancetype)init {
NSAssert(NO, @"Please use the designated initializer.");
return nil;
}
- (instancetype)initWithClass:(Class)aClass {
self = [super init];
if (self) {
_aClass = aClass;
_metaclass = object_getClass(aClass);
_classProperties = [[NSMutableSet alloc] init];
_instanceProperties = [[NSMutableSet alloc] init];
_instanceSelectors = [[NSMutableSet alloc] init];
_classSelectors = [[NSMutableSet alloc] init];
_imps = [[NSMutableSet alloc] init];
_runningHash = [NSStringFromClass(_aClass) hash] ^ [NSStringFromClass(_metaclass) hash];
}
return self;
}
- (void)capture {
[self captureProperties];
[self captureSelectorsAndImps];
}
- (GULRuntimeClassDiff *)diff:(GULRuntimeClassSnapshot *)otherClassSnapshot {
GULRuntimeClassDiff *classDiff = [[GULRuntimeClassDiff alloc] init];
if (_runningHash != [otherClassSnapshot hash]) {
classDiff.aClass = _aClass;
[self computeDiffOfProperties:otherClassSnapshot withClassDiff:classDiff];
[self computeDiffOfSelectorsAndImps:otherClassSnapshot withClassDiff:classDiff];
}
return classDiff;
}
- (NSUInteger)hash {
return _runningHash;
}
- (BOOL)isEqual:(id)object {
return self->_runningHash == ((GULRuntimeClassSnapshot *)object)->_runningHash;
}
- (NSString *)description {
return [NSString stringWithFormat:@"<%@> Hash: 0x%lX", _aClass, (unsigned long)[self hash]];
}
#pragma mark - Private methods below -
#pragma mark State capturing methods
/** Captures class and instance properties and saves state in ivars. */
- (void)captureProperties {
// Capture instance properties.
unsigned int outCount;
objc_property_t *instanceProperties = class_copyPropertyList(_aClass, &outCount);
for (int i = 0; i < outCount; i++) {
objc_property_t property = instanceProperties[i];
NSString *propertyString = [NSString stringWithUTF8String:property_getName(property)];
[_instanceProperties addObject:propertyString];
_runningHash ^= [propertyString hash];
}
free(instanceProperties);
// Capture class properties.
outCount = 0;
objc_property_t *classProperties = class_copyPropertyList(_metaclass, &outCount);
for (int i = 0; i < outCount; i++) {
objc_property_t property = classProperties[i];
NSString *propertyString = [NSString stringWithUTF8String:property_getName(property)];
[_classProperties addObject:propertyString];
_runningHash ^= [propertyString hash];
}
free(classProperties);
}
/** Captures the class and instance selectors and their IMPs and saves their state in ivars. */
- (void)captureSelectorsAndImps {
// Capture instance methods and their IMPs.
unsigned int outCount;
Method *instanceMethods = class_copyMethodList(_aClass, &outCount);
for (int i = 0; i < outCount; i++) {
Method method = instanceMethods[i];
NSString *methodString = NSStringFromSelector(method_getName(method));
[_instanceSelectors addObject:methodString];
IMP imp = method_getImplementation(method);
NSString *impString =
[NSString stringWithFormat:@"%p -[%@ %@]", imp, NSStringFromClass(_aClass), methodString];
if (![_imps containsObject:impString]) {
[_imps addObject:impString];
}
_runningHash ^= [impString hash];
}
free(instanceMethods);
// Capture class methods and their IMPs.
outCount = 0;
Method *classMethods = class_copyMethodList(_metaclass, &outCount);
for (int i = 0; i < outCount; i++) {
Method method = classMethods[i];
NSString *methodString = NSStringFromSelector(method_getName(method));
[_classSelectors addObject:methodString];
IMP imp = method_getImplementation(method);
NSString *impString = [NSString
stringWithFormat:@"%p +[%@ %@]", imp, NSStringFromClass(_metaclass), methodString];
NSAssert(![_imps containsObject:impString],
@"This IMP/method combination has already been captured: %@:%@",
NSStringFromClass(_aClass), impString);
[_imps addObject:impString];
_runningHash ^= [impString hash];
}
free(classMethods);
}
#pragma mark Diff computation methods
/** Compute the diff of class and instance properties and populates the classDiff with that info.
*
* @param otherClassSnapshot The other class snapshot to diff against.
* @param classDiff The diff object to modify.
*/
- (void)computeDiffOfProperties:(GULRuntimeClassSnapshot *)otherClassSnapshot
withClassDiff:(GULRuntimeClassDiff *)classDiff {
if ([_classProperties hash] != [otherClassSnapshot->_classProperties hash]) {
classDiff.addedClassProperties = [otherClassSnapshot->_classProperties
objectsPassingTest:^BOOL(NSString *_Nonnull obj, BOOL *_Nonnull stop) {
return ![self->_classProperties containsObject:obj];
}];
}
if ([_instanceProperties hash] != [otherClassSnapshot->_instanceProperties hash]) {
classDiff.addedInstanceProperties = [otherClassSnapshot->_instanceProperties
objectsPassingTest:^BOOL(NSString *_Nonnull obj, BOOL *_Nonnull stop) {
return ![self->_instanceProperties containsObject:obj];
}];
}
}
/** Computes the diff of class and instance selectors and their IMPs and populates the classDiff.
*
* @param otherClassSnapshot The other class snapshot to diff against.
* @param classDiff The diff object to modify.
*/
- (void)computeDiffOfSelectorsAndImps:(GULRuntimeClassSnapshot *)otherClassSnapshot
withClassDiff:(GULRuntimeClassDiff *)classDiff {
if ([_classSelectors hash] != [otherClassSnapshot->_classSelectors hash]) {
classDiff.addedClassSelectors = [otherClassSnapshot->_classSelectors
objectsPassingTest:^BOOL(NSString *_Nonnull obj, BOOL *_Nonnull stop) {
return ![self->_classSelectors containsObject:obj];
}];
}
if ([_instanceSelectors hash] != [otherClassSnapshot->_instanceSelectors hash]) {
classDiff.addedInstanceSelectors = [otherClassSnapshot->_instanceSelectors
objectsPassingTest:^BOOL(NSString *_Nonnull obj, BOOL *_Nonnull stop) {
return ![self->_instanceSelectors containsObject:obj];
}];
}
// modifiedImps contains the prior IMP address, not the current IMP address.
classDiff.modifiedImps =
[_imps objectsPassingTest:^BOOL(NSString *_Nonnull obj, BOOL *_Nonnull stop) {
return ![otherClassSnapshot->_imps containsObject:obj];
}];
}
@end
/*
* Copyright 2018 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#import <Foundation/Foundation.h>
@class GULRuntimeClassDiff;
NS_ASSUME_NONNULL_BEGIN
/** A simple container class for storing the diff of some runtime state. */
@interface GULRuntimeDiff : NSObject
/** The added classes. */
@property(nonatomic) NSSet<NSString *> *addedClasses;
/** The removed classes. */
@property(nonatomic) NSSet<NSString *> *removedClasses;
/** The diff objects for modified classes. */
@property(nonatomic) NSSet<GULRuntimeClassDiff *> *classDiffs;
@end
NS_ASSUME_NONNULL_END
// Copyright 2018 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#import "GoogleUtilities/SwizzlerTestHelpers/GULRuntimeDiff.h"
#import "GoogleUtilities/SwizzlerTestHelpers/GULRuntimeClassDiff.h"
/** Computes the equality of possibly nil or empty NSSets.
*
* @param firstSet The first set of strings.
* @param secondSet The second set of strings.
* @return YES if both sets are zero length or nil, or the result of `isEqualToSet:`.
*/
FOUNDATION_STATIC_INLINE
BOOL IsEqual(NSSet *firstSet, NSSet *secondSet) {
return ((!firstSet || firstSet.count == 0) && (!secondSet || secondSet.count == 0)) ||
[firstSet isEqualToSet:secondSet];
}
@implementation GULRuntimeDiff
- (NSUInteger)hash {
return [_addedClasses hash] ^ [_removedClasses hash] ^ [_classDiffs hash];
}
- (BOOL)isEqual:(id)object {
GULRuntimeDiff *otherObject = (GULRuntimeDiff *)object;
return IsEqual(_addedClasses, otherObject->_addedClasses) &&
IsEqual(_removedClasses, otherObject->_removedClasses) &&
IsEqual(_classDiffs, otherObject->_classDiffs);
}
- (NSString *)description {
NSMutableString *description = [[NSMutableString alloc] init];
if (_addedClasses.count) {
[description appendString:@"Added classes:\n"];
for (NSString *classString in _addedClasses) {
[description appendFormat:@"\t%@\n", classString];
}
}
if (_removedClasses.count) {
[description appendString:@"\nRemoved classes:\n"];
for (NSString *classString in _removedClasses) {
[description appendFormat:@"\t%@\n", classString];
}
}
if (_classDiffs.count) {
[description appendString:@"\nClass diffs:\n"];
for (GULRuntimeClassDiff *classDiff in _classDiffs) {
NSString *classDiffDescription =
[[classDiff description] stringByReplacingOccurrencesOfString:@"\n" withString:@"\n\t"];
[description appendFormat:@"\t%@\n", classDiffDescription];
}
}
return description;
}
@end
/*
* Copyright 2018 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#import <Foundation/Foundation.h>
@class GULRuntimeClassSnapshot;
@class GULRuntimeDiff;
NS_ASSUME_NONNULL_BEGIN
/** This class captures various aspects the current state of the Objective-C runtime. */
@interface GULRuntimeSnapshot : NSObject
/** Initializes an instance of this class. The designated initializer.
*
* @param classes The set of classes to track. If nil or empty, all ObjC classes are tracked.
* @return An instance of this class.
*/
- (instancetype)initWithClasses:(nullable NSSet<Class> *)classes NS_DESIGNATED_INITIALIZER;
/** Captures the state of the class set. */
- (void)capture;
/** Computes the diff between this snapshot and another snapshot.
*
* @param otherSnapshot The other snapshot, assumed to be more recent than self.
* @return A diff object populated with the diff.
*/
- (GULRuntimeDiff *)diff:(GULRuntimeSnapshot *)otherSnapshot;
@end
NS_ASSUME_NONNULL_END
// Copyright 2018 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#import "GoogleUtilities/SwizzlerTestHelpers/GULRuntimeSnapshot.h"
#import <objc/runtime.h>
#import "GoogleUtilities/SwizzlerTestHelpers/GULRuntimeClassDiff.h"
#import "GoogleUtilities/SwizzlerTestHelpers/GULRuntimeClassSnapshot.h"
#import "GoogleUtilities/SwizzlerTestHelpers/GULRuntimeDiff.h"
@implementation GULRuntimeSnapshot {
/** The set of tracked classes. */
NSSet<Class> *__nullable _classes;
/** The class snapshots for each tracked class. */
NSMutableDictionary<NSString *, GULRuntimeClassSnapshot *> *_classSnapshots;
/** The hash value of this object. */
NSUInteger _runningHash;
}
- (instancetype)init {
return [self initWithClasses:nil];
}
- (instancetype)initWithClasses:(nullable NSSet<Class> *)classes {
self = [super init];
if (self) {
_classSnapshots = [[NSMutableDictionary alloc] init];
_classes = classes;
_runningHash = [_classes hash] ^ [_classSnapshots hash];
}
return self;
}
- (NSUInteger)hash {
return _runningHash;
}
- (BOOL)isEqual:(id)object {
return [self hash] == [object hash];
}
- (NSString *)description {
return [[super description] stringByAppendingFormat:@" Hash: 0x%lX", (unsigned long)[self hash]];
}
- (void)capture {
int numberOfClasses = objc_getClassList(NULL, 0);
Class *classList = (Class *)malloc(numberOfClasses * sizeof(Class));
numberOfClasses = objc_getClassList(classList, numberOfClasses);
// If we should track specific classes, then there's no need to figure out all ObjC classes.
if (_classes) {
for (Class aClass in _classes) {
NSString *classString = NSStringFromClass(aClass);
GULRuntimeClassSnapshot *classSnapshot =
[[GULRuntimeClassSnapshot alloc] initWithClass:aClass];
_classSnapshots[classString] = classSnapshot;
[classSnapshot capture];
_runningHash ^= [classSnapshot hash];
}
} else {
for (int i = 0; i < numberOfClasses; i++) {
Class aClass = classList[i];
NSString *classString = NSStringFromClass(aClass);
GULRuntimeClassSnapshot *classSnapshot =
[[GULRuntimeClassSnapshot alloc] initWithClass:aClass];
_classSnapshots[classString] = classSnapshot;
[classSnapshot capture];
_runningHash ^= [classSnapshot hash];
}
}
free(classList);
}
- (GULRuntimeDiff *)diff:(GULRuntimeSnapshot *)otherSnapshot {
GULRuntimeDiff *runtimeDiff = [[GULRuntimeDiff alloc] init];
NSSet *setOne = [NSSet setWithArray:[_classSnapshots allKeys]];
NSSet *setTwo = [NSSet setWithArray:[otherSnapshot->_classSnapshots allKeys]];
// All items contained within setOne, but not in setTwo.
NSSet *removedClasses = [setOne
filteredSetUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(
id _Nullable evaluatedObject,
NSDictionary<NSString *, id> *_Nullable bindings) {
return ![setTwo containsObject:evaluatedObject];
}]];
// All items contained within setTwo, but not in setOne.
NSSet *addedClasses = [setTwo
filteredSetUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(
id _Nullable evaluatedObject,
NSDictionary<NSString *, id> *_Nullable bindings) {
return ![setOne containsObject:evaluatedObject];
}]];
runtimeDiff.removedClasses = removedClasses;
runtimeDiff.addedClasses = addedClasses;
NSMutableSet<GULRuntimeClassDiff *> *classDiffs = [[NSMutableSet alloc] init];
[_classSnapshots
enumerateKeysAndObjectsUsingBlock:^(
NSString *_Nonnull key, GULRuntimeClassSnapshot *_Nonnull obj, BOOL *_Nonnull stop) {
GULRuntimeClassSnapshot *classSnapshot = self->_classSnapshots[key];
GULRuntimeClassSnapshot *otherClassSnapshot = otherSnapshot->_classSnapshots[key];
GULRuntimeClassDiff *classDiff = [classSnapshot diff:otherClassSnapshot];
if ([classDiff hash]) {
NSAssert(![classDiffs containsObject:classDiff],
@"An equivalent class diff has already been stored.");
[classDiffs addObject:classDiff];
}
}];
runtimeDiff.classDiffs = classDiffs;
return runtimeDiff;
}
@end
/*
* Copyright 2018 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#import <Foundation/Foundation.h>
#import "GoogleUtilities/SwizzlerTestHelpers/GULRuntimeClassDiff.h"
#import "GoogleUtilities/SwizzlerTestHelpers/GULRuntimeDiff.h"
NS_ASSUME_NONNULL_BEGIN
/** A helper class that enables the snapshotting and diffing of ObjC runtime state. */
@interface GULRuntimeStateHelper : NSObject
/** Captures the current state of the entire runtime and returns the snapshot number.
*
* @return The snapshot number corresponding to this capture.
*/
+ (NSUInteger)captureRuntimeState;
/** Captures the current state of the runtime for the provided classes.
*
* @param classes The classes whose state should be snapshotted.
* @return The snapshot number corresponding to this capture.
*/
+ (NSUInteger)captureRuntimeStateOfClasses:(NSSet<Class> *)classes;
/** Prints the diff between two snapshot numbers.
*
* @param firstSnapshot The first runtime snapshot, as provided by captureRuntimeState.
* @param secondSnapshot The runtime snapshot sometime after firstSnapshot.
* @return An instance of GULRuntimeDiff that contains the diff information.
*/
+ (GULRuntimeDiff *)diffBetween:(NSUInteger)firstSnapshot secondSnapshot:(NSUInteger)secondSnapshot;
@end
NS_ASSUME_NONNULL_END
// Copyright 2018 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#import "GoogleUtilities/SwizzlerTestHelpers/GULRuntimeStateHelper.h"
#import <objc/runtime.h>
#import "GoogleUtilities/SwizzlerTestHelpers/GULRuntimeSnapshot.h"
@implementation GULRuntimeStateHelper
/** Initializes and returns the snapshot cache.
*
* @return A singleton snapshot cache.
*/
+ (NSMutableArray<GULRuntimeSnapshot *> *)snapshotCache {
static NSMutableArray<GULRuntimeSnapshot *> *snapshots;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
snapshots = [[NSMutableArray<GULRuntimeSnapshot *> alloc] init];
});
return snapshots;
}
+ (NSUInteger)captureRuntimeState {
GULRuntimeSnapshot *snapshot = [[GULRuntimeSnapshot alloc] init];
[snapshot capture];
[[self snapshotCache] addObject:snapshot];
return [self snapshotCache].count - 1;
}
+ (NSUInteger)captureRuntimeStateOfClasses:(NSSet<Class> *)classes {
GULRuntimeSnapshot *snapshot = [[GULRuntimeSnapshot alloc] initWithClasses:classes];
[snapshot capture];
[[self snapshotCache] addObject:snapshot];
return [self snapshotCache].count - 1;
}
+ (GULRuntimeDiff *)diffBetween:(NSUInteger)firstSnapshot
secondSnapshot:(NSUInteger)secondSnapshot {
NSArray *snapshotCache = [self snapshotCache];
return [snapshotCache[firstSnapshot] diff:snapshotCache[secondSnapshot]];
}
@end
// Copyright 2019 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#import "GoogleUtilities/MethodSwizzler/Public/GoogleUtilities/GULSwizzler.h"
#import <objc/runtime.h>
#import "GoogleUtilities/SwizzlerTestHelpers/GULSwizzlingCache.h"
extern dispatch_queue_t GetGULSwizzlingQueue(void);
@implementation GULSwizzler (Unswizzle)
+ (void)unswizzleClass:(Class)aClass selector:(SEL)selector isClassSelector:(BOOL)isClassSelector {
dispatch_sync(GetGULSwizzlingQueue(), ^{
NSAssert(aClass != nil && selector != nil, @"You cannot unswizzle a nil class or selector.");
Method method = nil;
Class resolvedClass = aClass;
if (isClassSelector) {
resolvedClass = object_getClass(aClass);
method = class_getClassMethod(aClass, selector);
} else {
method = class_getInstanceMethod(aClass, selector);
}
NSAssert(method, @"Couldn't find the method you're unswizzling in the runtime.");
IMP originalImp = [[GULSwizzlingCache sharedInstance] cachedIMPForClass:resolvedClass
withSelector:selector];
NSAssert(originalImp, @"This class/selector combination hasn't been swizzled");
IMP currentImp = method_setImplementation(method, originalImp);
__unused BOOL didRemoveBlock = imp_removeBlock(currentImp);
NSAssert(didRemoveBlock, @"Wasn't able to remove the block of a swizzled IMP.");
[[GULSwizzlingCache sharedInstance] clearCacheForSwizzledIMP:currentImp
selector:selector
aClass:resolvedClass];
});
}
+ (nullable IMP)originalImplementationForClass:(Class)aClass
selector:(SEL)selector
isClassSelector:(BOOL)isClassSelector {
__block IMP originalImp = nil;
dispatch_sync(GetGULSwizzlingQueue(), ^{
Class resolvedClass = isClassSelector ? object_getClass(aClass) : aClass;
originalImp = [[GULSwizzlingCache sharedInstance] cachedIMPForClass:resolvedClass
withSelector:selector];
NSAssert(originalImp, @"The IMP for this class/selector combo doesn't exist (%@, %@).",
NSStringFromClass(resolvedClass), NSStringFromSelector(selector));
});
return originalImp;
}
@end
/*
* Copyright 2018 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#import <Foundation/Foundation.h>
/** This class handles the caching and retrieval of IMPs as we swizzle and unswizzle them. It uses
* two C++ STL unordered_maps as the underlying data store. This class is NOT thread safe.
*/
@interface GULSwizzlingCache : NSObject
/** Singleton initializer.
*
* @return a singleton GULSwizzlingCache.
*/
+ (instancetype)sharedInstance;
/** Save the existing IMP that exists before we install the new IMP for a class, selector combo.
* If the currentIMP is something that we put there, it will ignore it and instead point newIMP
* to what existed before we swizzled.
*
* @param newIMP new The IMP that is going to replace the current IMP.
* @param currentIMP The IMP returned by class_getMethodImplementation.
* @param aClass The class that we're swizzling.
* @param selector The selector we're swizzling.
*/
- (void)cacheCurrentIMP:(IMP)currentIMP
forNewIMP:(IMP)newIMP
forClass:(Class)aClass
withSelector:(SEL)selector;
/** Save the existing IMP that exists before we install the new IMP for a class, selector combo.
* If the currentIMP is something that we put there, it will ignore it and instead point newIMP
* to what existed before we swizzled.
*
* @param newIMP new The IMP that is going to replace the current IMP.
* @param currentIMP The IMP returned by class_getMethodImplementation.
* @param aClass The class that we're swizzling.
* @param selector The selector we're swizzling.
*/
+ (void)cacheCurrentIMP:(IMP)currentIMP
forNewIMP:(IMP)newIMP
forClass:(Class)aClass
withSelector:(SEL)selector;
/** Returns the cached IMP that would be invoked with the class and selector combo had we
* never swizzled.
*
* @param aClass The class the selector would be invoked on.
* @param selector The selector
* @return The original IMP i.e. the one that existed right before GULSwizzler swizzled either
* this or a superclass.
*/
- (IMP)cachedIMPForClass:(Class)aClass withSelector:(SEL)selector;
/** Clears the cache of values we no longer need because we've unswizzled the relevant method.
*
* @param swizzledIMP The IMP we replaced the existing IMP with.
* @param selector The selector which that we swizzled for.
* @param aClass The class that we're swizzling.
*/
- (void)clearCacheForSwizzledIMP:(IMP)swizzledIMP selector:(SEL)selector aClass:(Class)aClass;
@end
// Copyright 2018 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#import "GoogleUtilities/SwizzlerTestHelpers/GULSwizzlingCache.h"
#import <objc/runtime.h>
@interface GULSwizzlingCache ()
- (IMP)originalIMPOfCurrentIMP:(IMP)currentIMP;
@end
@implementation GULSwizzlingCache {
/** A mapping from the new IMP to the original IMP. */
CFMutableDictionaryRef _newToOriginalImps;
/** A mapping from a Class and SEL (stored in a CFArray) to the original IMP that existed for it.
*/
CFMutableDictionaryRef _originalImps;
}
+ (instancetype)sharedInstance {
static GULSwizzlingCache *sharedInstance;
static dispatch_once_t token;
dispatch_once(&token, ^{
sharedInstance = [[GULSwizzlingCache alloc] init];
});
return sharedInstance;
}
- (instancetype)init {
self = [super init];
if (self) {
_newToOriginalImps = CFDictionaryCreateMutable(kCFAllocatorDefault,
0, // Size.
NULL, // Keys are pointers, so this is NULL.
NULL); // Values are pointers so this is NULL.
_originalImps = CFDictionaryCreateMutable(kCFAllocatorDefault,
0, // Size.
&kCFTypeDictionaryKeyCallBacks, // Keys are CFArrays.
NULL); // Values are pointers so this is NULL.
}
return self;
}
- (void)dealloc {
CFRelease(_newToOriginalImps);
CFRelease(_originalImps);
}
- (void)cacheCurrentIMP:(IMP)currentIMP
forNewIMP:(IMP)newIMP
forClass:(Class)aClass
withSelector:(SEL)selector {
IMP originalIMP = [self originalIMPOfCurrentIMP:currentIMP];
CFDictionaryAddValue(_newToOriginalImps, newIMP, originalIMP);
const void *classSELCArray[2] = {(__bridge void *)(aClass), selector};
CFArrayRef classSELPair = CFArrayCreate(kCFAllocatorDefault, classSELCArray,
2, // Size.
NULL); // Elements are pointers so this is NULL.
CFDictionaryAddValue(_originalImps, classSELPair, originalIMP);
CFRelease(classSELPair);
}
+ (void)cacheCurrentIMP:(IMP)currentIMP
forNewIMP:(IMP)newIMP
forClass:(Class)aClass
withSelector:(SEL)selector {
[[GULSwizzlingCache sharedInstance] cacheCurrentIMP:currentIMP
forNewIMP:newIMP
forClass:aClass
withSelector:selector];
}
- (IMP)cachedIMPForClass:(Class)aClass withSelector:(SEL)selector {
const void *classSELCArray[2] = {(__bridge void *)(aClass), selector};
CFArrayRef classSELPair = CFArrayCreate(kCFAllocatorDefault, classSELCArray,
2, // Size.
NULL); // Elements are pointers so this is NULL.
const void *returnedIMP = CFDictionaryGetValue(_originalImps, classSELPair);
CFRelease(classSELPair);
return (IMP)returnedIMP;
}
- (void)clearCacheForSwizzledIMP:(IMP)swizzledIMP selector:(SEL)selector aClass:(Class)aClass {
CFDictionaryRemoveValue(_newToOriginalImps, swizzledIMP);
const void *classSELCArray[2] = {(__bridge void *)(aClass), selector};
CFArrayRef classSELPair = CFArrayCreate(kCFAllocatorDefault, classSELCArray,
2, // Size.
NULL); // Elements are pointers so this is NULL.
CFDictionaryRemoveValue(_originalImps, classSELPair);
CFRelease(classSELPair);
}
- (IMP)originalIMPOfCurrentIMP:(IMP)currentIMP {
const void *returnedIMP = CFDictionaryGetValue(_newToOriginalImps, currentIMP);
if (returnedIMP != NULL) {
return (IMP)returnedIMP;
} else {
return currentIMP;
}
}
+ (IMP)originalIMPOfCurrentIMP:(IMP)currentIMP {
return [[GULSwizzlingCache sharedInstance] originalIMPOfCurrentIMP:currentIMP];
}
#pragma mark - Helper methods for testing
- (void)clearCache {
CFDictionaryRemoveAllValues(_originalImps);
CFDictionaryRemoveAllValues(_newToOriginalImps);
}
- (CFMutableDictionaryRef)originalImps {
return _originalImps;
}
- (CFMutableDictionaryRef)newToOriginalImps {
return _newToOriginalImps;
}
@end
/*
* Copyright 2018 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@interface GULSwizzlingCache ()
/** Checks if we've swizzled the currentIMP and returns the original IMP that would be invoked if
* we hadn't swizzled it in the first place. This method is private because consumers don't need it
* to cache or retrieve any IMPs. It is used internally and for certain asserts in GULSwizzler.
*
* @param currentIMP The IMP returned by class_getMethodImplementation.
* @return The original IMP that would be invoked if we hadn't swizzled at all, and in cases where
* currentIMP is not something that we put there, just returns currentIMP.
*/
+ (IMP)originalIMPOfCurrentIMP:(IMP)currentIMP;
#pragma mark - Helper methods for testing
/** Clears all the cache data structures. */
- (void)clearCache;
/** Allows tests access to the originalImps CFMutableDictionaryRef.
*
* @returns the originalImps CFMutableDictionaryRef.
*/
- (CFMutableDictionaryRef)originalImps;
/** Allows tests access to the newToOriginalImps CFMutableDictionaryRef.
*
* @returns the newToOriginalImps CFMutableDictionaryRef.
*/
- (CFMutableDictionaryRef)newToOriginalImps;
@end
/*
* Copyright 2019 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#import <Foundation/Foundation.h>
#import <GoogleUtilities/GULSwizzler.h>
NS_ASSUME_NONNULL_BEGIN
/** This category adds methods for unswizzling that are only used for testing.
*/
@interface GULSwizzler (Unswizzle)
/** Restores the original implementation.
*
* @param aClass The class to unswizzle.
* @param selector The selector to restore the original implementation of.
* @param isClassSelector A BOOL specifying whether the selector is a class or instance selector.
*/
+ (void)unswizzleClass:(Class)aClass selector:(SEL)selector isClassSelector:(BOOL)isClassSelector;
/** Returns the original IMP for the given class and selector.
*
* @param aClass The class to use.
* @param selector The selector to find the implementation of.
* @param isClassSelector A BOOL specifying whether the selector is a class or instance selector.
* @return The implementation of the selector in the runtime before any consumer or GULSwizzler
* swizzled.
*/
+ (nullable IMP)originalImplementationForClass:(Class)aClass
selector:(SEL)selector
isClassSelector:(BOOL)isClassSelector;
@end
NS_ASSUME_NONNULL_END
......@@ -115,12 +115,24 @@ PODS:
- Google-Mobile-Ads-SDK (>= 8.2.0)
- mopub-ios-sdk (= 5.16.2)
- GoogleUserMessagingPlatform (2.0.0)
- GoogleUtilities (7.4.1):
- GoogleUtilities/AppDelegateSwizzler (= 7.4.1)
- GoogleUtilities/Environment (= 7.4.1)
- GoogleUtilities/ISASwizzler (= 7.4.1)
- GoogleUtilities/Logger (= 7.4.1)
- GoogleUtilities/MethodSwizzler (= 7.4.1)
- GoogleUtilities/Network (= 7.4.1)
- "GoogleUtilities/NSData+zlib (= 7.4.1)"
- GoogleUtilities/Reachability (= 7.4.1)
- GoogleUtilities/SwizzlerTestHelpers (= 7.4.1)
- GoogleUtilities/UserDefaults (= 7.4.1)
- GoogleUtilities/AppDelegateSwizzler (7.4.1):
- GoogleUtilities/Environment
- GoogleUtilities/Logger
- GoogleUtilities/Network
- GoogleUtilities/Environment (7.4.1):
- PromisesObjC (~> 1.2)
- GoogleUtilities/ISASwizzler (7.4.1)
- GoogleUtilities/Logger (7.4.1):
- GoogleUtilities/Environment
- GoogleUtilities/MethodSwizzler (7.4.1):
......@@ -132,6 +144,8 @@ PODS:
- "GoogleUtilities/NSData+zlib (7.4.1)"
- GoogleUtilities/Reachability (7.4.1):
- GoogleUtilities/Logger
- GoogleUtilities/SwizzlerTestHelpers (7.4.1):
- GoogleUtilities/MethodSwizzler
- GoogleUtilities/UserDefaults (7.4.1):
- GoogleUtilities/Logger
- Localize-Swift (3.2.0):
......@@ -177,6 +191,7 @@ DEPENDENCIES:
- GoogleMobileAdsMediationFacebook
- GoogleMobileAdsMediationFyber
- GoogleMobileAdsMediationMoPub
- GoogleUtilities
- Localize-Swift
- lottie-ios
- MoEngage-iOS-SDK
......@@ -276,6 +291,6 @@ SPEC CHECKSUMS:
Swarm: 95393cd52715744c94e3a8475bc20b4de5d79f35
XMLCoder: f884dfa894a6f8b7dce465e4f6c02963bf17e028
PODFILE CHECKSUM: 2a940ee71b11c8df13e5b37774edf13ede6b06bb
PODFILE CHECKSUM: 0c2405861201a6f3431e069ff33505c571f65b68
COCOAPODS: 1.10.1
This source diff could not be displayed because it is too large. You can view the blob instead.
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1100"
LastUpgradeVersion = "1250"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
......
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1100"
LastUpgradeVersion = "1250"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForAnalyzing = "YES"
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES">
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "19622742EBA51E823D6DAE3F8CDBFAD4"
......@@ -23,14 +23,15 @@
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
buildConfiguration = "Debug">
<AdditionalOptions>
</AdditionalOptions>
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
......@@ -38,17 +39,14 @@
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
buildConfiguration = "Debug"
allowLocationSimulation = "YES">
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES"
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES">
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
......
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Firebase
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Firebase-Analytics-Core-CoreOnly-Crashlytics-RemoteConfig
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseABTesting" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCrashlytics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseRemoteConfig" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" "${PODS_XCFRAMEWORKS_BUILD_DIR}/FirebaseAnalytics" "${PODS_XCFRAMEWORKS_BUILD_DIR}/GoogleAppMeasurement"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Firebase" "${PODS_ROOT}/Headers/Public"
......
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Firebase
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Firebase-Analytics-Core-CoreOnly-Crashlytics-RemoteConfig
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseABTesting" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCrashlytics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseRemoteConfig" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" "${PODS_XCFRAMEWORKS_BUILD_DIR}/FirebaseAnalytics" "${PODS_XCFRAMEWORKS_BUILD_DIR}/GoogleAppMeasurement"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Firebase" "${PODS_ROOT}/Headers/Public"
......
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Firebase-CoreOnly-Crashlytics
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCrashlytics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Firebase" "${PODS_ROOT}/Headers/Public"
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_ROOT = ${SRCROOT}
PODS_TARGET_SRCROOT = ${PODS_ROOT}/Firebase
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
SKIP_INSTALL = YES
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Firebase-CoreOnly-Crashlytics
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCrashlytics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Firebase" "${PODS_ROOT}/Headers/Public"
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_ROOT = ${SRCROOT}
PODS_TARGET_SRCROOT = ${PODS_ROOT}/Firebase
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
SKIP_INSTALL = YES
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
......@@ -22,6 +22,8 @@
#import "GULSecureCoding.h"
#import "GULURLSessionDataResponse.h"
#import "NSURLSession+GULPromises.h"
#import "GULObjectSwizzler.h"
#import "GULSwizzledObject.h"
#import "GULLogger.h"
#import "GULLoggerLevel.h"
#import "GULOriginalIMPConvenienceMacros.h"
......@@ -34,6 +36,7 @@
#import "GULNetworkMessageCode.h"
#import "GULNetworkURLSession.h"
#import "GULReachabilityChecker.h"
#import "GULSwizzler+Unswizzle.h"
#import "GULUserDefaults.h"
FOUNDATION_EXPORT double GoogleUtilitiesVersionNumber;
......
<?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>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key>
<string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>${CURRENT_PROJECT_VERSION}</string>
<key>NSPrincipalClass</key>
<string></string>
</dict>
</plist>
# Acknowledgements
This application makes use of the following third party libraries:
## Firebase
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
## FirebaseCore
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
## FirebaseCoreDiagnostics
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
## FirebaseCrashlytics
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================================================
The following copyright from Hewlett-Packard Development Company, L.P.
applies to the dwarf.h file in third_party/libunwind
libunwind - a platform-independent unwind library
Copyright (c) 2003-2005 Hewlett-Packard Development Company, L.P.
Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
## FirebaseInstallations
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
## GoogleDataTransport
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
## GoogleUtilities
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================================================
The following copyright from Landon J. Fuller applies to the isAppEncrypted
function in Environment/third_party/GULAppEnvironmentUtil.m.
Copyright (c) 2017 Landon J. Fuller <landon@landonf.org>
All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Comment from
<a href="http://iphonedevwiki.net/index.php/Crack_prevention">iPhone Dev Wiki
Crack Prevention</a>: App Store binaries are signed by both their developer
and Apple. This encrypts the binary so that decryption keys are needed in order
to make the binary readable. When iOS executes the binary, the decryption keys
are used to decrypt the binary into a readable state where it is then loaded
into memory and executed. iOS can tell the encryption status of a binary via the
cryptid structure member of LC_ENCRYPTION_INFO MachO load command. If cryptid is
a non-zero value then the binary is encrypted.
'Cracking' works by letting the kernel decrypt the binary then siphoning the
decrypted data into a new binary file, resigning, and repackaging. This will
only work on jailbroken devices as codesignature validation has been removed.
Resigning takes place because while the codesignature doesn't have to be valid
thanks to the jailbreak, it does have to be in place unless you have AppSync or
similar to disable codesignature checks.
More information at <a href="http://landonf.org/2009/02/index.html">Landon
Fuller's blog</a>
## Localize-Swift
Copyright (c) 2015 Roy Marmelstein (http://roysapps.com/)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
## PromisesObjC
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
## nanopb
Copyright (c) 2011 Petteri Aimonen <jpa at nanopb.mail.kapsi.fi>
This software is provided 'as-is', without any express or
implied warranty. In no event will the authors be held liable
for any damages arising from the use of this software.
Permission is granted to anyone to use this software for any
purpose, including commercial applications, and to alter it and
redistribute it freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you
must not claim that you wrote the original software. If you use
this software in a product, an acknowledgment in the product
documentation would be appreciated but is not required.
2. Altered source versions must be plainly marked as such, and
must not be misrepresented as being the original software.
3. This notice may not be removed or altered from any source
distribution.
Generated by CocoaPods - https://cocoapods.org
<?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>PreferenceSpecifiers</key>
<array>
<dict>
<key>FooterText</key>
<string>This application makes use of the following third party libraries:</string>
<key>Title</key>
<string>Acknowledgements</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
</string>
<key>License</key>
<string>Apache</string>
<key>Title</key>
<string>Firebase</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
</string>
<key>License</key>
<string>Apache</string>
<key>Title</key>
<string>FirebaseCore</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
</string>
<key>License</key>
<string>Apache</string>
<key>Title</key>
<string>FirebaseCoreDiagnostics</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================================================
The following copyright from Hewlett-Packard Development Company, L.P.
applies to the dwarf.h file in third_party/libunwind
libunwind - a platform-independent unwind library
Copyright (c) 2003-2005 Hewlett-Packard Development Company, L.P.
Contributed by David Mosberger-Tang &lt;davidm@hpl.hp.com&gt;
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
</string>
<key>License</key>
<string>Apache</string>
<key>Title</key>
<string>FirebaseCrashlytics</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
</string>
<key>License</key>
<string>Apache</string>
<key>Title</key>
<string>FirebaseInstallations</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
</string>
<key>License</key>
<string>Apache</string>
<key>Title</key>
<string>GoogleDataTransport</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================================================
The following copyright from Landon J. Fuller applies to the isAppEncrypted
function in Environment/third_party/GULAppEnvironmentUtil.m.
Copyright (c) 2017 Landon J. Fuller &lt;landon@landonf.org&gt;
All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Comment from
&lt;a href="http://iphonedevwiki.net/index.php/Crack_prevention"&gt;iPhone Dev Wiki
Crack Prevention&lt;/a&gt;: App Store binaries are signed by both their developer
and Apple. This encrypts the binary so that decryption keys are needed in order
to make the binary readable. When iOS executes the binary, the decryption keys
are used to decrypt the binary into a readable state where it is then loaded
into memory and executed. iOS can tell the encryption status of a binary via the
cryptid structure member of LC_ENCRYPTION_INFO MachO load command. If cryptid is
a non-zero value then the binary is encrypted.
'Cracking' works by letting the kernel decrypt the binary then siphoning the
decrypted data into a new binary file, resigning, and repackaging. This will
only work on jailbroken devices as codesignature validation has been removed.
Resigning takes place because while the codesignature doesn't have to be valid
thanks to the jailbreak, it does have to be in place unless you have AppSync or
similar to disable codesignature checks.
More information at &lt;a href="http://landonf.org/2009/02/index.html"&gt;Landon
Fuller's blog&lt;/a&gt;
</string>
<key>License</key>
<string>Apache</string>
<key>Title</key>
<string>GoogleUtilities</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>Copyright (c) 2015 Roy Marmelstein (http://roysapps.com/)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
</string>
<key>License</key>
<string>MIT</string>
<key>Title</key>
<string>Localize-Swift</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
</string>
<key>License</key>
<string>Apache</string>
<key>Title</key>
<string>PromisesObjC</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>Copyright (c) 2011 Petteri Aimonen &lt;jpa at nanopb.mail.kapsi.fi&gt;
This software is provided 'as-is', without any express or
implied warranty. In no event will the authors be held liable
for any damages arising from the use of this software.
Permission is granted to anyone to use this software for any
purpose, including commercial applications, and to alter it and
redistribute it freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you
must not claim that you wrote the original software. If you use
this software in a product, an acknowledgment in the product
documentation would be appreciated but is not required.
2. Altered source versions must be plainly marked as such, and
must not be misrepresented as being the original software.
3. This notice may not be removed or altered from any source
distribution.
</string>
<key>License</key>
<string>zlib</string>
<key>Title</key>
<string>nanopb</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>Generated by CocoaPods - https://cocoapods.org</string>
<key>Title</key>
<string></string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
</array>
<key>StringsTable</key>
<string>Acknowledgements</string>
<key>Title</key>
<string>Acknowledgements</string>
</dict>
</plist>
#import <Foundation/Foundation.h>
@interface PodsDummy_Pods_OneWeatherCore : NSObject
@end
@implementation PodsDummy_Pods_OneWeatherCore
@end
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#else
#ifndef FOUNDATION_EXPORT
#if defined(__cplusplus)
#define FOUNDATION_EXPORT extern "C"
#else
#define FOUNDATION_EXPORT extern
#endif
#endif
#endif
FOUNDATION_EXPORT double Pods_OneWeatherCoreVersionNumber;
FOUNDATION_EXPORT const unsigned char Pods_OneWeatherCoreVersionString[];
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCrashlytics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/Localize-Swift" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/Swarm" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCrashlytics/FirebaseCrashlytics.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations/FirebaseInstallations.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport/GoogleDataTransport.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Localize-Swift/Localize_Swift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC/FBLPromises.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Swarm/Swarm.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/Fyber_Marketplace_SDK" $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources "${PODS_TARGET_SRCROOT}/Sources/FBLPromises/include"
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' '@executable_path/../../Frameworks'
OTHER_LDFLAGS = $(inherited) -l"c++" -l"z" -framework "CoreTelephony" -framework "FBLPromises" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseCrashlytics" -framework "FirebaseInstallations" -framework "Foundation" -framework "GoogleDataTransport" -framework "GoogleUtilities" -framework "Localize_Swift" -framework "Security" -framework "Swarm" -framework "SystemConfiguration" -framework "UIKit" -framework "nanopb"
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_PODFILE_DIR_PATH = ${SRCROOT}/..
PODS_ROOT = ${SRCROOT}/../Pods
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
framework module Pods_OneWeatherCore {
umbrella header "Pods-OneWeatherCore-umbrella.h"
export *
module * { export * }
}
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCrashlytics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/Localize-Swift" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/Swarm" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCrashlytics/FirebaseCrashlytics.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations/FirebaseInstallations.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport/GoogleDataTransport.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Localize-Swift/Localize_Swift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC/FBLPromises.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Swarm/Swarm.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/Fyber_Marketplace_SDK" $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources "${PODS_TARGET_SRCROOT}/Sources/FBLPromises/include"
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' '@executable_path/../../Frameworks'
OTHER_LDFLAGS = $(inherited) -l"c++" -l"z" -framework "CoreTelephony" -framework "FBLPromises" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseCrashlytics" -framework "FirebaseInstallations" -framework "Foundation" -framework "GoogleDataTransport" -framework "GoogleUtilities" -framework "Localize_Swift" -framework "Security" -framework "Swarm" -framework "SystemConfiguration" -framework "UIKit" -framework "nanopb"
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_PODFILE_DIR_PATH = ${SRCROOT}/..
PODS_ROOT = ${SRCROOT}/../Pods
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment