diff --git a/.github/workflows/build-iOS.yml b/.github/workflows/build-iOS.yml index 9961522cab..bc7f17f7ba 100644 --- a/.github/workflows/build-iOS.yml +++ b/.github/workflows/build-iOS.yml @@ -10,12 +10,12 @@ jobs: runs-on: macOS-latest strategy: matrix: - destination: ['platform=iOS Simulator,OS=13.7,name=iPhone 11'] + destination: ['platform=iOS Simulator,OS=15.0,name=iPhone 11'] steps: - name: Checkout uses: actions/checkout@v2 - - name: Force XCode 11.7 - run: sudo xcode-select -switch /Applications/Xcode_11.7.app + - name: Force XCode 13.0 + run: sudo xcode-select -switch /Applications/Xcode_13.0.app - name: Build run: | cd iOS/MyStudies diff --git a/.github/workflows/lint-android.yml b/.github/workflows/lint-android.yml index 5fcd980282..90b0a746df 100644 --- a/.github/workflows/lint-android.yml +++ b/.github/workflows/lint-android.yml @@ -15,7 +15,7 @@ jobs: - name: Checkout uses: actions/checkout@v2 - name: Run check style - uses: nikitasavinov/checkstyle-action@master + uses: naveenr-btc/checkstyle-action@master with: github_token: ${{ secrets.GITHUB_TOKEN }} reporter: 'github-pr-check' diff --git a/Android/.idea/runConfigurations.xml b/Android/.idea/runConfigurations.xml deleted file mode 100644 index 7f68460d8b..0000000000 --- a/Android/.idea/runConfigurations.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/Android/app/build.gradle b/Android/app/build.gradle index 19d48858b3..999d3bbc1a 100644 --- a/Android/app/build.gradle +++ b/Android/app/build.gradle @@ -15,13 +15,13 @@ android { } } - compileSdkVersion 29 + compileSdkVersion 31 buildToolsVersion "28.0.3" defaultConfig { - minSdkVersion 19 - targetSdkVersion 29 - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + minSdkVersion 21 + targetSdkVersion 31 + testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' multiDexEnabled true buildConfigField("String", "API_KEY", apikeyProperties['API_KEY']) buildConfigField("String", "BASE_URL_STUDY_DATASTORE", apikeyProperties['BASE_URL_STUDY_DATASTORE']) @@ -69,12 +69,12 @@ android { } dependencies { - implementation 'com.android.support.constraint:constraint-layout:1.1.3' - implementation 'com.android.support:appcompat-v7:28.0.0' - implementation 'com.android.support:design:28.0.0' - implementation 'com.android.support:support-v4:28.0.0' - implementation 'com.android.support:recyclerview-v7:28.0.0' - implementation 'com.android.support:multidex:1.0.3' + implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + implementation 'androidx.appcompat:appcompat:1.0.0' + implementation 'com.google.android.material:material:1.0.0' + implementation 'androidx.legacy:legacy-support-v4:1.0.0' + implementation 'androidx.recyclerview:recyclerview:1.0.0' + implementation 'androidx.multidex:multidex:2.0.0' implementation 'com.google.firebase:firebase-messaging:17.4.0' implementation 'com.google.firebase:firebase-core:16.0.7' implementation 'com.google.code.gson:gson:2.8.2' @@ -83,23 +83,23 @@ dependencies { implementation 'de.greenrobot:eventbus:2.4.0' implementation 'org.researchstack:backbone:1.1.1' implementation 'com.github.bumptech.glide:glide:4.8.0' - implementation 'com.github.barteksc:android-pdf-viewer:2.4.0' implementation 'com.kovachcode:timePickerWithSeconds:1.0.1' implementation 'com.tom_roush:pdfbox-android:1.8.10.1' - implementation 'com.android.support:customtabs:28.0.0' + implementation 'androidx.browser:browser:1.0.0' implementation 'junit:junit:4.13' - //please remove these 2 dependencies for release build - implementation 'com.facebook.stetho:stetho:1.5.0' - implementation 'com.uphyca:stetho_realm:2.1.0' implementation 'com.github.LucasFsc:Html2Pdf:0.2-beta' + implementation 'com.github.naveenr-btc:RangeSeekBar:3.0.2' - androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { + implementation 'com.github.chrisbanes:PhotoView:2.3.0' + + androidTestImplementation('androidx.test.espresso:espresso-core:3.1.0', { exclude group: 'com.android.support', module: 'support-annotations' }) androidTestImplementation "com.squareup.okhttp3:mockwebserver:4.4.0" testImplementation 'org.mockito:mockito-android:2.11.0' + androidTestImplementation 'androidx.test:rules:1.2.0' testImplementation 'junit:junit:4.12' } apply plugin: 'com.google.gms.google-services' diff --git a/Android/app/src/androidTest/java/com/harvard/AppFirebaseMessagingServiceTest.java b/Android/app/src/androidTest/java/com/harvard/AppFirebaseMessagingServiceTest.java index f13c728e9d..0d948d78f2 100644 --- a/Android/app/src/androidTest/java/com/harvard/AppFirebaseMessagingServiceTest.java +++ b/Android/app/src/androidTest/java/com/harvard/AppFirebaseMessagingServiceTest.java @@ -10,7 +10,7 @@ import android.content.Context; import android.os.Bundle; -import android.support.test.InstrumentationRegistry; +import androidx.test.platform.app.InstrumentationRegistry; import com.google.firebase.messaging.RemoteMessage; import com.harvard.storagemodule.DbServiceSubscriber; import com.harvard.studyappmodule.studymodel.Study; @@ -70,9 +70,9 @@ public class AppFirebaseMessagingServiceTest { @Before public void setUp() { - realm = AppController.getRealmobj(InstrumentationRegistry.getTargetContext()); + realm = AppController.getRealmobj(InstrumentationRegistry.getInstrumentation().getTargetContext()); dbServiceSubscriber = new DbServiceSubscriber(); - context = InstrumentationRegistry.getTargetContext(); + context = InstrumentationRegistry.getInstrumentation().getTargetContext(); } @Test @@ -144,7 +144,6 @@ public void execute(Realm realm) { private Study getstudy() { StudyList studyList = new StudyList(); - studyList.setBookmarked(STUDYLISTBOOKMARKED); studyList.setCategory(STUDYLISTCATEGORY); studyList.setLogo(STUDYLISTLOGO); studyList.setPdfPath(STUDYLISTPDFPATH); @@ -166,7 +165,6 @@ private Study getstudy() { private StudyData getStudyData() { Studies studies = new Studies(); - studies.setBookmarked(false); studies.setSiteId(SITEID); studies.setEnrolledDate(ENROLLEDDATE); studies.setParticipantId(PARTICIPANTID); diff --git a/Android/app/src/androidTest/java/com/harvard/ExampleInstrumentedTest.java b/Android/app/src/androidTest/java/com/harvard/ExampleInstrumentedTest.java index 912debb176..979fb2b14d 100644 --- a/Android/app/src/androidTest/java/com/harvard/ExampleInstrumentedTest.java +++ b/Android/app/src/androidTest/java/com/harvard/ExampleInstrumentedTest.java @@ -1,8 +1,8 @@ package com.harvard; import android.content.Context; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.runner.AndroidJUnit4; import org.junit.Test; import org.junit.runner.RunWith; @@ -16,11 +16,11 @@ */ @RunWith(AndroidJUnit4.class) public class ExampleInstrumentedTest { - @Test - public void useAppContext() { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getTargetContext(); + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - assertEquals("com.harvard", appContext.getPackageName()); - } + assertEquals("com.harvard", appContext.getPackageName()); + } } diff --git a/Android/app/src/androidTest/java/com/harvard/FdaApplicationTest.java b/Android/app/src/androidTest/java/com/harvard/FdaApplicationTest.java index 50aecca4a6..d1d95399e6 100644 --- a/Android/app/src/androidTest/java/com/harvard/FdaApplicationTest.java +++ b/Android/app/src/androidTest/java/com/harvard/FdaApplicationTest.java @@ -11,7 +11,8 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.runner.AndroidJUnit4; + import org.junit.Test; import org.junit.runner.RunWith; diff --git a/Android/app/src/androidTest/java/com/harvard/storagemodule/DbServiceSubscriberTest.java b/Android/app/src/androidTest/java/com/harvard/storagemodule/DbServiceSubscriberTest.java index 683b46ce13..23250ef748 100644 --- a/Android/app/src/androidTest/java/com/harvard/storagemodule/DbServiceSubscriberTest.java +++ b/Android/app/src/androidTest/java/com/harvard/storagemodule/DbServiceSubscriberTest.java @@ -11,7 +11,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; -import android.support.test.InstrumentationRegistry; +import androidx.test.platform.app.InstrumentationRegistry; import com.harvard.studyappmodule.activitylistmodel.ActivitiesWS; import com.harvard.studyappmodule.activitylistmodel.ActivityListData; import com.harvard.studyappmodule.activitylistmodel.AnchorDate; @@ -56,7 +56,7 @@ public class DbServiceSubscriberTest { @Before public void setUp() { - realm = AppController.getRealmobj(InstrumentationRegistry.getTargetContext()); + realm = AppController.getRealmobj(InstrumentationRegistry.getInstrumentation().getTargetContext()); dbServiceSubscriber = new DbServiceSubscriber(); } @@ -155,7 +155,8 @@ private ActivitiesWS getactivitieswsdata() { AnchorRuns anchorRuns = new AnchorRuns(); anchorRuns.setEndDays(TEST_END_DAYS); anchorRuns.setStartDays(TEST_START_DAYS); - anchorRuns.setTime(TEST_TIME); + anchorRuns.setStartTime(TEST_TIME); + anchorRuns.setEndTime(TEST_TIME); RealmList runslist = new RealmList<>(); runslist.add(frequencyRuns); RealmList anchorRunslist = new RealmList<>(); diff --git a/Android/app/src/androidTest/java/com/harvard/studyappmodule/SurveyActivitiesFragmentTest.java b/Android/app/src/androidTest/java/com/harvard/studyappmodule/SurveyActivitiesFragmentTest.java index c7064193f9..01756d4a2b 100644 --- a/Android/app/src/androidTest/java/com/harvard/studyappmodule/SurveyActivitiesFragmentTest.java +++ b/Android/app/src/androidTest/java/com/harvard/studyappmodule/SurveyActivitiesFragmentTest.java @@ -13,7 +13,7 @@ import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is; -import android.support.test.InstrumentationRegistry; +import androidx.test.platform.app.InstrumentationRegistry; import com.harvard.storagemodule.DbServiceSubscriber; import com.harvard.studyappmodule.surveyscheduler.SurveyScheduler; import com.harvard.usermodule.webservicemodel.Studies; @@ -50,7 +50,7 @@ public class SurveyActivitiesFragmentTest { @Before public void setUp() { - realm = AppController.getRealmobj(InstrumentationRegistry.getTargetContext()); + realm = AppController.getRealmobj(InstrumentationRegistry.getInstrumentation().getTargetContext()); dbServiceSubscriber = new DbServiceSubscriber(); } @@ -106,7 +106,6 @@ private Studies getStudies() { studies.setStatus(TEST_STATUS); studies.setSiteId(TEST_SITE_ID); studies.setEnrolledDate(TEST_ENROLLMENTDATE); - studies.setBookmarked(TEST_BOOKMARKED); studies.setParticipantId(TEST_PARTICIPANT_ID); studies.setCompletion(TEST_COMPLETION); studies.setAdherence(TEST_ADHERENCE); diff --git a/Android/app/src/androidTest/java/com/harvard/studyappmodule/SurveyActivitiesListAdapterTest.java b/Android/app/src/androidTest/java/com/harvard/studyappmodule/SurveyActivitiesListAdapterTest.java index 1e0c3e65be..f52d88b208 100644 --- a/Android/app/src/androidTest/java/com/harvard/studyappmodule/SurveyActivitiesListAdapterTest.java +++ b/Android/app/src/androidTest/java/com/harvard/studyappmodule/SurveyActivitiesListAdapterTest.java @@ -11,7 +11,7 @@ import static junit.framework.TestCase.assertTrue; import static junit.framework.TestCase.fail; -import android.support.test.InstrumentationRegistry; +import androidx.test.platform.app.InstrumentationRegistry; import com.harvard.studyappmodule.activitylistmodel.ActivitiesWS; import com.harvard.studyappmodule.activitylistmodel.AnchorRuns; import com.harvard.studyappmodule.activitylistmodel.Frequency; @@ -80,7 +80,7 @@ public void getDatesAdapterTest() { TEST_POSITION, joiningdate, startDate, - InstrumentationRegistry.getTargetContext(), status); + InstrumentationRegistry.getInstrumentation().getTargetContext(), status); assertTrue(anchordate.toLowerCase().contains(TEST_RESULT_ONE.toLowerCase())); String regular = @@ -90,7 +90,7 @@ public void getDatesAdapterTest() { TEST_POSITION, startDate, joiningdate, - InstrumentationRegistry.getTargetContext(), status); + InstrumentationRegistry.getInstrumentation().getTargetContext(), status); assertTrue(regular.toLowerCase().contains(TEST_RESULT_TWO.toLowerCase())); String studyLifeTime = @@ -100,7 +100,7 @@ public void getDatesAdapterTest() { TEST_POSITION, startDate, joiningdate, - InstrumentationRegistry.getTargetContext(), status); + InstrumentationRegistry.getInstrumentation().getTargetContext(), status); assertTrue(studyLifeTime.toLowerCase().contains(TEST_RESULT_THREE.toLowerCase())); } @@ -111,7 +111,8 @@ private ActivitiesWS getactivitieswsdata() { AnchorRuns anchorRuns = new AnchorRuns(); anchorRuns.setEndDays(TEST_END_DAYS); anchorRuns.setStartDays(TEST_START_DAYS); - anchorRuns.setTime(TEST_TIME); + anchorRuns.setStartTime(TEST_TIME); + anchorRuns.setEndTime(TEST_TIME); RealmList runslist = new RealmList<>(); runslist.add(frequencyRuns); RealmList anchorRunslist = new RealmList<>(); diff --git a/Android/app/src/androidTest/java/com/harvard/studyappmodule/surveyscheduler/SurveySchedulerTest.java b/Android/app/src/androidTest/java/com/harvard/studyappmodule/surveyscheduler/SurveySchedulerTest.java index 3f0afbb45f..ee15a81968 100644 --- a/Android/app/src/androidTest/java/com/harvard/studyappmodule/surveyscheduler/SurveySchedulerTest.java +++ b/Android/app/src/androidTest/java/com/harvard/studyappmodule/surveyscheduler/SurveySchedulerTest.java @@ -14,7 +14,7 @@ import static org.hamcrest.Matchers.equalTo; import android.content.Context; -import android.support.test.InstrumentationRegistry; +import androidx.test.platform.app.InstrumentationRegistry; import com.google.gson.Gson; import com.harvard.R; import com.harvard.storagemodule.DbServiceSubscriber; diff --git a/Android/app/src/androidTest/java/com/harvard/usermodule/AuthServerWebServiceTest.java b/Android/app/src/androidTest/java/com/harvard/usermodule/AuthServerWebServiceTest.java index deed02c0ee..19c7a65ee2 100644 --- a/Android/app/src/androidTest/java/com/harvard/usermodule/AuthServerWebServiceTest.java +++ b/Android/app/src/androidTest/java/com/harvard/usermodule/AuthServerWebServiceTest.java @@ -11,8 +11,8 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.runner.AndroidJUnit4; import com.google.gson.Gson; import com.harvard.usermodule.webservicemodel.ChangePasswordData; import com.harvard.usermodule.webservicemodel.LoginData; @@ -96,7 +96,7 @@ public MockResponse dispatch(@NotNull RecordedRequest recordedRequest) e.printStackTrace(); } async = new ApiCallSyncronizer(); - ApiCall apiCall = new ApiCall(InstrumentationRegistry.getTargetContext()); + ApiCall apiCall = new ApiCall(InstrumentationRegistry.getInstrumentation().getTargetContext()); apiCall.apiCallPostJson( url.toString(), new HashMap(), @@ -149,7 +149,7 @@ public MockResponse dispatch(@NotNull RecordedRequest recordedRequest) JSONObject params = new JSONObject(); URL url = mockWebServer.url(studyListUrl.toString()).url(); async = new ApiCallSyncronizer(); - ApiCall apiCall = new ApiCall(InstrumentationRegistry.getTargetContext()); + ApiCall apiCall = new ApiCall(InstrumentationRegistry.getInstrumentation().getTargetContext()); apiCall.apiCallPostJson( url.toString(), new HashMap(), @@ -210,7 +210,7 @@ public MockResponse dispatch(@NotNull RecordedRequest recordedRequest) } URL url = mockWebServer.url(studyListUrl.toString()).url(); async = new ApiCallSyncronizer(); - ApiCall apiCall = new ApiCall(InstrumentationRegistry.getTargetContext()); + ApiCall apiCall = new ApiCall(InstrumentationRegistry.getInstrumentation().getTargetContext()); apiCall.apiCallPostJson( url.toString(), new HashMap(), @@ -268,7 +268,7 @@ public MockResponse dispatch(@NotNull RecordedRequest recordedRequest) e.printStackTrace(); } async = new ApiCallSyncronizer(); - ApiCall apiCall = new ApiCall(InstrumentationRegistry.getTargetContext()); + ApiCall apiCall = new ApiCall(InstrumentationRegistry.getInstrumentation().getTargetContext()); apiCall.apiCallPutJson( url.toString(), new HashMap(), diff --git a/Android/app/src/androidTest/java/com/harvard/usermodule/ErrorTest.java b/Android/app/src/androidTest/java/com/harvard/usermodule/ErrorTest.java index e0d3f1ccf2..da487c5a45 100644 --- a/Android/app/src/androidTest/java/com/harvard/usermodule/ErrorTest.java +++ b/Android/app/src/androidTest/java/com/harvard/usermodule/ErrorTest.java @@ -8,17 +8,18 @@ package com.harvard.usermodule; -import static android.support.test.InstrumentationRegistry.getTargetContext; -import static android.support.test.espresso.Espresso.onView; -import static android.support.test.espresso.assertion.ViewAssertions.matches; -import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed; -import static android.support.test.espresso.matcher.ViewMatchers.withId; -import static android.support.test.espresso.matcher.ViewMatchers.withText; +import static androidx.test.espresso.Espresso.onView; +import static androidx.test.espresso.assertion.ViewAssertions.matches; +import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; +import static androidx.test.espresso.matcher.ViewMatchers.withId; +import static androidx.test.espresso.matcher.ViewMatchers.withText; import android.content.Intent; import android.net.Uri; -import android.support.test.rule.ActivityTestRule; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.rule.ActivityTestRule; +import androidx.test.runner.AndroidJUnit4; + import com.harvard.AppConfig; import com.harvard.BuildConfig; import com.harvard.R; @@ -38,7 +39,7 @@ public void errorTest() { AppConfig.AppType = BuildConfig.APP_TYPE; Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(URL)) - .setPackage(getTargetContext().getPackageName()); + .setPackage(InstrumentationRegistry.getInstrumentation().getTargetContext().getPackageName()); activityRule.launchActivity(intent); onView(withId(R.id.activity_gateway)).check(matches(isDisplayed())); onView(withId(R.id.mNewUserButton)).check(matches(withText(R.string.new_user))); diff --git a/Android/app/src/androidTest/java/com/harvard/usermodule/FileReader.java b/Android/app/src/androidTest/java/com/harvard/usermodule/FileReader.java index d5af50906b..1481a3aa9d 100644 --- a/Android/app/src/androidTest/java/com/harvard/usermodule/FileReader.java +++ b/Android/app/src/androidTest/java/com/harvard/usermodule/FileReader.java @@ -10,7 +10,7 @@ import android.app.Application; import android.content.Context; -import android.support.test.InstrumentationRegistry; +import androidx.test.platform.app.InstrumentationRegistry; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; diff --git a/Android/app/src/androidTest/java/com/harvard/usermodule/ForgotPasswordActivityTest.java b/Android/app/src/androidTest/java/com/harvard/usermodule/ForgotPasswordActivityTest.java index 45599dd439..255145d3cf 100644 --- a/Android/app/src/androidTest/java/com/harvard/usermodule/ForgotPasswordActivityTest.java +++ b/Android/app/src/androidTest/java/com/harvard/usermodule/ForgotPasswordActivityTest.java @@ -8,17 +8,18 @@ package com.harvard.usermodule; -import static android.support.test.InstrumentationRegistry.getTargetContext; -import static android.support.test.espresso.Espresso.onView; -import static android.support.test.espresso.assertion.ViewAssertions.matches; -import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed; -import static android.support.test.espresso.matcher.ViewMatchers.withId; -import static android.support.test.espresso.matcher.ViewMatchers.withText; +import static androidx.test.espresso.Espresso.onView; +import static androidx.test.espresso.assertion.ViewAssertions.matches; +import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; +import static androidx.test.espresso.matcher.ViewMatchers.withId; +import static androidx.test.espresso.matcher.ViewMatchers.withText; import android.content.Intent; import android.net.Uri; -import android.support.test.rule.ActivityTestRule; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.rule.ActivityTestRule; +import androidx.test.runner.AndroidJUnit4; + import com.harvard.R; import org.junit.Rule; import org.junit.Test; @@ -37,7 +38,7 @@ public class ForgotPasswordActivityTest { public void launchForgotPasswordActivity() { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(URL)) - .setPackage(getTargetContext().getPackageName()); + .setPackage(InstrumentationRegistry.getInstrumentation().getTargetContext().getPackageName()); activityRule.launchActivity(intent); onView(withId(R.id.activity_sign_in)).check(matches(isDisplayed())); onView(withId(R.id.email_text)).check(matches(withText(R.string.forgot_password_text))); diff --git a/Android/app/src/androidTest/java/com/harvard/usermodule/LoginCallbackActivityTest.java b/Android/app/src/androidTest/java/com/harvard/usermodule/LoginCallbackActivityTest.java index 4a138f56ac..bc4dabd902 100644 --- a/Android/app/src/androidTest/java/com/harvard/usermodule/LoginCallbackActivityTest.java +++ b/Android/app/src/androidTest/java/com/harvard/usermodule/LoginCallbackActivityTest.java @@ -8,17 +8,18 @@ package com.harvard.usermodule; -import static android.support.test.InstrumentationRegistry.getTargetContext; -import static android.support.test.espresso.Espresso.onView; -import static android.support.test.espresso.assertion.ViewAssertions.matches; -import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed; -import static android.support.test.espresso.matcher.ViewMatchers.withId; -import static android.support.test.espresso.matcher.ViewMatchers.withText; +import static androidx.test.espresso.Espresso.onView; +import static androidx.test.espresso.assertion.ViewAssertions.matches; +import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; +import static androidx.test.espresso.matcher.ViewMatchers.withId; +import static androidx.test.espresso.matcher.ViewMatchers.withText; import android.content.Intent; import android.net.Uri; -import android.support.test.rule.ActivityTestRule; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.rule.ActivityTestRule; +import androidx.test.runner.AndroidJUnit4; + import com.harvard.R; import org.junit.Rule; import org.junit.Test; @@ -36,7 +37,7 @@ public class LoginCallbackActivityTest { public void loginCallbackhandleIntent() { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(URL)) - .setPackage(getTargetContext().getPackageName()); + .setPackage(InstrumentationRegistry.getInstrumentation().getTargetContext().getPackageName()); activityRule.launchActivity(intent); onView(withId(R.id.activity_verification_step)).check(matches(isDisplayed())); onView(withId(R.id.verification_steps_label)) diff --git a/Android/app/src/androidTest/java/com/harvard/usermodule/SignupActivityTest.java b/Android/app/src/androidTest/java/com/harvard/usermodule/SignupActivityTest.java index 80e4df79d9..94159fab51 100644 --- a/Android/app/src/androidTest/java/com/harvard/usermodule/SignupActivityTest.java +++ b/Android/app/src/androidTest/java/com/harvard/usermodule/SignupActivityTest.java @@ -8,17 +8,18 @@ package com.harvard.usermodule; -import static android.support.test.InstrumentationRegistry.getTargetContext; -import static android.support.test.espresso.Espresso.onView; -import static android.support.test.espresso.assertion.ViewAssertions.matches; -import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed; -import static android.support.test.espresso.matcher.ViewMatchers.withId; -import static android.support.test.espresso.matcher.ViewMatchers.withText; +import static androidx.test.espresso.Espresso.onView; +import static androidx.test.espresso.assertion.ViewAssertions.matches; +import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; +import static androidx.test.espresso.matcher.ViewMatchers.withId; +import static androidx.test.espresso.matcher.ViewMatchers.withText; import android.content.Intent; import android.net.Uri; -import android.support.test.rule.ActivityTestRule; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.rule.ActivityTestRule; +import androidx.test.runner.AndroidJUnit4; + import com.harvard.R; import org.junit.Rule; import org.junit.Test; @@ -36,7 +37,7 @@ public class SignupActivityTest { public void launchForgotPasswordActivity() { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(URL)) - .setPackage(getTargetContext().getPackageName()); + .setPackage(InstrumentationRegistry.getInstrumentation().getTargetContext().getPackageName()); activityRule.launchActivity(intent); onView(withId(R.id.activity_signup)).check(matches(isDisplayed())); onView(withId(R.id.email_label)).check(matches(withText(R.string.email_id))); diff --git a/Android/app/src/androidTest/java/com/harvard/usermodule/TermsPrivacyPolicyActivityTest.java b/Android/app/src/androidTest/java/com/harvard/usermodule/TermsPrivacyPolicyActivityTest.java index 8d01b23959..d6062b21b8 100644 --- a/Android/app/src/androidTest/java/com/harvard/usermodule/TermsPrivacyPolicyActivityTest.java +++ b/Android/app/src/androidTest/java/com/harvard/usermodule/TermsPrivacyPolicyActivityTest.java @@ -8,16 +8,17 @@ package com.harvard.usermodule; -import static android.support.test.InstrumentationRegistry.getTargetContext; -import static android.support.test.espresso.Espresso.onView; -import static android.support.test.espresso.assertion.ViewAssertions.matches; -import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed; -import static android.support.test.espresso.matcher.ViewMatchers.withId; -import static android.support.test.espresso.matcher.ViewMatchers.withText; +import static androidx.test.espresso.Espresso.onView; +import static androidx.test.espresso.assertion.ViewAssertions.matches; +import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; +import static androidx.test.espresso.matcher.ViewMatchers.withId; +import static androidx.test.espresso.matcher.ViewMatchers.withText; import android.content.Intent; import android.net.Uri; -import android.support.test.rule.ActivityTestRule; +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.rule.ActivityTestRule; + import com.harvard.R; import org.junit.Rule; import org.junit.Test; @@ -40,7 +41,7 @@ public class TermsPrivacyPolicyActivityTest { public void termsTest() { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(TERMS_URL)) - .setPackage(getTargetContext().getPackageName()); + .setPackage(InstrumentationRegistry.getInstrumentation().getTargetContext().getPackageName()); intent.putExtra(INTENT_TITLE_KEY, INTENT_TITLE_TERMS_VALUE); intent.putExtra(INTENT_URL_KEY, INTENT_URL_TERMS_VALUE); activityRule.launchActivity(intent); @@ -52,7 +53,7 @@ public void termsTest() { public void privacyPolicyTest() { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(PRIVACY_POLICY_URL)) - .setPackage(getTargetContext().getPackageName()); + .setPackage(InstrumentationRegistry.getInstrumentation().getTargetContext().getPackageName()); intent.putExtra(INTENT_TITLE_KEY, INTENT_TITLE_PRIVACY_POLICY_VALUE); intent.putExtra(INTENT_URL_KEY, INTENT_URL_PRIVACY_POLICY_VALUE); activityRule.launchActivity(intent); diff --git a/Android/app/src/androidTest/java/com/harvard/webservicemodule/apihelper/ApiCallTest.java b/Android/app/src/androidTest/java/com/harvard/webservicemodule/apihelper/ApiCallTest.java index 1d915ab7b6..33928c0a64 100644 --- a/Android/app/src/androidTest/java/com/harvard/webservicemodule/apihelper/ApiCallTest.java +++ b/Android/app/src/androidTest/java/com/harvard/webservicemodule/apihelper/ApiCallTest.java @@ -10,8 +10,9 @@ import static org.junit.Assert.assertNotNull; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.runner.AndroidJUnit4; + import com.harvard.studyappmodule.studymodel.Study; import com.harvard.usermodule.webservicemodel.ForgotPasswordData; import com.harvard.utils.Urls; @@ -38,7 +39,7 @@ public void apiCallGetTest() { studyListUrl.append(Urls.BASE_URL_STUDY_DATASTORE); studyListUrl.append(Urls.STUDY_LIST); async = new ApiCallSyncronizer(); - ApiCall apiCall = new ApiCall(InstrumentationRegistry.getTargetContext()); + ApiCall apiCall = new ApiCall(InstrumentationRegistry.getInstrumentation().getTargetContext()); apiCall.apiCallGet( studyListUrl.toString(), new HashMap(), @@ -72,7 +73,7 @@ public void apiCallPostHashmapTest() { HashMap params = new HashMap<>(); params.put(PARAMS_EMAIL_KEY, PARAMS_EMAIL_VALUE); params.put(PARAMS_APPID_KEY, PARAMS_APPID_VALUE); - ApiCall apiCall = new ApiCall(InstrumentationRegistry.getTargetContext()); + ApiCall apiCall = new ApiCall(InstrumentationRegistry.getInstrumentation().getTargetContext()); apiCall.apiCallPostHashmap( forgotPasswordUrl.toString(), new HashMap(), @@ -109,7 +110,7 @@ public void apiCallPostJsonTest() { } catch (JSONException e) { e.printStackTrace(); } - ApiCall apiCall = new ApiCall(InstrumentationRegistry.getTargetContext()); + ApiCall apiCall = new ApiCall(InstrumentationRegistry.getInstrumentation().getTargetContext()); apiCall.apiCallPostJson( forgotPasswordUrl.toString(), new HashMap(), diff --git a/Android/app/src/androidTest/java/com/harvard/webservicemodule/apihelper/HttpRequestInstrumentedTest.java b/Android/app/src/androidTest/java/com/harvard/webservicemodule/apihelper/HttpRequestInstrumentedTest.java index 8e99ea8bba..896ccec247 100644 --- a/Android/app/src/androidTest/java/com/harvard/webservicemodule/apihelper/HttpRequestInstrumentedTest.java +++ b/Android/app/src/androidTest/java/com/harvard/webservicemodule/apihelper/HttpRequestInstrumentedTest.java @@ -11,7 +11,8 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.runner.AndroidJUnit4; + import com.harvard.utils.Urls; import java.util.HashMap; import org.json.JSONException; diff --git a/Android/app/src/androidTest/java/com/harward/fda/ExampleInstrumentedTest.java b/Android/app/src/androidTest/java/com/harward/fda/ExampleInstrumentedTest.java index 15cd39ee5a..391f7e5b59 100644 --- a/Android/app/src/androidTest/java/com/harward/fda/ExampleInstrumentedTest.java +++ b/Android/app/src/androidTest/java/com/harward/fda/ExampleInstrumentedTest.java @@ -15,14 +15,13 @@ package com.harward.fda; import android.content.Context; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.runner.AndroidJUnit4; import org.junit.Test; import org.junit.runner.RunWith; import static junit.framework.Assert.assertEquals; -import static org.junit.Assert.*; /** * Instrumentation test, which will execute on an Android device. @@ -31,11 +30,11 @@ */ @RunWith(AndroidJUnit4.class) public class ExampleInstrumentedTest { - @Test - public void useAppContext() throws Exception { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getTargetContext(); + @Test + public void useAppContext() throws Exception { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - assertEquals("com.harward.fda", appContext.getPackageName()); - } + assertEquals("com.harward.fda", appContext.getPackageName()); + } } diff --git a/Android/app/src/fda/java/com/harvard/gatewaymodule/GatewayPagerAdapter.java b/Android/app/src/fda/java/com/harvard/gatewaymodule/GatewayPagerAdapter.java index c117497a3b..4cc450ae9b 100644 --- a/Android/app/src/fda/java/com/harvard/gatewaymodule/GatewayPagerAdapter.java +++ b/Android/app/src/fda/java/com/harvard/gatewaymodule/GatewayPagerAdapter.java @@ -18,17 +18,20 @@ import android.content.Context; import android.content.Intent; import android.net.Uri; -import android.support.v4.view.PagerAdapter; -import android.support.v7.widget.AppCompatImageView; -import android.support.v7.widget.AppCompatTextView; +import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.RelativeLayout; +import androidx.appcompat.widget.AppCompatImageView; +import androidx.appcompat.widget.AppCompatTextView; +import androidx.viewpager.widget.PagerAdapter; import com.harvard.R; import com.harvard.storagemodule.DbServiceSubscriber; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; + import io.realm.Realm; public class GatewayPagerAdapter extends PagerAdapter { @@ -40,6 +43,7 @@ public class GatewayPagerAdapter extends PagerAdapter { private AppCompatTextView desc; private AppCompatTextView watchVideoLabel; private Context context; + private CustomFirebaseAnalytics analyticsInstance; public GatewayPagerAdapter() { size = 2; @@ -69,6 +73,7 @@ public Object instantiateItem(ViewGroup collection, int position) { final LayoutInflater inflater = (LayoutInflater) collection.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); context = inflater.getContext(); + analyticsInstance = CustomFirebaseAnalytics.getInstance(context); switch (position) { case 0: View view = inflater.inflate(R.layout.gateway_item1, null); @@ -119,6 +124,12 @@ private void initializeXmlId(int pos, View view) { new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.watch_video)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); Intent intent = new Intent( Intent.ACTION_VIEW, Uri.parse("https://www.youtube.com/watch?v=6FGGquOrVic")); @@ -136,12 +147,19 @@ public void onClick(View v) { new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.app_website)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); DbServiceSubscriber dbServiceSubscriber = new DbServiceSubscriber(); Realm realm = AppController.getRealmobj(context); if (!dbServiceSubscriber.getApps(realm).getAppWebsite().equalsIgnoreCase("")) { Intent browserIntent = new Intent( - Intent.ACTION_VIEW, Uri.parse(dbServiceSubscriber.getApps(realm).getAppWebsite())); + Intent.ACTION_VIEW, + Uri.parse(dbServiceSubscriber.getApps(realm).getAppWebsite())); context.startActivity(browserIntent); } } diff --git a/Android/app/src/fda/java/com/harvard/studyappmodule/StudyActivity.java b/Android/app/src/fda/java/com/harvard/studyappmodule/StudyActivity.java index dae2ea204a..d99774e2c8 100644 --- a/Android/app/src/fda/java/com/harvard/studyappmodule/StudyActivity.java +++ b/Android/app/src/fda/java/com/harvard/studyappmodule/StudyActivity.java @@ -31,15 +31,6 @@ import android.os.Build; import android.os.Bundle; import android.os.Handler; -import android.support.customtabs.CustomTabsIntent; -import android.support.v4.app.NotificationManagerCompat; -import android.support.v4.view.GravityCompat; -import android.support.v4.widget.DrawerLayout; -import android.support.v7.app.AlertDialog; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.AppCompatEditText; -import android.support.v7.widget.AppCompatImageView; -import android.support.v7.widget.AppCompatTextView; import android.text.Editable; import android.text.TextWatcher; import android.view.KeyEvent; @@ -50,6 +41,15 @@ import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.AppCompatEditText; +import androidx.appcompat.widget.AppCompatImageView; +import androidx.appcompat.widget.AppCompatTextView; +import androidx.browser.customtabs.CustomTabsIntent; +import androidx.core.app.NotificationManagerCompat; +import androidx.core.view.GravityCompat; +import androidx.drawerlayout.widget.DrawerLayout; import com.harvard.AppConfig; import com.harvard.AppFirebaseMessagingService; import com.harvard.BuildConfig; @@ -62,11 +62,11 @@ import com.harvard.studyappmodule.studymodel.Study; import com.harvard.studyappmodule.studymodel.StudyList; import com.harvard.usermodule.UserModulePresenter; -import com.harvard.usermodule.VerificationStepActivity; import com.harvard.usermodule.event.LogoutEvent; import com.harvard.usermodule.model.Apps; import com.harvard.usermodule.webservicemodel.LoginData; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import com.harvard.utils.SetDialogHelper; import com.harvard.utils.SharedPreferenceHelper; @@ -93,6 +93,7 @@ public class StudyActivity extends AppCompatActivity private AppCompatTextView titleFdaListens; private AppCompatTextView title; private AppCompatTextView sidebarTitle; + private CustomFirebaseAnalytics analyticsInstance; private LinearLayout homeLayout; private AppCompatTextView homeLabel; private LinearLayout resourcesLayout; @@ -137,6 +138,7 @@ public class StudyActivity extends AppCompatActivity @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); if (AppConfig.AppType.equalsIgnoreCase(getString(R.string.app_gateway))) { isExit = false; setContentView(R.layout.activity_study); @@ -253,7 +255,10 @@ public void checkForNotification(Intent intent1) { .equalsIgnoreCase("")) { if (type != null) { if (type.equalsIgnoreCase("Gateway")) { - if (subType.equalsIgnoreCase("Study")) { + if (subType.equalsIgnoreCase("Study") + || subType.equalsIgnoreCase("Activity") + || subType.equalsIgnoreCase("Announcement") + || subType.equalsIgnoreCase("studyEvent")) { Study study = dbServiceSubscriber.getStudyListFromDB(realm); if (study != null) { RealmList studyListArrayList = study.getStudies(); @@ -492,6 +497,12 @@ private void initializeXmlId() { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.study_side_menu)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); checkSignOrSignOutScenario(); openDrawer(); try { @@ -505,6 +516,12 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.filter_clicked)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); Intent intent = new Intent(StudyActivity.this, FilterActivity.class); startActivityForResult(intent, 999); } @@ -513,6 +530,12 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.study_search)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); toolBarLayout.setVisibility(View.GONE); searchToolBarLayout.setVisibility(View.VISIBLE); drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); @@ -580,6 +603,12 @@ public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.study_search_clear)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); searchEditText.setText(""); clearLayout.setVisibility(View.INVISIBLE); studyFragment.setStudyFilteredStudyList(); @@ -590,6 +619,12 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.study_search_cancel)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); searchEditText.setText(""); setToolBarEnable(); hideKeyboard(); @@ -601,6 +636,12 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.study_notification)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); Intent intent = new Intent(StudyActivity.this, NotificationActivity.class); startActivityForResult(intent, NOTIFICATION_RESULT); } @@ -626,6 +667,11 @@ public void onDrawerStateChanged(int newState) {} new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, getString(R.string.study_info)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); SetDialogHelper.setNeutralDialog( StudyActivity.this, getResources().getString(R.string.registration_message), @@ -637,14 +683,7 @@ public void onClick(View view) { } public void setVersion(TextView version) { - try { - PackageInfo info = - getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_META_DATA); - version.append("" + info.versionName); - } catch (PackageManager.NameNotFoundException e) { - Logger.log(e); - version.setText(""); - } + version.append(BuildConfig.VERSION_NAME + " (" + BuildConfig.VERSION_CODE + ")"); } private void hideKeyboard() { @@ -724,8 +763,12 @@ private void checkSignOrSignOutScenario() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); switch (view.getId()) { case R.id.mHomeLayout: + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, getString(R.string.study_side_home)); + analyticsInstance.logEvent(CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); previousValue = R.id.mHomeLayout; titleFdaListens.setText(getResources().getString(R.string.app_name)); title.setText(""); @@ -759,6 +802,10 @@ public void onClick(View view) { break; case R.id.mResourcesLayout: + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.study_side_resources)); + analyticsInstance.logEvent(CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if (previousValue == R.id.mResourcesLayout) { closeDrawer(); } else { @@ -778,6 +825,10 @@ public void onClick(View view) { break; case R.id.mReachoutLayout: + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.study_side_reachout)); + analyticsInstance.logEvent(CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); reachoutMenuClicked(); break; @@ -785,6 +836,11 @@ public void onClick(View view) { if (AppController.getHelperSharedPreference() .readPreference(StudyActivity.this, getString(R.string.userid), "") .equalsIgnoreCase("")) { + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.study_side_sign_in)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); closeDrawer(); SharedPreferenceHelper.writePreference( StudyActivity.this, getString(R.string.loginflow), "SideMenu"); @@ -814,6 +870,11 @@ public void onClick(View view) { closeDrawer(); } else { previousValue = R.id.mSignInProfileLayout; + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.study_side_my_account)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); titleFdaListens.setText(""); title.setText(getResources().getString(R.string.profile)); editBtnLayout.setVisibility(View.VISIBLE); @@ -827,6 +888,12 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.study_edit)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if (editTxt .getText() .toString() @@ -855,6 +922,11 @@ public void onClick(View view) { if (AppController.getHelperSharedPreference() .readPreference(StudyActivity.this, getString(R.string.userid), "") .equalsIgnoreCase("")) { + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.study_side_sign_up)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); titleFdaListens.setText(""); title.setText(getResources().getString(R.string.signup)); editBtnLayout.setVisibility(View.GONE); @@ -869,10 +941,19 @@ public void onClick(View view) { .commit(); } else { // SignOut Reach out menu click + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.study_side_reachout)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); reachoutMenuClicked(); } break; case R.id.mSignOutLayout: + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.study_side_sign_out)); + analyticsInstance.logEvent(CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); closeDrawer(); logout(); break; @@ -940,7 +1021,12 @@ private void logout() { getResources().getString(R.string.sign_out), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { - + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.study_side_sign_out_ok)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); AppController.getHelperProgressDialog() .showProgress(StudyActivity.this, "", "", false); HashMap params = new HashMap<>(); @@ -982,6 +1068,12 @@ StudyActivity.this, getString(R.string.userid), "") getResources().getString(R.string.cancel), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.study_side_sign_out_cancel)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); dialog.dismiss(); } }); @@ -1025,8 +1117,7 @@ public void asyncResponse(T response, int responseCode) { if (responseCode == LOGOUT_REPSONSE_CODE) { Toast.makeText(this, getResources().getString(R.string.signed_out), Toast.LENGTH_SHORT) .show(); - SharedPreferences settings = SharedPreferenceHelper.getPreferences(StudyActivity.this); - settings.edit().clear().apply(); + SharedPreferenceHelper.deletePreferences(this); // delete passcode from keystore String pass = AppController.refreshKeys("passcode"); if (pass != null) { @@ -1149,10 +1240,16 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { "ok", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.app_update_next_time_ok)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); dialog.dismiss(); } - }).show(); - + }) + .show(); } } } @@ -1317,6 +1414,12 @@ public void isUpgrade(boolean b, String latestVersion, final boolean force) { positiveButton, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.app_upgrade_ok)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); startActivityForResult( new Intent(Intent.ACTION_VIEW, Uri.parse(VersionChecker.PLAY_STORE_URL)), RESULT_CODE_UPGRADE); @@ -1327,12 +1430,18 @@ public void onClick(DialogInterface dialog, int id) { new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.app_upgrade_cancel)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); dialog.dismiss(); if (force) { Toast.makeText( - StudyActivity.this, - "Please update the app to continue using", - Toast.LENGTH_SHORT) + StudyActivity.this, + "Please update the app to continue using", + Toast.LENGTH_SHORT) .show(); moveTaskToBack(true); if (Build.VERSION.SDK_INT < 21) { diff --git a/Android/app/src/main/AndroidManifest.xml b/Android/app/src/main/AndroidManifest.xml index 3fabeabb03..eb1b2241dd 100644 --- a/Android/app/src/main/AndroidManifest.xml +++ b/Android/app/src/main/AndroidManifest.xml @@ -15,10 +15,12 @@ + @@ -70,6 +73,7 @@ android:configChanges="screenLayout|orientation" android:screenOrientation="portrait" android:theme="@style/AppThemeNoActionBar" + android:exported="true" android:windowSoftInputMode="stateHidden|adjustPan"> @@ -88,6 +92,7 @@ android:configChanges="screenLayout|orientation" android:screenOrientation="portrait" android:theme="@style/AppThemeNoActionBar" + android:exported="true" android:windowSoftInputMode="stateHidden|adjustPan"> @@ -116,6 +121,7 @@ android:name=".usermodule.AuthServerErrorHandler" android:configChanges="screenLayout|orientation" android:screenOrientation="portrait" + android:exported="true" android:theme="@style/AppThemeNoActionBar" android:windowSoftInputMode="stateHidden|adjustPan"> @@ -151,6 +157,7 @@ android:name=".usermodule.ForgotPasswordActivity" android:configChanges="screenLayout|orientation" android:screenOrientation="portrait" + android:exported="true" android:theme="@style/AppThemeNoActionBar" android:windowSoftInputMode="adjustResize|stateHidden"> @@ -212,6 +219,7 @@ android:configChanges="screenLayout|orientation" android:screenOrientation="portrait" android:theme="@style/AppThemeNoActionBar" + android:exported="true" android:windowSoftInputMode="stateHidden"> @@ -337,12 +345,14 @@ android:theme="@style/AppThemeNoActionBar" android:windowSoftInputMode="stateHidden|adjustResize" /> - + - + @@ -361,7 +371,8 @@ android:theme="@style/Theme.BackboneApp" android:windowSoftInputMode="stateHidden" /> - + @@ -376,7 +387,8 @@ android:syncable="true" tools:replace="android:authorities" /> - + @@ -387,8 +399,7 @@ + android:exported="true"> @@ -397,11 +408,13 @@ android:name="android.content.SyncAdapter" android:resource="@xml/syncadapter" /> - + + @@ -412,7 +425,8 @@ android:theme="@style/Theme.BackboneApp" android:windowSoftInputMode="stateHidden" /> - + diff --git a/Android/app/src/main/java/com/harvard/AppFirebaseMessagingService.java b/Android/app/src/main/java/com/harvard/AppFirebaseMessagingService.java index 93788113b3..ed402567b1 100644 --- a/Android/app/src/main/java/com/harvard/AppFirebaseMessagingService.java +++ b/Android/app/src/main/java/com/harvard/AppFirebaseMessagingService.java @@ -26,8 +26,8 @@ import android.media.RingtoneManager; import android.net.Uri; import android.os.Build; -import android.support.v4.app.NotificationCompat; -import android.support.v4.app.NotificationManagerCompat; +import androidx.core.app.NotificationCompat; +import androidx.core.app.NotificationManagerCompat; import com.google.firebase.messaging.FirebaseMessagingService; import com.google.firebase.messaging.RemoteMessage; import com.harvard.storagemodule.DbServiceSubscriber; @@ -196,9 +196,14 @@ public void setNotification( notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); Random random = new Random(); int m = random.nextInt(9999 - 1000) + 1000; - PendingIntent contentIntent = - PendingIntent.getActivity( - context, m, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); + PendingIntent contentIntent; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + contentIntent = PendingIntent.getActivity( + context, m, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); + } else { + contentIntent = PendingIntent.getActivity( + context, m, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); + } if (type.equalsIgnoreCase(NOTIFICATION_TYPE)) { Study study = dbServiceSubscriber.getStudyListFromDB(realm); StudyData studyData = dbServiceSubscriber.getStudyPreferencesListFromDB(realm); diff --git a/Android/app/src/main/java/com/harvard/FdaApplication.java b/Android/app/src/main/java/com/harvard/FdaApplication.java index 5d5cc0564d..b7285f95f8 100644 --- a/Android/app/src/main/java/com/harvard/FdaApplication.java +++ b/Android/app/src/main/java/com/harvard/FdaApplication.java @@ -21,18 +21,17 @@ import android.content.Context; import android.content.Intent; import android.os.Build; -import android.support.multidex.MultiDex; +import androidx.multidex.MultiDex; import android.util.Base64; -import com.facebook.stetho.Stetho; + import com.harvard.passcodemodule.PasscodeSetupActivity; import com.harvard.studyappmodule.StudyModuleSubscriber; import com.harvard.usermodule.UserModuleSubscriber; import com.harvard.utils.AppController; import com.harvard.utils.AppVisibilityDetector; import com.harvard.utils.Logger; -import com.harvard.utils.realm.RealmEncryptionHelper; import com.harvard.webservicemodule.WebserviceSubscriber; -import com.uphyca.stetho_realm.RealmInspectorModulesProvider; + import io.realm.Realm; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; @@ -90,20 +89,6 @@ public void onAppGotoBackground() { private void dbInitialize() { Realm.init(this); - RealmEncryptionHelper realmEncryptionHelper = - RealmEncryptionHelper.initHelper(this, getString(R.string.app_name)); - byte[] key = realmEncryptionHelper.getEncryptKey(); - - // Remove for release builds - Stetho.initialize( - Stetho.newInitializerBuilder(this) - .enableDumpapp(Stetho.defaultDumperPluginsProvider(this)) - .enableWebKitInspector( - RealmInspectorModulesProvider.builder(this) - .withLimit(10000) - .withDefaultEncryptionKey(key) - .build()) - .build()); } private void startEventProcessing() { diff --git a/Android/app/src/main/java/com/harvard/SplashActivity.java b/Android/app/src/main/java/com/harvard/SplashActivity.java index 47897b0753..7169c13b03 100644 --- a/Android/app/src/main/java/com/harvard/SplashActivity.java +++ b/Android/app/src/main/java/com/harvard/SplashActivity.java @@ -15,20 +15,17 @@ package com.harvard; -import android.app.Activity; +import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.content.SharedPreferences; import android.net.Uri; import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; import android.os.Handler; -import android.support.v7.app.AlertDialog; -import android.support.v7.app.AppCompatActivity; -import android.util.Log; import android.widget.Toast; - +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; import com.harvard.gatewaymodule.GatewayActivity; import com.harvard.offlinemodule.auth.SyncAdapterManager; import com.harvard.storagemodule.DbServiceSubscriber; @@ -38,17 +35,17 @@ import com.harvard.usermodule.UserModulePresenter; import com.harvard.usermodule.event.RegisterUserEvent; import com.harvard.usermodule.model.Apps; -import com.harvard.usermodule.webservicemodel.RegistrationData; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.SharedPreferenceHelper; import com.harvard.utils.Urls; -import com.harvard.utils.realm.RealmEncryptionHelper; import com.harvard.utils.version.Version; import com.harvard.utils.version.VersionChecker; import com.harvard.webservicemodule.apihelper.ApiCall; import com.harvard.webservicemodule.events.ParticipantDatastoreConfigEvent; import java.util.HashMap; + public class SplashActivity extends AppCompatActivity implements ApiCall.OnAsyncRequestComplete { private static final int PASSCODE_RESPONSE = 101; @@ -57,37 +54,44 @@ public class SplashActivity extends AppCompatActivity implements ApiCall.OnAsync private boolean force = false; private static final int RESULT_CODE_UPGRADE = 102; private Apps apps; + private CustomFirebaseAnalytics analyticsInstance; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); - RealmEncryptionHelper realmEncryptionHelper = RealmEncryptionHelper.getInstance(); - byte[] key = realmEncryptionHelper.getEncryptKey(); - String s = bytesToHex(key); - Log.e("realm key", "" + s); - - // sync registration - SyncAdapterManager.init(this); AppController.keystoreInitilize(SplashActivity.this); - getAppsInfo(); - - AppController.getHelperSharedPreference() - .writePreference(SplashActivity.this, getString(R.string.json_object_filter), ""); + new checkAndMigrate(this).execute(); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); } - private static final char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray(); + private class checkAndMigrate extends AsyncTask { + Context context; - public static String bytesToHex(byte[] bytes) { - char[] hexChars = new char[bytes.length * 2]; - for (int j = 0; j < bytes.length; j++) { - int v = bytes[j] & 0xFF; - hexChars[j * 2] = HEX_ARRAY[v >>> 4]; - hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F]; + public checkAndMigrate(Context context) { + this.context = context; } - return new String(hexChars); + + @Override + protected String doInBackground(String... params) { + AppController.checkIfAppNameChangeAndMigrate(context); + return ""; + } + + @Override + protected void onPostExecute(String result) { + // sync registration + SyncAdapterManager.init(context); + getAppsInfo(); + + AppController.getHelperSharedPreference() + .writePreference(SplashActivity.this, getString(R.string.json_object_filter), ""); + } + + @Override + protected void onPreExecute() {} } private void getAppsInfo() { @@ -152,6 +156,12 @@ private void retryAlert() { getResources().getString(R.string.retry), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.splash_retry)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); getAppsInfo(); } }) @@ -159,6 +169,12 @@ public void onClick(DialogInterface dialog, int id) { getResources().getString(R.string.cancel), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.splash_retry_cancel)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); dialog.dismiss(); finish(); } @@ -192,9 +208,7 @@ SplashActivity.this, getResources().getString(R.string.verified), "") startActivity(intent); } } else { - SharedPreferences settings = - SharedPreferenceHelper.getPreferences(SplashActivity.this); - settings.edit().clear().apply(); + SharedPreferenceHelper.deletePreferences(SplashActivity.this); // delete passcode from keystore String pass = AppController.refreshKeys("passcode"); if (pass != null) { @@ -246,10 +260,16 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { "ok", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.app_update_next_time_ok)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); proceedToApp(); } - }).show(); - + }) + .show(); } } } else if (requestCode == PASSCODE_RESPONSE) { @@ -314,6 +334,12 @@ public void isUpgrade(boolean b, String newVersion, final boolean force) { positiveButton, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.app_upgrade_ok)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); startActivityForResult( new Intent(Intent.ACTION_VIEW, Uri.parse(VersionChecker.PLAY_STORE_URL)), RESULT_CODE_UPGRADE); @@ -324,12 +350,18 @@ public void onClick(DialogInterface dialog, int id) { new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.app_upgrade_cancel)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); dialog.dismiss(); if (force) { Toast.makeText( - SplashActivity.this, - "Please update the app to continue using", - Toast.LENGTH_SHORT) + SplashActivity.this, + "Please update the app to continue using", + Toast.LENGTH_SHORT) .show(); moveTaskToBack(true); if (Build.VERSION.SDK_INT < 21) { diff --git a/Android/app/src/main/java/com/harvard/VersionCheckerService.java b/Android/app/src/main/java/com/harvard/VersionCheckerService.java index 26302e7f27..6f594e78b5 100644 --- a/Android/app/src/main/java/com/harvard/VersionCheckerService.java +++ b/Android/app/src/main/java/com/harvard/VersionCheckerService.java @@ -15,14 +15,8 @@ package com.harvard; import android.app.Service; -import android.content.Context; -import android.content.DialogInterface; import android.content.Intent; -import android.net.Uri; import android.os.IBinder; -import android.support.v7.app.AlertDialog; -import android.util.Log; -import android.widget.Toast; import com.harvard.storagemodule.DbServiceSubscriber; import com.harvard.usermodule.UserModulePresenter; import com.harvard.usermodule.event.RegisterUserEvent; @@ -30,10 +24,9 @@ import com.harvard.utils.AppController; import com.harvard.utils.Logger; import com.harvard.utils.Urls; -import com.harvard.utils.version.Version; -import com.harvard.utils.version.VersionChecker; import com.harvard.webservicemodule.apihelper.ApiCall; import com.harvard.webservicemodule.events.ParticipantDatastoreConfigEvent; + import java.util.HashMap; public class VersionCheckerService extends Service implements ApiCall.OnAsyncRequestComplete { diff --git a/Android/app/src/main/java/com/harvard/WebViewActivity.java b/Android/app/src/main/java/com/harvard/WebViewActivity.java index 669cb60105..e6aa9bb810 100644 --- a/Android/app/src/main/java/com/harvard/WebViewActivity.java +++ b/Android/app/src/main/java/com/harvard/WebViewActivity.java @@ -17,18 +17,21 @@ import android.os.Build; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatActivity; import android.text.Html; import android.view.View; import android.webkit.WebView; import android.widget.RelativeLayout; +import com.harvard.utils.CustomFirebaseAnalytics; public class WebViewActivity extends AppCompatActivity { + private CustomFirebaseAnalytics analyticsInstance; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_web_view); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); WebView webView = (WebView) findViewById(R.id.webView); webView.getSettings().setLoadsImagesAutomatically(true); webView.getSettings().setJavaScriptEnabled(true); @@ -47,6 +50,12 @@ protected void onCreate(Bundle savedInstanceState) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.webview_back)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); finish(); } }); diff --git a/Android/app/src/main/java/com/harvard/base/BaseEventReportingActivity.java b/Android/app/src/main/java/com/harvard/base/BaseEventReportingActivity.java index d6530f2daf..2b14f20756 100644 --- a/Android/app/src/main/java/com/harvard/base/BaseEventReportingActivity.java +++ b/Android/app/src/main/java/com/harvard/base/BaseEventReportingActivity.java @@ -15,7 +15,7 @@ package com.harvard.base; -import android.support.v7.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatActivity; import com.harvard.FdaEventBus; import com.harvard.FdaEventBusRegistry; diff --git a/Android/app/src/main/java/com/harvard/eligibilitymodule/ComprehensionFailureActivity.java b/Android/app/src/main/java/com/harvard/eligibilitymodule/ComprehensionFailureActivity.java index 239b202c8f..479a46d412 100644 --- a/Android/app/src/main/java/com/harvard/eligibilitymodule/ComprehensionFailureActivity.java +++ b/Android/app/src/main/java/com/harvard/eligibilitymodule/ComprehensionFailureActivity.java @@ -20,7 +20,7 @@ import android.content.ComponentName; import android.content.Intent; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatActivity; import android.view.View; import android.widget.TextView; import com.harvard.AppConfig; @@ -34,6 +34,8 @@ import com.harvard.studyappmodule.consent.model.Consent; import com.harvard.studyappmodule.consent.model.EligibilityConsent; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; + import io.realm.Realm; import java.util.List; import org.researchstack.backbone.step.Step; @@ -46,11 +48,13 @@ public class ComprehensionFailureActivity extends AppCompatActivity { private DbServiceSubscriber dbServiceSubscriber; private EligibilityConsent eligibilityConsent; private Realm realm; + private CustomFirebaseAnalytics analyticsInstance; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_comprehension_failure); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); TextView retrybutton = findViewById(R.id.retrybutton); dbServiceSubscriber = new DbServiceSubscriber(); @@ -59,6 +63,12 @@ protected void onCreate(Bundle savedInstanceState) { new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.eligibility_failure_message)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); eligibilityConsent = dbServiceSubscriber.getConsentMetadata( getIntent().getStringExtra("studyId"), realm); diff --git a/Android/app/src/main/java/com/harvard/eligibilitymodule/ComprehensionSuccessActivity.java b/Android/app/src/main/java/com/harvard/eligibilitymodule/ComprehensionSuccessActivity.java index 8650b8c941..b1c1f1dace 100644 --- a/Android/app/src/main/java/com/harvard/eligibilitymodule/ComprehensionSuccessActivity.java +++ b/Android/app/src/main/java/com/harvard/eligibilitymodule/ComprehensionSuccessActivity.java @@ -1,5 +1,6 @@ /* * Copyright © 2017-2019 Harvard Pilgrim Health Care Institute (HPHCI) and its Contributors. + * Copyright 2020 Google LLC * 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: @@ -16,23 +17,32 @@ import android.content.Intent; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatActivity; import android.view.View; import android.widget.TextView; import com.harvard.R; +import com.harvard.utils.CustomFirebaseAnalytics; public class ComprehensionSuccessActivity extends AppCompatActivity { + private CustomFirebaseAnalytics analyticsInstance; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_comprehension_success); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); TextView continueButton = findViewById(R.id.continueButton); continueButton.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.eligibility_sucess_message)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); Intent intent = new Intent(); setResult(RESULT_OK, intent); finish(); diff --git a/Android/app/src/main/java/com/harvard/eligibilitymodule/CustomViewTaskActivity.java b/Android/app/src/main/java/com/harvard/eligibilitymodule/CustomViewTaskActivity.java index fc6317643b..6e9db8b991 100644 --- a/Android/app/src/main/java/com/harvard/eligibilitymodule/CustomViewTaskActivity.java +++ b/Android/app/src/main/java/com/harvard/eligibilitymodule/CustomViewTaskActivity.java @@ -23,11 +23,11 @@ import android.content.Intent; import android.graphics.Color; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v7.app.ActionBar; -import android.support.v7.app.AlertDialog; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.Toolbar; +import androidx.annotation.NonNull; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; import android.text.SpannableString; import android.text.style.ForegroundColorSpan; import android.view.Menu; @@ -38,6 +38,7 @@ import com.harvard.studyappmodule.consent.model.CorrectAnswers; import com.harvard.studyappmodule.custom.StepSwitcherCustom; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import java.lang.reflect.Constructor; import java.util.ArrayList; @@ -72,6 +73,7 @@ public class CustomViewTaskActivity extends AppCompatActivity implements StepCal private String pdfTitle; private TaskResult taskResult; private ArrayList correctAnswers; + private CustomFirebaseAnalytics analyticsInstance; public static Intent newIntent( Context context, @@ -104,6 +106,7 @@ public static Intent newIntent( protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setResult(RESULT_CANCELED); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); super.setContentView(R.layout.stepswitchercustom); Toolbar toolbar = findViewById(org.researchstack.backbone.R.id.toolbar); setSupportActionBar(toolbar); @@ -150,6 +153,11 @@ public boolean onCreateOptionsMenu(Menu menu) { } protected void showNextStep() { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.custom_view_task_next)); + analyticsInstance.logEvent(CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); boolean eligible = checkStepResult(currentStep, taskResult); Step nextStep; if (eligible || currentStep.getIdentifier().equalsIgnoreCase("Eligibility Test")) { @@ -203,6 +211,11 @@ private boolean checkStepResult(Step currentStep, TaskResult taskResult) { } protected void showPreviousStep() { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.custom_view_task_back)); + analyticsInstance.logEvent(CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); Step previousStep = task.getStepBeforeStep(currentStep, taskResult); if (previousStep == null) { finish(); @@ -283,6 +296,11 @@ public boolean onOptionsItemSelected(MenuItem item) { notifyStepOfBackPress(); return true; } else if (item.getItemId() == R.id.action_settings) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.custom_view_task_exit)); + analyticsInstance.logEvent(CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); finish(); return true; } @@ -359,10 +377,28 @@ private void showConfirmExitDialog() { new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.custom_view_task_edit_task)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); finish(); } }) - .setNegativeButton(R.string.cancel, null) + .setNegativeButton( + R.string.cancel, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.custom_view_task_cancel)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); + } + }) .create(); alertDialog.show(); } diff --git a/Android/app/src/main/java/com/harvard/eligibilitymodule/EligibleActivity.java b/Android/app/src/main/java/com/harvard/eligibilitymodule/EligibleActivity.java index 2cf3a92e32..7a50506b9f 100644 --- a/Android/app/src/main/java/com/harvard/eligibilitymodule/EligibleActivity.java +++ b/Android/app/src/main/java/com/harvard/eligibilitymodule/EligibleActivity.java @@ -21,7 +21,7 @@ import android.content.ComponentName; import android.content.Intent; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatActivity; import android.view.View; import android.widget.TextView; import com.harvard.AppConfig; @@ -39,6 +39,7 @@ import com.harvard.usermodule.event.UpdatePreferenceEvent; import com.harvard.usermodule.webservicemodel.LoginData; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import com.harvard.utils.Urls; import com.harvard.webservicemodule.apihelper.ApiCall; @@ -59,6 +60,7 @@ public class EligibleActivity extends AppCompatActivity implements ApiCall.OnAsy private EligibilityConsent eligibilityConsent; private DbServiceSubscriber dbServiceSubscriber; private static final int UPDATE_USER_PREFERENCE_RESPONSE_CODE = 200; + private CustomFirebaseAnalytics analyticsInstance; private Realm realm; @Override @@ -67,12 +69,19 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_eligible); dbServiceSubscriber = new DbServiceSubscriber(); realm = AppController.getRealmobj(this); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); TextView button = (TextView) findViewById(R.id.continueButton); button.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.eligiblity_confirmation_message)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); eligibilityConsent = dbServiceSubscriber.getConsentMetadata( getIntent().getStringExtra("studyId"), realm); diff --git a/Android/app/src/main/java/com/harvard/eligibilitymodule/NotEligibleActivity.java b/Android/app/src/main/java/com/harvard/eligibilitymodule/NotEligibleActivity.java index 6d657c5ef7..440f545568 100644 --- a/Android/app/src/main/java/com/harvard/eligibilitymodule/NotEligibleActivity.java +++ b/Android/app/src/main/java/com/harvard/eligibilitymodule/NotEligibleActivity.java @@ -17,7 +17,7 @@ package com.harvard.eligibilitymodule; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatActivity; import android.view.View; import android.widget.TextView; import com.harvard.R; @@ -27,6 +27,7 @@ import com.harvard.usermodule.event.UpdatePreferenceEvent; import com.harvard.usermodule.webservicemodel.LoginData; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import com.harvard.utils.Urls; import com.harvard.webservicemodule.apihelper.ApiCall; @@ -39,18 +40,26 @@ public class NotEligibleActivity extends AppCompatActivity implements ApiCall.OnAsyncRequestComplete { private static final int UPDATE_USERPREFERENCE_RESPONSECODE = 200; + private CustomFirebaseAnalytics analyticsInstance; DbServiceSubscriber dbServiceSubscriber; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_not_eligible); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); dbServiceSubscriber = new DbServiceSubscriber(); TextView textView = (TextView) findViewById(R.id.notEligibleOK); textView.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.not_eligible)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); finish(); } }); diff --git a/Android/app/src/main/java/com/harvard/gatewaymodule/CircleIndicator.java b/Android/app/src/main/java/com/harvard/gatewaymodule/CircleIndicator.java index 01e973afb5..32e435ca68 100644 --- a/Android/app/src/main/java/com/harvard/gatewaymodule/CircleIndicator.java +++ b/Android/app/src/main/java/com/harvard/gatewaymodule/CircleIndicator.java @@ -15,7 +15,7 @@ package com.harvard.gatewaymodule; -import static android.support.v4.view.ViewPager.OnPageChangeListener; +import static androidx.viewpager.widget.ViewPager.OnPageChangeListener; import android.animation.Animator; import android.animation.AnimatorInflater; @@ -24,9 +24,9 @@ import android.content.res.TypedArray; import android.database.DataSetObserver; import android.os.Build; -import android.support.annotation.AnimatorRes; -import android.support.annotation.DrawableRes; -import android.support.v4.view.ViewPager; +import androidx.annotation.AnimatorRes; +import androidx.annotation.DrawableRes; +import androidx.viewpager.widget.ViewPager; import android.util.AttributeSet; import android.view.Gravity; import android.view.View; diff --git a/Android/app/src/main/java/com/harvard/gatewaymodule/GatewayActivity.java b/Android/app/src/main/java/com/harvard/gatewaymodule/GatewayActivity.java index 39d69692a7..e3a317c7a1 100644 --- a/Android/app/src/main/java/com/harvard/gatewaymodule/GatewayActivity.java +++ b/Android/app/src/main/java/com/harvard/gatewaymodule/GatewayActivity.java @@ -24,29 +24,26 @@ import android.net.Uri; import android.os.Build; import android.os.Bundle; -import android.support.customtabs.CustomTabsIntent; -import android.support.v4.view.ViewPager; -import android.support.v7.app.AlertDialog; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.AppCompatTextView; -import android.util.Log; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.AppCompatTextView; +import androidx.browser.customtabs.CustomTabsIntent; +import androidx.viewpager.widget.ViewPager; + import android.view.View; import android.widget.RelativeLayout; import android.widget.Toast; - import com.harvard.AppConfig; import com.harvard.BuildConfig; import com.harvard.R; -import com.harvard.SplashActivity; import com.harvard.gatewaymodule.events.GetStartedEvent; import com.harvard.storagemodule.DbServiceSubscriber; import com.harvard.studyappmodule.StandaloneActivity; import com.harvard.studyappmodule.StudyActivity; -import com.harvard.studyappmodule.SurveyActivity; import com.harvard.usermodule.SignupActivity; -import com.harvard.usermodule.VerificationStepActivity; import com.harvard.usermodule.model.Apps; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import com.harvard.utils.SharedPreferenceHelper; import com.harvard.utils.Urls; @@ -70,11 +67,13 @@ public class GatewayActivity extends AppCompatActivity { private String latestVersion; private boolean force = false; AlertDialog.Builder alertDialogBuilder; + private CustomFirebaseAnalytics analyticsInstance; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_gateway); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); initializeXmlId(); setFont(); bindEvents(); @@ -168,6 +167,11 @@ private void bindEvents() { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, getString(R.string.new_user)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); Intent intent = new Intent(GatewayActivity.this, SignupActivity.class); startActivity(intent); } @@ -177,6 +181,11 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, getString(R.string.sign_in_btn)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); loadLogin(); } }); @@ -185,6 +194,11 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, getString(R.string.get_started)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); GetStartedEvent getStartedEvent = new GetStartedEvent(); getStartedEvent.setCommingFrom(COMMING_FROM); onEvent(getStartedEvent); @@ -272,10 +286,16 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { "ok", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.app_update_next_time_ok)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); dialog.dismiss(); } - }).show(); - + }) + .show(); } } } @@ -334,6 +354,12 @@ public void isUpgrade(boolean b, String latestVersion, final boolean force) { positiveButton, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.app_upgrade_ok)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); startActivityForResult( new Intent(Intent.ACTION_VIEW, Uri.parse(VersionChecker.PLAY_STORE_URL)), RESULT_CODE_UPGRADE); @@ -344,12 +370,18 @@ public void onClick(DialogInterface dialog, int id) { new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.app_upgrade_cancel)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); dialog.dismiss(); if (force) { Toast.makeText( - GatewayActivity.this, - "Please update the app to continue using", - Toast.LENGTH_SHORT) + GatewayActivity.this, + "Please update the app to continue using", + Toast.LENGTH_SHORT) .show(); moveTaskToBack(true); if (Build.VERSION.SDK_INT < 21) { diff --git a/Android/app/src/main/java/com/harvard/notificationmodule/AlarmReceiver.java b/Android/app/src/main/java/com/harvard/notificationmodule/AlarmReceiver.java index bcc58d815f..bdf80dcf06 100644 --- a/Android/app/src/main/java/com/harvard/notificationmodule/AlarmReceiver.java +++ b/Android/app/src/main/java/com/harvard/notificationmodule/AlarmReceiver.java @@ -28,8 +28,8 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Build; -import android.support.v4.app.NotificationCompat; -import android.support.v4.app.NotificationManagerCompat; +import androidx.core.app.NotificationCompat; +import androidx.core.app.NotificationManagerCompat; import com.harvard.AppConfig; import com.harvard.FdaApplication; import com.harvard.R; @@ -120,9 +120,18 @@ private void showLocalNotification(Context context, Intent intent) { .putExtra(TITLE, title) .putExtra(MESSAGE, description) .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); - contentIntent = - PendingIntent.getActivity( - context, notificationId, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + contentIntent = + PendingIntent.getActivity( + context, + notificationId, + notificationIntent, + PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); + } else { + contentIntent = + PendingIntent.getActivity( + context, notificationId, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); + } } int notifyIcon = R.mipmap.ic_launcher; @@ -280,12 +289,22 @@ private void notificationForTodayAnd24HrAlarm(Context context) { .addCategory("android.intent.category.DEFAULT") .putExtra("pendingIntentId", REQUEST_CODE_24HR_NOTIFICATION); AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); - PendingIntent broadcast = - PendingIntent.getBroadcast( - context, - REQUEST_CODE_24HR_NOTIFICATION, - notificationIntent, - PendingIntent.FLAG_UPDATE_CURRENT); + PendingIntent broadcast; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + broadcast = + PendingIntent.getBroadcast( + context, + REQUEST_CODE_24HR_NOTIFICATION, + notificationIntent, + PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); + } else { + broadcast = + PendingIntent.getBroadcast( + context, + REQUEST_CODE_24HR_NOTIFICATION, + notificationIntent, + PendingIntent.FLAG_UPDATE_CURRENT); + } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { alarmManager.setExactAndAllowWhileIdle( AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), broadcast); diff --git a/Android/app/src/main/java/com/harvard/notificationmodule/NotificationModuleSubscriber.java b/Android/app/src/main/java/com/harvard/notificationmodule/NotificationModuleSubscriber.java index 3f1ca7f846..e52c8b55c1 100644 --- a/Android/app/src/main/java/com/harvard/notificationmodule/NotificationModuleSubscriber.java +++ b/Android/app/src/main/java/com/harvard/notificationmodule/NotificationModuleSubscriber.java @@ -183,12 +183,22 @@ private void set24hourScheduler(Context context) { .addCategory("android.intent.category.DEFAULT") .putExtra("pendingIntentId", REQUEST_CODE_24HR_NOTIFICATION); AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); - PendingIntent broadcast = - PendingIntent.getBroadcast( - context, - REQUEST_CODE_24HR_NOTIFICATION, - notificationIntent, - PendingIntent.FLAG_UPDATE_CURRENT); + PendingIntent broadcast; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + broadcast = + PendingIntent.getBroadcast( + context, + REQUEST_CODE_24HR_NOTIFICATION, + notificationIntent, + PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); + } else { + broadcast = + PendingIntent.getBroadcast( + context, + REQUEST_CODE_24HR_NOTIFICATION, + notificationIntent, + PendingIntent.FLAG_UPDATE_CURRENT); + } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { alarmManager.setExactAndAllowWhileIdle( AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), broadcast); @@ -245,9 +255,19 @@ public void setAlarm( notificationIntent.putExtra("pendingIntentId", pendingIntentId); - PendingIntent broadcast = - PendingIntent.getBroadcast( - context, pendingIntentId, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); + PendingIntent broadcast; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + broadcast = + PendingIntent.getBroadcast( + context, + pendingIntentId, + notificationIntent, + PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); + } else { + broadcast = + PendingIntent.getBroadcast( + context, pendingIntentId, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); + } PendingIntents pendingIntents = new PendingIntents(); pendingIntents.setActivityId(activityId); pendingIntents.setStudyId(studyId); @@ -283,9 +303,19 @@ public void generateTwoWeekNotification(Date date, Context context) { .putExtra("type", NO_USE_NOTIFICATION) .putExtra("date", AppController.getDateFormatForApi().format(calendar.getTime())); - PendingIntent broadcast = - PendingIntent.getBroadcast( - context, pendingId, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); + PendingIntent broadcast; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + broadcast = + PendingIntent.getBroadcast( + context, + pendingId, + notificationIntent, + PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); + } else { + broadcast = + PendingIntent.getBroadcast( + context, pendingId, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); + } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { alarmManager.setExactAndAllowWhileIdle( AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), broadcast); @@ -306,9 +336,19 @@ public void cancelTwoWeekNotification(Context context) { .putExtra( "description", context.getResources().getString(R.string.studie_your_enrolled)) .putExtra("type", NO_USE_NOTIFICATION); - PendingIntent broadcast = - PendingIntent.getBroadcast( - context, pendingId, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); + PendingIntent broadcast; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + broadcast = + PendingIntent.getBroadcast( + context, + pendingId, + notificationIntent, + PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); + } else { + broadcast = + PendingIntent.getBroadcast( + context, pendingId, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); + } broadcast.cancel(); alarmManager.cancel(broadcast); } @@ -332,9 +372,19 @@ public void generateNotificationTurnOffNotification(Date date, Context context) .putExtra("type", NOTIFICATION_TURN_OFF_NOTIFICATION) .putExtra("date", AppController.getDateFormatForApi().format(calendar.getTime())); - PendingIntent broadcast = - PendingIntent.getBroadcast( - context, pendingId1, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); + PendingIntent broadcast; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + broadcast = + PendingIntent.getBroadcast( + context, + pendingId1, + notificationIntent, + PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); + } else { + broadcast = + PendingIntent.getBroadcast( + context, pendingId1, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); + } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { alarmManager.setExactAndAllowWhileIdle( AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), broadcast); @@ -356,9 +406,19 @@ public void cancelNotificationTurnOffNotification(Context context) { "description", context.getResources().getString(R.string.notificatinturnoffnotification)) .putExtra("type", NOTIFICATION_TURN_OFF_NOTIFICATION); - PendingIntent broadcast = - PendingIntent.getBroadcast( - context, pendingId1, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); + PendingIntent broadcast; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + broadcast = + PendingIntent.getBroadcast( + context, + pendingId1, + notificationIntent, + PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); + } else { + broadcast = + PendingIntent.getBroadcast( + context, pendingId1, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); + } broadcast.cancel(); alarmManager.cancel(broadcast); } @@ -435,9 +495,19 @@ public void generateAnchorDateLocalNotification( context, context.getResources().getString(R.string.pendingCountResources), "" + pendingIntentId); - PendingIntent broadcast = - PendingIntent.getBroadcast( - context, pendingIntentId, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); + PendingIntent broadcast; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + broadcast = + PendingIntent.getBroadcast( + context, + pendingIntentId, + notificationIntent, + PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); + } else { + broadcast = + PendingIntent.getBroadcast( + context, pendingIntentId, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); + } PendingIntentsResources pendingIntents = new PendingIntentsResources(); pendingIntents.setActivityId(activityId); pendingIntents.setStudyId(studyId); @@ -476,12 +546,22 @@ public void cancleResourcesLocalNotification(Context context) { .putExtra("studyId", pendingIntentsResources.getStudyId()) .putExtra("activityId", pendingIntentsResources.getActivityId()) .putExtra("notificationId", pendingIntentsResources.getNotificationId()); - PendingIntent broadcast = - PendingIntent.getBroadcast( - context, - pendingIntentsResources.getPendingIntentId(), - notificationIntent, - PendingIntent.FLAG_UPDATE_CURRENT); + PendingIntent broadcast; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + broadcast = + PendingIntent.getBroadcast( + context, + pendingIntentsResources.getPendingIntentId(), + notificationIntent, + PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); + } else { + broadcast = + PendingIntent.getBroadcast( + context, + pendingIntentsResources.getPendingIntentId(), + notificationIntent, + PendingIntent.FLAG_UPDATE_CURRENT); + } broadcast.cancel(); alarmManager.cancel(broadcast); } @@ -508,12 +588,22 @@ public void cancleResourcesLocalNotificationByIds( .putExtra("studyId", pendingIntentsResources.getStudyId()) .putExtra("activityId", pendingIntentsResources.getActivityId()) .putExtra("notificationId", pendingIntentsResources.getNotificationId()); - PendingIntent broadcast = - PendingIntent.getBroadcast( - context, - pendingIntentsResources.getPendingIntentId(), - notificationIntent, - PendingIntent.FLAG_UPDATE_CURRENT); + PendingIntent broadcast; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + broadcast = + PendingIntent.getBroadcast( + context, + pendingIntentsResources.getPendingIntentId(), + notificationIntent, + PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); + } else { + broadcast = + PendingIntent.getBroadcast( + context, + pendingIntentsResources.getPendingIntentId(), + notificationIntent, + PendingIntent.FLAG_UPDATE_CURRENT); + } broadcast.cancel(); alarmManager.cancel(broadcast); } @@ -539,12 +629,22 @@ public void cancleActivityLocalNotificationByIds( .putExtra("studyId", pendingIntents.getStudyId()) .putExtra("activityId", pendingIntents.getActivityId()) .putExtra("notificationId", pendingIntents.getNotificationId()); - PendingIntent broadcast = - PendingIntent.getBroadcast( - context, - pendingIntents.getPendingIntentId(), - notificationIntent, - PendingIntent.FLAG_UPDATE_CURRENT); + PendingIntent broadcast; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + broadcast = + PendingIntent.getBroadcast( + context, + pendingIntents.getPendingIntentId(), + notificationIntent, + PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); + } else { + broadcast = + PendingIntent.getBroadcast( + context, + pendingIntents.getPendingIntentId(), + notificationIntent, + PendingIntent.FLAG_UPDATE_CURRENT); + } broadcast.cancel(); alarmManager.cancel(broadcast); } @@ -567,12 +667,22 @@ public void cancleActivityLocalNotification(Context context) { .putExtra("studyId", pendingIntents.getStudyId()) .putExtra("activityId", pendingIntents.getActivityId()) .putExtra("notificationId", pendingIntents.getNotificationId()); - PendingIntent broadcast = - PendingIntent.getBroadcast( - context, - pendingIntents.getPendingIntentId(), - notificationIntent, - PendingIntent.FLAG_UPDATE_CURRENT); + PendingIntent broadcast; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + broadcast = + PendingIntent.getBroadcast( + context, + pendingIntents.getPendingIntentId(), + notificationIntent, + PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); + } else { + broadcast = + PendingIntent.getBroadcast( + context, + pendingIntents.getPendingIntentId(), + notificationIntent, + PendingIntent.FLAG_UPDATE_CURRENT); + } broadcast.cancel(); alarmManager.cancel(broadcast); } diff --git a/Android/app/src/main/java/com/harvard/offlinemodule/auth/StubContentProvider.java b/Android/app/src/main/java/com/harvard/offlinemodule/auth/StubContentProvider.java index 153353e5ab..299ac8cb1c 100644 --- a/Android/app/src/main/java/com/harvard/offlinemodule/auth/StubContentProvider.java +++ b/Android/app/src/main/java/com/harvard/offlinemodule/auth/StubContentProvider.java @@ -18,7 +18,7 @@ import android.content.ContentValues; import android.database.Cursor; import android.net.Uri; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; /** * Stub content provider. We will not use ContentProvider, but it is mandatory for having diff --git a/Android/app/src/main/java/com/harvard/passcodemodule/PasscodeSetupActivity.java b/Android/app/src/main/java/com/harvard/passcodemodule/PasscodeSetupActivity.java index 32a839afc4..1512d1f297 100644 --- a/Android/app/src/main/java/com/harvard/passcodemodule/PasscodeSetupActivity.java +++ b/Android/app/src/main/java/com/harvard/passcodemodule/PasscodeSetupActivity.java @@ -15,17 +15,15 @@ package com.harvard.passcodemodule; -import android.content.ComponentName; import android.content.DialogInterface; import android.content.Intent; -import android.content.SharedPreferences; import android.net.Uri; import android.os.Build; import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v7.app.AlertDialog; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.AppCompatTextView; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.AppCompatTextView; import android.view.View; import android.view.ViewGroup; import android.widget.RelativeLayout; @@ -33,15 +31,13 @@ import android.widget.Toast; import com.harvard.AppConfig; import com.harvard.R; -import com.harvard.SplashActivity; -import com.harvard.gatewaymodule.GatewayActivity; import com.harvard.storagemodule.DbServiceSubscriber; import com.harvard.usermodule.UserModulePresenter; import com.harvard.usermodule.event.RegisterUserEvent; import com.harvard.usermodule.model.Apps; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; -import com.harvard.utils.SharedPreferenceHelper; import com.harvard.utils.Urls; import com.harvard.utils.version.Version; import com.harvard.utils.version.VersionChecker; @@ -64,12 +60,14 @@ public class PasscodeSetupActivity extends AppCompatActivity implements ApiCall. private static final int RESULT_CODE_UPGRADE = 102; private String newVersion; private boolean force = false; + private CustomFirebaseAnalytics analyticsInstance; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_passcode_setup); getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); dbServiceSubscriber = new DbServiceSubscriber(); initializeXmlId(); setTextForView(); @@ -123,7 +121,13 @@ public void run() { new View.OnClickListener() { @Override public void onClick(View v) { - getAppsInfo(); + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.forgot_passcode_message)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); + forgotSignin(); } }); @@ -158,6 +162,12 @@ private void forgotSignin() { getResources().getString(R.string.ok), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.passcode_setup_signout_ok)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); AppController.forceSignout(PasscodeSetupActivity.this); } }); @@ -166,6 +176,12 @@ public void onClick(DialogInterface dialog, int which) { getResources().getString(R.string.cancel), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.passcode_setup_signout_cancel)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); dialog.dismiss(); } }); @@ -244,6 +260,12 @@ private void retryAlert() { getResources().getString(R.string.retry), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.passcode_setup_retry)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); getAppsInfo(); } }); @@ -276,6 +298,12 @@ public void isUpgrade(boolean b, String newVersion, final boolean force) { positiveButton, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.app_upgrade_ok)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); startActivityForResult( new Intent(Intent.ACTION_VIEW, Uri.parse(VersionChecker.PLAY_STORE_URL)), RESULT_CODE_UPGRADE); @@ -286,11 +314,17 @@ public void onClick(DialogInterface dialog, int id) { new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.app_upgrade_cancel)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if (force) { Toast.makeText( - PasscodeSetupActivity.this, - "Please update the app to continue using", - Toast.LENGTH_SHORT) + PasscodeSetupActivity.this, + "Please update the app to continue using", + Toast.LENGTH_SHORT) .show(); moveTaskToBack(true); if (Build.VERSION.SDK_INT < 21) { @@ -351,9 +385,16 @@ protected void onActivityResult(int requestCode, int resultCode, @Nullable Inten "ok", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.app_update_next_time_ok)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); forgotSignin(); } - }).show(); + }) + .show(); } } } diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/CalculateRunHoldService.java b/Android/app/src/main/java/com/harvard/studyappmodule/CalculateRunHoldService.java new file mode 100644 index 0000000000..e74a558a80 --- /dev/null +++ b/Android/app/src/main/java/com/harvard/studyappmodule/CalculateRunHoldService.java @@ -0,0 +1,94 @@ +/* + * Copyright 2020 Google LLC + * + * Use of this source code is governed by an MIT-style + * license that can be found in the LICENSE file or at + * https://opensource.org/licenses/MIT. + */ + +package com.harvard.studyappmodule; + +import android.app.Notification; +import android.app.Service; +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.IBinder; +import android.os.PowerManager; +import android.util.Log; + +import androidx.annotation.Nullable; +import androidx.core.app.NotificationCompat; + +import com.harvard.FdaApplication; +import com.harvard.R; +import com.harvard.utils.AppController; + +public class CalculateRunHoldService extends Service { + PowerManager.WakeLock wakeLock; + private Thread thread; + Context context; + + @Override + public void onCreate() { + super.onCreate(); + PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); + wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, getPackageName()); + wakeLock.acquire(); + } + + @Nullable + @Override + public IBinder onBind(Intent intent) { + return null; + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + context = this; + Bitmap icon = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher); + Notification notification = + new NotificationCompat.Builder(this) + .setContentTitle(getResources().getString(R.string.app_name)) + .setTicker("Study Setup") + .setContentText("Setting up study content for you") + .setChannelId(FdaApplication.NOTIFICATION_CHANNEL_ID_SERVICE) + .setSmallIcon(R.mipmap.ic_launcher) + .setLargeIcon(Bitmap.createScaledBitmap(icon, 128, 128, false)) + .setOngoing(true) + .build(); + + startForeground(103, notification); + + Runnable r = + new Runnable() { + public void run() { + while (true) { + if (AppController.getHelperSharedPreference() + .readPreference(getApplicationContext(), "runsCalculating", "false") + .equalsIgnoreCase("false")) { + Log.e("runsCalculating", "done"); + stopSelf(); + break; + } + } + } + }; + thread = new Thread(r); + thread.start(); + + return Service.START_NOT_STICKY; + } + + + @Override + public void onDestroy() { + if (wakeLock.isHeld()) + wakeLock.release(); + if (thread != null && thread.isAlive()) { + thread.interrupt(); + } + super.onDestroy(); + } +} diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/ChangePasswordActivity.java b/Android/app/src/main/java/com/harvard/studyappmodule/ChangePasswordActivity.java index ce65e7373f..843fad9ebb 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/ChangePasswordActivity.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/ChangePasswordActivity.java @@ -18,12 +18,11 @@ import android.content.ComponentName; import android.content.Intent; -import android.content.SharedPreferences; import android.os.Bundle; import android.os.Handler; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.AppCompatEditText; -import android.support.v7.widget.AppCompatTextView; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.AppCompatEditText; +import androidx.appcompat.widget.AppCompatTextView; import android.view.View; import android.widget.RelativeLayout; import android.widget.Toast; @@ -36,6 +35,7 @@ import com.harvard.usermodule.event.ChangePasswordEvent; import com.harvard.usermodule.webservicemodel.ChangePasswordData; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import com.harvard.utils.SharedPreferenceHelper; import com.harvard.utils.Urls; @@ -66,6 +66,7 @@ public class ChangePasswordActivity extends AppCompatActivity private boolean isVerified; private String emailId; private boolean clicked; + private CustomFirebaseAnalytics analyticsInstance; @Override protected void onCreate(Bundle savedInstanceState) { @@ -73,6 +74,7 @@ protected void onCreate(Bundle savedInstanceState) { userId = getIntent().getStringExtra("userid"); auth = getIntent().getStringExtra("auth"); isVerified = getIntent().getBooleanExtra("verified", false); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); emailId = getIntent().getStringExtra("email"); try { password = getIntent().getStringExtra("password"); @@ -137,6 +139,12 @@ private void bindEvents() { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.change_password_back)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); onBackPressed(); } }); @@ -167,6 +175,12 @@ public void onFocusChange(View v, boolean hasFocus) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.change_password_submit)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if (!clicked) { newPassword.clearFocus(); confirmPassword.clearFocus(); @@ -191,7 +205,10 @@ public void onClick(View view) { getResources().getString(R.string.password_new_empty), Toast.LENGTH_SHORT) .show(); - } else if (!newPassword.getText().toString().matches(AppController.PASSWORD_PATTERN)) { + } else if (!newPassword + .getText() + .toString() + .matches(AppController.PASSWORD_PATTERN)) { newPassword.setError(getResources().getString(R.string.password_validation)); } else if (checkPasswordContainsEmailID(newPassword.getText().toString())) { Toast.makeText( @@ -321,9 +338,7 @@ public void onBackPressed() { if (from != null && from.equalsIgnoreCase("ProfileFragment")) { finish(); } else { - SharedPreferences settings = - SharedPreferenceHelper.getPreferences(ChangePasswordActivity.this); - settings.edit().clear().apply(); + SharedPreferenceHelper.deletePreferences(this); // delete passcode from keystore String pass = AppController.refreshKeys("passcode"); if (pass != null) { diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/ChartActivity.java b/Android/app/src/main/java/com/harvard/studyappmodule/ChartActivity.java index ffde9c25bb..5848204157 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/ChartActivity.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/ChartActivity.java @@ -28,10 +28,6 @@ import android.os.Build.VERSION_CODES; import android.os.Bundle; import android.os.Environment; -import android.support.annotation.NonNull; -import android.support.v4.app.ActivityCompat; -import android.support.v4.content.FileProvider; -import android.support.v7.app.AppCompatActivity; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; @@ -40,6 +36,10 @@ import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; +import androidx.core.content.FileProvider; import com.github.mikephil.charting.charts.LineChart; import com.github.mikephil.charting.data.Entry; import com.harvard.R; @@ -51,6 +51,7 @@ import com.harvard.studyappmodule.studymodel.DashboardData; import com.harvard.studyappmodule.studymodel.RunChart; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.CustomMarkerView; import com.harvard.utils.Logger; import com.harvard.utils.TempGraphHelper; @@ -96,6 +97,7 @@ public class ChartActivity extends AppCompatActivity { private DbServiceSubscriber dbServiceSubscriber; private Realm realm; private static final int PERMISSION_REQUEST_CODE = 2000; + private CustomFirebaseAnalytics analyticsInstance; @Override protected void onCreate(Bundle savedInstanceState) { @@ -103,6 +105,7 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_chart); dbServiceSubscriber = new DbServiceSubscriber(); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); realm = AppController.getRealmobj(this); dashboardData = dbServiceSubscriber.getDashboardDataFromDB(getIntent().getStringExtra("studyId"), realm); @@ -113,6 +116,12 @@ protected void onCreate(Bundle savedInstanceState) { new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.chart_actvity_share)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); screenshotWritingPermission(); } }); @@ -120,6 +129,12 @@ public void onClick(View v) { new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.chart_actvity_back)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); finish(); } }); @@ -691,6 +706,12 @@ private void addTimeLayoutRuns( new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.chart_actvity_left_arrow)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if (Integer.parseInt("" + textView1.getTag(R.string.runchartindex)) > 0) { textView1.setTag( R.string.runchartindex, @@ -712,6 +733,12 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.chart_actvity_right_arrow)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if (Integer.parseInt("" + textView1.getTag(R.string.runchartindex)) < Integer.parseInt("" + textView1.getTag(R.string.runchartmaxindex))) { textView1.setTag( @@ -820,7 +847,12 @@ public void addTimeLayout( new View.OnClickListener() { @Override public void onClick(View view) { - + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.chart_actvity_left_arrow)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if (dateTypeArray.get((int) leftArrow.getTag()).equalsIgnoreCase(DAY)) { try { SimpleDateFormat simpleDateFormat = AppController.getDateFormatForApi(); @@ -969,7 +1001,12 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { - + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.chart_actvity_right_arrow)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if (dateTypeArray.get((int) rightArrow.getTag()).equalsIgnoreCase(DAY)) { try { SimpleDateFormat simpleDateFormat = diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/ConsentCompletedActivity.java b/Android/app/src/main/java/com/harvard/studyappmodule/ConsentCompletedActivity.java index 94f81f6457..295d509d11 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/ConsentCompletedActivity.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/ConsentCompletedActivity.java @@ -25,21 +25,21 @@ import android.os.Bundle; import android.os.Environment; import android.os.Handler; -import android.support.annotation.NonNull; -import android.support.v4.app.ActivityCompat; -import android.support.v4.content.FileProvider; -import android.support.v7.app.AlertDialog; -import android.support.v7.app.AppCompatActivity; import android.view.LayoutInflater; import android.view.View; import android.widget.TextView; import android.widget.Toast; -import com.github.barteksc.pdfviewer.PDFView; -import com.github.barteksc.pdfviewer.scroll.DefaultScrollHandle; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; +import androidx.core.content.FileProvider; import com.harvard.R; import com.harvard.storagemodule.DbServiceSubscriber; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; +import com.harvard.utils.PdfViewerView; import io.realm.Realm; import java.io.File; import java.io.FileInputStream; @@ -63,6 +63,7 @@ public class ConsentCompletedActivity extends AppCompatActivity { private String comingFrom = ""; private DbServiceSubscriber dbServiceSubscriber; private Realm realm; + private CustomFirebaseAnalytics analyticsInstance; @Override protected void onCreate(Bundle savedInstanceState) { @@ -70,6 +71,7 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_consent_completed); dbServiceSubscriber = new DbServiceSubscriber(); realm = AppController.getRealmobj(this); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); initializeXmlId(); try { @@ -88,6 +90,12 @@ && getIntent() new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.consent_complete_viewPdf)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if ((ActivityCompat.checkSelfPermission( ConsentCompletedActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) @@ -114,6 +122,12 @@ public void onClick(View v) { new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.consent_complete_done)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if (click) { click = false; new Handler() @@ -200,7 +214,7 @@ private void displayPdf() { if (sharingFile != null && sharingFile.exists()) { LayoutInflater li = LayoutInflater.from(ConsentCompletedActivity.this); View promptsView = li.inflate(R.layout.pdfdisplayview, null); - PDFView pdfView = (PDFView) promptsView.findViewById(R.id.pdf); + PdfViewerView pdfView = (PdfViewerView) promptsView.findViewById(R.id.pdfViewer); TextView share = (TextView) promptsView.findViewById(R.id.share); AlertDialog.Builder db = new AlertDialog.Builder(ConsentCompletedActivity.this); db.setView(promptsView); @@ -209,6 +223,12 @@ private void displayPdf() { new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.consent_complete_share)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); Intent shareIntent = new Intent(Intent.ACTION_SEND); shareIntent.setData(Uri.parse("mailto:")); shareIntent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.signed_consent)); @@ -223,13 +243,8 @@ public void onClick(View v) { startActivity(shareIntent); } }); - pdfView.documentFitsView(); - pdfView.useBestQuality(true); - pdfView - .fromFile(file) - .enableAnnotationRendering(true) - .scrollHandle(new DefaultScrollHandle(this)) - .load(); + pdfView.setVisibility(View.VISIBLE); + pdfView.setPdf(sharingFile); db.show(); } else { Toast.makeText(this, R.string.consentPdfNotAvailable, Toast.LENGTH_SHORT).show(); diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/ContactUsActivity.java b/Android/app/src/main/java/com/harvard/studyappmodule/ContactUsActivity.java index baa8ac65d3..122a48b87e 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/ContactUsActivity.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/ContactUsActivity.java @@ -17,9 +17,9 @@ import android.app.Activity; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.AppCompatEditText; -import android.support.v7.widget.AppCompatTextView; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.AppCompatEditText; +import androidx.appcompat.widget.AppCompatTextView; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.RelativeLayout; @@ -28,6 +28,7 @@ import com.harvard.studyappmodule.events.ContactUsEvent; import com.harvard.studyappmodule.studymodel.ReachOut; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import com.harvard.utils.Urls; import com.harvard.webservicemodule.apihelper.ApiCall; @@ -48,11 +49,13 @@ public class ContactUsActivity extends AppCompatActivity implements ApiCall.OnAs private AppCompatEditText firstName; private static final int CONTACT_US = 15; private AppCompatTextView submitButton; + private CustomFirebaseAnalytics analyticsInstance; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_contact_us); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); initializeXmlId(); setFont(); bindEvents(); @@ -102,6 +105,12 @@ private void bindEvents() { new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.contact_us_back)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); try { InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE); @@ -116,6 +125,12 @@ public void onClick(View v) { new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.contact_us_submit)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if (firstName.getText().toString().equalsIgnoreCase("") && email.getText().toString().equalsIgnoreCase("") && subject.getText().toString().equalsIgnoreCase("") diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/CustomActivitiesDailyDialogClass.java b/Android/app/src/main/java/com/harvard/studyappmodule/CustomActivitiesDailyDialogClass.java index f6646aa55d..c66daeaea0 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/CustomActivitiesDailyDialogClass.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/CustomActivitiesDailyDialogClass.java @@ -20,7 +20,7 @@ import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; -import android.support.v7.widget.LinearLayoutCompat; +import androidx.appcompat.widget.LinearLayoutCompat; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; @@ -30,6 +30,7 @@ import android.widget.TextView; import com.harvard.R; import com.harvard.studyappmodule.surveyscheduler.model.ActivityStatus; +import com.harvard.utils.CustomFirebaseAnalytics; import java.util.ArrayList; public class CustomActivitiesDailyDialogClass extends Dialog implements View.OnClickListener { @@ -43,6 +44,7 @@ public class CustomActivitiesDailyDialogClass extends Dialog implements View.OnC private DialogClick dialogClick; private String status; private ActivityStatus activityStatus; + private CustomFirebaseAnalytics analyticsInstance; CustomActivitiesDailyDialogClass( Context context, @@ -65,6 +67,7 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_cutom_activities_daily_dialog); + analyticsInstance = CustomFirebaseAnalytics.getInstance(context); // for dialog screen to get full width using this getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); @@ -97,6 +100,19 @@ protected void onCreate(Bundle savedInstanceState) { new View.OnClickListener() { @Override public void onClick(View v) { + String name = ""; + if (finalI == 0) { + name = "all"; + } else if (finalI == 1) { + name = "surveys"; + } else { + name = "tasks"; + } + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, name + " selected"); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); dialogClick.clicked(finalI); dismiss(); } @@ -108,6 +124,11 @@ public void onClick(View v) { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.custom_activities_dialog_close)); + analyticsInstance.logEvent(CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); dismiss(); } diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/CustomDialogClass.java b/Android/app/src/main/java/com/harvard/studyappmodule/CustomDialogClass.java index 806f0d3e55..3cdf087380 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/CustomDialogClass.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/CustomDialogClass.java @@ -18,11 +18,12 @@ import android.app.Activity; import android.app.Dialog; import android.os.Bundle; -import android.support.v7.widget.AppCompatTextView; +import androidx.appcompat.widget.AppCompatTextView; import android.view.View; import android.view.Window; import android.widget.NumberPicker; import com.harvard.R; +import com.harvard.utils.CustomFirebaseAnalytics; public class CustomDialogClass extends Dialog implements View.OnClickListener { @@ -31,7 +32,7 @@ public class CustomDialogClass extends Dialog implements View.OnClickListener private AppCompatTextView doneBtn; private final ProfileFragment profileFragment; private final String[] mins15 = {"00", "15", "30", "45"}; - + private CustomFirebaseAnalytics analyticsInstance; CustomDialogClass(Activity a, ProfileFragment profileFragment) { super(a); this.profileFragment = profileFragment; @@ -46,6 +47,7 @@ protected void onCreate(Bundle savedInstanceState) { minPicker = (NumberPicker) findViewById(R.id.picker_min); doneBtn = (AppCompatTextView) findViewById(R.id.doneBtn); doneBtn.setOnClickListener(this); + analyticsInstance = CustomFirebaseAnalytics.getInstance(getContext()); // if hr=24 then setvalue 1 means min arrays 0'th pos value minPicker.setOnValueChangedListener( new NumberPicker.OnValueChangeListener() { @@ -88,6 +90,11 @@ private void setMinsPicker() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getContext().getString(R.string.custom_dialog_done)); + analyticsInstance.logEvent(CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); String selectedValue = hourPicker.getValue() + ":" + mins15[minPicker.getValue() - 1]; profileFragment.updatePickerTime(selectedValue); dismiss(); diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/DeleteAccountActivity.java b/Android/app/src/main/java/com/harvard/studyappmodule/DeleteAccountActivity.java index ba3b9a364e..d385659bfa 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/DeleteAccountActivity.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/DeleteAccountActivity.java @@ -17,12 +17,10 @@ package com.harvard.studyappmodule; import android.content.Intent; -import android.content.SharedPreferences; -import android.content.res.Resources; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.AppCompatCheckBox; -import android.support.v7.widget.AppCompatTextView; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.AppCompatCheckBox; +import androidx.appcompat.widget.AppCompatTextView; import android.view.View; import android.widget.LinearLayout; import android.widget.RelativeLayout; @@ -31,20 +29,18 @@ import com.harvard.R; import com.harvard.storagemodule.DbServiceSubscriber; import com.harvard.studyappmodule.events.DeleteAccountEvent; -import com.harvard.studyappmodule.events.GetUserStudyInfoEvent; import com.harvard.studyappmodule.studymodel.DeleteAccountData; -import com.harvard.studyappmodule.studymodel.StudyHome; -import com.harvard.studyappmodule.studymodel.StudyList; import com.harvard.usermodule.UserModulePresenter; import com.harvard.usermodule.webservicemodel.LoginData; import com.harvard.usermodule.webservicemodel.Studies; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import com.harvard.utils.SharedPreferenceHelper; import com.harvard.utils.Urls; import com.harvard.webservicemodule.apihelper.ApiCall; import com.harvard.webservicemodule.events.ParticipantDatastoreConfigEvent; -import com.harvard.webservicemodule.events.StudyDatastoreConfigEvent; + import io.realm.Realm; import io.realm.RealmResults; import java.util.ArrayList; @@ -66,6 +62,7 @@ public class DeleteAccountActivity extends AppCompatActivity private ArrayList studyIdList = new ArrayList<>(); private DbServiceSubscriber dbServiceSubscriber; private Realm realm; + private CustomFirebaseAnalytics analyticsInstance; @Override protected void onCreate(Bundle savedInstanceState) { @@ -73,6 +70,7 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_delete_account); dbServiceSubscriber = new DbServiceSubscriber(); realm = AppController.getRealmobj(this); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); initializeXmlId(); setTextForView(); setFont(); @@ -110,6 +108,12 @@ private void bindEvents() { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.delete_account_back)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); finish(); } }); @@ -118,6 +122,12 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.delete_account_disagree)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); finish(); } }); @@ -126,9 +136,15 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { - AppController.getHelperProgressDialog() - .showProgress(DeleteAccountActivity.this, "", "", false); - deactivateAccount(); + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.delete_account_agree)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); + AppController.getHelperProgressDialog() + .showProgress(DeleteAccountActivity.this, "", "", false); + deactivateAccount(); } }); } @@ -164,9 +180,7 @@ public void asyncResponse(T response, int responseCode) { getResources().getString(R.string.account_deletion), Toast.LENGTH_SHORT) .show(); - SharedPreferences settings = - SharedPreferenceHelper.getPreferences(DeleteAccountActivity.this); - settings.edit().clear().apply(); + SharedPreferenceHelper.deletePreferences(this); // delete passcode from keystore String pass = AppController.refreshKeys("passcode"); if (pass != null) { diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/EligibilityEnrollmentActivity.java b/Android/app/src/main/java/com/harvard/studyappmodule/EligibilityEnrollmentActivity.java index d337d6f030..9796b6379f 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/EligibilityEnrollmentActivity.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/EligibilityEnrollmentActivity.java @@ -18,8 +18,8 @@ import android.content.Intent; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.AppCompatTextView; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.AppCompatTextView; import android.view.View; import android.widget.EditText; import android.widget.RelativeLayout; @@ -29,6 +29,7 @@ import com.harvard.studyappmodule.enroll.EnrollData; import com.harvard.studyappmodule.events.VerifyEnrollmentIdEvent; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import com.harvard.utils.SharedPreferenceHelper; import com.harvard.utils.Urls; @@ -47,11 +48,13 @@ public class EligibilityEnrollmentActivity extends AppCompatActivity private EditText enrollmentID; private TextView submit; private String enteredId; + private CustomFirebaseAnalytics analyticsInstance; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_eligibility_enrollment); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); initializeXmlId(); setTextForView(); setFont(); @@ -97,6 +100,12 @@ private void bindEvents() { new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.eligibility_enroll_back)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); finish(); } }); @@ -104,6 +113,12 @@ public void onClick(View v) { new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.eligibility_enroll_submit)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if (!enrollmentID.getText().toString().trim().equalsIgnoreCase("")) { callValidateEnrollmentId(); } else { diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/EnrollmentValidatedActivity.java b/Android/app/src/main/java/com/harvard/studyappmodule/EnrollmentValidatedActivity.java index 588cf11b93..a760099c0f 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/EnrollmentValidatedActivity.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/EnrollmentValidatedActivity.java @@ -19,8 +19,8 @@ import android.content.ComponentName; import android.content.Intent; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.AppCompatTextView; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.AppCompatTextView; import android.view.View; import com.harvard.AppConfig; import com.harvard.R; @@ -33,6 +33,7 @@ import com.harvard.usermodule.event.UpdatePreferenceEvent; import com.harvard.usermodule.webservicemodel.LoginData; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import com.harvard.utils.Urls; import com.harvard.webservicemodule.apihelper.ApiCall; @@ -59,6 +60,7 @@ public class EnrollmentValidatedActivity extends AppCompatActivity private DbServiceSubscriber dbServiceSubscriber; private Realm realm; private static final int UPDATE_USER_PREFERENCE_RESPONSE_CODE = 200; + private CustomFirebaseAnalytics analyticsInstance; @Override protected void onCreate(Bundle savedInstanceState) { @@ -66,13 +68,19 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_enrollment_validated); dbServiceSubscriber = new DbServiceSubscriber(); realm = AppController.getRealmobj(this); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); initializeXmlId(); setFont(); continueButton.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { - + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.enrollment_validated_continue)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); eligibilityConsent = dbServiceSubscriber.getConsentMetadata( getIntent().getStringExtra("studyId"), realm); diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/FeedbackActivity.java b/Android/app/src/main/java/com/harvard/studyappmodule/FeedbackActivity.java index e52945ecb4..41d22a8556 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/FeedbackActivity.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/FeedbackActivity.java @@ -17,9 +17,9 @@ import android.app.Activity; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.AppCompatEditText; -import android.support.v7.widget.AppCompatTextView; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.AppCompatEditText; +import androidx.appcompat.widget.AppCompatTextView; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.RelativeLayout; @@ -28,6 +28,7 @@ import com.harvard.studyappmodule.events.ContactUsEvent; import com.harvard.studyappmodule.studymodel.ReachOut; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import com.harvard.utils.Urls; import com.harvard.webservicemodule.apihelper.ApiCall; @@ -42,11 +43,13 @@ public class FeedbackActivity extends AppCompatActivity implements ApiCall.OnAsy private RelativeLayout backBtn; private AppCompatTextView submitButton; private static final int FEEDBACK = 16; + private CustomFirebaseAnalytics analyticsInstance; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_feedback); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); initializeXmlId(); setFont(); bindEvents(); @@ -78,6 +81,12 @@ private void bindEvents() { new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.feedback_back)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); try { InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE); @@ -92,6 +101,12 @@ public void onClick(View v) { new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.feedback_submit)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if (subject.getText().toString().equalsIgnoreCase("")) { Toast.makeText( FeedbackActivity.this, diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/FilterActivity.java b/Android/app/src/main/java/com/harvard/studyappmodule/FilterActivity.java index 919c807cd0..d4c9f47268 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/FilterActivity.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/FilterActivity.java @@ -18,9 +18,9 @@ import android.graphics.drawable.GradientDrawable; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.AppCompatCheckBox; -import android.support.v7.widget.AppCompatTextView; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.AppCompatCheckBox; +import androidx.appcompat.widget.AppCompatTextView; import android.view.View; import android.widget.RelativeLayout; import android.widget.Toast; @@ -32,6 +32,7 @@ import com.harvard.studyappmodule.studymodel.ParticipationStatus; import com.harvard.studyappmodule.studymodel.StudyStatus; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import org.json.JSONException; import org.json.JSONObject; @@ -65,11 +66,13 @@ public class FilterActivity extends AppCompatActivity { private AppCompatCheckBox pausedSelectBtn; private AppCompatTextView pausedLabel; private String userId; + private CustomFirebaseAnalytics analyticsInstance; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_filter); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); initializeXmlId(); userId = AppController.getHelperSharedPreference() @@ -186,6 +189,12 @@ private void bindEvents() { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.filter_cancel)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); finish(); } }); @@ -193,7 +202,12 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { - + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.filter_apply)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); StudyStatus studyStatus = new StudyStatus(); ParticipationStatus participationStatus = new ParticipationStatus(); @@ -257,7 +271,6 @@ public void onClick(View view) { flag1 = false; } - if (userId.equalsIgnoreCase("")) { if (flag1) { Toast.makeText( diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/GatewayResourcesListAdapter.java b/Android/app/src/main/java/com/harvard/studyappmodule/GatewayResourcesListAdapter.java index b2caac175b..4813eb8bd8 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/GatewayResourcesListAdapter.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/GatewayResourcesListAdapter.java @@ -17,8 +17,9 @@ import android.content.Context; import android.content.Intent; -import android.support.v7.widget.AppCompatTextView; -import android.support.v7.widget.RecyclerView; +import android.os.Bundle; +import androidx.appcompat.widget.AppCompatTextView; +import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -26,6 +27,7 @@ import com.harvard.R; import com.harvard.studyappmodule.studymodel.Resource; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import io.realm.RealmList; import java.util.ArrayList; @@ -34,7 +36,7 @@ public class GatewayResourcesListAdapter extends RecyclerView.Adapter { private final Context context; private final ArrayList items = new ArrayList<>(); - + private CustomFirebaseAnalytics analyticsInstance; GatewayResourcesListAdapter(Context context, RealmList items) { this.context = context; this.items.addAll(items); @@ -45,6 +47,7 @@ public Holder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.resources_list_item, parent, false); + analyticsInstance = CustomFirebaseAnalytics.getInstance(context); return new Holder(v); } @@ -87,6 +90,12 @@ public void onBindViewHolder(final Holder holder, final int position) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.gateway_resource_list)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if (items.get(i).getType() != null && items.get(i).getContent() != null) { Intent intent = new Intent(context, GatewayResourcesWebViewActivity.class); intent.putExtra("title", "" + items.get(i).getTitle().toString()); diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/GatewayResourcesWebViewActivity.java b/Android/app/src/main/java/com/harvard/studyappmodule/GatewayResourcesWebViewActivity.java index 59f6368bae..aa96eaac9b 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/GatewayResourcesWebViewActivity.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/GatewayResourcesWebViewActivity.java @@ -24,21 +24,22 @@ import android.os.Build.VERSION_CODES; import android.os.Bundle; import android.os.Environment; -import android.support.annotation.NonNull; -import android.support.v4.app.ActivityCompat; -import android.support.v4.content.FileProvider; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.AppCompatTextView; +import androidx.annotation.NonNull; import android.view.View; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.RelativeLayout; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.AppCompatTextView; +import androidx.core.app.ActivityCompat; +import androidx.core.content.FileProvider; import android.widget.Toast; -import com.github.barteksc.pdfviewer.PDFView; -import com.github.barteksc.pdfviewer.scroll.DefaultScrollHandle; import com.harvard.R; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; +import com.harvard.utils.PdfViewerView; + import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -51,16 +52,18 @@ public class GatewayResourcesWebViewActivity extends AppCompatActivity { private RelativeLayout backBtn; private WebView webView; private RelativeLayout shareBtn; - private PDFView pdfView; + private PdfViewerView pdfView; private static final int PERMISSION_REQUEST_CODE = 1000; private String intentTitle; private String intentType; private File finalSharingFile; + private CustomFirebaseAnalytics analyticsInstance; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_resources_web_view); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); initializeXmlId(); intentTitle = getIntent().getStringExtra("title"); @@ -74,6 +77,12 @@ protected void onCreate(Bundle savedInstanceState) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.gateway_resource_webview_back)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); finish(); } }); @@ -81,6 +90,12 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.gateway_resource_webview_share)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); try { Intent shareIntent = new Intent(Intent.ACTION_SEND); @@ -181,7 +196,7 @@ private void initializeXmlId() { title = (AppCompatTextView) findViewById(R.id.title); webView = (WebView) findViewById(R.id.webView); shareBtn = (RelativeLayout) findViewById(R.id.shareBtn); - pdfView = (PDFView) findViewById(R.id.pdfView); + pdfView = (PdfViewerView) findViewById(R.id.pdfViewer); } private void setFont() { @@ -243,16 +258,7 @@ protected void onDestroy() { private void displayPdfView(String filePath) { pdfView.setVisibility(View.VISIBLE); - try { - pdfView - .fromFile(new File(filePath)) - .defaultPage(0) - .enableAnnotationRendering(true) - .scrollHandle(new DefaultScrollHandle(GatewayResourcesWebViewActivity.this)) - .load(); - } catch (Exception e) { - Logger.log(e); - } + pdfView.setPdf(new File(filePath)); } public File getAssetsPdfPath() { diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/NotificationActivity.java b/Android/app/src/main/java/com/harvard/studyappmodule/NotificationActivity.java index edae357fd5..00872ba991 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/NotificationActivity.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/NotificationActivity.java @@ -16,10 +16,10 @@ package com.harvard.studyappmodule; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.AppCompatTextView; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.AppCompatTextView; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import android.view.View; import android.widget.RelativeLayout; import android.widget.Toast; @@ -34,6 +34,7 @@ import com.harvard.studyappmodule.studymodel.StudyList; import com.harvard.usermodule.webservicemodel.UserProfileData; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import com.harvard.utils.Urls; import com.harvard.webservicemodule.apihelper.ApiCall; @@ -56,6 +57,7 @@ public class NotificationActivity extends AppCompatActivity private AppCompatTextView title; private DbServiceSubscriber dbServiceSubscriber; private Realm realm; + private CustomFirebaseAnalytics analyticsInstance; @Override protected void onCreate(Bundle savedInstanceState) { @@ -64,6 +66,7 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_notification); dbServiceSubscriber = new DbServiceSubscriber(); realm = AppController.getRealmobj(this); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); AppController.getHelperSharedPreference() .writePreference(this, getString(R.string.notification), "false"); initializeXmlId(); @@ -96,6 +99,12 @@ private void bindEvent() { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.notification_back)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); finish(); } }); diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/NotificationListAdapter.java b/Android/app/src/main/java/com/harvard/studyappmodule/NotificationListAdapter.java index 6ba6e3f1d8..7e38368479 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/NotificationListAdapter.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/NotificationListAdapter.java @@ -19,8 +19,9 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; -import android.support.v7.widget.AppCompatTextView; -import android.support.v7.widget.RecyclerView; +import android.os.Bundle; +import androidx.appcompat.widget.AppCompatTextView; +import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -32,6 +33,7 @@ import com.harvard.studyappmodule.studymodel.Study; import com.harvard.studyappmodule.studymodel.StudyList; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import io.realm.Realm; import io.realm.RealmList; @@ -41,6 +43,7 @@ public class NotificationListAdapter extends RecyclerView.Adapter items; private DbServiceSubscriber dbServiceSubscriber; private Realm realm; + private CustomFirebaseAnalytics analyticsInstance; NotificationListAdapter(Context context, RealmList notifications, Realm realm) { this.context = context; @@ -54,6 +57,7 @@ public Holder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.notification_list_item, parent, false); + analyticsInstance = CustomFirebaseAnalytics.getInstance(context); return new Holder(v); } @@ -104,6 +108,12 @@ public void onBindViewHolder(final Holder holder, final int position) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.notification_list)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if (!AppController.getHelperSharedPreference() .readPreference(context, context.getResources().getString(R.string.userid), "") .equalsIgnoreCase("")) { @@ -111,7 +121,16 @@ public void onClick(View view) { if (items .get(holder.getAdapterPosition()) .getSubtype() - .equalsIgnoreCase("Study")) { + .equalsIgnoreCase("Study") + || items + .get(holder.getAdapterPosition()) + .getSubtype().equalsIgnoreCase("Activity") + || items + .get(holder.getAdapterPosition()) + .getSubtype().equalsIgnoreCase("Announcement") + || items + .get(holder.getAdapterPosition()) + .getSubtype().equalsIgnoreCase("studyEvent")) { Study study = dbServiceSubscriber.getStudyListFromDB(realm); if (study != null) { diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/PdfDisplayActivity.java b/Android/app/src/main/java/com/harvard/studyappmodule/PdfDisplayActivity.java index 726a1e8498..1f7b53ca45 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/PdfDisplayActivity.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/PdfDisplayActivity.java @@ -24,17 +24,15 @@ import android.os.Build.VERSION_CODES; import android.os.Bundle; import android.os.Environment; -import android.support.annotation.NonNull; -import android.support.v4.app.ActivityCompat; -import android.support.v4.content.FileProvider; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.AppCompatTextView; import android.util.Base64; import android.view.View; import android.widget.RelativeLayout; import android.widget.Toast; -import com.github.barteksc.pdfviewer.PDFView; -import com.github.barteksc.pdfviewer.scroll.DefaultScrollHandle; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.AppCompatTextView; +import androidx.core.app.ActivityCompat; +import androidx.core.content.FileProvider; import com.harvard.R; import com.harvard.storagemodule.DbServiceSubscriber; import com.harvard.studyappmodule.events.ConsentPdfEvent; @@ -42,7 +40,9 @@ import com.harvard.studyappmodule.studymodel.ConsentPdfData; import com.harvard.usermodule.UserModulePresenter; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; +import com.harvard.utils.PdfViewerView; import com.harvard.utils.Urls; import com.harvard.webservicemodule.apihelper.ApiCall; import com.harvard.webservicemodule.events.ParticipantConsentDatastoreConfigEvent; @@ -56,7 +56,6 @@ public class PdfDisplayActivity extends AppCompatActivity implements ApiCall.OnAsyncRequestComplete { private static final int CONSENTPDF = 7; - private PDFView pdfView; private String studyId; private String sharePdfFilePath; private static final int PERMISSION_REQUEST_CODE = 1000; @@ -64,6 +63,8 @@ public class PdfDisplayActivity extends AppCompatActivity private DbServiceSubscriber db; private Realm realm; private String title; + private CustomFirebaseAnalytics analyticsInstance; + PdfViewerView pdfViewer; @Override protected void onCreate(Bundle savedInstanceState) { @@ -71,7 +72,11 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_pdfdisplay); db = new DbServiceSubscriber(); realm = AppController.getRealmobj(this); - pdfView = (PDFView) findViewById(R.id.pdfView); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); + + + + pdfViewer = findViewById(R.id.pdfViewer); AppCompatTextView titletxt = (AppCompatTextView) findViewById(R.id.title); titletxt.setText(getResources().getString(R.string.consent_pdf1)); @@ -90,7 +95,7 @@ protected void onCreate(Bundle savedInstanceState) { AppController.generateDecryptedConsentPdf(studies.getPdfPath().toString()); // we will get byte array pass to pdf view bytesArray = AppController.cipherInputStreamConvertToByte(cis); - setPdfView(); + setPdfView(bytesArray, file.getName()); } else { callGetConsentPdfWebservice(); } @@ -104,6 +109,12 @@ protected void onCreate(Bundle savedInstanceState) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.pdf_display_back)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); finish(); } }); @@ -111,24 +122,30 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.pdf_display_share)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); // checking the permissions if ((ActivityCompat.checkSelfPermission( - PdfDisplayActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) - != PackageManager.PERMISSION_GRANTED) + PdfDisplayActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) + != PackageManager.PERMISSION_GRANTED) || (ActivityCompat.checkSelfPermission( - PdfDisplayActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) - != PackageManager.PERMISSION_GRANTED)) { + PdfDisplayActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) + != PackageManager.PERMISSION_GRANTED)) { String[] permission = - new String[] { - Manifest.permission.READ_EXTERNAL_STORAGE, - Manifest.permission.WRITE_EXTERNAL_STORAGE + new String[]{ + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE }; if (!hasPermissions(permission)) { // just checking is it already denied? Toast.makeText( - PdfDisplayActivity.this, - getResources().getString(R.string.permission_enable_message), - Toast.LENGTH_LONG) + PdfDisplayActivity.this, + getResources().getString(R.string.permission_enable_message), + Toast.LENGTH_LONG) .show(); } else { sharePdf(); @@ -168,7 +185,7 @@ private void callGetConsentPdfWebservice() { "Authorization", "Bearer " + AppController.getHelperSharedPreference() - .readPreference(this, getResources().getString(R.string.auth), "")); + .readPreference(this, getResources().getString(R.string.auth), "")); header.put( "userId", AppController.getHelperSharedPreference() @@ -192,28 +209,24 @@ private void callGetConsentPdfWebservice() { userModulePresenter.performConsentPdf(consentPdfEvent); } - private void setPdfView() { + private void setPdfView(byte[] bytesArray, String name) { // before writing pdf check permission pdfWritingPermission(); - pdfView - .fromBytes(bytesArray) - .defaultPage(0) - .enableAnnotationRendering(true) - .scrollHandle(new DefaultScrollHandle(this)) - .load(); + pdfViewer.setVisibility(View.VISIBLE); + pdfViewer.setPdfFromBytes(bytesArray, "temp.pdf"); } private void pdfWritingPermission() { // checking the permissions if ((ActivityCompat.checkSelfPermission( - PdfDisplayActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) - != PackageManager.PERMISSION_GRANTED) + PdfDisplayActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) + != PackageManager.PERMISSION_GRANTED) || (ActivityCompat.checkSelfPermission( - PdfDisplayActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) - != PackageManager.PERMISSION_GRANTED)) { + PdfDisplayActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) + != PackageManager.PERMISSION_GRANTED)) { String[] permission = - new String[] { - Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE + new String[]{ + Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE }; if (!hasPermissions(permission)) { ActivityCompat.requestPermissions( @@ -247,9 +260,9 @@ public void onRequestPermissionsResult( case PERMISSION_REQUEST_CODE: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_DENIED) { Toast.makeText( - PdfDisplayActivity.this, - getResources().getString(R.string.permission_enable_message), - Toast.LENGTH_LONG) + PdfDisplayActivity.this, + getResources().getString(R.string.permission_enable_message), + Toast.LENGTH_LONG) .show(); } else { sharePdfCreation(); @@ -298,11 +311,10 @@ public void asyncResponse(T response, int responseCode) { } catch (Exception e) { Logger.log(e); } - setPdfView(); + setPdfView(bytesArray, consentPdfData.getStudyId()); try { - consentPdfData.setStudyId(studyId); - db.saveConsentPdf(this, consentPdfData); + db.saveConsentPdf(PdfDisplayActivity.this, consentPdfData); } catch (Exception e) { Logger.log(e); } @@ -328,7 +340,7 @@ public void asyncResponseFailure(int responseCode, String errormsg, String statu } catch (Exception e) { Logger.log(e); } - setPdfView(); + setPdfView(bytesArray, consentPdfData.getStudyId()); } else { Toast.makeText(PdfDisplayActivity.this, errormsg, Toast.LENGTH_SHORT).show(); } diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/ProfileFragment.java b/Android/app/src/main/java/com/harvard/studyappmodule/ProfileFragment.java index 929c4577e4..43bd5f6360 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/ProfileFragment.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/ProfileFragment.java @@ -22,9 +22,6 @@ import android.content.SharedPreferences; import android.graphics.Color; import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v7.widget.AppCompatEditText; -import android.support.v7.widget.AppCompatTextView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -33,6 +30,9 @@ import android.widget.Switch; import android.widget.TextView; import android.widget.Toast; +import androidx.appcompat.widget.AppCompatEditText; +import androidx.appcompat.widget.AppCompatTextView; +import androidx.fragment.app.Fragment; import com.google.gson.Gson; import com.harvard.AppConfig; import com.harvard.BuildConfig; @@ -53,6 +53,7 @@ import com.harvard.usermodule.webservicemodel.UpdateUserProfileData; import com.harvard.usermodule.webservicemodel.UserProfileData; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import com.harvard.utils.SharedPreferenceHelper; import com.harvard.utils.Urls; @@ -104,6 +105,7 @@ public class ProfileFragment extends Fragment private int deleteIndexNumberDb; private DbServiceSubscriber dbServiceSubscriber; private Realm realm; + private CustomFirebaseAnalytics analyticsInstance; @Override public void onAttach(Context context) { @@ -116,6 +118,7 @@ public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_profile, container, false); dbServiceSubscriber = new DbServiceSubscriber(); + analyticsInstance = CustomFirebaseAnalytics.getInstance(context); realm = AppController.getRealmobj(context); initializeXmlId(view); setFont(); @@ -214,6 +217,12 @@ public void onClick(View view) { if (switchRecvStdyRemindr.isChecked()) { CustomDialogClass cdd = new CustomDialogClass(((Activity) context), ProfileFragment.this); + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.profile_fragment_reminders)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); cdd.show(); } else { Toast.makeText(context, R.string.remainder_settings, Toast.LENGTH_SHORT).show(); @@ -225,6 +234,12 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.profile_fragment_password)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); Intent intent = new Intent(context, ChangePasswordActivity.class); intent.putExtra("from", "ProfileFragment"); @@ -252,7 +267,12 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View v) { - + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.profile_fragment_passcode_btn)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); Intent intent = new Intent(context, PasscodeSetupActivity.class); intent.putExtra("from", "profile"); startActivityForResult(intent, PASSCODE_CHANGE_REPSONSE); @@ -263,14 +283,39 @@ public void onClick(View v) { new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.profile_fragment_notification)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); callUpdateUserProfileWebService(true, "mSwitchRecvPushNotifctn"); } }); + switchUsePasscode.setOnClickListener( + new View.OnClickListener() { + @Override + public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.profile_fragment_passcode)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); + } + }); + switchRecvStdyRemindr.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.profile_fragment_reminder_sty)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); callUpdateUserProfileWebService(true, "mSwitchRecvStdyRemindr"); } }); @@ -301,6 +346,12 @@ public void onClick(View v) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.profile_fragment_signout)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if (signOutButton .getText() .toString() @@ -319,6 +370,12 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.profile_fragment_delete_acc)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); Intent intent = new Intent(context, DeleteAccountActivity.class); startActivityForResult(intent, DELETE_ACCOUNT); } @@ -480,8 +537,7 @@ context, getResources().getString(R.string.profile_updated), Toast.LENGTH_SHORT) NotificationModuleSubscriber notificationModuleSubscriber = new NotificationModuleSubscriber(dbServiceSubscriber, realm); notificationModuleSubscriber.cancelNotificationTurnOffNotification(context); - SharedPreferences settings = SharedPreferenceHelper.getPreferences(context); - settings.edit().clear().apply(); + SharedPreferenceHelper.deletePreferences(context); // delete passcode from keystore String pass = AppController.refreshKeys("passcode"); AppController.deleteKey("passcode_" + pass); @@ -500,8 +556,7 @@ context, getResources().getString(R.string.profile_updated), Toast.LENGTH_SHORT) Toast.makeText( context, getResources().getString(R.string.account_deletion), Toast.LENGTH_SHORT) .show(); - SharedPreferences settings = SharedPreferenceHelper.getPreferences(context); - settings.edit().clear().apply(); + SharedPreferenceHelper.deletePreferences(context); // delete passcode from keystore String pass = AppController.refreshKeys("passcode"); if (pass != null) { diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/ReachoutFragment.java b/Android/app/src/main/java/com/harvard/studyappmodule/ReachoutFragment.java index da41f4d374..98af377005 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/ReachoutFragment.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/ReachoutFragment.java @@ -17,9 +17,9 @@ import android.content.Context; import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/ReachoutListAdapter.java b/Android/app/src/main/java/com/harvard/studyappmodule/ReachoutListAdapter.java index 1100c58af8..436e6c5e96 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/ReachoutListAdapter.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/ReachoutListAdapter.java @@ -15,10 +15,12 @@ package com.harvard.studyappmodule; +import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; -import android.support.v7.widget.AppCompatTextView; -import android.support.v7.widget.RecyclerView; +import android.os.Bundle; +import androidx.appcompat.widget.AppCompatTextView; +import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -26,12 +28,14 @@ import android.widget.Toast; import com.harvard.R; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import java.util.ArrayList; public class ReachoutListAdapter extends RecyclerView.Adapter { private final Context context; private final ArrayList items = new ArrayList<>(); + private CustomFirebaseAnalytics analyticsInstance; ReachoutListAdapter(Context context, ArrayList items) { this.context = context; @@ -43,6 +47,7 @@ public Holder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.reachout_list_item, parent, false); + analyticsInstance = CustomFirebaseAnalytics.getInstance(context); return new Holder(v); } @@ -77,7 +82,7 @@ private void setFont() { } @Override - public void onBindViewHolder(final Holder holder, final int position) { + public void onBindViewHolder(final Holder holder, @SuppressLint("RecyclerView") final int position) { final int i = holder.getAdapterPosition(); try { holder.reachoutTitle.setText(items.get(position)); @@ -86,6 +91,12 @@ public void onBindViewHolder(final Holder holder, final int position) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.reachout_list)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); Toast.makeText(context, "GOTO Resources Details Screen " + i, Toast.LENGTH_LONG) .show(); } @@ -97,10 +108,26 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.reachout_list)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if (position == 0) { + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.reachout_list_feedback)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); Intent intent = new Intent(context, FeedbackActivity.class); context.startActivity(intent); } else { + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.reachout_list_contact_us)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); Intent intent = new Intent(context, ContactUsActivity.class); context.startActivity(intent); } diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/ResourcesFragment.java b/Android/app/src/main/java/com/harvard/studyappmodule/ResourcesFragment.java index 30e7e7e00b..5e4265c5b4 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/ResourcesFragment.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/ResourcesFragment.java @@ -17,9 +17,9 @@ import android.content.Context; import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/ResourcesListAdapter.java b/Android/app/src/main/java/com/harvard/studyappmodule/ResourcesListAdapter.java index ab1e941462..19ef1ea139 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/ResourcesListAdapter.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/ResourcesListAdapter.java @@ -18,20 +18,22 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.support.v4.app.Fragment; -import android.support.v7.app.AlertDialog; -import android.support.v7.widget.AppCompatTextView; -import android.support.v7.widget.RecyclerView; +import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.RelativeLayout; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.widget.AppCompatTextView; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.RecyclerView; import com.harvard.AppConfig; import com.harvard.R; import com.harvard.storagemodule.DbServiceSubscriber; import com.harvard.studyappmodule.studymodel.Resource; import com.harvard.usermodule.TermsPrivacyPolicyActivity; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import io.realm.Realm; import io.realm.RealmList; @@ -43,6 +45,7 @@ public class ResourcesListAdapter extends RecyclerView.Adapter items = new ArrayList<>(); private Fragment fragment; + private CustomFirebaseAnalytics analyticsInstance; ResourcesListAdapter(Context context, RealmList items, Fragment fragment) { this.context = context; @@ -55,6 +58,7 @@ public Holder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.resources_list_item, parent, false); + analyticsInstance = CustomFirebaseAnalytics.getInstance(context); return new Holder(v); } @@ -140,6 +144,12 @@ public int compare(final Resource o1, final Resource o2) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.resources_list)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); DbServiceSubscriber dbServiceSubscriber = new DbServiceSubscriber(); Realm realm = AppController.getRealmobj(context); if (items.get(i).getType() != null) { @@ -181,9 +191,9 @@ public void onClick(View view) { .getTitle() .equalsIgnoreCase(view.getResources().getString(R.string.resourceTerms))) { try { - Intent termsIntent = - new Intent(context, TermsPrivacyPolicyActivity.class); - termsIntent.putExtra("title", context.getResources().getString(R.string.resourceTerms)); + Intent termsIntent = new Intent(context, TermsPrivacyPolicyActivity.class); + termsIntent.putExtra( + "title", context.getResources().getString(R.string.resourceTerms)); termsIntent.putExtra("url", dbServiceSubscriber.getApps(realm).getTermsUrl()); context.startActivity(termsIntent); } catch (Exception e) { @@ -194,10 +204,11 @@ public void onClick(View view) { .getTitle() .equalsIgnoreCase(view.getResources().getString(R.string.resourcePolicy))) { try { - Intent termsIntent = - new Intent(context, TermsPrivacyPolicyActivity.class); - termsIntent.putExtra("title", context.getResources().getString(R.string.resourcePolicy)); - termsIntent.putExtra("url", dbServiceSubscriber.getApps(realm).getPrivacyPolicyUrl()); + Intent termsIntent = new Intent(context, TermsPrivacyPolicyActivity.class); + termsIntent.putExtra( + "title", context.getResources().getString(R.string.resourcePolicy)); + termsIntent.putExtra( + "url", dbServiceSubscriber.getApps(realm).getPrivacyPolicyUrl()); context.startActivity(termsIntent); } catch (Exception e) { Logger.log(e); @@ -212,7 +223,8 @@ public void onClick(View view) { .get(i) .getTitle() .equalsIgnoreCase(context.getResources().getString(R.string.leave_study)) - && AppConfig.AppType.equalsIgnoreCase(context.getString(R.string.app_standalone))) { + && AppConfig.AppType.equalsIgnoreCase( + context.getString(R.string.app_standalone))) { message = context.getString(R.string.leaveStudyDeleteAccount); } else { message = context.getString(R.string.leaveStudy); @@ -226,6 +238,12 @@ public void onClick(View view) { new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.resources_list_leave_study_yes)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); ((SurveyResourcesFragment) fragment).responseServerWithdrawFromStudy(); } }); @@ -235,6 +253,12 @@ public void onClick(DialogInterface dialog, int which) { new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.resources_list_leave_study_no)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); dialog.cancel(); } }); diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/ResourcesWebViewActivity.java b/Android/app/src/main/java/com/harvard/studyappmodule/ResourcesWebViewActivity.java index 7e39684ddb..db60313796 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/ResourcesWebViewActivity.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/ResourcesWebViewActivity.java @@ -27,44 +27,40 @@ import android.os.Build.VERSION_CODES; import android.os.Bundle; import android.os.Environment; -import android.support.annotation.NonNull; -import android.support.v4.app.ActivityCompat; -import android.support.v4.content.FileProvider; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.AppCompatTextView; import android.text.Html; import android.util.Base64; import android.view.View; import android.webkit.WebView; import android.widget.RelativeLayout; import android.widget.Toast; -import com.github.barteksc.pdfviewer.PDFView; -import com.github.barteksc.pdfviewer.scroll.DefaultScrollHandle; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.AppCompatTextView; +import androidx.core.app.ActivityCompat; +import androidx.core.content.FileProvider; import com.harvard.R; import com.harvard.storagemodule.DbServiceSubscriber; import com.harvard.studyappmodule.studymodel.Resource; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; +import com.harvard.utils.PdfViewerView; import com.harvard.webservicemodule.apihelper.ConnectionDetector; -import java.io.BufferedInputStream; +import io.realm.Realm; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.net.URL; -import java.net.URLConnection; import javax.crypto.CipherInputStream; -import io.realm.Realm; public class ResourcesWebViewActivity extends AppCompatActivity { private AppCompatTextView titleTv; private RelativeLayout backBtn; private WebView webView; private RelativeLayout shareBtn; - private PDFView pdfView; private String CreateFilePath; private String fileName; private static final int PERMISSION_REQUEST_CODE = 1000; @@ -78,11 +74,15 @@ public class ResourcesWebViewActivity extends AppCompatActivity { private DbServiceSubscriber dbServiceSubscriber; String resourceId; Resource resource; + private CustomFirebaseAnalytics analyticsInstance; + PdfViewerView pdfViewer; @Override protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); setContentView(R.layout.activity_resources_web_view); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); CreateFilePath = "/data/data/" + getPackageName() + "/files/"; initializeXmlId(); @@ -99,6 +99,7 @@ protected void onCreate(Bundle savedInstanceState) { // removing space b/w the string : name of the pdf try { title = intentTitle.replaceAll("\\s+", ""); + title = title.replace("/", "\u2215"); } catch (Exception e) { title = intentTitle; Logger.log(e); @@ -150,6 +151,12 @@ protected void onCreate(Bundle savedInstanceState) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.resources_webview_back)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); finish(); } }); @@ -157,6 +164,12 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.resources_webview_share)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); try { Intent shareIntent = new Intent(Intent.ACTION_SEND); @@ -177,9 +190,12 @@ public void onClick(View v) { shareIntent.putExtra(Intent.EXTRA_STREAM, fileUri); } } else { - shareIntent.putExtra(Intent.EXTRA_TEXT, Html.fromHtml(intentContent)); + shareIntent.setType("text/html"); + shareIntent.putExtra( + Intent.EXTRA_TEXT,Html.fromHtml(resource.getContent()).toString()); + shareIntent.putExtra( + Intent.EXTRA_HTML_TEXT, Html.fromHtml(resource.getContent()).toString()); } - startActivity(shareIntent); } catch (Exception e) { Logger.log(e); @@ -218,7 +234,7 @@ private void initializeXmlId() { titleTv = (AppCompatTextView) findViewById(R.id.title); webView = (WebView) findViewById(R.id.webView); shareBtn = (RelativeLayout) findViewById(R.id.shareBtn); - pdfView = (PDFView) findViewById(R.id.pdfView); + pdfViewer = (PdfViewerView) findViewById(R.id.pdfViewer); } private void setTextForView() { @@ -228,12 +244,17 @@ private void setTextForView() { webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setDefaultTextEncodingName("utf-8"); webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); - String webData = resource.getContent();; + String webData = resource.getContent(); if (Build.VERSION.SDK_INT >= 24) { - webView.loadDataWithBaseURL(null, - Html.fromHtml((webData), Html.FROM_HTML_MODE_LEGACY).toString(), "text/html", "UTF-8", null); + webView.loadDataWithBaseURL( + null, + Html.fromHtml((webData), Html.FROM_HTML_MODE_LEGACY).toString(), + "text/html", + "UTF-8", + null); } else { - webView.loadDataWithBaseURL(null, Html.fromHtml((webData)).toString(), "text/html", "UTF-8", null); + webView.loadDataWithBaseURL( + null, Html.fromHtml((webData)).toString(), "text/html", "UTF-8", null); } } @@ -344,6 +365,7 @@ protected String doInBackground(String... url1) { Logger.log(e1); } } + AppController.generateEncryptedConsentPdf(filePath, fileName); return null; } @@ -356,7 +378,6 @@ protected void onPostExecute(String url) { // downlaod success mean file exist else check offline file File file = new File(filePath + fileName + ".pdf"); if (file.exists()) { - AppController.generateEncryptedConsentPdf(filePath, fileName); displayPdfView(filePath + fileName + ".pdf"); } else { // offline functionality @@ -414,16 +435,7 @@ private File getEncryptedFilePath(String filePath) { } private void displayPdfView(String filePath) { - pdfView.setVisibility(View.VISIBLE); - try { - pdfView - .fromFile(new File(filePath)) - .defaultPage(0) - .enableAnnotationRendering(true) - .scrollHandle(new DefaultScrollHandle(ResourcesWebViewActivity.this)) - .load(); - } catch (Exception e) { - Logger.log(e); - } + pdfViewer.setVisibility(View.VISIBLE); + pdfViewer.setPdf(new File(filePath)); } } diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/SignupFragment.java b/Android/app/src/main/java/com/harvard/studyappmodule/SignupFragment.java index eeb7c1494b..35e97d0e2a 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/SignupFragment.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/SignupFragment.java @@ -23,11 +23,6 @@ import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; -import android.support.v4.app.Fragment; -import android.support.v4.content.ContextCompat; -import android.support.v7.widget.AppCompatCheckBox; -import android.support.v7.widget.AppCompatEditText; -import android.support.v7.widget.AppCompatTextView; import android.text.SpannableStringBuilder; import android.text.TextPaint; import android.text.method.LinkMovementMethod; @@ -39,12 +34,16 @@ import android.widget.CompoundButton; import android.widget.TextView; import android.widget.Toast; +import androidx.appcompat.widget.AppCompatCheckBox; +import androidx.appcompat.widget.AppCompatEditText; +import androidx.appcompat.widget.AppCompatTextView; +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; import com.google.firebase.iid.FirebaseInstanceId; import com.harvard.AppConfig; import com.harvard.BuildConfig; import com.harvard.R; import com.harvard.storagemodule.DbServiceSubscriber; -import com.harvard.usermodule.SignupActivity; import com.harvard.usermodule.TermsPrivacyPolicyActivity; import com.harvard.usermodule.UserModulePresenter; import com.harvard.usermodule.VerificationStepActivity; @@ -54,8 +53,8 @@ import com.harvard.usermodule.webservicemodel.RegistrationData; import com.harvard.usermodule.webservicemodel.UpdateUserProfileData; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; -import com.harvard.utils.SetDialogHelper; import com.harvard.utils.Urls; import com.harvard.webservicemodule.apihelper.ApiCall; import com.harvard.webservicemodule.events.ParticipantDatastoreConfigEvent; @@ -88,6 +87,7 @@ public class SignupFragment extends Fragment implements ApiCall.OnAsyncRequestCo private String userAuth; private String userID; private RegistrationData registrationData; + private CustomFirebaseAnalytics analyticsInstance; @Override public void onAttach(Context context) { @@ -100,6 +100,7 @@ public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.content_signup, container, false); + analyticsInstance = CustomFirebaseAnalytics.getInstance(context); clicked = false; initializeXmlId(view); customTextView(agreeLabel); @@ -152,8 +153,14 @@ public void updateDrawState(TextPaint ds) { @Override public void onClick(View widget) { + Bundle eventProperties = new Bundle(); if (termsAndConditionData != null && !termsAndConditionData.getTerms().equalsIgnoreCase("")) { + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.signup_fragment_terms)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); Intent termsIntent = new Intent(context, TermsPrivacyPolicyActivity.class); termsIntent.putExtra("title", getResources().getString(R.string.terms)); termsIntent.putExtra("url", termsAndConditionData.getTerms()); @@ -186,6 +193,12 @@ public void updateDrawState(TextPaint ds) { @Override public void onClick(View widget) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.signup_fragment_privacy_policy)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if (termsAndConditionData != null && !termsAndConditionData.getPrivacy().isEmpty()) { Intent termsIntent = new Intent(context, TermsPrivacyPolicyActivity.class); termsIntent.putExtra("title", getResources().getString(R.string.privacy_policy)); @@ -231,6 +244,12 @@ private void bindEvents() { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.signup_fragment_submit)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if (clicked == false) { clicked = true; password.clearFocus(); diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/StandaloneActivity.java b/Android/app/src/main/java/com/harvard/studyappmodule/StandaloneActivity.java index 7d6c724a56..e3c69dc373 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/StandaloneActivity.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/StandaloneActivity.java @@ -21,7 +21,7 @@ import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatActivity; import android.widget.Toast; import com.google.gson.ExclusionStrategy; import com.google.gson.FieldAttributes; diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/StandaloneStudyInfoActivity.java b/Android/app/src/main/java/com/harvard/studyappmodule/StandaloneStudyInfoActivity.java index 0267633b13..fab11378e7 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/StandaloneStudyInfoActivity.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/StandaloneStudyInfoActivity.java @@ -26,17 +26,16 @@ import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.customtabs.CustomTabsIntent; -import android.support.v4.view.ViewPager; -import android.support.v7.app.AlertDialog; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.AppCompatImageView; -import android.support.v7.widget.AppCompatTextView; import android.view.View; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.Toast; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.AppCompatTextView; +import androidx.browser.customtabs.CustomTabsIntent; +import androidx.viewpager.widget.ViewPager; import com.google.gson.ExclusionStrategy; import com.google.gson.FieldAttributes; import com.google.gson.Gson; @@ -48,7 +47,6 @@ import com.harvard.AppConfig; import com.harvard.BuildConfig; import com.harvard.R; -import com.harvard.WebViewActivity; import com.harvard.eligibilitymodule.CustomViewTaskActivity; import com.harvard.eligibilitymodule.StepsBuilder; import com.harvard.gatewaymodule.CircleIndicator; @@ -63,12 +61,12 @@ import com.harvard.studyappmodule.studymodel.StudyHome; import com.harvard.studyappmodule.studymodel.StudyList; import com.harvard.usermodule.UserModulePresenter; -import com.harvard.usermodule.VerificationStepActivity; import com.harvard.usermodule.event.GetPreferenceEvent; import com.harvard.usermodule.model.Apps; import com.harvard.usermodule.webservicemodel.Studies; import com.harvard.usermodule.webservicemodel.StudyData; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import com.harvard.utils.SharedPreferenceHelper; import com.harvard.utils.Urls; @@ -115,11 +113,13 @@ public class StandaloneStudyInfoActivity extends AppCompatActivity private String latestVersion; private boolean force = false; AlertDialog.Builder alertDialogBuilder; + private CustomFirebaseAnalytics analyticsInstance; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_standalone_study_info); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); dbServiceSubscriber = new DbServiceSubscriber(); realm = AppController.getRealmobj(this); @@ -175,6 +175,11 @@ private void bindEvents() { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, getString(R.string.join_study)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if (SharedPreferenceHelper.readPreference( StandaloneStudyInfoActivity.this, getString(R.string.userid), "") .equalsIgnoreCase("")) { @@ -205,11 +210,13 @@ StandaloneStudyInfoActivity.this, getString(R.string.userid), "") R.anim.slide_out_right) .build(); Apps apps = dbServiceSubscriber.getApps(realm); - customTabsIntent.intent.setData(Uri.parse(Urls.LOGIN_URL - .replace("$FromEmail", apps.getFromEmail()) - .replace("$SupportEmail", apps.getSupportEmail()) - .replace("$AppName", apps.getAppName()) - .replace("$ContactEmail", apps.getContactUsEmail()))); + customTabsIntent.intent.setData( + Uri.parse( + Urls.LOGIN_URL + .replace("$FromEmail", apps.getFromEmail()) + .replace("$SupportEmail", apps.getSupportEmail()) + .replace("$AppName", apps.getAppName()) + .replace("$ContactEmail", apps.getContactUsEmail()))); startActivity(customTabsIntent.intent); } else { loginCallback(); @@ -702,10 +709,16 @@ protected void onActivityResult(int requestCode, int resultCode, @Nullable Inten "ok", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.app_update_next_time_ok)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); dialog.dismiss(); } - }).show(); - + }) + .show(); } } } @@ -727,6 +740,12 @@ private void getStudyWebsiteNull() { new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.visit_website)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(studyHome.getStudyWebsite())); startActivity(browserIntent); @@ -738,14 +757,21 @@ public void onClick(View v) { } else if (!studyHome.getStudyWebsite().equalsIgnoreCase("")) { bottombar1.setVisibility(View.VISIBLE); consentLayButton.setText(getResources().getString(R.string.visit_website)); - consentLay.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Intent browserIntent = + consentLay.setOnClickListener( + new View.OnClickListener() { + @Override + public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.visit_website)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); + Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(studyHome.getStudyWebsite())); - startActivity(browserIntent); - } - }); + startActivity(browserIntent); + } + }); } else { bottombar1.setVisibility(View.INVISIBLE); } @@ -906,6 +932,12 @@ public void isUpgrade(boolean b, String latestVersion, final boolean force) { positiveButton, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.app_upgrade_ok)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); startActivityForResult( new Intent(Intent.ACTION_VIEW, Uri.parse(VersionChecker.PLAY_STORE_URL)), RESULT_CODE_UPGRADE); @@ -916,12 +948,18 @@ public void onClick(DialogInterface dialog, int id) { new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.app_upgrade_cancel)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); dialog.dismiss(); if (force) { Toast.makeText( - StandaloneStudyInfoActivity.this, - "Please update the app to continue using", - Toast.LENGTH_SHORT) + StandaloneStudyInfoActivity.this, + "Please update the app to continue using", + Toast.LENGTH_SHORT) .show(); moveTaskToBack(true); if (Build.VERSION.SDK_INT < 21) { diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/StudyFragment.java b/Android/app/src/main/java/com/harvard/studyappmodule/StudyFragment.java index 989cd83dec..3f818d46fe 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/StudyFragment.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/StudyFragment.java @@ -20,15 +20,15 @@ import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.widget.AppCompatTextView; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; +import androidx.appcompat.widget.AppCompatTextView; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import com.google.gson.ExclusionStrategy; import com.google.gson.FieldAttributes; import com.google.gson.Gson; diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/StudyInfoActivity.java b/Android/app/src/main/java/com/harvard/studyappmodule/StudyInfoActivity.java index bcc309dd5b..41f3444bfe 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/StudyInfoActivity.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/StudyInfoActivity.java @@ -23,15 +23,14 @@ import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; -import android.support.customtabs.CustomTabsIntent; -import android.support.v4.view.ViewPager; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.AppCompatImageView; -import android.support.v7.widget.AppCompatTextView; import android.view.View; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.Toast; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.AppCompatTextView; +import androidx.browser.customtabs.CustomTabsIntent; +import androidx.viewpager.widget.ViewPager; import com.google.gson.ExclusionStrategy; import com.google.gson.FieldAttributes; import com.google.gson.Gson; @@ -56,7 +55,6 @@ import com.harvard.studyappmodule.studymodel.StudyHome; import com.harvard.studyappmodule.studymodel.StudyList; import com.harvard.usermodule.UserModulePresenter; -import com.harvard.usermodule.VerificationStepActivity; import com.harvard.usermodule.event.GetPreferenceEvent; import com.harvard.usermodule.event.UpdatePreferenceEvent; import com.harvard.usermodule.model.Apps; @@ -64,6 +62,7 @@ import com.harvard.usermodule.webservicemodel.Studies; import com.harvard.usermodule.webservicemodel.StudyData; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import com.harvard.utils.SharedPreferenceHelper; import com.harvard.utils.Urls; @@ -112,6 +111,7 @@ public class StudyInfoActivity extends AppCompatActivity implements ApiCall.OnAs private Realm realm; private EligibilityConsent eligibilityConsent; private RealmList userPreferenceStudies; + private CustomFirebaseAnalytics analyticsInstance; @Override protected void onCreate(Bundle savedInstanceState) { @@ -119,6 +119,7 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_study_info); dbServiceSubscriber = new DbServiceSubscriber(); realm = AppController.getRealmobj(this); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); initializeXmlId(); setFont(); @@ -171,6 +172,12 @@ private void bindEvents() { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.study_info_back)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); backClicked(); } }); @@ -179,7 +186,11 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { - + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, getString(R.string.join_study)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if (AppController.getHelperSharedPreference() .readPreference( StudyInfoActivity.this, getResources().getString(R.string.userid), "") @@ -234,11 +245,13 @@ StudyInfoActivity.this, getResources().getString(R.string.userid), "") StudyInfoActivity.this, R.anim.slide_in_left, R.anim.slide_out_right) .build(); Apps apps = dbServiceSubscriber.getApps(realm); - customTabsIntent.intent.setData(Uri.parse(Urls.LOGIN_URL - .replace("$FromEmail", apps.getFromEmail()) - .replace("$SupportEmail", apps.getSupportEmail()) - .replace("$AppName", apps.getAppName()) - .replace("$ContactEmail", apps.getContactUsEmail()))); + customTabsIntent.intent.setData( + Uri.parse( + Urls.LOGIN_URL + .replace("$FromEmail", apps.getFromEmail()) + .replace("$SupportEmail", apps.getSupportEmail()) + .replace("$AppName", apps.getAppName()) + .replace("$ContactEmail", apps.getContactUsEmail()))); startActivity(customTabsIntent.intent); } else { new CallConsentMetaData(true).execute(); @@ -250,6 +263,12 @@ StudyInfoActivity.this, getResources().getString(R.string.userid), "") new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.visit_website)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); try { Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(studyHome.getStudyWebsite())); @@ -263,6 +282,12 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.view_consent)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); try { Intent intent = new Intent(StudyInfoActivity.this, WebViewActivity.class); intent.putExtra("consent", consentDocumentData.getConsent().getContent()); @@ -694,6 +719,12 @@ private void getStudyWebsiteNull() { new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.view_consent)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(studyHome.getStudyWebsite())); startActivity(browserIntent); @@ -711,6 +742,12 @@ public void onClick(View v) { new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.view_consent)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); try { Intent intent = new Intent(StudyInfoActivity.this, WebViewActivity.class); intent.putExtra("consent", consentDocumentData.getConsent().getContent()); diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/StudyInfoPagerAdapter.java b/Android/app/src/main/java/com/harvard/studyappmodule/StudyInfoPagerAdapter.java index 29d185d293..26ae9f4ee8 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/StudyInfoPagerAdapter.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/StudyInfoPagerAdapter.java @@ -20,14 +20,15 @@ import android.graphics.Color; import android.net.Uri; import android.os.Build; -import android.support.v4.view.PagerAdapter; -import android.support.v7.widget.AppCompatImageView; -import android.support.v7.widget.AppCompatTextView; +import android.os.Bundle; import android.text.Html; import android.util.Base64; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import androidx.appcompat.widget.AppCompatImageView; +import androidx.appcompat.widget.AppCompatTextView; +import androidx.viewpager.widget.PagerAdapter; import android.webkit.WebView; import android.widget.RelativeLayout; import com.bumptech.glide.Glide; @@ -36,6 +37,7 @@ import com.harvard.R; import com.harvard.studyappmodule.studymodel.StudyInfo; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import io.realm.RealmList; @@ -49,6 +51,7 @@ public class StudyInfoPagerAdapter extends PagerAdapter { private Context context; private RealmList info; private AppCompatImageView bgImg; + private CustomFirebaseAnalytics analyticsInstance; StudyInfoPagerAdapter(Context context, RealmList info, String studyId) { size = info.size(); @@ -75,6 +78,7 @@ public void destroyItem(ViewGroup view, int position, Object object) { public Object instantiateItem(ViewGroup collection, int position) { LayoutInflater inflater = (LayoutInflater) collection.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); + analyticsInstance = CustomFirebaseAnalytics.getInstance(context); if (info.get(position).getType().equalsIgnoreCase("video")) { View view = inflater.inflate(R.layout.study_info_item1, null); initializeXmlId(position, view); @@ -160,6 +164,12 @@ private void bindEvents(final int pos) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.watch_video)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(info.get(pos).getLink())); context.startActivity(intent); } diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/StudyListAdapter.java b/Android/app/src/main/java/com/harvard/studyappmodule/StudyListAdapter.java index 193b9b3951..d1392e2d21 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/StudyListAdapter.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/StudyListAdapter.java @@ -16,23 +16,21 @@ package com.harvard.studyappmodule; -import android.app.Activity; -import android.app.Fragment; +import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; -import android.graphics.Bitmap; import android.graphics.Typeface; import android.graphics.drawable.Drawable; import android.graphics.drawable.GradientDrawable; +import android.os.Bundle; import android.os.Handler; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v7.widget.AppCompatImageView; -import android.support.v7.widget.AppCompatTextView; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatImageView; +import androidx.appcompat.widget.AppCompatTextView; +import androidx.recyclerview.widget.RecyclerView; import android.text.Html; import android.util.Base64; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -42,17 +40,14 @@ import com.bumptech.glide.load.DataSource; import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.engine.GlideException; -import com.bumptech.glide.request.Request; import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.RequestOptions; -import com.bumptech.glide.request.target.BitmapImageViewTarget; -import com.bumptech.glide.request.target.SizeReadyCallback; import com.bumptech.glide.request.target.Target; -import com.bumptech.glide.request.transition.Transition; import com.harvard.R; import com.harvard.studyappmodule.studymodel.StudyList; import com.harvard.studyappmodule.surveyscheduler.model.CompletionAdherence; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import io.realm.RealmList; import java.util.ArrayList; @@ -63,6 +58,7 @@ public class StudyListAdapter extends RecyclerView.Adapter completionAdherenceCalcs; private boolean click = true; + private CustomFirebaseAnalytics analyticsInstance; StudyListAdapter( Context context, @@ -79,6 +75,7 @@ public class StudyListAdapter extends RecyclerView.Adapter new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.study_list)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if (click) { click = false; new Handler() diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/StudySignInActivity.java b/Android/app/src/main/java/com/harvard/studyappmodule/StudySignInActivity.java index fe6ba3ad75..815a8fe4f1 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/StudySignInActivity.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/StudySignInActivity.java @@ -17,16 +17,17 @@ import android.content.Intent; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.AppCompatTextView; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.AppCompatTextView; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import android.view.View; import android.widget.RelativeLayout; import android.widget.Toast; import com.harvard.R; import com.harvard.gatewaymodule.GatewayActivity; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import java.util.ArrayList; @@ -37,11 +38,13 @@ public class StudySignInActivity extends AppCompatActivity { private RelativeLayout filterBtn; private RelativeLayout resourceBtn; private AppCompatTextView signInButton; + private CustomFirebaseAnalytics analyticsInstance; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sign_in_study); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); initializeXmlId(); setTextForView(); setFont(); @@ -78,6 +81,12 @@ private void bindEvents() { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.filter_clicked)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); Toast.makeText( StudySignInActivity.this, getResources().getString(R.string.filter_clicked), @@ -89,6 +98,12 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.resource_btn_clicked)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); Toast.makeText( StudySignInActivity.this, getResources().getString(R.string.resource_btn_clicked), @@ -100,6 +115,12 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.sign_in_btn_clicked)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); Toast.makeText( StudySignInActivity.this, getResources().getString(R.string.sign_in_btn_clicked), diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/StudySignInListAdapter.java b/Android/app/src/main/java/com/harvard/studyappmodule/StudySignInListAdapter.java index 1f2e07f4e4..bebea65a41 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/StudySignInListAdapter.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/StudySignInListAdapter.java @@ -17,9 +17,10 @@ import android.content.Context; import android.graphics.drawable.GradientDrawable; -import android.support.v7.widget.AppCompatImageView; -import android.support.v7.widget.AppCompatTextView; -import android.support.v7.widget.RecyclerView; +import android.os.Bundle; +import androidx.appcompat.widget.AppCompatImageView; +import androidx.appcompat.widget.AppCompatTextView; +import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -27,12 +28,14 @@ import android.widget.Toast; import com.harvard.R; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import java.util.ArrayList; public class StudySignInListAdapter extends RecyclerView.Adapter { private final Context context; private ArrayList items = new ArrayList<>(); + private CustomFirebaseAnalytics analyticsInstance; StudySignInListAdapter(Context context, ArrayList items) { this.context = context; @@ -44,6 +47,7 @@ public Holder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.study_sign_in_list_item, parent, false); + analyticsInstance = CustomFirebaseAnalytics.getInstance(context); return new Holder(v); } @@ -126,6 +130,12 @@ public void onBindViewHolder(final Holder holder, final int position) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.study_signup_list)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); Toast.makeText(context, "GOTO Details Screen", Toast.LENGTH_LONG).show(); } }); diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/SurveyActivitiesFragment.java b/Android/app/src/main/java/com/harvard/studyappmodule/SurveyActivitiesFragment.java index eddfd1b456..15b1a88fde 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/SurveyActivitiesFragment.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/SurveyActivitiesFragment.java @@ -25,19 +25,19 @@ import android.os.AsyncTask; import android.os.Build.VERSION_CODES; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.ActivityCompat; -import android.support.v4.app.Fragment; -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.widget.AppCompatImageView; -import android.support.v7.widget.AppCompatTextView; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.RelativeLayout; import android.widget.Toast; +import androidx.annotation.NonNull; +import androidx.appcompat.widget.AppCompatImageView; +import androidx.appcompat.widget.AppCompatTextView; +import androidx.core.app.ActivityCompat; +import androidx.fragment.app.Fragment; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.google.gson.ExclusionStrategy; import com.google.gson.FieldAttributes; import com.google.gson.Gson; @@ -94,6 +94,7 @@ import com.harvard.usermodule.webservicemodel.Studies; import com.harvard.usermodule.webservicemodel.StudyData; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import com.harvard.utils.SetDialogHelper; import com.harvard.utils.SharedPreferenceHelper; @@ -152,6 +153,7 @@ public class SurveyActivitiesFragment extends Fragment private String activityId; // activityId for webservice on click of activity private boolean branching; // branching for webservice on click of activity private String activityVersion; // activityVersion for webservice on click of activity + private CustomFirebaseAnalytics analyticsInstance; private static final int ACTIVTTYLIST_RESPONSECODE = 100; private static final int ACTIVTTYINFO_RESPONSECODE = 101; @@ -190,6 +192,7 @@ public class SurveyActivitiesFragment extends Fragment private ArrayList arrayList; private ActivityData activityDataDB; String title = ""; + Intent calculateRunHoldServiceeintent; @Override public void onAttach(Context context) { @@ -202,6 +205,7 @@ public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_survey_activities, container, false); + analyticsInstance = CustomFirebaseAnalytics.getInstance(context); initializeXmlId(view); dbServiceSubscriber = new DbServiceSubscriber(); realm = AppController.getRealmobj(context); @@ -266,6 +270,12 @@ private void bindEvents() { @Override public void onClick(View view) { if (AppConfig.AppType.equalsIgnoreCase(getString(R.string.app_gateway))) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.survey_activities_home)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); Intent intent = new Intent(context, StudyActivity.class); ComponentName cn = intent.getComponent(); Intent mainIntent = Intent.makeRestartActivityTask(cn); @@ -286,8 +296,20 @@ public void onClick(View view) { mScheduledTime.add(context.getResources().getString(R.string.tasks1)); CustomActivitiesDailyDialogClass c = new CustomActivitiesDailyDialogClass( - context, mScheduledTime, filterPos, true, SurveyActivitiesFragment.this, status.get(filterPos), currentRunStatusForActivities.get(filterPos)); + context, + mScheduledTime, + filterPos, + true, + SurveyActivitiesFragment.this, + status.get(filterPos), + currentRunStatusForActivities.get(filterPos)); c.show(); + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.survey_activities_filter)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); } }); swipeRefreshLayout.setOnRefreshListener( @@ -728,7 +750,6 @@ public void asyncResponse(T response, int responseCode) { } else { Toast.makeText(context, R.string.unable_to_parse, Toast.LENGTH_SHORT).show(); } - } else if (responseCode == UPDATE_STUDY_PREFERENCE) { // check for notification AppController.getHelperProgressDialog().dismissDialog(); @@ -1461,7 +1482,7 @@ private void callGetStudyInfoWebservice() { "get", url, STUDY_INFO, - getActivity(), + context, StudyHome.class, null, header, @@ -1628,6 +1649,12 @@ private class CalculateRuns @Override protected ArrayList doInBackground(ArrayList... params) { + SharedPreferenceHelper.writePreference(context, "runsCalculating", "true"); + calculateRunHoldServiceeintent = new Intent(context, CalculateRunHoldService.class); + if (!AppController.isMyServiceRunning(context, CalculateRunHoldService.class)) { + context.startService(calculateRunHoldServiceeintent); + } + realm = AppController.getRealmobj(context); try { @@ -2309,7 +2336,13 @@ protected ArrayList doInBackground(ArrayList... para @Override protected void onPostExecute(ArrayList result) { + AppController.getHelperProgressDialog() + .updateMsg(context.getString(R.string.activity_loading_msg)); + SharedPreferenceHelper.writePreference(context, "runsCalculating", "false"); + if (AppController.isMyServiceRunning(context, CalculateRunHoldService.class)) { + context.stopService(calculateRunHoldServiceeintent); + } realm = AppController.getRealmobj(context); surveyActivitiesRecyclerView.setLayoutManager(new LinearLayoutManager(context)); diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/SurveyActivitiesListAdapter.java b/Android/app/src/main/java/com/harvard/studyappmodule/SurveyActivitiesListAdapter.java index 62dc3f9eb5..99e96385df 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/SurveyActivitiesListAdapter.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/SurveyActivitiesListAdapter.java @@ -19,10 +19,11 @@ import android.content.Context; import android.graphics.Color; import android.graphics.drawable.GradientDrawable; +import android.os.Bundle; import android.os.Handler; -import android.support.v7.widget.AppCompatImageView; -import android.support.v7.widget.AppCompatTextView; -import android.support.v7.widget.RecyclerView; +import androidx.appcompat.widget.AppCompatImageView; +import androidx.appcompat.widget.AppCompatTextView; +import androidx.recyclerview.widget.RecyclerView; import android.text.Html; import android.view.LayoutInflater; import android.view.View; @@ -36,6 +37,7 @@ import com.harvard.studyappmodule.surveyscheduler.SurveyScheduler; import com.harvard.studyappmodule.surveyscheduler.model.ActivityStatus; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -57,6 +59,7 @@ public class SurveyActivitiesListAdapter private boolean paused; private Date joiningDate; private ArrayList timePos = new ArrayList<>(); + private CustomFirebaseAnalytics analyticsInstance; SurveyActivitiesListAdapter( Context context, @@ -80,6 +83,7 @@ public Holder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.survey_activities_list_item, parent, false); + analyticsInstance = CustomFirebaseAnalytics.getInstance(context); return new Holder(v); } @@ -749,6 +753,12 @@ public void onBindViewHolder(final Holder holder, int position) { holder.container.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.survey_activities_list)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); int currentRunVal = currentRunStatusForActivities.get(holder.getAdapterPosition()).getCurrentRunId(); int totalRunVal = currentRunStatusForActivities.get(holder.getAdapterPosition()).getTotalRun(); if (click) { @@ -818,6 +828,12 @@ public void run() { holder.more.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.survey_activities_list_more)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); int p = 0; try { p = timePos.get(holder.getAdapterPosition()); diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/SurveyActivity.java b/Android/app/src/main/java/com/harvard/studyappmodule/SurveyActivity.java index f56de2a317..04ca12497f 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/SurveyActivity.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/SurveyActivity.java @@ -30,23 +30,22 @@ import android.os.Build; import android.os.Bundle; import android.os.Handler; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.ActivityCompat; -import android.support.v4.app.NotificationManagerCompat; -import android.support.v4.view.GravityCompat; -import android.support.v4.widget.DrawerLayout; -import android.support.v7.app.AlertDialog; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.AppCompatImageView; -import android.support.v7.widget.AppCompatTextView; -import android.support.v7.widget.Toolbar; import android.view.View; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; - +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.AppCompatImageView; +import androidx.appcompat.widget.AppCompatTextView; +import androidx.appcompat.widget.Toolbar; +import androidx.core.app.ActivityCompat; +import androidx.core.app.NotificationManagerCompat; +import androidx.core.view.GravityCompat; +import androidx.drawerlayout.widget.DrawerLayout; import com.harvard.AppConfig; import com.harvard.BuildConfig; import com.harvard.FdaApplication; @@ -59,6 +58,7 @@ import com.harvard.usermodule.event.LogoutEvent; import com.harvard.usermodule.webservicemodel.LoginData; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import com.harvard.utils.SharedPreferenceHelper; import com.harvard.utils.Urls; @@ -66,10 +66,8 @@ import com.harvard.utils.version.VersionChecker; import com.harvard.webservicemodule.apihelper.ApiCall; import com.harvard.webservicemodule.events.AuthServerConfigEvent; - import io.realm.Realm; import io.realm.RealmResults; - import java.util.HashMap; public class SurveyActivity extends AppCompatActivity @@ -122,11 +120,13 @@ public class SurveyActivity extends AppCompatActivity private String latestVersion; private boolean force = false; AlertDialog.Builder alertDialogBuilder; + private CustomFirebaseAnalytics analyticsInstance; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_survey); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); initializeXmlId(); bindEvents(); // default settings @@ -204,6 +204,12 @@ public void onDrawerSlide(View drawerView, float slideOffset) { @Override public void onDrawerOpened(View drawerView) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.survey_side_menu)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); checkSignOrSignOutScenario(); } @@ -283,6 +289,12 @@ private void initializeXmlId() { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.survey_side_menu)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); openDrawer(); } }); @@ -294,6 +306,12 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.survey_side_home)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); menulayout.setVisibility(View.VISIBLE); toolbar.setVisibility(View.GONE); closeDrawer(); @@ -308,6 +326,12 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.survey_side_resources)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); menulayout.setVisibility(View.GONE); toolbar.setVisibility(View.VISIBLE); menutitle.setText(R.string.resources); @@ -331,6 +355,12 @@ public void onClick(View view) { closeDrawer(); if (previousValue != R.id.mSignInProfileLayout) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.survey_side_my_account)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); previousValue = R.id.mSignInProfileLayout; getSupportFragmentManager() .beginTransaction() @@ -345,6 +375,12 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.survey_side_reachout)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); menulayout.setVisibility(View.GONE); toolbar.setVisibility(View.VISIBLE); closeDrawer(); @@ -372,6 +408,12 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.survey_side_sign_out)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); closeDrawer(); previousValue = R.id.mSignOutLayout; logout(); @@ -401,7 +443,12 @@ private void logout() { getResources().getString(R.string.sign_out), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { - + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.survey_side_sign_out_ok)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); AppController.getHelperProgressDialog() .showProgress(SurveyActivity.this, "", "", false); @@ -444,6 +491,12 @@ SurveyActivity.this, getString(R.string.userid), "") getResources().getString(R.string.cancel), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.survey_side_sign_out_cancel)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); dialog.dismiss(); } }); @@ -469,14 +522,7 @@ private void closeDrawer() { } public void setVersion(TextView version) { - try { - PackageInfo info = - getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_META_DATA); - version.append("" + info.versionName); - } catch (PackageManager.NameNotFoundException e) { - Logger.log(e); - version.setText(""); - } + version.append(BuildConfig.VERSION_NAME + " (" + BuildConfig.VERSION_CODE + ")"); } private void bindEvents() { @@ -516,44 +562,69 @@ private void openResources() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); switch (view.getId()) { case R.id.myDashboardButtonLayout: - dashboardButton.setBackgroundResource(R.drawable.dashboard_blue_active); - activitiesButton.setBackgroundResource(R.drawable.activities_grey); - resourcesButton.setBackgroundResource(R.drawable.resources_grey); - dashboardButtonLabel.setTextColor(getResources().getColor(R.color.colorPrimary)); - activitiesButtonLabel.setTextColor(getResources().getColor(R.color.colorPrimaryBlack)); - resourcesButtonLabel.setTextColor(getResources().getColor(R.color.colorPrimaryBlack)); - getSupportFragmentManager() - .beginTransaction() - .replace(R.id.frameLayoutContainer, surveyDashboardFragment, "fragment") - .commit(); + if (previousValue != R.id.myDashboardButtonLayout) { + previousValue = R.id.myDashboardButtonLayout; + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.dashboard_label)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); + dashboardButton.setBackgroundResource(R.drawable.dashboard_blue_active); + activitiesButton.setBackgroundResource(R.drawable.activities_grey); + resourcesButton.setBackgroundResource(R.drawable.resources_grey); + dashboardButtonLabel.setTextColor(getResources().getColor(R.color.colorPrimary)); + activitiesButtonLabel.setTextColor(getResources().getColor(R.color.colorPrimaryBlack)); + resourcesButtonLabel.setTextColor(getResources().getColor(R.color.colorPrimaryBlack)); + getSupportFragmentManager() + .beginTransaction() + .replace(R.id.frameLayoutContainer, surveyDashboardFragment, "fragment") + .commit(); + } break; case R.id.mActivitiesButtonLayout: - dashboardButton.setBackgroundResource(R.drawable.dashboard_grey); - activitiesButton.setBackgroundResource(R.drawable.activities_blue_active); - resourcesButton.setBackgroundResource(R.drawable.resources_grey); - dashboardButtonLabel.setTextColor(getResources().getColor(R.color.colorPrimaryBlack)); - activitiesButtonLabel.setTextColor(getResources().getColor(R.color.colorPrimary)); - resourcesButtonLabel.setTextColor(getResources().getColor(R.color.colorPrimaryBlack)); - getSupportFragmentManager() - .beginTransaction() - .replace(R.id.frameLayoutContainer, surveyActivitiesFragment, "fragment") - .commit(); + if (previousValue != R.id.mActivitiesButtonLayout) { + previousValue = R.id.mActivitiesButtonLayout; + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.activities_label)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); + dashboardButton.setBackgroundResource(R.drawable.dashboard_grey); + activitiesButton.setBackgroundResource(R.drawable.activities_blue_active); + resourcesButton.setBackgroundResource(R.drawable.resources_grey); + dashboardButtonLabel.setTextColor(getResources().getColor(R.color.colorPrimaryBlack)); + activitiesButtonLabel.setTextColor(getResources().getColor(R.color.colorPrimary)); + resourcesButtonLabel.setTextColor(getResources().getColor(R.color.colorPrimaryBlack)); + getSupportFragmentManager() + .beginTransaction() + .replace(R.id.frameLayoutContainer, surveyActivitiesFragment, "fragment") + .commit(); + } break; case R.id.mResourcesButtonLayout: - dashboardButton.setBackgroundResource(R.drawable.dashboard_grey); - activitiesButton.setBackgroundResource(R.drawable.activities_grey); - resourcesButton.setBackgroundResource(R.drawable.resources_blue_active); - dashboardButtonLabel.setTextColor(getResources().getColor(R.color.colorPrimaryBlack)); - activitiesButtonLabel.setTextColor(getResources().getColor(R.color.colorPrimaryBlack)); - resourcesButtonLabel.setTextColor(getResources().getColor(R.color.colorPrimary)); - getSupportFragmentManager() - .beginTransaction() - .replace(R.id.frameLayoutContainer, surveyResourcesFragment, "fragment") - .commit(); + if (previousValue != R.id.mResourcesButtonLayout) { + previousValue = R.id.mResourcesButtonLayout; + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.resources_label)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); + dashboardButton.setBackgroundResource(R.drawable.dashboard_grey); + activitiesButton.setBackgroundResource(R.drawable.activities_grey); + resourcesButton.setBackgroundResource(R.drawable.resources_blue_active); + dashboardButtonLabel.setTextColor(getResources().getColor(R.color.colorPrimaryBlack)); + activitiesButtonLabel.setTextColor(getResources().getColor(R.color.colorPrimaryBlack)); + resourcesButtonLabel.setTextColor(getResources().getColor(R.color.colorPrimary)); + getSupportFragmentManager() + .beginTransaction() + .replace(R.id.frameLayoutContainer, surveyResourcesFragment, "fragment") + .commit(); + } break; } } @@ -638,8 +709,7 @@ public void asyncResponse(T response, int responseCode) { if (responseCode == LOGOUT_REPSONSECODE) { Toast.makeText(this, getResources().getString(R.string.signed_out), Toast.LENGTH_SHORT) .show(); - SharedPreferences settings = SharedPreferenceHelper.getPreferences(SurveyActivity.this); - settings.edit().clear().apply(); + SharedPreferenceHelper.deletePreferences(this); // delete passcode from keystore String pass = AppController.refreshKeys("passcode"); if (pass != null) { @@ -786,6 +856,12 @@ public void isUpgrade(boolean b, String latestVersion, final boolean force) { positiveButton, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.app_upgrade_ok)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); startActivityForResult( new Intent(Intent.ACTION_VIEW, Uri.parse(VersionChecker.PLAY_STORE_URL)), RESULT_CODE_UPGRADE); @@ -796,6 +872,12 @@ public void onClick(DialogInterface dialog, int id) { new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.app_upgrade_cancel)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); dialog.dismiss(); if (force) { Toast.makeText( @@ -851,10 +933,16 @@ protected void onActivityResult(int requestCode, int resultCode, @Nullable Inten "ok", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.app_update_next_time_ok)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); dialog.dismiss(); } - }).show(); - + }) + .show(); } } } diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/SurveyCompleteActivity.java b/Android/app/src/main/java/com/harvard/studyappmodule/SurveyCompleteActivity.java index c186302c55..2345a10a4f 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/SurveyCompleteActivity.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/SurveyCompleteActivity.java @@ -17,7 +17,7 @@ import android.content.Intent; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatActivity; import android.view.View; import android.widget.TextView; import android.widget.Toast; @@ -42,6 +42,7 @@ import com.harvard.usermodule.webservicemodel.Studies; import com.harvard.usermodule.webservicemodel.StudyData; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import com.harvard.utils.SharedPreferenceHelper; import com.harvard.utils.Urls; @@ -50,6 +51,10 @@ import com.harvard.webservicemodule.events.ResponseDatastoreConfigEvent; import io.realm.Realm; import io.realm.RealmResults; + +import java.text.DateFormat; +import java.util.Calendar; +import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -72,12 +77,14 @@ public class SurveyCompleteActivity extends AppCompatActivity private DbServiceSubscriber dbServiceSubscriber; private double completion = 0; private double adherence = 0; + private CustomFirebaseAnalytics analyticsInstance; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_survey_complete); dbServiceSubscriber = new DbServiceSubscriber(); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); realm = AppController.getRealmobj(this); initializeXmlId(); setFont(); @@ -85,6 +92,12 @@ protected void onCreate(Bundle savedInstanceState) { new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.survey_complete_done)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); next.setClickable(false); next.setEnabled(false); updateProcessResponse(); @@ -165,7 +178,9 @@ this, getResources().getString(R.string.unable_to_submit_result), Toast.LENGTH_S private JSONObject getResponseDataJson( ActivityObj activityObj, Activities activities, Studies studies) { + JSONObject responseJson = new JSONObject(); JSONObject processResponsejson = new JSONObject(); + JSONObject activityState = new JSONObject(); try { processResponsejson.put("type", activityObj.getType()); processResponsejson.put("participantId", studies.getParticipantId()); @@ -184,6 +199,18 @@ private JSONObject getResponseDataJson( processResponsejson.put("metadata", infoJson); processResponsejson.put( "data", generateresult(activityObj, getIntent().getStringExtra(EXTRA_STUDYID))); + + responseJson.put("activityResponse", processResponsejson); + + int completedRun = getIntent().getIntExtra(CustomSurveyViewTaskActivity.COMPLETED_RUN, 0); + completedRun = completedRun + 1; + int currentRun = getIntent().getIntExtra(CustomSurveyViewTaskActivity.RUNID, 0); + int missedRun = currentRun - completedRun; + JSONObject activityRun = new JSONObject(); + activityRun.put("total", getIntent().getIntExtra(CustomSurveyViewTaskActivity.TOTAL_RUN, 0)); + activityRun.put("completed", completedRun); + activityRun.put("missed", missedRun); + processResponsejson.put("activityRun", activityRun); } catch (JSONException e) { Logger.log(e); } @@ -198,6 +225,7 @@ private JSONObject generateresult(ActivityObj activityObj, String stringExtra) { dataobj.put("startTime", activityObj.getMetadata().getStartDate()); dataobj.put("endTime", activityObj.getMetadata().getEndDate()); dataobj.put("resultType", activityObj.getType()); + dataobj.put("submittedTime", AppController.getDateFormatForApi().format(Calendar.getInstance().getTime())); JSONArray resultarray = new JSONArray(); JsonParser jsonParser = new JsonParser(); @@ -560,43 +588,6 @@ private void setFont() { } } - public void updateUserPreference() { - HashMap header = new HashMap(); - Realm realm = AppController.getRealmobj(SurveyCompleteActivity.this); - Studies studies = - dbServiceSubscriber.getStudies( - getIntent().getStringExtra(CustomSurveyViewTaskActivity.STUDYID), realm); - header.put( - "Authorization", - "Bearer " - + AppController.getHelperSharedPreference() - .readPreference(this, getResources().getString(R.string.auth), "")); - header.put( - "userId", - AppController.getHelperSharedPreference() - .readPreference(this, getResources().getString(R.string.userid), "")); - header.put("participantId", studies.getParticipantId()); - - ResponseDatastoreConfigEvent responseDatastoreConfigEvent = - new ResponseDatastoreConfigEvent( - "post_object", - Urls.UPDATE_ACTIVITY_PREFERENCE, - UPDATE_USERPREFERENCE_RESPONSECODE, - this, - LoginData.class, - null, - header, - getActivityPreferenceJson(), - false, - this); - - dbServiceSubscriber.closeRealmObj(realm); - ActivityStateEvent activityStateEvent = new ActivityStateEvent(); - activityStateEvent.setResponseDatastoreConfigEvent(responseDatastoreConfigEvent); - UserModulePresenter userModulePresenter = new UserModulePresenter(); - userModulePresenter.performActivityState(activityStateEvent); - } - private JSONObject getActivityPreferenceJson() { String surveyId = getIntent().getStringExtra(CustomSurveyViewTaskActivity.EXTRA_STUDYID); surveyId = surveyId.substring(0, surveyId.lastIndexOf("_")); @@ -657,46 +648,7 @@ public void onBackPressed() { @Override public void asyncResponse(T response, int responseCode) { - if (responseCode == UPDATE_USERPREFERENCE_RESPONSECODE) { - LoginData loginData = (LoginData) response; - if (loginData != null) { - - // calculate completion and adherence - int completed = - Integer.parseInt( - AppController.getHelperSharedPreference() - .readPreference( - SurveyCompleteActivity.this, - getResources().getString(R.string.completedRuns), - "")); - int missed = - Integer.parseInt( - AppController.getHelperSharedPreference() - .readPreference( - SurveyCompleteActivity.this, - getResources().getString(R.string.missedRuns), - "")); - int total = - Integer.parseInt( - AppController.getHelperSharedPreference() - .readPreference( - SurveyCompleteActivity.this, - getResources().getString(R.string.totalRuns), - "")); - - if ((double) total > 0) { - completion = (((double) completed + (double) missed + 1d) / (double) total) * 100d; - } - if (((double) completed + (double) missed + 1d) > 0) { - adherence = - (((double) completed + 1d) / ((double) completed + (double) missed + 1d)) * 100d; - } - updateStudyState("" + (int) completion, "" + (int) adherence); - } else { - AppController.getHelperProgressDialog().dismissDialog(); - Toast.makeText(this, R.string.unable_to_parse, Toast.LENGTH_SHORT).show(); - } - } else if (responseCode == UPDATE_STUDY_PREFERENCE) { + if (responseCode == UPDATE_STUDY_PREFERENCE) { AppController.getHelperProgressDialog().dismissDialog(); String surveyId = getIntent().getStringExtra(CustomSurveyViewTaskActivity.EXTRA_STUDYID); surveyId = surveyId.substring(0, surveyId.lastIndexOf("_")); @@ -742,7 +694,37 @@ public void asyncResponse(T response, int responseCode) { } else if (responseCode == PROCESS_RESPONSE_RESPONSECODE) { LoginData loginData = (LoginData) response; if (loginData != null) { - updateUserPreference(); + // calculate completion and adherence + int completed = + Integer.parseInt( + AppController.getHelperSharedPreference() + .readPreference( + SurveyCompleteActivity.this, + getResources().getString(R.string.completedRuns), + "")); + int missed = + Integer.parseInt( + AppController.getHelperSharedPreference() + .readPreference( + SurveyCompleteActivity.this, + getResources().getString(R.string.missedRuns), + "")); + int total = + Integer.parseInt( + AppController.getHelperSharedPreference() + .readPreference( + SurveyCompleteActivity.this, + getResources().getString(R.string.totalRuns), + "")); + + if ((double) total > 0) { + completion = (((double) completed + (double) missed + 1d) / (double) total) * 100d; + } + if (((double) completed + (double) missed + 1d) > 0) { + adherence = + (((double) completed + 1d) / ((double) completed + (double) missed + 1d)) * 100d; + } + updateStudyState("" + (int) completion, "" + (int) adherence); } else { AppController.getHelperProgressDialog().dismissDialog(); } @@ -807,30 +789,6 @@ public void asyncResponseFailure(int responseCode, String errormsg, String statu // offline data storing for response server finish - // offline data storing activity preference - try { - int number = dbServiceSubscriber.getUniqueID(realm); - if (number == 0) { - number = 1; - } else { - number += 1; - } - AppController.pendingService( - this, - number, - "post_object", - Urls.UPDATE_ACTIVITY_PREFERENCE, - "", - getActivityPreferenceJson().toString(), - "ResponseDatastore", - "", - "", - ""); - } catch (Exception e) { - Logger.log(e); - } - // offline data storing activity preference finish - // offline data storing study preference try { int number = dbServiceSubscriber.getUniqueID(realm); @@ -913,33 +871,6 @@ public void asyncResponseFailure(int responseCode, String errormsg, String statu setResult(RESULT_OK, intent); finish(); } else { - - // offline data storing activity preference - try { - if (responseCode == UPDATE_USERPREFERENCE_RESPONSECODE) { - int number = dbServiceSubscriber.getUniqueID(realm); - if (number == 0) { - number = 1; - } else { - number += 1; - } - AppController.pendingService( - this, - number, - "post_object", - Urls.UPDATE_ACTIVITY_PREFERENCE, - "", - getActivityPreferenceJson().toString(), - "ResponseDatastore", - "", - "", - ""); - } - } catch (Exception e) { - Logger.log(e); - } - // offline data storing activity preference finish - // offline data storing study preference try { int number = dbServiceSubscriber.getUniqueID(realm); diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/SurveyDashboardFragment.java b/Android/app/src/main/java/com/harvard/studyappmodule/SurveyDashboardFragment.java index a5b52a84b6..19ede6decb 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/SurveyDashboardFragment.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/SurveyDashboardFragment.java @@ -33,12 +33,6 @@ import android.os.Build.VERSION_CODES; import android.os.Bundle; import android.os.Environment; -import android.support.annotation.NonNull; -import android.support.v4.app.ActivityCompat; -import android.support.v4.app.Fragment; -import android.support.v4.content.FileProvider; -import android.support.v7.widget.AppCompatImageView; -import android.support.v7.widget.AppCompatTextView; import android.text.Spannable; import android.text.SpannableString; import android.text.style.ForegroundColorSpan; @@ -51,6 +45,12 @@ import android.widget.RelativeLayout; import android.widget.ScrollView; import android.widget.Toast; +import androidx.annotation.NonNull; +import androidx.appcompat.widget.AppCompatImageView; +import androidx.appcompat.widget.AppCompatTextView; +import androidx.core.app.ActivityCompat; +import androidx.core.content.FileProvider; +import androidx.fragment.app.Fragment; import com.google.gson.Gson; import com.google.gson.JsonSyntaxException; import com.google.gson.reflect.TypeToken; @@ -69,6 +69,7 @@ import com.harvard.studyappmodule.surveyscheduler.model.CompletionAdherence; import com.harvard.usermodule.webservicemodel.Studies; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import com.harvard.utils.SharedPreferenceHelper; import com.harvard.utils.Urls; @@ -154,6 +155,7 @@ public class SurveyDashboardFragment extends Fragment implements ApiCall.OnAsync private Studies studies; private ArrayList arrayList; private ArrayList arrayListDup; + private CustomFirebaseAnalytics analyticsInstance; // NOTE: Regarding Day, Week and Month functionality // currently day functionality next, previous are working @@ -178,6 +180,7 @@ public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment view = inflater.inflate(R.layout.fragment_survey_dashboard, container, false); + analyticsInstance = CustomFirebaseAnalytics.getInstance(context); dbServiceSubscriber = new DbServiceSubscriber(); realm = AppController.getRealmobj(context); initializeXmlId(view); @@ -401,6 +404,12 @@ private void bindEvents() { @Override public void onClick(View v) { if (AppConfig.AppType.equalsIgnoreCase(getString(R.string.app_gateway))) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.survey_dashbord_home)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); Intent intent = new Intent(context, StudyActivity.class); ComponentName cn = intent.getComponent(); Intent mainIntent = Intent.makeRestartActivityTask(cn); @@ -416,6 +425,12 @@ public void onClick(View v) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.survey_dashbord_share)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); screenshotWritingPermission(view); } }); @@ -424,6 +439,12 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.survey_dashbord_day)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if (!dateType.equalsIgnoreCase(DAY)) { nextDateLayout.setVisibility(View.INVISIBLE); setDay(); @@ -436,6 +457,12 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.survey_dashbord_week)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if (!dateType.equalsIgnoreCase(WEEK)) { nextDateLayout.setVisibility(View.INVISIBLE); setWeek(); @@ -447,6 +474,12 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.survey_dashbord_month)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); try { if (!dateType.equalsIgnoreCase(MONTH)) { nextDateLayout.setVisibility(View.INVISIBLE); @@ -462,6 +495,12 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.survey_dashbord_change_date_left)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); nextDateLayout.setVisibility(View.VISIBLE); if (dateType.equalsIgnoreCase(DAY)) { try { @@ -534,7 +573,12 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { - + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.survey_dashbord_change_date_right)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if (dateType.equalsIgnoreCase(DAY)) { try { SimpleDateFormat simpleDateFormat = @@ -637,6 +681,11 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, getString(R.string.trends)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if (dashboardData != null && dashboardData.getDashboard().getCharts().size() > 0) { Intent intent = new Intent(context, ChartActivity.class); intent.putExtra("studyId", ((SurveyActivity) context).getStudyId()); @@ -1095,12 +1144,14 @@ protected void onPostExecute(String result) { new ResponseInfoActiveTaskModel(); if (!arrayListDup.contains( dashboardData - .getDashboard() - .getStatistics() - .get(i) - .getDataSource() - .getActivity() - .getActivityId())) { + .getDashboard() + .getStatistics() + .get(i) + .getDataSource() + .getActivity() + .getActivityId() + + "," + + dashboardData.getDashboard().getStatistics().get(i).getDataSource().getKey())) { responseInfoActiveTaskModel.setActivityId( dashboardData .getDashboard() @@ -1122,12 +1173,14 @@ protected void onPostExecute(String result) { arrayList.add(responseInfoActiveTaskModel); arrayListDup.add( dashboardData - .getDashboard() - .getStatistics() - .get(i) - .getDataSource() - .getActivity() - .getActivityId()); + .getDashboard() + .getStatistics() + .get(i) + .getDataSource() + .getActivity() + .getActivityId() + + "," + + dashboardData.getDashboard().getStatistics().get(i).getDataSource().getKey()); } } for (int i = 0; i < dashboardData.getDashboard().getCharts().size(); i++) { @@ -1135,12 +1188,14 @@ protected void onPostExecute(String result) { new ResponseInfoActiveTaskModel(); if (!arrayListDup.contains( dashboardData - .getDashboard() - .getCharts() - .get(i) - .getDataSource() - .getActivity() - .getActivityId())) { + .getDashboard() + .getCharts() + .get(i) + .getDataSource() + .getActivity() + .getActivityId() + + "," + + dashboardData.getDashboard().getCharts().get(i).getDataSource().getKey())) { responseInfoActiveTaskModel.setActivityId( dashboardData .getDashboard() @@ -1162,12 +1217,14 @@ protected void onPostExecute(String result) { arrayList.add(responseInfoActiveTaskModel); arrayListDup.add( dashboardData - .getDashboard() - .getCharts() - .get(i) - .getDataSource() - .getActivity() - .getActivityId()); + .getDashboard() + .getCharts() + .get(i) + .getDataSource() + .getActivity() + .getActivityId() + + "," + + dashboardData.getDashboard().getCharts().get(i).getDataSource().getKey()); } } } @@ -1181,6 +1238,7 @@ protected void onPostExecute(String result) { 0) .execute(); } else { + AppController.getHelperProgressDialog().dismissDialog(); addViewStatisticsValues(); } } @@ -1447,22 +1505,24 @@ protected void onPostExecute(String response) { JSONObject jsonObject1 = new JSONObject(String.valueOf(jsonArray.get(i))); JSONArray jsonArray1 = (JSONArray) jsonObject1.get("data"); int duration = 0; + Date completedDate = null; for (int j = 0; j < jsonArray1.length(); j++) { JSONObject jsonObjectData = (JSONObject) jsonArray1.get(j); Type type = new TypeToken>() {}.getType(); Map map = gson.fromJson(String.valueOf(jsonObjectData), type); StepRecordCustom stepRecordCustom = new StepRecordCustom(); - Date completedDate = new Date(); - try { - Object completedDateValMap = gson.toJson(map.get("Created")); - Map completedDateVal = - gson.fromJson(String.valueOf(completedDateValMap), type); - if (completedDateVal != null) { - completedDate = - simpleDateFormat.parse(String.valueOf(completedDateVal.get("value"))); + if (completedDate == null) { + try { + Object completedDateValMap = gson.toJson(map.get("Created")); + Map completedDateVal = + gson.fromJson(String.valueOf(completedDateValMap), type); + if (completedDateVal != null) { + completedDate = + simpleDateFormat.parse(String.valueOf(completedDateVal.get("value"))); + } + } catch (JsonSyntaxException | ParseException e) { + Logger.log(e); } - } catch (JsonSyntaxException | ParseException e) { - Logger.log(e); } try { @@ -1475,6 +1535,7 @@ protected void onPostExecute(String response) { } catch (Exception e) { Logger.log(e); } + for (Map.Entry entry : map.entrySet()) { String key = entry.getKey(); String valueobj = gson.toJson(entry.getValue()); @@ -1507,59 +1568,98 @@ protected void onPostExecute(String response) { + runId + "_" + stepKey); - } else { - stepRecordCustom.setStepId(key); - stepRecordCustom.setTaskStepID( + stepRecordCustom.setStudyId(studyId); + stepRecordCustom.setActivityID( + studyId + "_STUDYID_" + responseInfoActiveTaskModel.getActivityId()); + stepRecordCustom.setTaskId( studyId + "_STUDYID_" + responseInfoActiveTaskModel.getActivityId() + "_" - + runId - + "_" - + key); - } - stepRecordCustom.setStudyId(studyId); - stepRecordCustom.setActivityID( - studyId + "_STUDYID_" + responseInfoActiveTaskModel.getActivityId()); - stepRecordCustom.setTaskId( - studyId - + "_STUDYID_" - + responseInfoActiveTaskModel.getActivityId() - + "_" - + runId); - - stepRecordCustom.setCompleted(completedDate); - stepRecordCustom.setStarted(completedDate); - - try { - Date anchordate = AppController.getLabkeyDateFormat().parse("" + value); - value = AppController.getDateFormatForApi().format(anchordate); - } catch (ParseException e) { - Logger.log(e); + + runId); + + stepRecordCustom.setCompleted(completedDate); + stepRecordCustom.setStarted(completedDate); + + JSONObject jsonObject2 = new JSONObject(); + ActivitiesWS activityObj = + dbServiceSubscriber.getActivityObj( + responseInfoActiveTaskModel.getActivityId(), studyId, realm); + if (activityObj.getType().equalsIgnoreCase("task")) { + JSONObject jsonObject3 = new JSONObject(); + jsonObject3.put("value", value); + jsonObject3.put("duration", duration); + + jsonObject2.put("answer", jsonObject3); + } else { + jsonObject2.put("answer", value); + } + + stepRecordCustom.setResult(String.valueOf(jsonObject2)); + Number currentIdNum = dbServiceSubscriber.getStepRecordCustomId(realm); + if (currentIdNum == null) { + stepRecordCustom.setId(1); + } else { + stepRecordCustom.setId(currentIdNum.intValue() + 1); + } + dbServiceSubscriber.updateStepRecord(context, stepRecordCustom); + } else { + if (key.equalsIgnoreCase(stepKey)) { + stepRecordCustom.setStepId(key); + stepRecordCustom.setTaskStepID( + studyId + + "_STUDYID_" + + responseInfoActiveTaskModel.getActivityId() + + "_" + + runId + + "_" + + key); + + stepRecordCustom.setStudyId(studyId); + stepRecordCustom.setActivityID( + studyId + "_STUDYID_" + responseInfoActiveTaskModel.getActivityId()); + stepRecordCustom.setTaskId( + studyId + + "_STUDYID_" + + responseInfoActiveTaskModel.getActivityId() + + "_" + + runId); + + stepRecordCustom.setCompleted(completedDate); + stepRecordCustom.setStarted(completedDate); + + try { + Date anchordate = AppController.getLabkeyDateFormat().parse("" + value); + value = AppController.getDateFormatForApi().format(anchordate); + } catch (ParseException e) { + Logger.log(e); + } + + JSONObject jsonObject2 = new JSONObject(); + ActivitiesWS activityObj = + dbServiceSubscriber.getActivityObj( + responseInfoActiveTaskModel.getActivityId(), studyId, realm); + if (activityObj.getType().equalsIgnoreCase("task")) { + JSONObject jsonObject3 = new JSONObject(); + jsonObject3.put("value", value); + jsonObject3.put("duration", duration); + + jsonObject2.put("answer", jsonObject3); + } else { + jsonObject2.put("answer", value); + } + + stepRecordCustom.setResult(String.valueOf(jsonObject2)); + Number currentIdNum = dbServiceSubscriber.getStepRecordCustomId(realm); + if (currentIdNum == null) { + stepRecordCustom.setId(1); + } else { + stepRecordCustom.setId(currentIdNum.intValue() + 1); + } + dbServiceSubscriber.updateStepRecord(context, stepRecordCustom); + } } } - JSONObject jsonObject2 = new JSONObject(); - ActivitiesWS activityObj = - dbServiceSubscriber.getActivityObj( - responseInfoActiveTaskModel.getActivityId(), studyId, realm); - if (activityObj.getType().equalsIgnoreCase("task")) { - JSONObject jsonObject3 = new JSONObject(); - jsonObject3.put("value", value); - jsonObject3.put("duration", duration); - - jsonObject2.put("answer", jsonObject3); - } else { - jsonObject2.put("answer", value); - } - - stepRecordCustom.setResult(String.valueOf(jsonObject2)); - Number currentIdNum = dbServiceSubscriber.getStepRecordCustomId(realm); - if (currentIdNum == null) { - stepRecordCustom.setId(1); - } else { - stepRecordCustom.setId(currentIdNum.intValue() + 1); - } - dbServiceSubscriber.updateStepRecord(context, stepRecordCustom); } } } diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/SurveyResourcesFragment.java b/Android/app/src/main/java/com/harvard/studyappmodule/SurveyResourcesFragment.java index b86b7bf346..fecde97eb1 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/SurveyResourcesFragment.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/SurveyResourcesFragment.java @@ -21,15 +21,15 @@ import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v7.widget.AppCompatImageView; -import android.support.v7.widget.AppCompatTextView; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.RelativeLayout; +import androidx.appcompat.widget.AppCompatImageView; +import androidx.appcompat.widget.AppCompatTextView; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import android.widget.Toast; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; @@ -53,6 +53,7 @@ import com.harvard.usermodule.webservicemodel.LoginData; import com.harvard.usermodule.webservicemodel.Studies; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import com.harvard.utils.SharedPreferenceHelper; import com.harvard.utils.Urls; @@ -96,6 +97,7 @@ public class SurveyResourcesFragment extends Fragment implements ApiCall.OnAs private static String RESOURCES = "resources"; private Realm realm; private ArrayList arrayList; + private CustomFirebaseAnalytics analyticsInstance; @Override public void onAttach(Context context) { @@ -108,6 +110,7 @@ public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_survey_resources, container, false); + analyticsInstance = CustomFirebaseAnalytics.getInstance(context); dbServiceSubscriber = new DbServiceSubscriber(); realm = AppController.getRealmobj(context); initializeXmlId(view); @@ -175,6 +178,12 @@ private void initializeXmlId(View view) { @Override public void onClick(View view) { if (AppConfig.AppType.equalsIgnoreCase(getString(R.string.app_gateway))) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.survey_resource_home)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); Intent intent = new Intent(context, StudyActivity.class); ComponentName cn = intent.getComponent(); Intent mainIntent = Intent.makeRestartActivityTask(cn); diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/activitybuilder/CustomSurveyViewTaskActivity.java b/Android/app/src/main/java/com/harvard/studyappmodule/activitybuilder/CustomSurveyViewTaskActivity.java index af3f386059..e831811986 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/activitybuilder/CustomSurveyViewTaskActivity.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/activitybuilder/CustomSurveyViewTaskActivity.java @@ -24,11 +24,11 @@ import android.content.Intent; import android.graphics.Color; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v7.app.ActionBar; -import android.support.v7.app.AlertDialog; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.Toolbar; +import androidx.annotation.NonNull; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; import android.text.SpannableString; import android.text.style.ForegroundColorSpan; import android.view.Menu; @@ -54,6 +54,7 @@ import com.harvard.studyappmodule.studymodel.StudyHome; import com.harvard.utils.ActiveTaskService; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import io.realm.Realm; import io.realm.RealmList; @@ -90,6 +91,7 @@ public class CustomSurveyViewTaskActivity extends AppCompatActivity implement private static final String RUN_START_DATE = "ViewTaskActivity.RunStartDate"; private static final String RUN_END_DATE = "ViewTaskActivity.RunEndDate"; private static final String BRANCHING = "ViewTaskActivity.branching"; + private CustomFirebaseAnalytics analyticsInstance; private StepSwitcherCustom root; @@ -144,6 +146,7 @@ public static Intent newIntent( @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); super.setResult(RESULT_CANCELED); super.setContentView(R.layout.stepswitchercustom); Toolbar toolbar = (Toolbar) findViewById(org.researchstack.backbone.R.id.toolbar); @@ -224,6 +227,11 @@ protected Step getCurrentStep() { } protected void showNextStep() { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.custom_survey_task_next)); + analyticsInstance.logEvent(CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); savestepresult(currentStep, true); Step nextStep = task.getStepAfterStep(currentStep, taskResult); if (nextStep == null) { @@ -428,6 +436,11 @@ private void setRemainder( } protected void showPreviousStep() { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.custom_survey_task_back)); + analyticsInstance.logEvent(CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); Step previousStep = task.getStepBeforeStep(currentStep, taskResult); if (previousStep == null) { finish(); @@ -520,6 +533,11 @@ public boolean onOptionsItemSelected(MenuItem item) { return true; } else if (item.getItemId() == R.id.action_settings) { showConfirmExitDialog(); + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.custom_survey_task_exit)); + analyticsInstance.logEvent(CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); return true; } @@ -633,10 +651,28 @@ private void showConfirmExitDialog() { new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.custom_survey_task_end_task)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); finish(); } }) - .setNegativeButton(R.string.cancel, null) + .setNegativeButton( + R.string.cancel, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.custom_survey_task_cancel)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); + } + }) .create(); alertDialog.show(); } diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/consent/ConsentDocumentStepLayoutCustom.java b/Android/app/src/main/java/com/harvard/studyappmodule/consent/ConsentDocumentStepLayoutCustom.java index 04e591c294..0fec1e1331 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/consent/ConsentDocumentStepLayoutCustom.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/consent/ConsentDocumentStepLayoutCustom.java @@ -11,6 +11,7 @@ import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; +import android.os.Bundle; import android.util.AttributeSet; import android.util.Base64; import android.view.LayoutInflater; @@ -18,6 +19,7 @@ import android.webkit.WebView; import android.widget.LinearLayout; import com.harvard.R; +import com.harvard.utils.CustomFirebaseAnalytics; import org.researchstack.backbone.result.StepResult; import org.researchstack.backbone.step.ConsentDocumentStep; import org.researchstack.backbone.step.Step; @@ -34,6 +36,7 @@ public class ConsentDocumentStepLayoutCustom extends LinearLayout implements Ste private ConsentDocumentStep step; private StepResult stepResult; + private CustomFirebaseAnalytics analyticsInstance; public ConsentDocumentStepLayoutCustom(Context context) { super(context); @@ -51,6 +54,7 @@ public ConsentDocumentStepLayoutCustom(Context context, AttributeSet attrs, int public void initialize(Step step, StepResult result) { this.step = (ConsentDocumentStep) step; this.confirmationDialogBody = ((ConsentDocumentStep) step).getConfirmMessage(); + this.analyticsInstance = CustomFirebaseAnalytics.getInstance(getContext()); this.htmlContent = ((ConsentDocumentStep) step).getConsentHTML(); this.stepResult = result; @@ -86,41 +90,70 @@ private void initializeStep() { String htmlBase64 = Base64.encodeToString(htmlContent.getBytes(), Base64.NO_WRAP); pdfView.loadData(htmlBase64, "text/html", "base64"); - SubmitBar submitBar = (SubmitBar) findViewById(R.id.submit_bar); - submitBar.setPositiveAction(new Action1() { - @Override - public void call(Object v) { - ConsentDocumentStepLayoutCustom.this.showDialog(); - } - }); - submitBar.setNegativeAction(new Action1() { - @Override - public void call(Object v) { - callbacks.onCancelStep(); - } - }); + final SubmitBar submitBar = (SubmitBar) findViewById(R.id.submit_bar); + submitBar.setPositiveAction( + new Action1() { + @Override + public void call(Object v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getContext().getString(R.string.consent_review_agree_text)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); + submitBar.getPositiveActionView().setEnabled(false); + ConsentDocumentStepLayoutCustom.this.showDialog(submitBar); + } + }); + submitBar.setNegativeAction( + new Action1() { + @Override + public void call(Object v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getContext().getString(R.string.consent_review_disagree_text)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); + callbacks.onCancelStep(); + } + }); } - private void showDialog() { + private void showDialog(final SubmitBar submitBar) { new AlertDialog.Builder(getContext()) - .setTitle(R.string.rsb_consent_review_alert_title) - .setMessage(confirmationDialogBody) - .setCancelable(false) - .setPositiveButton( - R.string.rsb_agree, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - stepResult.setResult(true); - callbacks.onSaveStep(StepCallbacks.ACTION_NEXT, step, stepResult); - } - }) - .setNegativeButton( - R.string.rsb_consent_review_cancel, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - // Gives them a chance to read it again - } - }) - .show(); + .setTitle(R.string.rsb_consent_review_alert_title) + .setMessage(confirmationDialogBody) + .setCancelable(false) + .setPositiveButton( + R.string.rsb_agree, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getContext().getString(R.string.consent_agree_agree)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); + stepResult.setResult(true); + callbacks.onSaveStep(StepCallbacks.ACTION_NEXT, step, stepResult); + } + }) + .setNegativeButton( + R.string.rsb_consent_review_cancel, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // Gives them a chance to read it again + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getContext().getString(R.string.consent_agree_cancel)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); + } + }) + .show(); } } \ No newline at end of file diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/consent/CustomConsentViewTaskActivity.java b/Android/app/src/main/java/com/harvard/studyappmodule/consent/CustomConsentViewTaskActivity.java index b32830fde6..49edcb7676 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/consent/CustomConsentViewTaskActivity.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/consent/CustomConsentViewTaskActivity.java @@ -18,24 +18,12 @@ import android.annotation.SuppressLint; import android.app.Activity; -import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.graphics.Color; -import android.os.AsyncTask; import android.os.Bundle; -import android.os.Environment; import android.os.Handler; -import android.print.PdfConverter; -import android.support.annotation.MainThread; -import android.support.annotation.NonNull; -import android.support.v7.app.ActionBar; -import android.support.v7.app.AlertDialog; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.Toolbar; import android.text.Html; import android.text.SpannableString; import android.text.style.ForegroundColorSpan; @@ -44,6 +32,11 @@ import android.view.MenuItem; import android.view.inputmethod.InputMethodManager; import android.widget.Toast; +import androidx.annotation.NonNull; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; import com.google.gson.Gson; import com.harvard.R; import com.harvard.eligibilitymodule.ComprehensionFailureActivity; @@ -69,6 +62,7 @@ import com.harvard.usermodule.webservicemodel.Studies; import com.harvard.usermodule.webservicemodel.StudyData; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import com.harvard.utils.SharedPreferenceHelper; import com.harvard.utils.Urls; @@ -76,25 +70,13 @@ import com.harvard.webservicemodule.events.ParticipantConsentDatastoreConfigEvent; import com.harvard.webservicemodule.events.ParticipantEnrollmentDatastoreConfigEvent; import com.harvard.webservicemodule.events.StudyDatastoreConfigEvent; -import com.tom_roush.pdfbox.pdmodel.PDDocument; -import com.tom_roush.pdfbox.pdmodel.PDPage; -import com.tom_roush.pdfbox.pdmodel.PDPageContentStream; -import com.tom_roush.pdfbox.pdmodel.graphics.image.LosslessFactory; -import com.tom_roush.pdfbox.pdmodel.graphics.image.PDImageXObject; import io.github.lucasfsc.html2pdf.Html2Pdf; import io.realm.Realm; import io.realm.RealmList; -import java.io.BufferedInputStream; import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; import java.lang.reflect.Constructor; -import java.net.HttpURLConnection; -import java.net.URL; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; @@ -123,6 +105,7 @@ public class CustomConsentViewTaskActivity extends AppCompatActivity private static final String PDFTITLE = "ViewTaskActivity.pdfTitle"; private static final String ELIGIBILITY = "ViewTaskActivity.eligibility"; public static final String TYPE = "ViewTaskActivity.type"; + private CustomFirebaseAnalytics analyticsInstance; private StepSwitcherCustom root; private static final String FILE_FOLDER = "FDA_PDF"; @@ -184,6 +167,7 @@ protected void onCreate(Bundle savedInstanceState) { super.setResult(RESULT_CANCELED); super.setContentView(R.layout.stepswitchercustom); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); Toolbar toolbar = (Toolbar) findViewById(org.researchstack.backbone.R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); @@ -264,6 +248,11 @@ protected void showNextStep() { if (nextStep == null) { saveAndFinish(); } else { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.custom_consent_view_next)); + analyticsInstance.logEvent(CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); String checkIdentifier; if (consent.getSharing().getTitle().equalsIgnoreCase("") && consent.getSharing().getText().equalsIgnoreCase("") @@ -389,6 +378,11 @@ public boolean onCreateOptionsMenu(Menu menu) { } protected void showPreviousStep() { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.custom_consent_view_back)); + analyticsInstance.logEvent(CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); previousStep = task.getStepBeforeStep(currentStep, taskResult); if (previousStep == null) { finish(); @@ -998,6 +992,11 @@ public boolean onOptionsItemSelected(MenuItem item) { notifyStepOfBackPress(); return true; } else if (item.getItemId() == R.id.action_settings) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.custom_consent_view_exit)); + analyticsInstance.logEvent(CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); finish(); return true; } @@ -1074,10 +1073,28 @@ private void showConfirmExitDialog() { new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.custom_consent_view_end_task)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); CustomConsentViewTaskActivity.this.finish(); } }) - .setNegativeButton(getResources().getString(R.string.cancel), null) + .setNegativeButton( + getResources().getString(R.string.cancel), + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.custom_consent_view_cancel)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); + } + }) .create(); alertDialog.show(); } @@ -1093,6 +1110,12 @@ public void onCancelStep() { new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.custom_consent_view_ok)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); setResult(12345); finish(); } @@ -1102,6 +1125,12 @@ public void onClick(DialogInterface dialog, int which) { new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.custom_consent_view_cancel)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); dialog.dismiss(); } }) diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/consent/consentsharingstepcustom/LoadMoreActivity.java b/Android/app/src/main/java/com/harvard/studyappmodule/consent/consentsharingstepcustom/LoadMoreActivity.java index 3f3f4078b2..04bf50b7f3 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/consent/consentsharingstepcustom/LoadMoreActivity.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/consent/consentsharingstepcustom/LoadMoreActivity.java @@ -18,18 +18,22 @@ import android.os.Build; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatActivity; import android.text.Html; import android.view.View; import android.webkit.WebView; import android.widget.ImageView; import com.harvard.R; +import com.harvard.utils.CustomFirebaseAnalytics; public class LoadMoreActivity extends AppCompatActivity { + private CustomFirebaseAnalytics analyticsInstance; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); setContentView(R.layout.activity_load_more); WebView textView = (WebView) findViewById(R.id.content); @@ -45,6 +49,12 @@ protected void onCreate(Bundle savedInstanceState) { new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.load_more_back)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); finish(); } }); diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/consent/consentsharingstepcustom/SingleChoiceSharingStepBody.java b/Android/app/src/main/java/com/harvard/studyappmodule/consent/consentsharingstepcustom/SingleChoiceSharingStepBody.java index b64a77780c..aa471002fa 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/consent/consentsharingstepcustom/SingleChoiceSharingStepBody.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/consent/consentsharingstepcustom/SingleChoiceSharingStepBody.java @@ -17,8 +17,9 @@ import android.content.Intent; import android.content.res.Resources; -import android.support.annotation.IdRes; -import android.support.v4.content.ContextCompat; +import android.os.Bundle; +import androidx.annotation.IdRes; +import androidx.core.content.ContextCompat; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; @@ -28,6 +29,7 @@ import android.widget.RadioGroup; import android.widget.TextView; import com.harvard.R; +import com.harvard.utils.CustomFirebaseAnalytics; import org.researchstack.backbone.answerformat.ChoiceAnswerFormat; import org.researchstack.backbone.model.Choice; import org.researchstack.backbone.result.StepResult; @@ -41,6 +43,7 @@ public class SingleChoiceSharingStepBody implements StepBody { private ChoiceAnswerFormat format; private Choice[] choices; private T currentSelected; + private CustomFirebaseAnalytics analyticsInstance; public SingleChoiceSharingStepBody(Step step, StepResult result) { this.step = (ConsentSharingStepCustom) step; @@ -69,6 +72,7 @@ public View getBodyView(int viewType, LayoutInflater inflater, ViewGroup parent) ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); layoutParams.leftMargin = res.getDimensionPixelSize(R.dimen.rsb_margin_left); layoutParams.rightMargin = res.getDimensionPixelSize(R.dimen.rsb_margin_right); + analyticsInstance = CustomFirebaseAnalytics.getInstance(inflater.getContext()); view.setLayoutParams(layoutParams); return view; @@ -104,6 +108,12 @@ private View initViewDefault(final LayoutInflater inflater, ViewGroup parent) { new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + inflater.getContext().getString(R.string.single_choice_load_more)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); Intent intent = new Intent(inflater.getContext(), LoadMoreActivity.class); intent.putExtra("htmlcontent", "" + step.getLoadmoretxt()); inflater.getContext().startActivity(intent); diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/custom/SurveyStepLayoutCustom.java b/Android/app/src/main/java/com/harvard/studyappmodule/custom/SurveyStepLayoutCustom.java index 0f43e45d14..8e9556fef7 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/custom/SurveyStepLayoutCustom.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/custom/SurveyStepLayoutCustom.java @@ -10,9 +10,10 @@ import android.content.Context; import android.content.Intent; +import android.os.Bundle; import android.os.Parcelable; -import android.support.annotation.NonNull; -import android.support.annotation.StringRes; +import androidx.annotation.NonNull; +import androidx.annotation.StringRes; import android.text.Html; import android.util.AttributeSet; import android.view.LayoutInflater; @@ -20,6 +21,10 @@ import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; + +import com.harvard.R; +import com.harvard.utils.CustomFirebaseAnalytics; + import java.lang.reflect.Constructor; import org.researchstack.backbone.ResourcePathManager; import org.researchstack.backbone.result.StepResult; @@ -41,6 +46,7 @@ public class SurveyStepLayoutCustom extends FixedSubmitBarLayoutCustom implement private StepCallbacks callbacks; private LinearLayout container; private StepBody stepBody; + private CustomFirebaseAnalytics analyticsInstance; public SurveyStepLayoutCustom(Context context) { super(context); @@ -72,6 +78,7 @@ public void initialize(Step step, StepResult result) { this.questionStep = (QuestionStep) step; this.stepResult = result; + analyticsInstance = CustomFirebaseAnalytics.getInstance(getContext()); initializeStep(); } @@ -203,6 +210,11 @@ protected void onNextClicked() { } public void onSkipClicked() { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getContext().getString(R.string.rsb_step_skip)); + analyticsInstance.logEvent(CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if (callbacks != null) { callbacks.onSaveStep(StepCallbacks.ACTION_NEXT, getStep(), stepBody.getStepResult(true)); } diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/custom/activetask/Tappingactivity.java b/Android/app/src/main/java/com/harvard/studyappmodule/custom/activetask/Tappingactivity.java index aa5b638028..1c478c7812 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/custom/activetask/Tappingactivity.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/custom/activetask/Tappingactivity.java @@ -21,7 +21,8 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; -import android.support.v7.app.AlertDialog; +import android.os.Bundle; +import androidx.appcompat.app.AlertDialog; import android.text.Editable; import android.text.TextWatcher; import android.view.LayoutInflater; @@ -37,6 +38,7 @@ import com.harvard.studyappmodule.activitybuilder.CustomSurveyViewTaskActivity; import com.harvard.studyappmodule.custom.QuestionStepCustom; import com.harvard.utils.ActiveTaskService; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import com.ikovac.timepickerwithseconds.MyTimePickerDialog; import com.ikovac.timepickerwithseconds.TimePicker; @@ -61,6 +63,7 @@ public class Tappingactivity implements StepBody { private int maxTime; private RelativeLayout timereditlayout; private int finalSecond; + private CustomFirebaseAnalytics analyticsInstance; public Tappingactivity(Step step, StepResult result) { this.step = (QuestionStepCustom) step; @@ -73,6 +76,7 @@ public View getBodyView(int viewType, final LayoutInflater inflater, ViewGroup p View view = inflater.inflate(R.layout.content_fetal_kick_counter, null); context = inflater.getContext(); tapButton = (ImageView) view.findViewById(R.id.tapbutton); + analyticsInstance = CustomFirebaseAnalytics.getInstance(inflater.getContext()); editButton = (ImageView) view.findViewById(R.id.editButton); final ImageView startTimer = (ImageView) view.findViewById(R.id.startTimer); timer = (TextView) view.findViewById(R.id.mTimer); @@ -114,7 +118,12 @@ public void afterTextChanged(Editable s) { new View.OnClickListener() { @Override public void onClick(View v) { - + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.start_timer)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); activateservice(maxTime); IntentFilter filter = new IntentFilter(); filter.addAction("com.harvard.ActiveTask"); @@ -136,6 +145,12 @@ public void onClick(View v) { new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.tap_time)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); final String[] duration = timer.getText().toString().split(":"); if (timeup) { new MyTimePickerDialog( @@ -189,6 +204,12 @@ public void onTimeSet(TimePicker view, int hourOfDay, int minute, int seconds) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.tap_btn)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); kickcounter.setFocusable(false); kickcounter.setFocusableInTouchMode(false); kickcounter.setFocusable(true); @@ -396,6 +417,12 @@ private void endAlert(String message) { context.getString(R.string.proceed), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.tap_proceed)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); ((CustomSurveyViewTaskActivity) context) .onSaveStep(StepCallbacks.ACTION_NEXT, step, getStepResult(false)); } @@ -404,6 +431,12 @@ public void onClick(DialogInterface dialog, int which) { context.getString(R.string.edit), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.tap_edit)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); dialog.dismiss(); } }); diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/ContinuousScaleQuestion.java b/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/ContinuousScaleQuestion.java index 806b2a5cfb..ac8a6b8976 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/ContinuousScaleQuestion.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/ContinuousScaleQuestion.java @@ -17,6 +17,7 @@ import android.content.res.Resources; import android.util.Base64; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -29,6 +30,10 @@ import com.harvard.studyappmodule.custom.QuestionStepCustom; import com.harvard.utils.Logger; import com.harvard.utils.VerticalSeekBar; +import com.jaygoo.widget.OnRangeChangedListener; +import com.jaygoo.widget.RangeSeekBar; +import com.jaygoo.widget.VerticalRangeSeekBar; + import java.text.NumberFormat; import org.researchstack.backbone.result.StepResult; import org.researchstack.backbone.step.Step; @@ -41,7 +46,7 @@ public class ContinuousScaleQuestion implements StepBody { private ContinousScaleAnswerFormat format; private TextView currentvalue; private Double currentSelected; - private SeekBar seekBar; + private RangeSeekBar seekBar; private int stepSection; private int min; private double value; @@ -99,15 +104,15 @@ private View initViewDefault(LayoutInflater inflater, ViewGroup parent) { if (!format.isVertical()) { seekbarlayout = inflater.inflate(R.layout.seekbar_horizontal_layout, parent, false); - seekBar = (SeekBar) seekbarlayout.findViewById(R.id.seekbar); + seekBar = (RangeSeekBar) seekbarlayout.findViewById(R.id.seekbar); } else { seekbarlayout = inflater.inflate(R.layout.seekbar_vertical_layout, parent, false); - seekBar = (VerticalSeekBar) seekbarlayout.findViewById(R.id.seekbar); + seekBar = (VerticalRangeSeekBar) seekbarlayout.findViewById(R.id.seekbar); } if (stepSection != 0) { - seekBar.setMax((max - min) * (stepSection * 10)); + seekBar.setRange(0, (max - min) * (stepSection * 10)); } else { - seekBar.setMax((max - min)); + seekBar.setRange(0, (max - min)); } TextView mindesc = (TextView) seekbarlayout.findViewById(R.id.mindesc); @@ -129,29 +134,33 @@ private View initViewDefault(LayoutInflater inflater, ViewGroup parent) { byte[] imageByteArray = Base64.decode(format.getMinImage().split(",")[1], Base64.DEFAULT); Glide.with(inflater.getContext()).load(imageByteArray).into(minimage); } else { - minimage.setVisibility(View.INVISIBLE); + minimage.setVisibility(View.GONE); } if (!format.getMaxImage().equalsIgnoreCase("")) { byte[] imageByteArray = Base64.decode(format.getMaxImage().split(",")[1], Base64.DEFAULT); Glide.with(inflater.getContext()).load(imageByteArray).into(maximage); } else { - maximage.setVisibility(View.INVISIBLE); + maximage.setVisibility(View.GONE); } currentvalue.setText(String.valueOf(min)); - seekBar.setOnSeekBarChangeListener( - new SeekBar.OnSeekBarChangeListener() { - @Override - public void onProgressChanged(SeekBar seekBar, int i, boolean b) { - setvaluetotext(); - } - @Override - public void onStartTrackingTouch(SeekBar seekBar) {} + seekBar.setOnRangeChangedListener(new OnRangeChangedListener() { + @Override + public void onRangeChanged(RangeSeekBar rangeSeekBar, float v, float v1, boolean b) { + setvaluetotext(); + } + + @Override + public void onStartTrackingTouch(RangeSeekBar rangeSeekBar, boolean b) { - @Override - public void onStopTrackingTouch(SeekBar seekBar) {} - }); + } + + @Override + public void onStopTrackingTouch(RangeSeekBar rangeSeekBar, boolean b) { + + } + }); if (currentSelected != null) { double selected; @@ -196,10 +205,10 @@ private void setvaluetotext() { if (stepSection != 0) { value = Double.parseDouble("" + min) - + Double.parseDouble("" + seekBar.getProgress()) - / Double.parseDouble("" + (stepSection * 10)); + + Double.parseDouble("" + (int) seekBar.getLeftSeekBar().getProgress()) + / Double.parseDouble("" + (stepSection * 10)); } else { - value = Double.parseDouble("" + min) + Double.parseDouble("" + seekBar.getProgress()); + value = Double.parseDouble("" + min) + Double.parseDouble("" + (int) seekBar.getLeftSeekBar().getProgress()); } NumberFormat nf = NumberFormat.getInstance(); nf.setMaximumFractionDigits(stepSection); diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/CustomDateQuestionBody.java b/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/CustomDateQuestionBody.java index 14e3a9dd8d..c0f63ff6dd 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/CustomDateQuestionBody.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/CustomDateQuestionBody.java @@ -18,9 +18,11 @@ import android.app.DatePickerDialog; import android.app.TimePickerDialog; +import android.content.Context; import android.content.DialogInterface; import android.content.res.Resources; -import android.support.v7.view.ContextThemeWrapper; +import android.os.Bundle; +import androidx.appcompat.view.ContextThemeWrapper; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -33,6 +35,7 @@ import com.harvard.studyappmodule.custom.AnswerFormatCustom; import com.harvard.studyappmodule.custom.QuestionStepCustom; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import java.text.DateFormat; import java.text.ParseException; @@ -49,6 +52,8 @@ public class CustomDateQuestionBody implements StepBody { private DateAnswerformatCustom format; private Calendar calendar; private DateFormat dateformatter; + private CustomFirebaseAnalytics analyticsInstance; + Context context; private boolean hasChosenDate; @@ -91,6 +96,8 @@ public View getBodyView(int viewType, final LayoutInflater inflater, ViewGroup p View view = inflater.inflate(R.layout.rsb_item_date_view, parent, false); TextView title = (TextView) view.findViewById(R.id.label); + analyticsInstance = CustomFirebaseAnalytics.getInstance(inflater.getContext()); + this.context = inflater.getContext(); if (viewType == VIEW_TYPE_COMPACT) { title.setText(step.getTitle()); } else { @@ -124,14 +131,21 @@ public void onFocusChange(View v, boolean hasFocus) { } }); - textView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (v.isFocused()) { - CustomDateQuestionBody.this.showDialog(textView, inflater); - } - } - }); + textView.setOnClickListener( + new View.OnClickListener() { + @Override + public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.text_view)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); + if (v.isFocused()) { + CustomDateQuestionBody.this.showDialog(textView, inflater); + } + } + }); Resources res = parent.getResources(); LinearLayout.MarginLayoutParams layoutParams = @@ -169,7 +183,13 @@ public StepResult getStepResult(boolean skipped) { @Override public BodyAnswer getBodyAnswerState() { if (!hasChosenDate) { - return new BodyAnswer(false, R.string.rsb_invalid_answer_date_none); + if (format.getStyle() == AnswerFormatCustom.DateAnswerStyle.Date) { + return new BodyAnswer(false, R.string.rsb_invalid_answer_date_none); + } else if (format.getStyle() == AnswerFormatCustom.DateAnswerStyle.TimeOfDay) { + return new BodyAnswer(false, R.string.rsb_invalid_answer_time_none); + } else { + return new BodyAnswer(false, R.string.rsb_invalid_answer_date_time_none); + } } return format.validateAnswer(calendar.getTime()); @@ -188,20 +208,38 @@ public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)); - datePickerDialog.setButton(DialogInterface.BUTTON_NEGATIVE, inflater.getContext().getString(R.string.cancel), new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - if (which == DialogInterface.BUTTON_NEGATIVE) { - dialog.dismiss(); - } - } - }); - datePickerDialog.setButton(DialogInterface.BUTTON_POSITIVE, inflater.getContext().getString(R.string.ok_2), new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - if (which == DialogInterface.BUTTON_POSITIVE) { - dialog.dismiss(); - Calendar calendar1 = Calendar.getInstance(); - calendar1.setTime(calendar.getTime()); - calendar1.set( + datePickerDialog.setButton( + DialogInterface.BUTTON_NEGATIVE, + inflater.getContext().getString(R.string.cancel), + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.custom_data_question_cancel)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); + if (which == DialogInterface.BUTTON_NEGATIVE) { + dialog.dismiss(); + } + } + }); + datePickerDialog.setButton( + DialogInterface.BUTTON_POSITIVE, + inflater.getContext().getString(R.string.ok_2), + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.custom_data_question_ok)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); + if (which == DialogInterface.BUTTON_POSITIVE) { + dialog.dismiss(); + Calendar calendar1 = Calendar.getInstance(); + calendar1.setTime(calendar.getTime()); + calendar1.set( datePickerDialog.getDatePicker().getYear(), datePickerDialog.getDatePicker().getMonth(), datePickerDialog.getDatePicker().getDayOfMonth()); @@ -268,22 +306,40 @@ public void onTimeSet(TimePicker view, int hourOfDay, int minute) { calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), true); - timePickerDialog.setButton(DialogInterface.BUTTON_NEGATIVE, inflater.getContext().getString(R.string.cancel), new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - if (which == DialogInterface.BUTTON_NEGATIVE) { - dialog.dismiss(); - } - } - }); - timePickerDialog.setButton(DialogInterface.BUTTON_NEUTRAL, inflater.getContext().getString(R.string.clear), new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - if (which == DialogInterface.BUTTON_NEUTRAL) { - dialog.dismiss(); - tv.setText(""); - hasChosenDate = false; - } - } - }); + timePickerDialog.setButton( + DialogInterface.BUTTON_NEGATIVE, + inflater.getContext().getString(R.string.cancel), + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.custom_data_question_cancel)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); + if (which == DialogInterface.BUTTON_NEGATIVE) { + dialog.dismiss(); + } + } + }); + timePickerDialog.setButton( + DialogInterface.BUTTON_NEUTRAL, + inflater.getContext().getString(R.string.clear), + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.custom_data_question_clear)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); + if (which == DialogInterface.BUTTON_NEUTRAL) { + dialog.dismiss(); + tv.setText(""); + hasChosenDate = false; + } + } + }); timePickerDialog.show(); @@ -297,83 +353,130 @@ public void onDateSet( calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)); - datePickerDialog.setButton(DialogInterface.BUTTON_NEGATIVE, inflater.getContext().getString(R.string.cancel), new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - if (which == DialogInterface.BUTTON_NEGATIVE) { - dialog.dismiss(); - } - } - }); - datePickerDialog.setButton(DialogInterface.BUTTON_NEUTRAL, inflater.getContext().getString(R.string.clear), new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - if (which == DialogInterface.BUTTON_NEUTRAL) { - dialog.dismiss(); - tv.setText(""); - hasChosenDate = false; - } - } - }); - datePickerDialog.setButton(DialogInterface.BUTTON_POSITIVE, inflater.getContext().getString(R.string.ok_2), new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - if (which == DialogInterface.BUTTON_POSITIVE) { - dialog.dismiss(); - calendar.set( + datePickerDialog.setButton( + DialogInterface.BUTTON_NEGATIVE, + inflater.getContext().getString(R.string.cancel), + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.custom_data_question_cancel)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); + if (which == DialogInterface.BUTTON_NEGATIVE) { + dialog.dismiss(); + } + } + }); + datePickerDialog.setButton( + DialogInterface.BUTTON_NEUTRAL, + inflater.getContext().getString(R.string.clear), + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.custom_data_question_clear)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); + if (which == DialogInterface.BUTTON_NEUTRAL) { + dialog.dismiss(); + tv.setText(""); + hasChosenDate = false; + } + } + }); + datePickerDialog.setButton( + DialogInterface.BUTTON_POSITIVE, + inflater.getContext().getString(R.string.ok_2), + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.custom_data_question_ok)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); + if (which == DialogInterface.BUTTON_POSITIVE) { + dialog.dismiss(); + calendar.set( datePickerDialog.getDatePicker().getYear(), datePickerDialog.getDatePicker().getMonth(), datePickerDialog.getDatePicker().getDayOfMonth()); - TimePickerDialog timePickerDialog = - new TimePickerDialog(contextWrapper, new TimePickerDialog.OnTimeSetListener() { - @Override - public void onTimeSet(TimePicker tview, int hourOfDay, int minute) { + TimePickerDialog timePickerDialog = + new TimePickerDialog( + contextWrapper, + new TimePickerDialog.OnTimeSetListener() { + @Override + public void onTimeSet(TimePicker tview, int hourOfDay, int minute) { - Calendar calendar1 = Calendar.getInstance(); - calendar1.setTime(calendar.getTime()); - calendar1.set(Calendar.HOUR_OF_DAY, hourOfDay); - calendar1.set(Calendar.MINUTE, minute); - if (format.validateAnswer(calendar1.getTime()).isValid()) { - calendar.set(Calendar.HOUR_OF_DAY, hourOfDay); - calendar.set(Calendar.MINUTE, minute); + Calendar calendar1 = Calendar.getInstance(); + calendar1.setTime(calendar.getTime()); + calendar1.set(Calendar.HOUR_OF_DAY, hourOfDay); + calendar1.set(Calendar.MINUTE, minute); + if (format.validateAnswer(calendar1.getTime()).isValid()) { + calendar.set(Calendar.HOUR_OF_DAY, hourOfDay); + calendar.set(Calendar.MINUTE, minute); - hasChosenDate = true; - // Set result to our edit text - String formattedResult = + hasChosenDate = true; + // Set result to our edit text + String formattedResult = CustomDateQuestionBody.this.createFormattedResult(); - tv.setText(formattedResult); - } else { - Toast.makeText( - inflater.getContext(), - format + tv.setText(formattedResult); + } else { + Toast.makeText( + inflater.getContext(), + format .validateAnswer(calendar1.getTime()) .getString(inflater.getContext()), - Toast.LENGTH_LONG) + Toast.LENGTH_LONG) .show(); + } + } + }, + calendar.get(Calendar.HOUR_OF_DAY), + calendar.get(Calendar.MINUTE), + true); + timePickerDialog.setButton( + DialogInterface.BUTTON_NEGATIVE, + inflater.getContext().getString(R.string.cancel), + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.custom_data_question_cancel)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); + if (which == DialogInterface.BUTTON_NEGATIVE) { + dialog.dismiss(); } } - }, - calendar.get(Calendar.HOUR_OF_DAY), - calendar.get(Calendar.MINUTE), - true); - timePickerDialog.setButton(DialogInterface.BUTTON_NEGATIVE, inflater.getContext().getString(R.string.cancel), new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - if (which == DialogInterface.BUTTON_NEGATIVE) { - dialog.dismiss(); - } - } - }); - timePickerDialog.setButton(DialogInterface.BUTTON_NEUTRAL, inflater.getContext().getString(R.string.clear), new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - if (which == DialogInterface.BUTTON_NEUTRAL) { - dialog.dismiss(); - tv.setText(""); - hasChosenDate = false; - } + }); + timePickerDialog.setButton( + DialogInterface.BUTTON_NEUTRAL, + inflater.getContext().getString(R.string.clear), + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.custom_data_question_clear)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); + if (which == DialogInterface.BUTTON_NEUTRAL) { + dialog.dismiss(); + tv.setText(""); + hasChosenDate = false; + } + } + }); + timePickerDialog.show(); } - }); - timePickerDialog.show(); - } - } - }); + } + }); datePickerDialog.show(); } else { throw new RuntimeException("DateAnswerStyle " + format.getStyle() + " is not recognised"); diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/FormBodyCustom.java b/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/FormBodyCustom.java index c169416db1..4d4f669c08 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/FormBodyCustom.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/FormBodyCustom.java @@ -15,10 +15,12 @@ package com.harvard.studyappmodule.custom.question; +import android.content.Context; import android.content.res.Resources; import android.graphics.Paint; +import android.os.Bundle; import android.os.Handler; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.util.DisplayMetrics; import android.util.TypedValue; import android.view.Gravity; @@ -32,6 +34,7 @@ import com.harvard.studyappmodule.custom.ChoiceAnswerFormatCustom; import com.harvard.studyappmodule.custom.QuestionStepCustom; import com.harvard.studyappmodule.custom.StepResultCustom; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import java.lang.reflect.Constructor; import java.util.ArrayList; @@ -55,6 +58,8 @@ public class FormBodyCustom implements StepBody { private int formIncrement = 0; private int actionBarHeight = 0; private int navigationBarHeight = 0; + private CustomFirebaseAnalytics analyticsInstance; + private Context context; public FormBodyCustom(Step step, StepResult result) { this.step = (QuestionStep) step; @@ -133,6 +138,8 @@ public View getBodyView(int viewType, final LayoutInflater inflater, final ViewG DisplayMetrics displayMetrics = inflater.getContext().getResources().getDisplayMetrics(); final int height = displayMetrics.heightPixels; final LinearLayout body = (LinearLayout) inflater.inflate(R.layout.formbody, parent, false); + this.context = inflater.getContext(); + this.analyticsInstance = CustomFirebaseAnalytics.getInstance(context.getApplicationContext()); final ObservableScrollView observableScrollView = (ObservableScrollView) parent.findViewById(R.id.rsb_content_container_scrollview); @@ -185,6 +192,12 @@ public View getBodyView(int viewType, final LayoutInflater inflater, final ViewG new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.add_more)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); View firstview = null; body.removeView(addmore); StepBody stepBody; diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/InstructionStepLayoutCustom.java b/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/InstructionStepLayoutCustom.java index 38b8ff8f9d..ea19c5e6c1 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/InstructionStepLayoutCustom.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/InstructionStepLayoutCustom.java @@ -12,7 +12,7 @@ import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Build; -import android.support.customtabs.CustomTabsIntent; +import androidx.browser.customtabs.CustomTabsIntent; import android.text.Html; import android.util.AttributeSet; import android.view.View; diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/LocationQuestion.java b/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/LocationQuestion.java index 770e5429c0..c50d4ef812 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/LocationQuestion.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/LocationQuestion.java @@ -26,10 +26,6 @@ import android.location.LocationManager; import android.os.Bundle; import android.os.Handler; -import android.support.v4.app.ActivityCompat; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentTransaction; -import android.support.v7.app.AppCompatActivity; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; @@ -40,6 +36,10 @@ import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.location.LocationListener; @@ -191,10 +191,6 @@ public void onMapReady(final GoogleMap googleMap) { .addOnConnectionFailedListener(LocationQuestion.this) .build(); - LocationManager service = - (LocationManager) - context.getSystemService(Context.LOCATION_SERVICE); - service.addGpsStatusListener(LocationQuestion.this); try { googleApiClient.connect(); } catch (Exception e) { diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/MultiChoiceImageQuestionBody.java b/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/MultiChoiceImageQuestionBody.java index 7eaaee9011..fc52136b51 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/MultiChoiceImageQuestionBody.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/MultiChoiceImageQuestionBody.java @@ -15,7 +15,9 @@ package com.harvard.studyappmodule.custom.question; +import android.content.Context; import android.content.res.Resources; +import android.os.Bundle; import android.util.Base64; import android.view.LayoutInflater; import android.view.View; @@ -26,6 +28,7 @@ import com.bumptech.glide.Glide; import com.harvard.R; import com.harvard.studyappmodule.custom.QuestionStepCustom; +import com.harvard.utils.CustomFirebaseAnalytics; import org.researchstack.backbone.result.StepResult; import org.researchstack.backbone.step.Step; import org.researchstack.backbone.ui.step.body.BodyAnswer; @@ -36,6 +39,8 @@ public class MultiChoiceImageQuestionBody implements StepBody { private StepResult result; private ChoiceCustomImage[] choices; private T currentSelected; + private CustomFirebaseAnalytics analyticsInstance; + private Context context; public MultiChoiceImageQuestionBody(Step step, StepResult result) { this.step = (QuestionStepCustom) step; @@ -59,6 +64,7 @@ public View getBodyView(int viewType, LayoutInflater inflater, ViewGroup parent) View view = getViewForType(viewType, inflater, parent); Resources res = parent.getResources(); + this.context = inflater.getContext(); LinearLayout.MarginLayoutParams layoutParams = new LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); @@ -67,7 +73,7 @@ public View getBodyView(int viewType, LayoutInflater inflater, ViewGroup parent) layoutParams.rightMargin = res.getDimensionPixelSize(org.researchstack.backbone.R.dimen.rsb_margin_right); view.setLayoutParams(layoutParams); - + this.analyticsInstance = CustomFirebaseAnalytics.getInstance(context.getApplicationContext()); return view; } @@ -116,13 +122,22 @@ private View initViewDefault(final LayoutInflater inflater, ViewGroup parent) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.image_view)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if (pervioustxtview[0] != null) { byte[] imageByteArray = - Base64.decode(choices[pervioustxtview[0].getId()].getImage().split(",")[1], Base64.DEFAULT); + Base64.decode( + choices[pervioustxtview[0].getId()].getImage().split(",")[1], + Base64.DEFAULT); Glide.with(inflater.getContext()).load(imageByteArray).into(pervioustxtview[0]); } byte[] imageByteArray = - Base64.decode(choices[imageView.getId()].getSelectedImage().split(",")[1], Base64.DEFAULT); + Base64.decode( + choices[imageView.getId()].getSelectedImage().split(",")[1], Base64.DEFAULT); Glide.with(inflater.getContext()).load(imageByteArray).into(imageView); imageView.setLayoutParams(layoutParams); pervioustxtview[0] = imageView; diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/MultiChoiceTextQuestionBody.java b/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/MultiChoiceTextQuestionBody.java index c8e8bbf4aa..01bb03b28c 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/MultiChoiceTextQuestionBody.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/MultiChoiceTextQuestionBody.java @@ -17,9 +17,6 @@ import android.app.Activity; import android.content.res.Resources; -import android.support.v4.content.ContextCompat; -import android.support.v7.widget.AppCompatCheckBox; -import android.support.v7.widget.SearchView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -29,6 +26,9 @@ import android.widget.LinearLayout; import android.widget.RadioGroup; import android.widget.TextView; +import androidx.appcompat.widget.AppCompatCheckBox; +import androidx.appcompat.widget.SearchView; +import androidx.core.content.ContextCompat; import com.google.gson.Gson; import com.harvard.R; import com.harvard.studyappmodule.custom.QuestionStepCustom; diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/ScaleQuestion.java b/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/ScaleQuestion.java index b29ade6db7..20a02d4494 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/ScaleQuestion.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/ScaleQuestion.java @@ -17,6 +17,7 @@ import android.content.res.Resources; import android.util.Base64; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -28,6 +29,10 @@ import com.harvard.R; import com.harvard.studyappmodule.custom.QuestionStepCustom; import com.harvard.utils.Logger; +import com.jaygoo.widget.OnRangeChangedListener; +import com.jaygoo.widget.RangeSeekBar; +import com.jaygoo.widget.VerticalRangeSeekBar; + import org.researchstack.backbone.result.StepResult; import org.researchstack.backbone.step.Step; import org.researchstack.backbone.ui.step.body.BodyAnswer; @@ -39,7 +44,7 @@ public class ScaleQuestion implements StepBody { private ScaleAnswerFormat format; private TextView mcurrentvalue; private Double currentSelected; - private SeekBar seekBar; + private RangeSeekBar seekBar; private int min; private int stepSection; private double value; @@ -96,14 +101,13 @@ private View initViewDefault(LayoutInflater inflater, ViewGroup parent) { View seekbarlayout; if (!format.isVertical()) { seekbarlayout = inflater.inflate(R.layout.seekbar_horizontal_layout, parent, false); - seekBar = (SeekBar) seekbarlayout.findViewById(R.id.seekbar); - seekBar.setMax((max - min) / stepSection); + seekBar = (RangeSeekBar) seekbarlayout.findViewById(R.id.seekbar); } else { seekbarlayout = inflater.inflate(R.layout.seekbar_vertical_layout, parent, false); - seekBar = (SeekBar) seekbarlayout.findViewById(R.id.seekbar); - seekBar.setMax((max - min) / stepSection); + seekBar = (VerticalRangeSeekBar) seekbarlayout.findViewById(R.id.seekbar); } - + seekBar.setSteps(max / stepSection); + seekBar.setRange(0, ((max - min) / stepSection)); TextView mindesc = (TextView) seekbarlayout.findViewById(R.id.mindesc); ImageView minimage = (ImageView) seekbarlayout.findViewById(R.id.minimage); @@ -121,13 +125,13 @@ private View initViewDefault(LayoutInflater inflater, ViewGroup parent) { byte[] imageByteArray = Base64.decode(format.getMinImage().split(",")[1], Base64.DEFAULT); Glide.with(inflater.getContext()).load(imageByteArray).into(minimage); } else { - minimage.setVisibility(View.INVISIBLE); + minimage.setVisibility(View.GONE); } if (!format.getMaxImage().equalsIgnoreCase("")) { byte[] imageByteArray = Base64.decode(format.getMaxImage().split(",")[1], Base64.DEFAULT); Glide.with(inflater.getContext()).load(imageByteArray).into(maximage); } else { - maximage.setVisibility(View.INVISIBLE); + maximage.setVisibility(View.GONE); } TextView mintitle = (TextView) seekbarlayout.findViewById(R.id.mintitle); TextView maxtitle = (TextView) seekbarlayout.findViewById(R.id.maxtitle); @@ -136,19 +140,22 @@ private View initViewDefault(LayoutInflater inflater, ViewGroup parent) { mcurrentvalue.setText(String.valueOf(min)); - seekBar.setOnSeekBarChangeListener( - new SeekBar.OnSeekBarChangeListener() { - @Override - public void onProgressChanged(SeekBar seekBar, int i, boolean b) { - setvaluetotxt(); - } + seekBar.setOnRangeChangedListener(new OnRangeChangedListener() { + @Override + public void onRangeChanged(RangeSeekBar rangeSeekBar, float v, float v1, boolean b) { + setvaluetotxt(); + } - @Override - public void onStartTrackingTouch(SeekBar seekBar) {} + @Override + public void onStartTrackingTouch(RangeSeekBar rangeSeekBar, boolean b) { - @Override - public void onStopTrackingTouch(SeekBar seekBar) {} - }); + } + + @Override + public void onStopTrackingTouch(RangeSeekBar rangeSeekBar, boolean b) { + + } + }); if (currentSelected != null) { int selected = ((currentSelected.intValue() - min) / stepSection); @@ -178,8 +185,8 @@ public void onStopTrackingTouch(SeekBar seekBar) {} } private void setvaluetotxt() { - value = min + (seekBar.getProgress() * stepSection); - mcurrentvalue.setText(String.valueOf(value)); + value = min + (((int) seekBar.getLeftSeekBar().getProgress()) * stepSection); + mcurrentvalue.setText(String.valueOf((int) value)); } private View initViewCompact(LayoutInflater inflater, ViewGroup parent) { diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/ScaleTextQuestion.java b/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/ScaleTextQuestion.java index f495c6c22a..fb5a7d7767 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/ScaleTextQuestion.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/ScaleTextQuestion.java @@ -16,16 +16,20 @@ package com.harvard.studyappmodule.custom.question; import android.content.res.Resources; -import android.view.Gravity; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; -import android.widget.SeekBar; import android.widget.TextView; import com.harvard.R; import com.harvard.studyappmodule.custom.QuestionStepCustom; import com.harvard.utils.Logger; +import com.jaygoo.widget.OnRangeChangedListener; +import com.jaygoo.widget.RangeSeekBar; +import com.jaygoo.widget.SeekBar; +import com.jaygoo.widget.VerticalRangeSeekBar; + import java.util.ArrayList; import org.researchstack.backbone.result.StepResult; import org.researchstack.backbone.step.Step; @@ -38,10 +42,11 @@ public class ScaleTextQuestion implements StepBody { private ScaleTextAnswerFormat format; private TextView mcurrentvalue; private String currentSelected; - private SeekBar seekBar; + private RangeSeekBar seekBar; private int value; private ChoiceTextExclusive[] choiceTextExclusives; private ArrayList valuelist; + private ArrayList textlist; public ScaleTextQuestion(Step step, StepResult result) { this.step = (QuestionStepCustom) step; @@ -49,8 +54,10 @@ public ScaleTextQuestion(Step step, StepResult result) { this.format = (ScaleTextAnswerFormat) this.step.getAnswerFormat1(); choiceTextExclusives = format.getChoiceTextExclusive(); valuelist = new ArrayList<>(); + textlist = new ArrayList<>(); for (ChoiceTextExclusive choiceTextExclusive : choiceTextExclusives) { valuelist.add("" + choiceTextExclusive.getValue()); + textlist.add(choiceTextExclusive.getText()); } String resultValue = this.result.getResult(); if (resultValue != null) { @@ -95,49 +102,19 @@ private View initViewDefault(LayoutInflater inflater, ViewGroup parent) { final int max = choiceTextExclusives.length; int min = 1; + CharSequence[] tickValues = textlist.toArray(new CharSequence[textlist.size()]); + View seekbarlayout; if (!format.isVertical()) { seekbarlayout = inflater.inflate(R.layout.seekbar_horizontal_layout, parent, false); - seekBar = (SeekBar) seekbarlayout.findViewById(R.id.seekbar); - seekBar.setMax((max - min)); + seekBar = (RangeSeekBar) seekbarlayout.findViewById(R.id.seekbar); } else { seekbarlayout = inflater.inflate(R.layout.seekbar_text_vertical_layout, parent, false); - seekBar = (SeekBar) seekbarlayout.findViewById(R.id.seekbar); - LinearLayout scalevsaluelayout = (LinearLayout) seekbarlayout.findViewById(R.id.scaleValue); - scalevsaluelayout.setWeightSum(choiceTextExclusives.length); - - for (int i = choiceTextExclusives.length - 1; i >= 0; i--) { - LinearLayout linearLayout1 = new LinearLayout(inflater.getContext()); - LinearLayout.LayoutParams params = - new LinearLayout.LayoutParams( - LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1); - params.gravity = Gravity.CENTER; - - TextView textView = new TextView(inflater.getContext()); - LinearLayout.LayoutParams txtparams = - new LinearLayout.LayoutParams( - LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); - if (i == choiceTextExclusives.length - 1) { - txtparams.gravity = Gravity.TOP; - textView.setGravity(Gravity.TOP); - } else if (i == 0) { - txtparams.gravity = Gravity.BOTTOM; - textView.setGravity(Gravity.BOTTOM); - } else { - txtparams.gravity = Gravity.CENTER; - textView.setGravity(Gravity.CENTER); - params.setMargins(0, 30, 0, 30); - } - textView.setLayoutParams(txtparams); - textView.setText(choiceTextExclusives[i].getText()); - linearLayout1.setLayoutParams(params); - linearLayout1.addView(textView); - - scalevsaluelayout.addView(linearLayout1); - } - - seekBar.setMax((max - min)); + seekBar = (VerticalRangeSeekBar) seekbarlayout.findViewById(R.id.seekbar); + seekBar.setTickMarkTextArray(tickValues); } + seekBar.setRange(0, choiceTextExclusives.length - 1); + seekBar.setSteps(choiceTextExclusives.length - 1); mcurrentvalue = (TextView) seekbarlayout.findViewById(R.id.currentvalue); TextView mintitle = (TextView) seekbarlayout.findViewById(R.id.mintitle); @@ -152,25 +129,28 @@ private View initViewDefault(LayoutInflater inflater, ViewGroup parent) { mcurrentvalue.setText(String.valueOf(choiceTextExclusives[0].getText())); - seekBar.setOnSeekBarChangeListener( - new SeekBar.OnSeekBarChangeListener() { - @Override - public void onProgressChanged(SeekBar seekBar, int i, boolean b) { - setvaluetotxt(); - } + seekBar.setOnRangeChangedListener(new OnRangeChangedListener() { + @Override + public void onRangeChanged(RangeSeekBar rangeSeekBar, float v, float v1, boolean b) { + setvaluetotxt(v); + } + + @Override + public void onStartTrackingTouch(RangeSeekBar rangeSeekBar, boolean b) { + + } - @Override - public void onStartTrackingTouch(SeekBar seekBar) {} + @Override + public void onStopTrackingTouch(RangeSeekBar rangeSeekBar, boolean b) { - @Override - public void onStopTrackingTouch(SeekBar seekBar) {} - }); + } + }); + int defaultval; if (currentSelected != null) { - int selected = valuelist.indexOf("" + currentSelected); - seekBar.setProgress(selected); + defaultval = valuelist.indexOf("" + currentSelected); + seekBar.setProgress(defaultval); } else { - int defaultval; if (format.getDefaultval() != null && !format.getDefaultval().equalsIgnoreCase("")) { try { defaultval = Integer.parseInt(format.getDefaultval()); @@ -184,17 +164,14 @@ public void onStopTrackingTouch(SeekBar seekBar) {} seekBar.setProgress(((defaultval - min))); } - if (format.isVertical()) { - setvaluetotxt(); - } linearLayout.removeAllViewsInLayout(); linearLayout.addView(seekbarlayout); return linearLayout; } - private void setvaluetotxt() { - value = (seekBar.getProgress()); + private void setvaluetotxt(float rangeSeekBar) { + value = (int) (rangeSeekBar); mcurrentvalue.setText(String.valueOf(choiceTextExclusives[value].getText())); } diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/SingleChoiceTextQuestionBody.java b/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/SingleChoiceTextQuestionBody.java index 596b913b5d..cedd5df64e 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/SingleChoiceTextQuestionBody.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/SingleChoiceTextQuestionBody.java @@ -17,9 +17,6 @@ import android.app.Activity; import android.content.res.Resources; -import android.support.v4.content.ContextCompat; -import android.support.v7.widget.AppCompatCheckBox; -import android.support.v7.widget.SearchView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -29,6 +26,9 @@ import android.widget.LinearLayout; import android.widget.RadioGroup; import android.widget.TextView; +import androidx.appcompat.widget.AppCompatCheckBox; +import androidx.appcompat.widget.SearchView; +import androidx.core.content.ContextCompat; import com.google.gson.Gson; import com.harvard.R; import com.harvard.studyappmodule.custom.QuestionStepCustom; diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/TimeIntervalAnswerFormat.java b/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/TimeIntervalAnswerFormat.java index 9e18359971..c2bfd4c6f1 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/TimeIntervalAnswerFormat.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/TimeIntervalAnswerFormat.java @@ -22,6 +22,7 @@ public class TimeIntervalAnswerFormat extends ChoiceAnswerFormatCustom { private final int step; private final String defaultvalue; + public TimeIntervalAnswerFormat( CustomAnswerStyle style, int step, String defaultvalue) { this.style = style; diff --git a/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/ValuePickerQuestion.java b/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/ValuePickerQuestion.java index b88e10340c..bd1ba6c76b 100644 --- a/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/ValuePickerQuestion.java +++ b/Android/app/src/main/java/com/harvard/studyappmodule/custom/question/ValuePickerQuestion.java @@ -18,6 +18,7 @@ import android.app.Dialog; import android.content.Context; import android.content.res.Resources; +import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -29,6 +30,7 @@ import com.harvard.R; import com.harvard.studyappmodule.custom.ChoiceAnswerFormatCustom; import com.harvard.studyappmodule.custom.QuestionStepCustom; +import com.harvard.utils.CustomFirebaseAnalytics; import org.researchstack.backbone.answerformat.ChoiceAnswerFormat; import org.researchstack.backbone.model.Choice; import org.researchstack.backbone.result.StepResult; @@ -43,6 +45,7 @@ public class ValuePickerQuestion implements StepBody { private String currentSelected; private TextView textView; private String resultValue; + private CustomFirebaseAnalytics analyticsInstance; public ValuePickerQuestion(Step step, StepResult result) { if (step instanceof QuestionStepCustom) { @@ -65,7 +68,6 @@ public ValuePickerQuestion(Step step, StepResult result) { @Override public View getBodyView(int viewType, LayoutInflater inflater, ViewGroup parent) { View view = getViewForType(viewType, inflater, parent); - Resources res = parent.getResources(); LinearLayout.MarginLayoutParams layoutParams = new LinearLayout.LayoutParams( @@ -75,7 +77,7 @@ public View getBodyView(int viewType, LayoutInflater inflater, ViewGroup parent) layoutParams.rightMargin = res.getDimensionPixelSize(org.researchstack.backbone.R.dimen.rsb_margin_right); view.setLayoutParams(layoutParams); - + analyticsInstance = CustomFirebaseAnalytics.getInstance(inflater.getContext().getApplicationContext()); return view; } @@ -104,6 +106,12 @@ private View initViewDefault(final LayoutInflater inflater, ViewGroup parent) { new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + inflater.getContext().getString(R.string.text_view)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); showDialog(inflater.getContext()); } }); @@ -111,7 +119,7 @@ public void onClick(View v) { return body; } - private void showDialog(Context context) { + private void showDialog(final Context context) { final Dialog dialog = new Dialog(context); dialog.setCancelable(false); @@ -122,7 +130,12 @@ private void showDialog(Context context) { new View.OnClickListener() { @Override public void onClick(View v) { - + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.valuer_picker_cancel)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); dialog.dismiss(); } }); @@ -141,6 +154,12 @@ public void onClick(View v) { new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.valuer_picker_list)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); textView.setText(numberpickervalue[position]); resultValue = choices[position].getValue().toString(); diff --git a/Android/app/src/main/java/com/harvard/usermodule/AuthServerErrorHandler.java b/Android/app/src/main/java/com/harvard/usermodule/AuthServerErrorHandler.java index d07710015e..edbf49aa4c 100644 --- a/Android/app/src/main/java/com/harvard/usermodule/AuthServerErrorHandler.java +++ b/Android/app/src/main/java/com/harvard/usermodule/AuthServerErrorHandler.java @@ -11,8 +11,8 @@ import android.content.ComponentName; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v7.app.AppCompatActivity; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; import android.widget.Toast; import com.harvard.AppConfig; import com.harvard.R; diff --git a/Android/app/src/main/java/com/harvard/usermodule/ConfirmPasscodeSetup.java b/Android/app/src/main/java/com/harvard/usermodule/ConfirmPasscodeSetup.java index 0e582d8184..ec0d4dce80 100644 --- a/Android/app/src/main/java/com/harvard/usermodule/ConfirmPasscodeSetup.java +++ b/Android/app/src/main/java/com/harvard/usermodule/ConfirmPasscodeSetup.java @@ -18,8 +18,8 @@ import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.AppCompatTextView; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.AppCompatTextView; import android.view.View; import android.widget.RelativeLayout; import android.widget.TextView; @@ -27,6 +27,7 @@ import com.harvard.R; import com.harvard.passcodemodule.PasscodeView; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; public class ConfirmPasscodeSetup extends AppCompatActivity { @@ -37,11 +38,13 @@ public class ConfirmPasscodeSetup extends AppCompatActivity { private PasscodeView passcodeView; private static final int JOIN_STUDY_RESPONSE = 100; private TextView passcodetitle; + private CustomFirebaseAnalytics analyticsInstance; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_passcode_setup); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); initializeXmlId(); setTextForView(); @@ -90,6 +93,12 @@ public void run() { new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.confirm_passcode_back)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); finish(); } }); diff --git a/Android/app/src/main/java/com/harvard/usermodule/ForgotPasswordActivity.java b/Android/app/src/main/java/com/harvard/usermodule/ForgotPasswordActivity.java index 1530cbc0e8..da83a64a7d 100644 --- a/Android/app/src/main/java/com/harvard/usermodule/ForgotPasswordActivity.java +++ b/Android/app/src/main/java/com/harvard/usermodule/ForgotPasswordActivity.java @@ -17,9 +17,9 @@ import android.content.Intent; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.AppCompatEditText; -import android.support.v7.widget.AppCompatTextView; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.AppCompatEditText; +import androidx.appcompat.widget.AppCompatTextView; import android.view.View; import android.widget.RelativeLayout; import android.widget.Toast; @@ -31,6 +31,7 @@ import com.harvard.usermodule.model.Apps; import com.harvard.usermodule.webservicemodel.ForgotPasswordData; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import com.harvard.utils.Urls; import com.harvard.webservicemodule.apihelper.ApiCall; @@ -51,11 +52,13 @@ public class ForgotPasswordActivity extends AppCompatActivity private static final int RESEND_CONFIRMATION = 101; public static String FROM = "ForgotPasswordActivity"; private static final int GO_TO_SIGNIN = 111; + private CustomFirebaseAnalytics analyticsInstance; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_forgot_password); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); initializeXmlId(); setTextForView(); setFont(); @@ -92,6 +95,12 @@ private void bindEvents() { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.forgot_password_back)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); try { AppController.getHelperHideKeyboard(ForgotPasswordActivity.this); } catch (Exception e) { @@ -105,6 +114,12 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.forgot_password_cancel)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); try { AppController.getHelperHideKeyboard(ForgotPasswordActivity.this); } catch (Exception e) { @@ -118,6 +133,12 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.forgot_password_submit)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if (email.getText().toString().equalsIgnoreCase("")) { Toast.makeText( ForgotPasswordActivity.this, diff --git a/Android/app/src/main/java/com/harvard/usermodule/LoginCallbackActivity.java b/Android/app/src/main/java/com/harvard/usermodule/LoginCallbackActivity.java index 9239883e2a..da3867bfec 100644 --- a/Android/app/src/main/java/com/harvard/usermodule/LoginCallbackActivity.java +++ b/Android/app/src/main/java/com/harvard/usermodule/LoginCallbackActivity.java @@ -13,8 +13,8 @@ import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v7.app.AppCompatActivity; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; import android.widget.Toast; import com.google.firebase.iid.FirebaseInstanceId; import com.harvard.AppConfig; diff --git a/Android/app/src/main/java/com/harvard/usermodule/NewPasscodeSetupActivity.java b/Android/app/src/main/java/com/harvard/usermodule/NewPasscodeSetupActivity.java index c26ea27d47..0aa1afcf84 100644 --- a/Android/app/src/main/java/com/harvard/usermodule/NewPasscodeSetupActivity.java +++ b/Android/app/src/main/java/com/harvard/usermodule/NewPasscodeSetupActivity.java @@ -17,8 +17,8 @@ import android.content.Intent; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.AppCompatTextView; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.AppCompatTextView; import android.view.View; import android.widget.RelativeLayout; import android.widget.TextView; diff --git a/Android/app/src/main/java/com/harvard/usermodule/SignupActivity.java b/Android/app/src/main/java/com/harvard/usermodule/SignupActivity.java index e6c0ecbfd8..8e062b8f92 100644 --- a/Android/app/src/main/java/com/harvard/usermodule/SignupActivity.java +++ b/Android/app/src/main/java/com/harvard/usermodule/SignupActivity.java @@ -21,11 +21,6 @@ import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; -import android.support.v4.content.ContextCompat; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.AppCompatCheckBox; -import android.support.v7.widget.AppCompatEditText; -import android.support.v7.widget.AppCompatTextView; import android.text.SpannableStringBuilder; import android.text.TextPaint; import android.text.method.LinkMovementMethod; @@ -36,6 +31,11 @@ import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.AppCompatCheckBox; +import androidx.appcompat.widget.AppCompatEditText; +import androidx.appcompat.widget.AppCompatTextView; +import androidx.core.content.ContextCompat; import com.google.firebase.iid.FirebaseInstanceId; import com.harvard.AppConfig; import com.harvard.BuildConfig; @@ -49,6 +49,7 @@ import com.harvard.usermodule.webservicemodel.RegistrationData; import com.harvard.usermodule.webservicemodel.UpdateUserProfileData; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import com.harvard.utils.SetDialogHelper; import com.harvard.utils.Urls; @@ -88,6 +89,7 @@ public class SignupActivity extends AppCompatActivity implements ApiCall.OnAsync private RegistrationData registrationData; private String userAuth; private String userID; + private CustomFirebaseAnalytics analyticsInstance; @Override protected void onCreate(Bundle savedInstanceState) { @@ -105,6 +107,7 @@ protected void onCreate(Bundle savedInstanceState) { termsAndConditionData.setPrivacy(dbServiceSubscriber.getApps(realm).getPrivacyPolicyUrl()); termsAndConditionData.setTerms(dbServiceSubscriber.getApps(realm).getTermsUrl()); dbServiceSubscriber.closeRealmObj(realm); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); } private void initializeXmlId() { @@ -156,6 +159,12 @@ public void updateDrawState(TextPaint ds) { @Override public void onClick(View widget) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.signup_terms)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if (termsAndConditionData != null && !termsAndConditionData.getTerms().isEmpty()) { Intent termsIntent = new Intent(SignupActivity.this, TermsPrivacyPolicyActivity.class); @@ -190,6 +199,12 @@ public void updateDrawState(TextPaint ds) { @Override public void onClick(View widget) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.signup_privacy_policy)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if (termsAndConditionData != null && !termsAndConditionData.getPrivacy().isEmpty()) { Intent termsIntent = new Intent(SignupActivity.this, TermsPrivacyPolicyActivity.class); @@ -236,6 +251,11 @@ private void bindEvents() { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, getString(R.string.signup_back)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); try { AppController.getHelperHideKeyboard(SignupActivity.this); } catch (Exception e) { @@ -249,6 +269,12 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.signup_cancel)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); finish(); } }); @@ -257,6 +283,12 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.signup_submit)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if (clicked == false) { clicked = true; password.clearFocus(); @@ -278,6 +310,11 @@ public void run() { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, getString(R.string.signup_info)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); SetDialogHelper.setNeutralDialog( SignupActivity.this, getResources().getString(R.string.registration_message), diff --git a/Android/app/src/main/java/com/harvard/usermodule/SignupProcessCompleteActivity.java b/Android/app/src/main/java/com/harvard/usermodule/SignupProcessCompleteActivity.java index b158d30ef1..086c04aa4c 100644 --- a/Android/app/src/main/java/com/harvard/usermodule/SignupProcessCompleteActivity.java +++ b/Android/app/src/main/java/com/harvard/usermodule/SignupProcessCompleteActivity.java @@ -18,25 +18,28 @@ import android.content.ComponentName; import android.content.Intent; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.AppCompatTextView; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.AppCompatTextView; import android.view.View; import com.harvard.AppConfig; import com.harvard.R; import com.harvard.studyappmodule.StandaloneActivity; import com.harvard.studyappmodule.StudyActivity; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; public class SignupProcessCompleteActivity extends AppCompatActivity { private AppCompatTextView congratsLabel; private AppCompatTextView nextButton; private AppCompatTextView signupCompleteLabel; + private CustomFirebaseAnalytics analyticsInstance; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_signup_process_complete); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); initializeXmlId(); setFont(); @@ -68,6 +71,12 @@ private void bindEvents() { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.signup_process_complete_done)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if (getIntent().getStringExtra("from") != null && getIntent().getStringExtra("from").equalsIgnoreCase("StudyInfo")) { Intent intent = new Intent(); diff --git a/Android/app/src/main/java/com/harvard/usermodule/TermsPrivacyPolicyActivity.java b/Android/app/src/main/java/com/harvard/usermodule/TermsPrivacyPolicyActivity.java index c697072c3f..22ac3ee80b 100644 --- a/Android/app/src/main/java/com/harvard/usermodule/TermsPrivacyPolicyActivity.java +++ b/Android/app/src/main/java/com/harvard/usermodule/TermsPrivacyPolicyActivity.java @@ -16,9 +16,9 @@ package com.harvard.usermodule; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.AppCompatTextView; -import android.util.Log; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.AppCompatTextView; + import android.view.View; import android.webkit.WebView; import android.webkit.WebViewClient; @@ -26,6 +26,7 @@ import com.harvard.R; import com.harvard.storagemodule.DbServiceSubscriber; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import io.realm.Realm; @@ -33,11 +34,14 @@ public class TermsPrivacyPolicyActivity extends AppCompatActivity { private RelativeLayout backBtn; private AppCompatTextView title; private WebView webView; + private CustomFirebaseAnalytics analyticsInstance; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_terms_privacy_policy); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); initializeXmlId(); setTextForView(); setFont(); @@ -106,6 +110,12 @@ private void bindEvents() { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.terms_privacy_back)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); finish(); } }); diff --git a/Android/app/src/main/java/com/harvard/usermodule/VerificationStepActivity.java b/Android/app/src/main/java/com/harvard/usermodule/VerificationStepActivity.java index 930198e576..29e4b6bfbc 100644 --- a/Android/app/src/main/java/com/harvard/usermodule/VerificationStepActivity.java +++ b/Android/app/src/main/java/com/harvard/usermodule/VerificationStepActivity.java @@ -21,13 +21,13 @@ import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; -import android.support.customtabs.CustomTabsIntent; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.AppCompatEditText; -import android.support.v7.widget.AppCompatTextView; import android.view.View; import android.widget.RelativeLayout; import android.widget.Toast; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.AppCompatEditText; +import androidx.appcompat.widget.AppCompatTextView; +import androidx.browser.customtabs.CustomTabsIntent; import com.harvard.R; import com.harvard.gatewaymodule.GatewayActivity; import com.harvard.storagemodule.DbServiceSubscriber; @@ -36,6 +36,7 @@ import com.harvard.usermodule.model.Apps; import com.harvard.usermodule.webservicemodel.LoginData; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import com.harvard.utils.SharedPreferenceHelper; import com.harvard.utils.Urls; @@ -67,11 +68,13 @@ public class VerificationStepActivity extends AppCompatActivity private String emailId; private String type; private LoginData loginData; + private CustomFirebaseAnalytics analyticsInstance; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_verification_step); + analyticsInstance = CustomFirebaseAnalytics.getInstance(this); userId = getIntent().getStringExtra("userid"); auth = getIntent().getStringExtra("auth"); emailId = getIntent().getStringExtra("email"); @@ -145,9 +148,13 @@ private void bindEvents() { new View.OnClickListener() { @Override public void onClick(View view) { - SharedPreferences settings = - SharedPreferenceHelper.getPreferences(VerificationStepActivity.this); - settings.edit().clear().apply(); + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.verification_step_back)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); + SharedPreferenceHelper.deletePreferences(VerificationStepActivity.this); // delete passcode from keystore String pass = AppController.refreshKeys("passcode"); if (pass != null) { @@ -161,9 +168,13 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { - SharedPreferences settings = - SharedPreferenceHelper.getPreferences(VerificationStepActivity.this); - settings.edit().clear().apply(); + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.verification_step_cancel)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); + SharedPreferenceHelper.deletePreferences(VerificationStepActivity.this); // delete passcode from keystore String pass = AppController.refreshKeys("passcode"); if (pass != null) { @@ -177,7 +188,12 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { - + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.verification_step_submit)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); VerifyUserEvent verifyUserEvent = new VerifyUserEvent(); HashMap params = new HashMap<>(); HashMap header = new HashMap(); @@ -216,6 +232,12 @@ public void onClick(View view) { new View.OnClickListener() { @Override public void onClick(View view) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + getString(R.string.verification_step_resend)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); AppController.getHelperProgressDialog() .showProgress(VerificationStepActivity.this, "", "", false); ResendEmailEvent resendEmailEvent = new ResendEmailEvent(); @@ -305,9 +327,7 @@ public void asyncResponseFailure(int responseCode, String errormsg, String statu if (statusCode.equalsIgnoreCase("401")) { Toast.makeText(this, errormsg, Toast.LENGTH_SHORT).show(); if (from != null && from.equalsIgnoreCase("Activity")) { - SharedPreferences settings = - SharedPreferenceHelper.getPreferences(VerificationStepActivity.this); - settings.edit().clear().apply(); + SharedPreferenceHelper.deletePreferences(this); // delete passcode from keystore String pass = AppController.refreshKeys("passcode"); if (pass != null) { @@ -330,9 +350,7 @@ public void asyncResponseFailure(int responseCode, String errormsg, String statu @Override public void onBackPressed() { super.onBackPressed(); - SharedPreferences settings = - SharedPreferenceHelper.getPreferences(VerificationStepActivity.this); - settings.edit().clear().apply(); + SharedPreferenceHelper.deletePreferences(this); // delete passcode from keystore String pass = AppController.refreshKeys("passcode"); if (pass != null) { diff --git a/Android/app/src/main/java/com/harvard/utils/ActiveTaskService.java b/Android/app/src/main/java/com/harvard/utils/ActiveTaskService.java index 80226106b3..225ffb45a3 100644 --- a/Android/app/src/main/java/com/harvard/utils/ActiveTaskService.java +++ b/Android/app/src/main/java/com/harvard/utils/ActiveTaskService.java @@ -22,13 +22,14 @@ import android.app.Service; import android.content.Context; import android.content.Intent; +import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Build; import android.os.IBinder; import android.os.PowerManager; -import android.support.annotation.Nullable; -import android.support.v4.app.NotificationCompat; +import androidx.annotation.Nullable; +import androidx.core.app.NotificationCompat; import com.harvard.FdaApplication; import com.harvard.R; import com.harvard.offlinemodule.model.OfflineData; @@ -70,21 +71,25 @@ public int onStartCommand(final Intent intent, int flags, int startId) { && intent.getStringExtra("broadcast").equalsIgnoreCase("yes")) { startAlarm(); } else if (intent.getStringExtra("SyncAdapter") != null) { - realm = AppController.getRealmobj(this); - Bitmap icon = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher); - Notification notification = - new NotificationCompat.Builder(this) - .setContentTitle(getResources().getString(R.string.app_name)) - .setTicker("Sync adapter") - .setContentText("Syncing offline data") - .setChannelId(FdaApplication.NOTIFICATION_CHANNEL_ID_SERVICE) - .setSmallIcon(R.mipmap.ic_launcher) - .setLargeIcon(Bitmap.createScaledBitmap(icon, 128, 128, false)) - .setOngoing(true) - .build(); + try { + realm = AppController.getRealmobj(this); + Bitmap icon = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher); + Notification notification = + new NotificationCompat.Builder(this) + .setContentTitle(getResources().getString(R.string.app_name)) + .setTicker("Sync adapter") + .setContentText("Syncing offline data") + .setChannelId(FdaApplication.NOTIFICATION_CHANNEL_ID_SERVICE) + .setSmallIcon(R.mipmap.ic_launcher) + .setLargeIcon(Bitmap.createScaledBitmap(icon, 128, 128, false)) + .setOngoing(true) + .build(); - startForeground(102, notification); - getPendingData(); + startForeground(102, notification); + getPendingData(); + } catch (Exception e) { + Logger.log(e); + } } else { try { sec = 0; @@ -174,7 +179,13 @@ private void startAlarm() { try { Calendar localCalendar = Calendar.getInstance(); Intent intent1 = new Intent(this, AlarmService.class); - PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 0, intent1, 0); + PendingIntent alarmIntent; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + alarmIntent = + PendingIntent.getBroadcast(this, 0, intent1, 0 | PendingIntent.FLAG_IMMUTABLE); + } else { + alarmIntent = PendingIntent.getBroadcast(this, 0, intent1, 0); + } AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); // 21600000 alarmManager.setAlarmClock( new AlarmManager.AlarmClockInfo(localCalendar.getTimeInMillis() + 180000, alarmIntent), diff --git a/Android/app/src/main/java/com/harvard/utils/AppController.java b/Android/app/src/main/java/com/harvard/utils/AppController.java index f646551bcb..58aefbdc34 100644 --- a/Android/app/src/main/java/com/harvard/utils/AppController.java +++ b/Android/app/src/main/java/com/harvard/utils/AppController.java @@ -26,16 +26,21 @@ import android.graphics.Typeface; import android.net.Uri; import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; import android.security.KeyPairGeneratorSpec; -import android.support.v4.app.NotificationManagerCompat; -import android.support.v4.content.ContextCompat; -import android.support.v7.app.AlertDialog; import android.util.Base64; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; import android.widget.TextView; +import android.widget.Toast; +import androidx.appcompat.app.AlertDialog; +import androidx.core.app.NotificationManagerCompat; +import androidx.core.content.ContextCompat; import com.harvard.AppConfig; import com.harvard.BuildConfig; import com.harvard.R; @@ -45,7 +50,6 @@ import com.harvard.offlinemodule.model.OfflineData; import com.harvard.storagemodule.DbServiceSubscriber; import com.harvard.studyappmodule.StandaloneActivity; -import com.harvard.studyappmodule.StudyActivity; import com.harvard.studyappmodule.studymodel.Resource; import com.harvard.utils.realm.RealmEncryptionHelper; import com.harvard.utils.realm.RealmMigrationHelper; @@ -59,7 +63,6 @@ import java.io.FileOutputStream; import java.io.IOException; import java.math.BigInteger; -import java.net.URLDecoder; import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; import java.security.KeyPairGenerator; @@ -80,7 +83,6 @@ import java.util.Map; import java.util.Random; import java.util.regex.Pattern; - import javax.crypto.Cipher; import javax.crypto.CipherInputStream; import javax.crypto.CipherOutputStream; @@ -102,6 +104,8 @@ public class AppController { private static final String TAG = "FDAKeystore"; private static String keystoreValue = null; public static String loginCallback = "login_callback"; + public static int SchemaVersion = 2; + private static CustomFirebaseAnalytics analyticsInstance; public static final String STARTING_TAGS = "<\\w+((\\s+\\w+(\\s*=\\s*(?:\".*?\"|'.*?'|[^'\">\\s]+))?)+\\s*|\\s*)>"; public static final String ENDDING_TAGS = ""; @@ -149,8 +153,7 @@ public static boolean getHelperIsValidEmail(String target) { } public static void getHelperSessionExpired(Context context, String msg) { - SharedPreferences settings = SharedPreferenceHelper.getPreferences(context); - settings.edit().clear().apply(); + SharedPreferenceHelper.deletePreferences(context); // delete passcode from keystore String pass = AppController.refreshKeys("passcode"); if (pass != null) { @@ -254,19 +257,62 @@ public static Typeface getHelveticaTypeface(Context context) { return retTypeface; } - public static Realm getRealmobj(Context context) { - if (config == null) { - RealmEncryptionHelper realmEncryptionHelper = - RealmEncryptionHelper.initHelper(context, context.getString(R.string.app_name)); - byte[] key = realmEncryptionHelper.getEncryptKey(); - config = + public static Realm getRealmobj(final Context context) { + Realm realm; + try { + realm = Realm.getDefaultInstance(); + } catch (Exception e) { + byte[] key = AppController.getkey(context, context.getString(R.string.app_name)); + RealmConfiguration config = + new RealmConfiguration.Builder() + .encryptionKey(key) + .schemaVersion(SchemaVersion) + .migration(new RealmMigrationHelper()) + .build(); + Realm.removeDefaultConfiguration(); + Realm.setDefaultConfiguration(config); + realm = Realm.getDefaultInstance(); + Logger.log(e); + } + return realm; + } + + private static byte[] getkey(Context context, String keyName) { + RealmEncryptionHelper realmEncryptionHelper = RealmEncryptionHelper.initHelper(context, keyName); + byte[] key = realmEncryptionHelper.getEncryptKey(); + String s = bytesToHex(key); + Log.wtf("realm key for " + keyName, "" + s); + return key; + } + + public static void checkIfAppNameChangeAndMigrate(Context context) { + if (!context.getString(R.string.app_name).equalsIgnoreCase(SharedPreferenceHelper.readPreference(context, "appname", context.getString(R.string.app_name)))) { + byte[] key = getkey(context, SharedPreferenceHelper.readPreference(context, "appname", context.getString(R.string.app_name))); + RealmConfiguration config = new RealmConfiguration.Builder() .encryptionKey(key) - .schemaVersion(2) + .schemaVersion(SchemaVersion) .migration(new RealmMigrationHelper()) .build(); + Realm realm = Realm.getInstance(config); + RealmEncryptionHelper.getInstance().deleteEntry(SharedPreferenceHelper.readPreference(context, "appname", context.getString(R.string.app_name))); + byte[] NewKey = getkey(context, context.getString(R.string.app_name)); + realm.writeEncryptedCopyTo(new File(context.getFilesDir(), "temp.realm"), NewKey); + realm.close(); + File file = new File(context.getFilesDir(), "default.realm"); + file.delete(); + renameFile(context, "temp.realm", "default.realm"); } - return Realm.getInstance(config); + byte[] key = AppController.getkey(context, context.getString(R.string.app_name)); + RealmConfiguration config = + new RealmConfiguration.Builder() + .encryptionKey(key) + .schemaVersion(SchemaVersion) + .migration(new RealmMigrationHelper()) + .build(); + Realm.removeDefaultConfiguration(); + Realm.setDefaultConfiguration(config); + SharedPreferenceHelper.writePreference(context, "appname", context.getString(R.string.app_name)); } public static void clearDBfile() { @@ -427,12 +473,26 @@ public static AlertDialog setNeutralDialog( .setPositiveButton( positiveButton, new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int id) {} + public void onClick(DialogInterface dialog, int id) { + analyticsInstance = CustomFirebaseAnalytics.getInstance(context); + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.custom_data_question_ok)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); + } }) .setNegativeButton( context.getResources().getString(R.string.cancel), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.custom_data_question_cancel)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); dialog.dismiss(); if (finish) { ((Activity) context).finish(); @@ -448,6 +508,12 @@ public void onClick(DialogInterface dialog, int id) { new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.custom_data_question_ok)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); // Do stuff, possibly set wantToCloseDialog to true then... final String appPackageName = context.getPackageName(); try { @@ -483,6 +549,11 @@ public void onClick(View v) { new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString(CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.custom_data_question_cancel)); + analyticsInstance.logEvent(CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, + eventProperties); alertDialog.dismiss(); ((SplashActivity) context).loadsplash(); } @@ -502,6 +573,11 @@ public void onClick(View v) { new View.OnClickListener() { @Override public void onClick(View v) { + Bundle eventProperties = new Bundle(); + eventProperties.putString(CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.upgrade)); + analyticsInstance.logEvent(CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, + eventProperties); final String appPackageName = context.getPackageName(); try { ((Activity) context) @@ -881,8 +957,7 @@ public static void pendingService( } public static void forceSignout(Context context) { - SharedPreferences settings = SharedPreferenceHelper.getPreferences(context); - settings.edit().clear().apply(); + SharedPreferenceHelper.deletePreferences(context); // delete passcode from keystore String pass = AppController.refreshKeys("passcode"); if (pass != null) { @@ -926,8 +1001,7 @@ public static void forceSignout(Context context) { } public static void signout(Context context) { - SharedPreferences settings = SharedPreferenceHelper.getPreferences(context); - settings.edit().clear().apply(); + SharedPreferenceHelper.deletePreferences(context); // delete passcode from keystore String pass = AppController.refreshKeys("passcode"); if (pass != null) { @@ -968,6 +1042,34 @@ public static void signout(Context context) { } } + public static void clearAllAppData(Context context) { + SharedPreferenceHelper.deletePreferences(context); + // delete passcode from keystore + String pass = AppController.refreshKeys("passcode"); + if (pass != null) { + AppController.deleteKey("passcode_" + pass); + } + DbServiceSubscriber dbServiceSubscriber = new DbServiceSubscriber(); + Realm realm = getRealmobj(context); + dbServiceSubscriber.deleteDb(context); + try { + NotificationModuleSubscriber notificationModuleSubscriber = + new NotificationModuleSubscriber(dbServiceSubscriber, realm); + notificationModuleSubscriber.cancleActivityLocalNotification(context); + notificationModuleSubscriber.cancleResourcesLocalNotification(context); + } catch (Exception e) { + Logger.log(e); + } + NotificationModuleSubscriber notificationModuleSubscriber = + new NotificationModuleSubscriber(dbServiceSubscriber, realm); + notificationModuleSubscriber.cancelNotificationTurnOffNotification(context); + dbServiceSubscriber.closeRealmObj(realm); + + // clear notifications from notification tray + NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context); + notificationManager.cancelAll(); + } + public static String getHashedValue(String valueToHash) { String generatedHash = null; try { @@ -1047,4 +1149,34 @@ public static boolean isMyServiceRunning(Context context, Class serviceClass) } return false; } + + private static final char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray(); + + public static String bytesToHex(byte[] bytes) { + char[] hexChars = new char[bytes.length * 2]; + for (int j = 0; j < bytes.length; j++) { + int v = bytes[j] & 0xFF; + hexChars[j * 2] = HEX_ARRAY[v >>> 4]; + hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F]; + } + return new String(hexChars); + } + + + public static void renameFile(Context context, String oldName, String newName) { + File dir = context.getFilesDir(); + if (dir.exists()) { + File from = new File(dir, oldName); + File to = new File(dir, newName); + if (from.exists()) { + from.renameTo(to); + } + } + } + + public static ArrayList getExcludePreferenceList() { + ArrayList excludedList = new ArrayList<>(); + excludedList.add("appname"); + return excludedList; + } } diff --git a/Android/app/src/main/java/com/harvard/utils/CustomFirebaseAnalytics.java b/Android/app/src/main/java/com/harvard/utils/CustomFirebaseAnalytics.java new file mode 100644 index 0000000000..92a7e19f2c --- /dev/null +++ b/Android/app/src/main/java/com/harvard/utils/CustomFirebaseAnalytics.java @@ -0,0 +1,51 @@ +/* + * Copyright 2020 Google LLC + * + * Use of this source code is governed by an MIT-style + * license that can be found in the LICENSE file or at + * https://opensource.org/licenses/MIT. + */ + +package com.harvard.utils; + +import android.content.Context; +import android.os.Bundle; +import com.google.firebase.analytics.FirebaseAnalytics; + +public class CustomFirebaseAnalytics { + + private static volatile CustomFirebaseAnalytics instance; + private static FirebaseAnalytics firebaseAnalytics; + + public static CustomFirebaseAnalytics getInstance(Context context) { + if (instance == null) { + synchronized (CustomFirebaseAnalytics.class) { + if (instance == null) { + instance = new CustomFirebaseAnalytics(); + } + } + } + firebaseAnalytics = FirebaseAnalytics.getInstance(context); + return instance; + } + + public static class Param { + + public static final String BUTTON_CLICK_REASON = "button_click_reason"; + + protected Param() { + } + } + + public static class Event { + + public static final String ADD_BUTTON_CLICK = "add_button_click"; + + protected Event() { + } + } + + public void logEvent(String eventName, Bundle eventProperties) { + firebaseAnalytics.logEvent(eventName, eventProperties); + } +} diff --git a/Android/app/src/main/java/com/harvard/utils/PdfViewerView.java b/Android/app/src/main/java/com/harvard/utils/PdfViewerView.java new file mode 100644 index 0000000000..e34b72b20f --- /dev/null +++ b/Android/app/src/main/java/com/harvard/utils/PdfViewerView.java @@ -0,0 +1,237 @@ +/* + * Copyright 2020 Google LLC + * + * Use of this source code is governed by an MIT-style + * license that can be found in the LICENSE file or at + * https://opensource.org/licenses/MIT. + */ + +package com.harvard.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.pdf.PdfRenderer; +import android.os.Build; +import android.os.ParcelFileDescriptor; +import android.util.AttributeSet; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import androidx.annotation.NonNull; +import androidx.annotation.RequiresApi; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; +import com.github.chrisbanes.photoview.PhotoView; +import com.google.android.material.tabs.TabLayout; +import com.harvard.R; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; + +@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) +public class PdfViewerView extends ViewPager { + + private PdfRenderer pdfRender; + Context context; + + public PdfViewerView(Context context) { + super(context); + this.context = context; + } + + public PdfViewerView(Context context, AttributeSet attrs) { + super(context, attrs); + this.context = context; + } + + + /** + * Uses the {@link ParcelFileDescriptor} directly, see {@link PdfRenderer(ParcelFileDescriptor)} + * + * @param input {@link ParcelFileDescriptor} + */ + public void setPdf(@NonNull ParcelFileDescriptor input) { + if (pdfRender != null) { + pdfRender.close(); + } + try { + pdfRender = new PdfRenderer(input); + } catch (IOException e) { + throw new RuntimeException(e); + } + PdfAdapter pdfAdapter = new PdfAdapter(context, pdfRender); + TabLayout tabLayout = (TabLayout) this.findViewById(R.id.tab_layout); + tabLayout.setupWithViewPager(this, true); + setAdapter(pdfAdapter); + } + + /** + * Sets the pdf with the file uses {@link #setPdf(ParcelFileDescriptor)} internally + * + * @param file of the pdf to load + */ + public void setPdf(@NonNull File file) { + try { + setPdf(ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY)); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + /** + * Sets a pdf to view from the assets directory + * + * @param assetFile the path and name of the asset to load + */ + public void setPdfFromAsset(@NonNull String assetFile) { + try { + File file = new File(context.getFilesDir(), assetFile); + if (!file.exists()) { + // copy to the assets dir + InputStream asset = context.getAssets().open(assetFile); + FileOutputStream output = new FileOutputStream(file); + final byte[] buffer = new byte[1024]; + int size; + while ((size = asset.read(buffer)) != -1) { + output.write(buffer, 0, size); + } + asset.close(); + output.close(); + } + setPdf(file); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + /** + * Sets a pdf to view from a byte array + * + * @param bytes for the file + * @param name the name of the file to save in the app's cache dir + */ + public void setPdfFromBytes(@NonNull byte[] bytes, @NonNull String name) { + File file = new File("/data/data/" + context.getPackageName() + "/files/", name); + try { + if (name.equalsIgnoreCase("temp.pdf") && file.exists()) { + file.delete(); + } + if (!file.exists()) { + BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file)); + bos.write(bytes); + bos.flush(); + bos.close(); + } + setPdf(file); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + /** + * @return The current page count + */ + public int getPageCount() { + return pdfRender == null ? 0 : pdfRender.getPageCount(); + } + + /** + * @return The current page via {@link #getCurrentItem()} + */ + public int getCurrentPage() { + return getCurrentItem(); + } + + private static class PdfAdapter extends PagerAdapter { + + @NonNull + private final PdfRenderer renderer; + private final int count; + private PdfRenderer.Page currentPage; + @NonNull + private final Context context; + + private PdfAdapter(@NonNull Context context, @NonNull PdfRenderer renderer) { + this.context = context; + this.count = renderer.getPageCount(); + this.renderer = renderer; + } + + @Override + public int getCount() { + return count; + } + + @Override + public Object instantiateItem(ViewGroup container, int position) { + if (currentPage != null) { + try { + currentPage.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + currentPage = renderer.openPage(position); + + final Bitmap bitmap = Bitmap.createBitmap(currentPage.getWidth(), currentPage.getHeight(), + Bitmap.Config.ARGB_8888); + Runnable runnable = new Runnable() { + public void run() { + currentPage.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY); + } + }; + runnable.run(); + + PhotoView photoView = new PhotoView(context); + + photoView.setImageBitmap(bitmap); + + container.addView(photoView); + + return photoView; + } + + @Override + public void destroyItem(ViewGroup container, int position, Object object) { + try { + if (currentPage != null) { + try { + currentPage.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } catch (Exception e) { + // no op, need to make sure it is closed + } + + container.removeView((View) object); + } + + @Override + public boolean isViewFromObject(View view, Object object) { + return view == object; + } + } + @Override + public boolean onTouchEvent(MotionEvent ev) { + try { + return super.onTouchEvent(ev); + } catch (IllegalArgumentException ex) { + ex.printStackTrace(); + } + return false; + } + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + try { + return super.onInterceptTouchEvent(ev); + } catch (IllegalArgumentException ex) { + ex.printStackTrace(); + } + return false; + } +} diff --git a/Android/app/src/main/java/com/harvard/utils/ProgressDialogHelper.java b/Android/app/src/main/java/com/harvard/utils/ProgressDialogHelper.java index 9e3946ed41..a90d16cfe0 100644 --- a/Android/app/src/main/java/com/harvard/utils/ProgressDialogHelper.java +++ b/Android/app/src/main/java/com/harvard/utils/ProgressDialogHelper.java @@ -146,6 +146,12 @@ public void dismissDialog() { } } + public void updateMsg(String msg){ + if (ringProgressDialog != null && ringProgressDialog.isShowing()) { + ringProgressDialog.setMessage(msg); + } + } + private static Drawable getdrawable(Context context, int id) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { return context.getResources().getDrawable(id, context.getTheme()); diff --git a/Android/app/src/main/java/com/harvard/utils/SetDialogHelper.java b/Android/app/src/main/java/com/harvard/utils/SetDialogHelper.java index 6b81740874..06efe52c53 100644 --- a/Android/app/src/main/java/com/harvard/utils/SetDialogHelper.java +++ b/Android/app/src/main/java/com/harvard/utils/SetDialogHelper.java @@ -18,7 +18,8 @@ import android.app.Activity; import android.content.Context; import android.content.DialogInterface; -import android.support.v7.app.AlertDialog; +import android.os.Bundle; +import androidx.appcompat.app.AlertDialog; import com.harvard.R; public class SetDialogHelper { @@ -31,6 +32,8 @@ public class SetDialogHelper { * @param finish whether to finish the activity * @param positiveButton Name of pos button */ + private static CustomFirebaseAnalytics analyticsInstance; + public static void setNeutralDialog( final Context context, String message, @@ -39,6 +42,7 @@ public static void setNeutralDialog( String title) { AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context, R.style.MyAlertDialogStyle); + analyticsInstance = CustomFirebaseAnalytics.getInstance(context); alertDialogBuilder.setTitle(title); alertDialogBuilder .setMessage(message) @@ -47,6 +51,12 @@ public static void setNeutralDialog( positiveButton, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.custom_message_ok)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); if (finish) { ((Activity) context).finish(); } @@ -65,6 +75,7 @@ public void onClick(DialogInterface dialog, int id) { */ public static void setDialogResultOK( final Context context, String message, String positiveButton) { + analyticsInstance = CustomFirebaseAnalytics.getInstance(context); AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context, R.style.MyAlertDialogStyle); alertDialogBuilder.setTitle( @@ -76,6 +87,11 @@ public static void setDialogResultOK( positiveButton, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { + Bundle eventProperties = new Bundle(); + eventProperties.putString(CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.custom_message_ok)); + analyticsInstance.logEvent(CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, + eventProperties); ((Activity) context).setResult(Activity.RESULT_OK); ((Activity) context).finish(); } @@ -94,6 +110,7 @@ public void onClick(DialogInterface dialog, int which) { */ public static void setDialogResultOkWithCancel( final Context context, String message, String positiveButton, String negativeButton) { + analyticsInstance = CustomFirebaseAnalytics.getInstance(context); AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context, R.style.MyAlertDialogStyle); alertDialogBuilder.setTitle( @@ -105,6 +122,11 @@ public static void setDialogResultOkWithCancel( positiveButton, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { + Bundle eventProperties = new Bundle(); + eventProperties.putString(CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.custom_message_ok)); + analyticsInstance.logEvent(CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, + eventProperties); ((Activity) context).setResult(Activity.RESULT_OK); ((Activity) context).finish(); } @@ -113,6 +135,11 @@ public void onClick(DialogInterface dialog, int which) { negativeButton, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { + Bundle eventProperties = new Bundle(); + eventProperties.putString(CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.negative)); + analyticsInstance.logEvent(CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, + eventProperties); ((Activity) context).finish(); } }); diff --git a/Android/app/src/main/java/com/harvard/utils/SharedPreferenceHelper.java b/Android/app/src/main/java/com/harvard/utils/SharedPreferenceHelper.java index 2603e328b5..e573802ff8 100644 --- a/Android/app/src/main/java/com/harvard/utils/SharedPreferenceHelper.java +++ b/Android/app/src/main/java/com/harvard/utils/SharedPreferenceHelper.java @@ -17,6 +17,8 @@ import android.content.Context; import android.content.SharedPreferences; +import java.util.ArrayList; +import java.util.Map; public class SharedPreferenceHelper { @@ -65,4 +67,21 @@ public static SharedPreferences getPreferences(Context context) { private static SharedPreferences.Editor getEditor(Context context) { return getPreferences(context).edit(); } + + public static void deletePreferences(Context context) { + ArrayList excludeKey = AppController.getExcludePreferenceList(); + SharedPreferences sharedPreferences = getPreferences(context); + Map mapPref = sharedPreferences.getAll(); + if (!excludeKey.isEmpty()) { + for (int i = 0; i < excludeKey.size(); i++) { + if (mapPref.containsKey(excludeKey.get(i))) { + mapPref.remove(excludeKey.get(i)); + } + } + } + + for (Map.Entry prefToRemove : mapPref.entrySet()) { + sharedPreferences.edit().remove(prefToRemove.getKey()).apply(); + } + } } diff --git a/Android/app/src/main/java/com/harvard/utils/VerticalSeekBar.java b/Android/app/src/main/java/com/harvard/utils/VerticalSeekBar.java index c9a1867471..7062ecca87 100644 --- a/Android/app/src/main/java/com/harvard/utils/VerticalSeekBar.java +++ b/Android/app/src/main/java/com/harvard/utils/VerticalSeekBar.java @@ -21,7 +21,7 @@ import android.view.MotionEvent; @SuppressWarnings("DefaultFileTemplate") -public class VerticalSeekBar extends android.support.v7.widget.AppCompatSeekBar { +public class VerticalSeekBar extends androidx.appcompat.widget.AppCompatSeekBar { private OnSeekBarChangeListener seekBarListener; public VerticalSeekBar(Context context) { diff --git a/Android/app/src/main/java/com/harvard/utils/realm/Logger.java b/Android/app/src/main/java/com/harvard/utils/realm/Logger.java index 08eecf2b52..dbeeec8408 100644 --- a/Android/app/src/main/java/com/harvard/utils/realm/Logger.java +++ b/Android/app/src/main/java/com/harvard/utils/realm/Logger.java @@ -15,7 +15,7 @@ package com.harvard.utils.realm; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.util.Log; import com.harvard.BuildConfig; import com.harvard.FdaApplication; diff --git a/Android/app/src/main/java/com/harvard/utils/realm/RealmEncryptionHelper.java b/Android/app/src/main/java/com/harvard/utils/realm/RealmEncryptionHelper.java index 3f3a3bf5b5..13139458b5 100644 --- a/Android/app/src/main/java/com/harvard/utils/realm/RealmEncryptionHelper.java +++ b/Android/app/src/main/java/com/harvard/utils/realm/RealmEncryptionHelper.java @@ -23,6 +23,8 @@ import android.security.keystore.KeyGenParameterSpec; import android.security.keystore.KeyProperties; import android.util.Base64; +import android.util.Log; + import com.harvard.R; import com.harvard.utils.Logger; import java.io.ByteArrayInputStream; @@ -30,9 +32,16 @@ import java.math.BigInteger; import java.security.KeyPairGenerator; import java.security.KeyStore; +import java.security.KeyStoreException; +import java.security.PrivateKey; +import java.security.PublicKey; import java.security.SecureRandom; +import java.security.cert.Certificate; import java.util.ArrayList; +import java.util.Arrays; import java.util.Calendar; +import java.util.Enumeration; + import javax.crypto.Cipher; import javax.crypto.CipherInputStream; import javax.crypto.CipherOutputStream; @@ -47,17 +56,12 @@ public class RealmEncryptionHelper { private static final String ANDROID_KEY_STORE = "AndroidKeyStore"; private static final String RSA_MODE = "RSA/ECB/PKCS1Padding"; private static final String ENCRYPTED_KEY = "ENCRYPTED_KEY"; - private String keyName; - private KeyStore keyStore; - private SharedPreferences prefsHelper; public static RealmEncryptionHelper initHelper(Context context, String keyName) { - if (instance == null) { - instance = new RealmEncryptionHelper(context, keyName); - } + instance = new RealmEncryptionHelper(context, keyName); return instance; } @@ -74,14 +78,23 @@ private RealmEncryptionHelper(Context context, String keyName) { prefsHelper = PreferenceManager.getDefaultSharedPreferences(context); } + public void deleteEntry(String alias) { + try { + keyStore = KeyStore.getInstance(ANDROID_KEY_STORE); + keyStore.load(null); + keyStore.deleteEntry(alias); + } catch (Exception e) { + Logger.log(e); + } + } + @SuppressWarnings("NewApi") public byte[] getEncryptKey() { byte[] encryptedKey = new byte[64]; try { keyStore = KeyStore.getInstance(ANDROID_KEY_STORE); keyStore.load(null); - - if (!keyStore.containsAlias(context.getString(R.string.app_name))) { + if (!keyStore.containsAlias(keyName)) { // Create new key and save to KeyStore KeyPairGenerator kpg = KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_RSA, ANDROID_KEY_STORE); @@ -128,27 +141,28 @@ private byte[] getSecretKey() { String encryptedKeyB64 = prefsHelper.getString(ENCRYPTED_KEY, null); byte[] key = new byte[64]; try { - byte[] encryptedKey = Base64.decode(encryptedKeyB64, Base64.DEFAULT); - key = rsaDecrypt(encryptedKey); - + if (encryptedKeyB64 == null || encryptedKeyB64.equalsIgnoreCase("")) { + deleteEntry(keyName); + key = getEncryptKey(); + } else { + byte[] encryptedKey = Base64.decode(encryptedKeyB64, Base64.DEFAULT); + key = rsaDecrypt(encryptedKey); + } } catch (Exception e) { Logger.log(e); } - return key; } private byte[] generate64BitSecretKey() { byte[] key = new byte[64]; + String encryptedKeyB64; try { - String encryptedKeyB64 = prefsHelper.getString(ENCRYPTED_KEY, null); - if (encryptedKeyB64 == null) { - SecureRandom secureRandom = new SecureRandom(); - secureRandom.nextBytes(key); - byte[] encryptedKey = rsaEncrypt(key); - encryptedKeyB64 = Base64.encodeToString(encryptedKey, Base64.DEFAULT); - prefsHelper.edit().putString(ENCRYPTED_KEY, encryptedKeyB64).apply(); - } + SecureRandom secureRandom = new SecureRandom(); + secureRandom.nextBytes(key); + byte[] encryptedKey = rsaEncrypt(key); + encryptedKeyB64 = Base64.encodeToString(encryptedKey, Base64.DEFAULT); + prefsHelper.edit().putString(ENCRYPTED_KEY, encryptedKeyB64).apply(); } catch (Exception e) { Logger.log(e); } @@ -157,7 +171,9 @@ private byte[] generate64BitSecretKey() { private byte[] rsaEncrypt(byte[] secret) throws Exception { Cipher inputCipher = Cipher.getInstance(RSA_MODE); - inputCipher.init(Cipher.ENCRYPT_MODE, keyStore.getCertificate(keyName).getPublicKey()); + Certificate cert = keyStore.getCertificate(keyName); + PublicKey publicKey = cert.getPublicKey(); + inputCipher.init(Cipher.ENCRYPT_MODE, publicKey); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); CipherOutputStream cipherOutputStream = new CipherOutputStream(outputStream, inputCipher); diff --git a/Android/app/src/main/java/com/harvard/utils/realm/RealmMigrationHelper.java b/Android/app/src/main/java/com/harvard/utils/realm/RealmMigrationHelper.java index c26af49a70..2ab73ff443 100644 --- a/Android/app/src/main/java/com/harvard/utils/realm/RealmMigrationHelper.java +++ b/Android/app/src/main/java/com/harvard/utils/realm/RealmMigrationHelper.java @@ -35,78 +35,116 @@ public void migrate(final DynamicRealm realm, long oldVersion, long newVersion) if (oldVersion == 0) { // time separated into start and end time RealmObjectSchema anchorRuns = schema.get("AnchorRuns"); - anchorRuns - .addField("startTime", String.class) - .addField("endTime", String.class) - .transform( - new RealmObjectSchema.Function() { - @Override - public void apply(DynamicRealmObject obj) { - obj.set("startTime", obj.getString("time")); - obj.set("endTime", obj.getString("time")); - } - }) - .removeField("time"); + if (anchorRuns != null && !anchorRuns.hasField("startTime")) { + anchorRuns + .addField("startTime", String.class) + .transform( + new RealmObjectSchema.Function() { + @Override + public void apply(DynamicRealmObject obj) { + obj.set("startTime", obj.getString("time")); + } + }); + } + if (anchorRuns != null && !anchorRuns.hasField("endTime")) { + anchorRuns + .addField("endTime", String.class) + .transform( + new RealmObjectSchema.Function() { + @Override + public void apply(DynamicRealmObject obj) { + obj.set("endTime", obj.getString("time")); + } + }); + } + if (anchorRuns != null && anchorRuns.hasField("time")) { + anchorRuns.removeField("time"); + } // Added enroll field RealmObjectSchema consentDocumentData = schema.get("ConsentDocumentData"); - consentDocumentData - .addField("enrollAgain", boolean.class) - .transform( - new RealmObjectSchema.Function() { - @Override - public void apply(DynamicRealmObject obj) { - obj.set("enrollAgain", false); - } - }); + if (consentDocumentData != null && !consentDocumentData.hasField("enrollAgain")) { + consentDocumentData + .addField("enrollAgain", boolean.class) + .transform( + new RealmObjectSchema.Function() { + @Override + public void apply(DynamicRealmObject obj) { + obj.set("enrollAgain", false); + } + }); + } RealmObjectSchema studyUpdate = schema.get("StudyUpdate"); - studyUpdate - .addField("enrollAgain", boolean.class) - .transform( - new RealmObjectSchema.Function() { - @Override - public void apply(DynamicRealmObject obj) { - obj.set("enrollAgain", false); - } - }); + if (studyUpdate != null && !studyUpdate.hasField("enrollAgain")) { + studyUpdate + .addField("enrollAgain", boolean.class) + .transform( + new RealmObjectSchema.Function() { + @Override + public void apply(DynamicRealmObject obj) { + obj.set("enrollAgain", false); + } + }); + } oldVersion++; } else if (oldVersion == 1) { // Added verificationTime field RealmObjectSchema profile = schema.get("Profile"); - profile - .addField("verificationTime", String.class) - .transform( - new RealmObjectSchema.Function() { - @Override - public void apply(DynamicRealmObject obj) { - obj.set("verificationTime", ""); - } - }); + if (profile != null && !profile.hasField("verificationTime")) { + profile + .addField("verificationTime", String.class) + .transform( + new RealmObjectSchema.Function() { + @Override + public void apply(DynamicRealmObject obj) { + obj.set("verificationTime", ""); + } + }); + } // Added Apps - schema.create("Android") - .addField("latestVersion", String.class) - .addField("forceUpdate", String.class); - - schema.create("VersionModel") - .addField("android", Android.class); - - schema.create("Apps") - .addField("message", String.class) - .addField("appName", String.class) - .addField("appId", String.class) - .addField("fromEmail", String.class) - .addField("contactUsEmail", String.class) - .addField("supportEmail", String.class) - .addField("status", int.class) - .addField("code", String.class) - .addField("termsUrl", String.class) - .addField("appWebsite", String.class) - .addField("version", VersionModel.class); + if (!schema.contains("Android")) { + schema + .create("Android") + .addField("latestVersion", String.class) + .addField("forceUpdate", String.class); + } + + if (!schema.contains("VersionModel")) { + schema.create("VersionModel").addField("android", Android.class); + } + + if (!schema.contains("Apps")) { + schema + .create("Apps") + .addField("message", String.class) + .addField("appName", String.class) + .addField("appId", String.class) + .addField("fromEmail", String.class) + .addField("contactUsEmail", String.class) + .addField("supportEmail", String.class) + .addField("status", int.class) + .addField("code", String.class) + .addField("termsUrl", String.class) + .addField("appWebsite", String.class) + .addField("version", VersionModel.class); + } oldVersion++; } } + + public int hashCode() { + return RealmMigrationHelper.class.hashCode(); + } + + public boolean equals(Object object) { + if (object == null) { + return false; + } + return object instanceof RealmMigrationHelper; + } + } diff --git a/Android/app/src/main/java/com/harvard/webservicemodule/apihelper/ApiCall.java b/Android/app/src/main/java/com/harvard/webservicemodule/apihelper/ApiCall.java index a465e659e7..1fd2b8cdb1 100644 --- a/Android/app/src/main/java/com/harvard/webservicemodule/apihelper/ApiCall.java +++ b/Android/app/src/main/java/com/harvard/webservicemodule/apihelper/ApiCall.java @@ -18,7 +18,8 @@ import android.content.Context; import android.content.DialogInterface; import android.os.AsyncTask; -import android.support.v7.app.AlertDialog; +import android.os.Bundle; +import androidx.appcompat.app.AlertDialog; import com.google.gson.Gson; import com.google.gson.stream.JsonReader; import com.harvard.BuildConfig; @@ -27,6 +28,7 @@ import com.harvard.studyappmodule.activitybuilder.model.servicemodel.ActivityInfoData; import com.harvard.usermodule.webservicemodel.TokenData; import com.harvard.utils.AppController; +import com.harvard.utils.CustomFirebaseAnalytics; import com.harvard.utils.Logger; import com.harvard.utils.SharedPreferenceHelper; import com.harvard.utils.Urls; @@ -52,9 +54,11 @@ public class ApiCall extends AsyncTask { private Responsemodel responseModel; private boolean showAlert; private String serverType; + private CustomFirebaseAnalytics analyticsInstance; public ApiCall(Context context) { this.context = context; + analyticsInstance = CustomFirebaseAnalytics.getInstance(context); } /** @@ -554,6 +558,12 @@ private void setShowalert(String msg) { context.getResources().getString(R.string.ok), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { + Bundle eventProperties = new Bundle(); + eventProperties.putString( + CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON, + context.getString(R.string.error_message_ok)); + analyticsInstance.logEvent( + CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties); dialog.dismiss(); } }); diff --git a/Android/app/src/main/res/drawable/default_dot.xml b/Android/app/src/main/res/drawable/default_dot.xml new file mode 100644 index 0000000000..318c2bc339 --- /dev/null +++ b/Android/app/src/main/res/drawable/default_dot.xml @@ -0,0 +1,11 @@ + + + + + + + + \ No newline at end of file diff --git a/Android/app/src/main/res/drawable/selected_dot.xml b/Android/app/src/main/res/drawable/selected_dot.xml new file mode 100644 index 0000000000..6cc9dd8c69 --- /dev/null +++ b/Android/app/src/main/res/drawable/selected_dot.xml @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file diff --git a/Android/app/src/main/res/drawable/tab_selector.xml b/Android/app/src/main/res/drawable/tab_selector.xml new file mode 100644 index 0000000000..b7307674be --- /dev/null +++ b/Android/app/src/main/res/drawable/tab_selector.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/Android/app/src/main/res/layout/activity_change_password.xml b/Android/app/src/main/res/layout/activity_change_password.xml index 317deb17a4..5ff03c5800 100644 --- a/Android/app/src/main/res/layout/activity_change_password.xml +++ b/Android/app/src/main/res/layout/activity_change_password.xml @@ -8,7 +8,7 @@ android:background="@android:color/white" android:orientation="vertical"> - - - - + - - - - - - - - - - - - - - - - + - - - - - + - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - + - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -44,7 +44,7 @@ android:layout_height="match_parent" android:layout_weight="2.4"> - - - - - - - + - - - - + - - - - - - - + - - + android:layout_below="@id/hrLine1" + android:visibility="gone"> + + + diff --git a/Android/app/src/main/res/layout/activity_pdfgeneration.xml b/Android/app/src/main/res/layout/activity_pdfgeneration.xml index 959894787f..f3d12f807b 100644 --- a/Android/app/src/main/res/layout/activity_pdfgeneration.xml +++ b/Android/app/src/main/res/layout/activity_pdfgeneration.xml @@ -1,9 +1,22 @@ - + + + android:layout_height="match_parent" + android:visibility="gone"> + + + diff --git a/Android/app/src/main/res/layout/activity_resources_web_view.xml b/Android/app/src/main/res/layout/activity_resources_web_view.xml index a84a66fdb5..c1f4e11a3c 100644 --- a/Android/app/src/main/res/layout/activity_resources_web_view.xml +++ b/Android/app/src/main/res/layout/activity_resources_web_view.xml @@ -5,7 +5,7 @@ android:layout_height="match_parent" android:orientation="vertical"> - - - - - + - - + android:visibility="gone"> + + + + + diff --git a/Android/app/src/main/res/layout/activity_sign_in_study.xml b/Android/app/src/main/res/layout/activity_sign_in_study.xml index 9eebeb2e27..0e842004f7 100644 --- a/Android/app/src/main/res/layout/activity_sign_in_study.xml +++ b/Android/app/src/main/res/layout/activity_sign_in_study.xml @@ -7,7 +7,7 @@ android:background="@android:color/white" tool:context="com.harvard.studyappmodule.StudySignInActivity"> - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/Android/app/src/main/res/layout/activity_standalone_study_info.xml b/Android/app/src/main/res/layout/activity_standalone_study_info.xml index db8197a201..6e21b1cb60 100644 --- a/Android/app/src/main/res/layout/activity_standalone_study_info.xml +++ b/Android/app/src/main/res/layout/activity_standalone_study_info.xml @@ -12,7 +12,7 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - @@ -26,7 +26,7 @@ - - - + - - - - - - - - - - - - - - - - - - - + diff --git a/Android/app/src/main/res/layout/activity_study_info.xml b/Android/app/src/main/res/layout/activity_study_info.xml index 7e2ccc770f..c0bcb9984b 100644 --- a/Android/app/src/main/res/layout/activity_study_info.xml +++ b/Android/app/src/main/res/layout/activity_study_info.xml @@ -12,7 +12,7 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - @@ -26,7 +26,7 @@ - - - + - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/Android/app/src/main/res/layout/activity_survey_complete.xml b/Android/app/src/main/res/layout/activity_survey_complete.xml index b3477c9af1..1391ab3bac 100644 --- a/Android/app/src/main/res/layout/activity_survey_complete.xml +++ b/Android/app/src/main/res/layout/activity_survey_complete.xml @@ -18,7 +18,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content"> - - - - - - - - - + - - - - - - + - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - @@ -114,7 +114,7 @@ android:maxLines="1" android:textCursorDrawable="@drawable/custom_cursor_drawable" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - + - - - - + diff --git a/Android/app/src/main/res/layout/fragment_survey_dashboard.xml b/Android/app/src/main/res/layout/fragment_survey_dashboard.xml index e11dbf4261..8f17bbb32a 100644 --- a/Android/app/src/main/res/layout/fragment_survey_dashboard.xml +++ b/Android/app/src/main/res/layout/fragment_survey_dashboard.xml @@ -6,7 +6,7 @@ android:background="@color/white" tool:context="com.harvard.studyappmodule.SurveyDashboardFragment"> - - - - - - - + - - - - @@ -161,14 +161,14 @@ android:layout_height="wrap_content" android:layout_weight="1.45"> - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - + android:layout_width="match_parent" + android:layout_height="match_parent" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:orientation="vertical"> - + android:layout_above="@+id/sharelayout" + android:visibility="gone"> + + + - - - - - + android:layout_width="match_parent" + android:layout_height="match_parent" + xmlns:app="http://schemas.android.com/apk/res-auto"> - + android:paddingBottom="2dp" + app:rsb_gravity="bottom" + app:rsb_indicator_show_mode="alwaysHide" + app:rsb_mode="single" + app:rsb_progress_color="@color/colorAccent" + app:rsb_step_color="@color/colorAccent" + app:rsb_step_height="10dp" + app:rsb_step_width="2dp" + app:rsb_thumb_drawable="@drawable/thumb_image" + app:rsb_thumb_height="40dp" + app:rsb_thumb_width="40dp" + app:rsb_tick_mark_gravity="center" + app:rsb_tick_mark_layout_gravity="bottom" + app:rsb_tick_mark_mode="other" + app:rsb_tick_mark_text_color="@color/black_shade" /> + android:layout_width="match_parent" + android:layout_height="match_parent" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:nestedScrollingEnabled="true"> - - + - + - - + + + + - - + + \ No newline at end of file diff --git a/Android/app/src/main/res/layout/seekbar_vertical_layout.xml b/Android/app/src/main/res/layout/seekbar_vertical_layout.xml index f0db10cd06..87ce5ab734 100644 --- a/Android/app/src/main/res/layout/seekbar_vertical_layout.xml +++ b/Android/app/src/main/res/layout/seekbar_vertical_layout.xml @@ -1,8 +1,9 @@ + android:layout_width="match_parent" + android:layout_height="match_parent" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:nestedScrollingEnabled="true"> - + app:rsb_gravity="center" + app:rsb_tick_mark_orientation="vertical" + app:rsb_indicator_show_mode="alwaysHide" + app:rsb_mode="single" + app:rsb_progress_color="@color/colorAccent" + app:rsb_step_color="@color/colorAccent" + app:rsb_step_height="10dp" + app:rsb_step_width="2dp" + app:rsb_thumb_drawable="@drawable/thumb_image" + app:rsb_thumb_height="40dp" + app:rsb_thumb_width="40dp" + app:rsb_tick_mark_layout_gravity="bottom" + app:rsb_tick_mark_mode="number" + app:rsb_tick_mark_text_size="12sp" + app:rsb_tick_mark_text_color="@color/black_shade" + app:rsb_tick_mark_text_margin="-20dp" + /> - - - @@ -41,7 +41,7 @@ android:layout_height="match_parent" android:layout_above="@+id/adjustContentCentral"> - - - - - - --> - - - - - - - - + - - - - - - - @@ -194,13 +194,13 @@ android:layout_height="wrap_content" android:visibility="invisible"> - - --> - diff --git a/Android/app/src/main/res/layout/study_sign_in_list_item.xml b/Android/app/src/main/res/layout/study_sign_in_list_item.xml index 1a246a8df1..cc6de653de 100644 --- a/Android/app/src/main/res/layout/study_sign_in_list_item.xml +++ b/Android/app/src/main/res/layout/study_sign_in_list_item.xml @@ -12,7 +12,7 @@ android:paddingLeft="18dp" android:paddingTop="24dp"> - - - - - - - - - - - - - - - - diff --git a/Android/app/src/main/res/layout/top_bar_layout.xml b/Android/app/src/main/res/layout/top_bar_layout.xml index f13a59b6d9..b2a8edd674 100644 --- a/Android/app/src/main/res/layout/top_bar_layout.xml +++ b/Android/app/src/main/res/layout/top_bar_layout.xml @@ -6,7 +6,7 @@ android:layout_height="wrap_content" android:background="@android:color/white"> - - - - - - + - You have been signed out of the app. Sorry, an error occurred and your e-consent could not be completed. Please try again. This will also delete your app account. - Please wait as we set up the study for you, this may take a few seconds + Fetching study content.... + We are setting up the study for you. This may take a few minutes. Please check back shortly. &learn_more_txt; &learn_more_txt; &learn_more_txt; @@ -539,4 +540,179 @@ Terms Privacy policy + Please choose a time. + Please choose a date and time. + + + Eligible + Not eligible + Eligibility confirmation + Custom view task end task + Custom view task cancel + Custom view task back + Custom view task exit + Custom view task next + Custom survey task next + Custom survey end task + Custom survey task cancel + Custom survey task exit + Custom survey task back + Load more + Verification back button + Verification submit button + Verification cancel button + Verification resend button + Custom consent view next + Custom consent disagree ok + Custom ok button + Custom cancel button + Custom clear button + Time + Tap edit button + Tap proceed button + Custom consent view exit + Custom consent disagree cancel + Custom consent view back + Custom consent end task + Password change submit + Forgot passcode + Chart screen share button + Chart screen back button + Chart screen left arrow + Chart screen right arrow + Consent complete View-pdf + Consent complete done button + Consent complete share button + Contact us back button + Contact us submit button + Custom activities dialog close + Custom dialog done button + Delete account back button + Delete account agree button + Delete account disagree button + Eligibility enroll back button + Eligibility enroll submit button + Enrollment validate continue + Gateway resources list item selected + Gateway resources back button + Gateway resources share button + Back button for load-more actvity + Password change back button + Notification back button + Notification list item selected + Pdf display back button + Pdf display share button + Feedback back button + Feedback submit button + Filter cancel button + Filter apply button + Profile fragment time reminder button + Profile fragment password change + Profile fragment passcode change + Profile fragment passcode change button + Profile fragment notification reciver button + Profile fragment study reminder button + Profile fragment signout button + Profile fragment delete button + Reachout list item selected + Feedback selected + Contact-us selected + Resources list item selected + Leave study accept + Leave study reject + Resources back button + Resources share button + Signup fragment terms + Signup fragment privacy_policy + Signup fragment submit button + Update next time ok + App upgrade accepted + App upgrade reject + Study info back button + Study list item selected + Sign up list item selected + Activities Home + Activities list item selected + Activities list more + Activities filter + Survey side menu + Survey side menu home + Survey side menu reachout + Survey side menu resources + Survey side menu sign-in + Survey side menu sign-out + Survey side menu my-account + Survey sign-out accept + Survey sign-out reject + Survey complete done button + Dashboard home + Dashboard share button + Dashboard day selected + Dashboard week selected + Dashboard month selected + Dashboard left arrow change date + Dashboard right arrow change date + Confirm passcode back button + Frogot password back button + Frogot password cancel button + Frogot password submit button + Resource home + Signup terms + Signup privacy_policy + Signup submit button + Signup back button + Signup cancel button + Signup info button + Signup complete done button + Terms privacy back button + Error message ok button + Splash retry accept + Splash retry reject + Web-view back button + Passcode setup retry + Passcode setup signout ok + Passcode setup signout cancel + Study info button + Study side menu + Study side menu home + Study side menu reachout + Study side menu resources + Study edit + Study side menu sign-in + Study side menu sign-up + Study search icon clicked + Study search clear button + Study search cancel + Study notfication + Study side menu sign-out + Study side menu my-account + Study sign-out accept + app website view + Consent review agree button + Consent review disagree button + Consent agree + Consent cancel + Consent dis-agree ok + Consent dis-agree cancel + Study sign-out reject + Custom dialog message ok + Back btn clicked + Info btn clicked + + Alart dialog negative + Tap button click + Text View value picker + Value picker cancel button + Value picker list item select + Add more questions + Image View + Share button + Left arrow + Right arrow + Text dynamic + Container + Menu + Preview + My account + diff --git a/Android/gradle.properties b/Android/gradle.properties index 82618cecb4..d546deaf0e 100644 --- a/Android/gradle.properties +++ b/Android/gradle.properties @@ -6,6 +6,8 @@ # http://www.gradle.org/docs/current/userguide/build_environment.html # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. +android.enableJetifier=true +android.useAndroidX=true org.gradle.jvmargs=-Xmx1536m # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit diff --git a/auth-server/oauth-scim-service/src/main/resources/static/css/login.scss b/auth-server/oauth-scim-service/src/main/resources/static/css/login.scss index 5a43091280..de8660a710 100644 --- a/auth-server/oauth-scim-service/src/main/resources/static/css/login.scss +++ b/auth-server/oauth-scim-service/src/main/resources/static/css/login.scss @@ -66,7 +66,7 @@ body.my-login-page { } } -@media screen and (max-width: 320px) { +@media screen and (max-width: 300px) { .my-login-page .card.fat { padding: 0; } diff --git a/auth-server/oauth-scim-service/src/main/resources/static/css/style.css b/auth-server/oauth-scim-service/src/main/resources/static/css/style.css index 7a7211188a..19ba217efe 100644 --- a/auth-server/oauth-scim-service/src/main/resources/static/css/style.css +++ b/auth-server/oauth-scim-service/src/main/resources/static/css/style.css @@ -262,7 +262,7 @@ footer ul li:last-child a { } /* media queries scss */ -@media ( min-width : 320px) { +@media ( min-width : 300px) { .centered__div { width: 92%; bottom: 2%; @@ -349,7 +349,7 @@ body#body-container { font-weight: 600; } -@media ( min-width : 320px) { +@media ( min-width : 300px) { .centered__div__mobile { width: 270px; } @@ -448,7 +448,7 @@ body#body-container { padding: 40% 0% !important; } -@media only screen and (max-width: 500px) and (min-width: 320px) { +@media only screen and (max-width: 500px) and (min-width: 300px) { .input__field input { text-indent: 18px; } @@ -551,7 +551,7 @@ body#body-container { 100% { transform: rotate(360deg); transform: rotate(360deg); } } -@media only screen and (max-width: 900px) and (min-width: 320px) { +@media only screen and (max-width: 900px) and (min-width: 300px) { .loading_text { margin-top: 90%; } @@ -565,7 +565,7 @@ body#body-container { margin-top: 60%; } -@media only screen and (max-width: 500px) and (min-width: 320px) { +@media only screen and (max-width: 500px) and (min-width: 300px) { .mob_mt { margin-top:10px; } } diff --git a/auth-server/oauth-scim-service/src/main/resources/templates/login.html b/auth-server/oauth-scim-service/src/main/resources/templates/login.html index 81cea50cbe..c5e45a25ed 100644 --- a/auth-server/oauth-scim-service/src/main/resources/templates/login.html +++ b/auth-server/oauth-scim-service/src/main/resources/templates/login.html @@ -52,6 +52,12 @@ input { filter: none !important; } + +.visibility__hidden { +    visibility: hidden !important; +} + + @@ -100,34 +106,30 @@
- + New user? Sign up -
-
@@ -145,8 +147,8 @@ + diff --git a/common-modules/common-service/pom.xml b/common-modules/common-service/pom.xml index ae697da970..a94f850740 100644 --- a/common-modules/common-service/pom.xml +++ b/common-modules/common-service/pom.xml @@ -154,7 +154,7 @@ org.jsoup jsoup - 1.13.1 + 1.14.2 diff --git a/deployment/README.md b/deployment/README.md index 334c70faaf..faf3f2fc35 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -440,6 +440,10 @@ The deployment process takes the following approach: $PREFIX $ENV ``` +### Configure Logging & Monitoring (optional) + +There are optional logging, monitoring, alerts, and notifications that can be configured for a deployment. See [`/documentation/monitoring.md`](/documentation/monitoring.md) for guidance on configuring this as well as recommended alert thresholds. + ### Configure your first study 1. Navigate your browser to `studies.{PREFIX}-{ENV}.{DOMAIN}/studybuilder/` (the trailing slash is necessary) and use the account credentials that you created with the `create_study_builder_superadmin.sh` script to log into the [`Study builder`](/study-builder/) user interface @@ -673,6 +677,54 @@ These secrets can be deleted from your deployment with the following steps. Howe ``` 1. Create a pull request from this working branch to your specified branch, which will start the terraform plan and validation. After completion of the plan and validation, merge the pull request. That will run the terraform apply. +### Whitelisting the TCP Port 10256 in the firewall when upgrading to 2.0.10 or greater + +One of the Backend service health checks is using the 10256 port, and it was observed this port needs to be whitelisted. +Please follow the below steps to whitelist the port: +1. Update your repository with the latest changes from release 2.0.10 or greater, create a new working branch, and make the following changes. +1. In the deployment/terraform/--network/main.tf, find the section resource "google_compute_firewall" "fw_allow_k8s_ingress_lb_health_checks" { [...] } and add below script along with other port numbers script: + + allow { + protocol = "tcp" + ports = ["10256"] + } +1. Create a pull request from this working branch to your specified branch, which will start the terraform plan and validation. After completion of the plan and validation, merge the pull request. That will run the terraform apply. + +### Ingress version Upgrade when upgrading to 2.0.10 or greater + + The Beta API versions (extensions/v1beta1 and networking.k8s.io/v1beta1) of Ingress are no longer served for GKE clusters created on versions 1.22 and later. + We have upgraded the API version in the deployment/kubernetes/ingress.yaml as part of this release. After updating the repo with the latest changes from release 2.0.10 or greater, please follow the below steps: +1. Pull the latest code from your repository and checkout your specified branch, which contains the upgraded ingress.yaml. +1. Run the following command to apply the latest ingress.yaml: + + kubectl apply \ + -f $GIT_ROOT/deployment/kubernetes/ingress.yaml +1. Update firewalls: + - Run `kubectl describe ingress $PREFIX-$ENV` + - Look at the suggested commands under "Events", in the form of "Firewall + change required by network admin" + - Run each of the suggested commands +1. Verify the status of your Kubernetes cluster: + - Check the [Kubernetes ingress dashboard](https://console.cloud.google.com/kubernetes/ingresses) in your `{PREFIX}-{ENV}-apps` project to view the status of your cluster ingress (if status is not green, repeat the firewall step above) + - Check the [Kubernetes workloads dashboard](https://console.cloud.google.com/kubernetes/workload) in your `{PREFIX}-{ENV}-apps` project to view the status of your applications (confirm all applications are green before proceeding) + +### Migrate to Containerd node images before GKE v1.24 + +1. Update your repository with the latest changes from release 2.0.10 or greater, create a new working branch, and make the following changes. +1. In the deployment/terraform/--apps/main.tf, find the section +module "__gke_cluster" { [...] } and add below script at the end of this section: + + ``` + node_pools = [ + { + name = "default-node-pool" + image_type = "COS_CONTAINERD" + }, + ] + } + ``` +3. Create a pull request from this working branch to your specified branch, which will start the terraform plan and validation. After completion of the plan and validation, merge the pull request. That will run the terraform apply. + ***

Copyright 2020 Google LLC

diff --git a/deployment/kubernetes/ingress.yaml b/deployment/kubernetes/ingress.yaml index 337c6b86c3..4256cc657e 100644 --- a/deployment/kubernetes/ingress.yaml +++ b/deployment/kubernetes/ingress.yaml @@ -3,62 +3,106 @@ # Use of this source code is governed by an MIT-style # license that can be found in the LICENSE file or at # https://opensource.org/licenses/MIT. -apiVersion: networking.k8s.io/v1beta1 +apiVersion: networking.k8s.io/v1 kind: Ingress -metadata: +metadata: name: - annotations: kubernetes.io/ingress.global-static-ip-name: --ingress-ip networking.gke.io/managed-certificates: --cert-participants,--cert-studies -spec: +spec: rules: - host: participants.-. - http: - paths: - - path: /auth-server/* - backend: - serviceName: auth-server-np - servicePort: 50000 - - path: /response-datastore/* - backend: - serviceName: response-datastore-np - servicePort: 50000 - - path: /participant-user-datastore/* - backend: - serviceName: participant-user-datastore-np - servicePort: 50000 - - path: /participant-consent-datastore/* - backend: - serviceName: participant-consent-datastore-np - servicePort: 50000 - - path: /participant-enroll-datastore/* - backend: - serviceName: participant-enroll-datastore-np - servicePort: 50000 - - path: /oauth2/* - backend: - serviceName: hydra-np - servicePort: 50000 - - path: /participant-manager/* - backend: - serviceName: participant-manager-np - servicePort: 50000 - - path: /participant-manager-datastore/* - backend: - serviceName: participant-manager-datastore-np - servicePort: 50000 + http: + paths: + - + backend: + service: + name: auth-server-np + port: + number: 50000 + path: /auth-server/* + pathType: ImplementationSpecific + - + backend: + service: + name: response-datastore-np + port: + number: 50000 + path: /response-datastore/* + pathType: ImplementationSpecific + - + backend: + service: + name: participant-user-datastore-np + port: + number: 50000 + path: /participant-user-datastore/* + pathType: ImplementationSpecific + - + backend: + service: + name: participant-consent-datastore-np + port: + number: 50000 + path: /participant-consent-datastore/* + pathType: ImplementationSpecific + - + backend: + service: + name: participant-enroll-datastore-np + port: + number: 50000 + path: /participant-enroll-datastore/* + pathType: ImplementationSpecific + - + backend: + service: + name: hydra-np + port: + number: 50000 + path: /oauth2/* + pathType: ImplementationSpecific + - + backend: + service: + name: participant-manager-np + port: + number: 50000 + path: /participant-manager/* + pathType: ImplementationSpecific + - + backend: + service: + name: participant-manager-datastore-np + port: + number: 50000 + path: /participant-manager-datastore/* + pathType: ImplementationSpecific - host: studies.-. - http: - paths: - - path: /study-datastore/* - backend: - serviceName: study-datastore-np - servicePort: 50000 - - path: /studybuilder/* - backend: - serviceName: study-builder-np - servicePort: 50000 - - path: /study-resources/* - backend: - serviceName: study-builder-np - servicePort: 50000 + http: + paths: + - + backend: + service: + name: study-datastore-np + port: + number: 50000 + path: /study-datastore/* + pathType: ImplementationSpecific + - + backend: + service: + name: study-builder-np + port: + number: 50000 + path: /studybuilder/* + pathType: ImplementationSpecific + - + backend: + service: + name: study-builder-np + port: + number: 50000 + path: /study-resources/* + pathType: ImplementationSpecific diff --git a/deployment/mystudies.hcl b/deployment/mystudies.hcl index 1a679bbe79..4180ccc3af 100644 --- a/deployment/mystudies.hcl +++ b/deployment/mystudies.hcl @@ -516,6 +516,10 @@ resource "google_compute_firewall" "fw_allow_k8s_ingress_lb_health_checks" { protocol = "tcp" ports = ["8080"] } + allow { + protocol = "tcp" + ports = ["10256"] + } # Load Balancer Health Check IP ranges. source_ranges = [ diff --git a/deployment/terraform/example-dev-networks/main.tf b/deployment/terraform/example-dev-networks/main.tf index 32e8c860b3..37b4d8ca71 100644 --- a/deployment/terraform/example-dev-networks/main.tf +++ b/deployment/terraform/example-dev-networks/main.tf @@ -46,6 +46,10 @@ resource "google_compute_firewall" "fw_allow_k8s_ingress_lb_health_checks" { protocol = "tcp" ports = ["8080"] } + allow { + protocol = "tcp" + ports = ["10256"] + } # Load Balancer Health Check IP ranges. source_ranges = [ diff --git a/documentation/README.md b/documentation/README.md index 02e5f46a3b..ccd51f67c5 100644 --- a/documentation/README.md +++ b/documentation/README.md @@ -13,6 +13,7 @@ Introduction and platform overview | [`/README.md`](/README.md) Recent changes | [`/documentation/whats-new.md`](/documentation/whats-new.md) High-level architecture | [`/documentation/architecture.md`](/documentation/architecture.md) Deployment instructions | [`/deployment/README.md`](/deployment/README.md) +Configuring Logging & Monitoring | [`/documentation/monitoring.md`](/documentation/monitoring.md) `Hydra` setup | [`/hydra/README.md`](/hydra/README.md) `Auth server` setup | [`/auth-server/README.md`](/auth-server/README.md) `Study builder` setup | [`/study-builder/README.md`](/study-builder/README.md) diff --git a/documentation/monitoring.md b/documentation/monitoring.md new file mode 100644 index 0000000000..ad3e260846 --- /dev/null +++ b/documentation/monitoring.md @@ -0,0 +1,348 @@ +# Logging and Monitoring + +This page describes the process for configuring logging and monitoring of an FDA MyStudies deployment. + +Cloud Logging can be used to configure a log viewer for viewing, querying, and analysis of logs. Log sinks can be set up to manage log retention policies. Cloud Logging can also be used to create log-based metrics and alerts. + +Cloud Monitoring is used for setting up charts, dashboards, alerts, and notifications. It also can be used for Service Level Objective (SLO) monitoring and uptime checks. + +- [1. Cloud Logging](#1-cloud-logging) +- [2. Cloud Monitoring](#2-cloud-monitoring) +- [3. Configuring Alerts and Notifications](#3-configuring-alerts-and-notifications) + +## 1. Cloud Logging + +Cloud Logging API can be used for real-time log management analysis by configuring the following components: + +* Logs viewer +* Logs alerting +* Logs Router, Retention & Storage +* Log buckets and views +* Error Reporting +* Audit Logging + +### Logs viewer + +Logs Viewer and Logs Explorer can be used to filter and analyze logs during an incident. + +### Logs alerting + +Logs-based alerting is integrated with [Cloud Monitoring](https://cloud.google.com/monitoring) and can be used to set alerts on the logs events. + +### Logs Router, Retention & Storage + +Cloud Logging uses two predefined log sinks for each GCP Project `_Required` and `_Default`. All logs that are generated in GCP projects are automatically processed through these two log sinks and then are stored in the correspondingly named log buckets. Cloud Logging doesn't charge to route logs, but destination charges may apply. + +Bucket Configurations: + +| Name | Description | Monthly | Retention | Type | +|------|-------------|---------|-----------|------| +| _Default | Default bucket | Billable | 30 days | global | +| _Required | Audit bucket | Not billed | 400 days | global | + +### Log buckets and views + +Logs Storage is used to create logs buckets and to monitor usage and retention. + +### Error Reporting + +Error Reporting API can be used to aggregate and display errors produced in the running cloud services. The centralized error management interface can be used to find errors during the deployments and infrastructure update process. + +### Cloud Audit Logs + +Cloud Audit Logs can be used to help meet security, auditing, and compliance needs by maintaining audit trails such as admin activity, data access, and system events. These are configured to be stored in coldline storage for longer-term storage. + +| Name | Location | Type | Life Cycle | +|------|-------------|---------|-----------| +| `--7yr-audit-logs` | Region | Coldline | 2555+ days since object was update | + +## 2. Cloud Monitoring + +The Cloud Monitoring services will be used to monitor the project resources. Different monitoring and alerts are set up for the various projects involved in a deployment, including: + +* Apps - the project storing container images and running the compute (k8s) resources +* Audit - the project storing audit logs from the platform and applications +* Data - the project with the CloudSQL databases +* Devops - the project for the CI/CD pipeline +* Firebase - the project used for storing study response data +* Networks - the project for the network policies and firewalls +* Secrets - the project for managing the deployment secrets such as client IDs and credentials + +### Monitoring Methods + +The types of monitoring used include: + +* Dashboard Monitoring +* Metrics based alerts with email notifications +* Logs based alerts with email notifications +* Incident monitoring dashboard + +### Apps Project + +Monitoring in the Apps project includes Cloud Storage, Kubernetes Engine (GKE), Compute Engine resources, Load Balancers, and Cloud Pub/Sub. There are metrics based alerts for GKE and SSL certificates. Logs based alerts include Cloud Build and GKE errors. This project also uses uptime and health checks for the GKE deployments. Instructions for creating the individual alerts can be found in the section [Configuring Alerts and Notifications](#3-configuring-alerts-and-notifications). + +#### Monitoring Dashboards + +| Dashboard | Resources to be Monitored | +|-------|-------| +| Cloud Storage | Requests, Network Traffic Sent, Network Traffic Received, Object Count, Object Size | +| GKE | Alerts, Container restarts, Error logs, CPU utilization, Memory utilization, Disk utilization | +| VM Instances ( GKE Node VM’s) | CPU , Memory, Disk Utilization, Network Traffic | +| External HTTP(S) Load Balancers | 5xx Error Ratio, Backend Latency (95th Percentile), Total Latency (95th Percentile), Forwarding Rules, Health Status | +| Cloud Pub/Sub | Publish Message Operations, Average Message Size | + +#### Metrics based alerts: + +| Alert | Threshold | Description | +|-------|-------|-----------| +| SSL certificate expiring soon | `1 Month` | Expiration date of SSL certificates | +| Kubernetes Container - CPU utilization | `>= 70%` | CPU utilization percentage | +| Kubernetes Container - Memory usage | `>= 70%` | Memory usage percentage | +| Kubernetes Container - Restart count | `20` | Container restarting more than a specified number of times | +| k8s_pod - Volume utilization | `>= 70%` | Volume utilization of the kubernetes pod | +| k8s_pod - autoscaler_panic_mode | `1` or `0` | Value of `1` represents autoscaler failing | +| Kubernetes Node - Memory usage | `>= 70%` | Memory usage percentage of kubernetes node | +| Kubernetes Node - node_network_up | `1` or `0` | Value of `0` represents the node network being down | +| Kubernetes Node - CPU allocatable utilization | `>= 70%` | CPU utilization percentage of kubernetes node | +| VM - CPU utilization | `>= 70%` | CPU utilization percentage of underlying VM | +| VM - disk utilization too high | `>= 70%` | Disk utilization percentage of underlying VM | +| VM - p95 networking latency too high | `< 1s` | Network latency of underlying VM | +| VM - memory utilization too high | `>= 70%` | Memory utilization percentage of underlying VM | + +#### Logs based alert + +| Alert | Metrics Query | Description | +|-------|-------|-------| +| Cloud Build failure | ```resource.type="build", logName=("projects//logs/cloudaudit.googleapis.com%2f Activity" OR "projects//logs/cloudaudit.googleapis.com%2Fdata_access" OR "projects//logs/cloudbuild"), severity>=ERROR, ``` | Trigger an alert when Cloud Build experiences a failure or error | +| GKE container failure | ```resource.type="k8s_container", resource.labels.cluster_name="", resource.labels.namespace_name="default", severity=(EMERGENCY OR ALERT OR CRITICAL OR ERROR), NOT textPayload:New connection, NOT textPayload:Client closed, ``` | Trigger an alert when a GKE container has a log message with severity of ERROR, CRITICAL, ALERT, or EMERGENCY | + +#### Uptime and health checks + +Uptime checks can be created for the following services which will test accessing the services from various global locations. Use the host name and path below Instructions when configuring the health checks following the instructions in the section [Configuring Alerts and Notifications](#3-configuring-alerts-and-notifications). + +| Application | Host Name | Path | +|-------|-------|-------| +| Auth Server | `participants.-.` | `/auth-server/healthCheck` | +| Participant Consent Datastore | `participants.-.` | `/participant-consent-datastore/healthCheck` | +| Participant Enroll Datastore | `participants.-.` | `/participant-enroll-datastore/healthCheck` | +| Participant Manager | `participants.-.` | `/participant-manager/index.html` | +| Participant Manager Datastore | `participants.-.` | `/participant-manager-datastore/healthCheck` | +| Participant User Datastore | `participants.-.` | `/participant-user-datastore/healthCheck` | +| Response Datastore | `participants.-.` | `/response-datastore/healthCheck` | +| Study Datastore | `studies.-. ` | `/study-datastore/healthCheck` | +| Study Builder | `studies.-. ` | `/studybuilder/healthCheck.do` | + +### Audit Project + +Monitoring in the Audit project includes Cloud Storage, and BigQuery. There are metrics based alerts for Cloud Storage and BigQuery. Optional logs based alerts can include the amount of logs ingested. Instructions for creating the individual alerts can be found in the section [Configuring Alerts and Notifications](#3-configuring-alerts-and-notifications). + +#### Monitoring Dashboards and resources: + +| Dashboard | Resources to be Monitored | +|-------|-------| +| Cloud Storage | Requests, Network Traffic Sent, Network Traffic Received, Object Count, Object Size | +| BigQuery | Tables, Stored Bytes, Uploaded Rows | + +#### Metrics based alerts: + +| Alert | Threshold | Description | +|-------|-------|-------| +| Bigquery - dataset | `#` | Number of bytes stored | +| GCS Bucket - Sent bytes | `> 1024MB` | Cloud Storage bucket sent data in bytes | +| GCS Bucket - Received bytes | `> 1024MB` | Cloud Storage bucket received data in bytes | +| GCS Bucket - Total bytes | `>= 80%` | Cloud Storage cumulative data in bytes | +| GCS Bucket - Object count | `5000` | Cloud Storage bucket object counts | + +#### Logs based alerts: + +Log based alerts are not necessary for this project but if needed can be configured to collect payload metrics. + +| Alert | Type | Description | +|-------|-------|-------| +| Log bucket monthly bytes ingested | Log | Log bucket month-to-date bytes ingested. | +| Log bytes ingested | Log | Log bytes ingested to know the billing of ingested data | + +### Data Project + +Monitoring in the Data project includes Cloud Storage, Cloud Pub/Sub, and Cloud SQL. There are metrics based alerts for SSL certificates, Cloud SQL, Cloud Storage, Cloud Pub/Sub, and Cloud Functions. This project does not contain logs based alerts. Instructions for creating the individual alerts can be found in the section [Configuring Alerts and Notifications](#3-configuring-alerts-and-notifications). + +#### Monitoring Dashboards and resources: + +| Dashboard | Resources to be Monitored | +|-------|-------| +| Cloud Storage | Requests, Network Traffic Sent, Network Traffic Received, Object Count, Object Size | +| Cloud Pub/Sub | Publish Message Operations, Average Message Size | +| Cloud SQL | Queries, Network Connections, CPU Utilization, Memory Utilization, Disk Utilization | + +#### Metrics based alerts: + +| Alert | Threshold | Description | +|-------|-------|-------| +| SSL certificate expiring soon | `1 Month` | Expiration date of SSL certificates | +| Cloud SQL Available for failover | `> 0` | A value `>0` indicates the failover operation is available on the instance. | +| Cloud SQL Connections | `< 500` | Number of SQL Connections | +| Cloud SQL Database - Memory utilization | `>= 70%` | Memory utilization percentage of the Cloud SQL instance | +| Cloud SQL Database - Disk utilization | `>= 70%` | Disk utilization percentage of the Cloud SQL instance | +| Cloud SQL Instances State | `1` or `0` | Cloud SQL instance state - a value `1` indicates the instance is up | +| Cloud SQL Database - CPU utilization | `>=70%` | CPU utilization percentage of the Cloud SQL instance | +| Cloud SQL InnoDB pages written | `>=70%` | InnoDB pages written percentage | +| Cloud SQL InnoDB pages read | `>= 70%` | InnoDB pages read percentage | +| Cloud SQL - Disk write IO | `>= 1000/s` | Disk IO write count of the Cloud SQL instance | +| Cloud SQL - Disk read IO | `>= 1000/s` | Disk IO read count of the Cloud SQL instance | +| Cloud SQL Database - Queries | `#` | Number of running SQL Queries | +| GCS Bucket - Sent bytes | `1024 MB` | Cloud Storage bucket sent data in bytes | +| GCS Bucket - Received bytes | `1024 MB` | Cloud Storage bucket received data in bytes | +| GCS Bucket - Total bytes | `>= 80%` | Cloud Storage cumulative data in bytes | +| GCS Bucket - Object count | `5000` | Cloud Storage bucket object count | +| Cloud Pub/Sub-Topic-Publish requests | `>= 10MB` | Cloud Pub/Sub Topics Publish message request | +| Cloud Pub/Sub- subscription-Backlog size | `<= 1MB` | Size of Cloud Pub/Sub subscription backlog | +| Oldest unacked message age | `<= 1s` | Age (in seconds) of the oldest unacknowledged message | +| Cloud Function - Execution times | `>= 9 minutes` | Cloud Function Execution time | + +### Devops Project + +Monitoring in the Devops project is primarily based around Cloud storage usage with metrics based alerts triggering on Cloud Storage criteria. Logs based alerts are used to track failures in Cloud Build. Instructions for creating the individual alerts can be found in the section [Configuring Alerts and Notifications](#3-configuring-alerts-and-notifications). + +Below are the recommended dashboard components and alerts for the Devops project + +#### Monitoring Dashboards + +| Dashboard | Resources to be Monitored | +| Cloud Storage | Requests, Network Traffic Sent, Network Traffic Received, Object Count, Object Size | + +#### Metrics based alerts + +| Alert | Threshold | Description | +|-------|-------|-------| +| GCS Bucket - Sent bytes | `>= 1024 MB` | Cloud Storage bucket sent data in bytes | +| GCS Bucket - Received bytes | `>= 1024 MB` | Cloud Storage bucket received data in bytes | +| GCS Bucket - Total bytes | `>= 80%` | Cloud Storage cumulative data in bytes | +| GCS Bucket - Object count | `>= 5000` | Cloud Storage bucket Object counts | + + + +#### Logs based alerts + +| Alert | Metric Query | Description | +|-------|-------|-------| +| Cloud Build failure | ```resource.type="build", logName=("projects//logs/cloudaudit.googleapis.com%2f Activity" OR "projects//logs/cloudaudit.googleapis.com%2Fdata_access" OR "projects//logs/cloudbuild"), severity>=ERROR, ``` | Trigger an alert when Cloud Build experiences a failure or error | + +### Firebase Project + +Monitoring in the Data project includes Cloud Storage, Cloud Pub/Sub, and firewall configurations. There are metrics based alerts for SSL certificates, Cloud Storage, Cloud Pub/Sub, Firestore, and Cloud Functions. Optional logs based alerts can include the amount of logs ingested. Instructions for creating the individual alerts can be found in the section [Configuring Alerts and Notifications](#3-configuring-alerts-and-notifications). + +#### Monitoring Dashboards and resources: + +| Dashboard | Resources to be Monitored | +|-------|-------| +| Cloud Storage | Requests, Network Traffic Sent, Network Traffic Received, Object Count, Object Size | +| Cloud Pub/Sub | Tables, Stored Bytes, Uploaded Rows | +| App Engine ( informational Dashboard) | App Engine Dashboard will give the information about the firewall configuration. | + +#### Metrics based alerts: + +| Alert | Threshold | Description | +|-------|-------|-------| +| SSL certificate expiring soon | `1 Month` | Expiration date of SSL certificates | +| GCS Bucket - Object count | `>= 5000` | Total number of objects grouped by storage class. This value is measured once per day, and the value is repeated at each sampling interval throughout the day. For this metric, the sampling period is a reporting period, not a measurement period. | +| GCS Bucket - Sent bytes | `> 1024MB` | Cloud Storage bucket sent data in bytes | +| GCS Bucket - Received bytes | `> 1024MB` | Cloud Storage bucket received data in bytes | +| GCS Bucket - Total bytes | `>= 80%` | Cloud storage cumulative data in bytes | +| Oldest unacked message age | `< 1s` | Age (in seconds) of the oldest unacknowledged message | +| Pub/Sub - Publish message size | `10MB` | Distribution of publish message sizes (in bytes) | +| Firestore-instance - read | `#` | Number of successful document reads from queries or lookups | +| Firestore-instance - write | `#` | Number of successful document writes | +| Firestore-instance - delete | `#` | Number of document deletes | +| Cloud Function - Execution times | `>= 9 minutes` | Cloud Function execution time | + +#### Logs based alerts: + +Log based alerts are not necessary for this project but if needed can be configured to collect payload metrics. + +| Alert | Type | Description | +| Log bucket monthly bytes ingested | Log | Log bucket month-to-date bytes ingested. | +| Log bytes ingested | Log | Log bytes ingested to know the billing of ingested data | + +### Networks Project + +Monitoring in the Networks project includes GCE VMs, network traffic and firewall configuration. There are metrics based alerts for the VPC usage and VM utilization. This project does not contain logs based alerts. Instructions for creating the individual alerts can be found in the section [Configuring Alerts and Notifications](#3-configuring-alerts-and-notifications). + +#### Monitoring Dashboards and resources: + +| Dashboard | Resources to be Monitored | +|-------|-------| +| VM instances | CPU , Memory, Disk Utilization, Network Traffic | +| Firewalls | Firewall configuration information | + +#### Metrics based alerts: + +| Alert | Type | Description | +|-------|-------|-------| +| Instances Per VPC Network quota limit | `#` | Quota limit for `compute.googleapis.com/instances_per_vpc_network` | +| Instances Per VPC Network quota usage | `#` | Current usage on quota metric `compute.googleapis.com/instances_per_vpc_network` | +| VM - CPU utilization | `>= 80%` | CPU utilization percentage | +| VM - disk utilization | `>= 80%` | Disk utilization percentage | +| VM - memory utilization | `>= 80%` | Memory utilization percentage | + +### Secrets Project + +There are not recommended monitoring or alerts to be configured for the Secrets project. + +## 3. Configuring Alerts and Notifications + +#### Configuring Monitoring Dashboards + +To configure monitoring dashboards go to the [Dashboards Overview](https://console.cloud.google.com/monitoring/dashboards) page in the Monitoring section of the console and use the project selector at the top to select the project. Use the `Create Dashboard` button to create individual dashboards and then configure the recommended resources for the project. + +**Configure Notification Channels** + +When creating an alerting policy, you can select a configured notification channel and add it to your policy. You can pre-configure your notification channels, or you can configure them as part of the process of creating an alerting policy. + +Email notification channels can also be created during the creation of an alerting policy. For more information, see[ Creating a channel on demand.](https://cloud.google.com/monitoring/support/notification-options#on-demand) If you use a group email address as the notification channel for an alerting policy, make sure the group is configured to allow incoming mail from `[alerting-noreply@google.com](mailto:alerting-noreply@google.com)`. + +To configure a notification channel, you must have one of the following Identity and Access Management roles on the project being monitored + +* `Monitoring Notification Channel Editor` +* `Monitoring Editor` +* `Monitoring Admin` +* `Project Editor` +* `Project Owner` + +A notification channel must be created for each project. Use the following steps to configure a notification channel: + +* Go to the [Alerting](https://console.cloud.google.com/monitoring/alerting) page in the Monitoring section of the console and use the project selector at the top to select the project +* Click the `Edit Notification Channels` button +* If creating an email channel, locate the channel type `Email`, click `Add New` and follow the instructions +* If creating another type of notification channel such as a mobile app, PagerDuty, SMS, Slack, Pub/Sub, or webhooks, see the instructions for [Creating channels](https://cloud.google.com/monitoring/support/notification-options#creating_channels). + +#### Configuring Uptime Checks + +* Go to the [Uptime checks](https://console.cloud.google.com/monitoring/uptime) page in the Monitoring section of the console and use the project selector at the top to select the project +* Click `Create Uptime Check` +* Enter a descriptive title such as: `Auth-Server-Health Check` +* In the Target, select the protocol `HTTPS` +* Choose the Resource Type `URL` +* Enter the hostname and path as specified in the project instructions above +* Select a frequency of how often you would like to run the checks +* If you want to only run checks from certain geographic regions, you can edit this in `More Target Options` +* Select a value for the response timeout to use and make sure the box `Log check failures` is checked to save errors to Cloud Logging +* Give the alert a name and select one of your pre-configured notification channels +* Verify the configuration using the `Test` button and then `Create` once the settings are confirmed + +#### Configuring Metrics Based Alerts + +* Go to the [Alerting](https://console.cloud.google.com/monitoring/alerting) page in the Monitoring section of the console and use the project selector at the top to select the project +* Click on the `Create Policy` button +* Click `Add Condition` +* Search for the target resource type, metric, and condition specified in the project recommendations above +* After adding the condition, select one of your pre-configured notification channels and add auto-close duration before reviewing the configuration and creating the policy + +#### Configuring Logs Based Alerts + +* Go to the [Logs Explorer](https://console.cloud.google.com/logs/query) page in the Logging section of the console and use the project selector at the top to select the project +* In the Query field enter the metrics query specified in the project recommendations above and then run the query to validate the results +* In the query results pane click on the `Actions` menu and then `Create log alert` +* In the alert details pane, add a name and description +* In `Choose logs to include in the alert` check the query and results by clicking `Preview logs` +* Select a minimum time between notifications +* Select one of your pre-configured notification channels and save the alert \ No newline at end of file diff --git a/documentation/whats-new.md b/documentation/whats-new.md index 2d384aace7..fc3d68768b 100644 --- a/documentation/whats-new.md +++ b/documentation/whats-new.md @@ -6,8 +6,18 @@ --> > Subscribe to [mystudies-announce@googlegroups.com](https://groups.google.com/g/mystudies-announce/) to receive release notifications and announcements +# Release 2.0.10 +* Spring framework upgrade from version 3.0 to 5.3.18 +* Upgrade of related dependencies -- H2, Junit, Hibernate, Tiles, spring-security etc +* Security updates +* Introduction of Google Analytics for the iOS and Android mobile apps +* Bug fixes and UI refinements +* Additional code improvements and minor enhancements +* The full list of bugs and refinements addressed in this release can be viewed [here ](https://github.com/GoogleCloudPlatform/fda-mystudies/milestone/13?closed=1). +* Refer to [these](/deployment/README.md#whitelisting-the-tcp-port-10256-in-the-firewall-when-upgrading-to-2010-or-greater) steps when upgrading existing deployments to release 2.0.10 + # Release 2.0.9 -* This release fixes the security vulnerability detected with Log4j recently. More information on the vulnerability is here (https://logging.apache.org/log4j/2.x/security.html#CVE-2021-45046). +* This release fixes the security vulnerability detected with Log4j recently. More information on the vulnerability is [here ](https://logging.apache.org/log4j/2.x/security.html#CVE-2021-45046). * Note: The platform was using a log4j version and logging framework which is not impacted by this vulnerability. However, as a safety measure, the platform is updated with release v2.0.9, to use the latest Log4j version 2.16.0 that was provided by Apache to address this issue. # Release 2.0.8 diff --git a/iOS/MyStudies/MyStudies.xcodeproj/project.pbxproj b/iOS/MyStudies/MyStudies.xcodeproj/project.pbxproj index 16e5a03243..a682b4d8d9 100644 --- a/iOS/MyStudies/MyStudies.xcodeproj/project.pbxproj +++ b/iOS/MyStudies/MyStudies.xcodeproj/project.pbxproj @@ -413,7 +413,6 @@ 6F0221772264729D00A2DBC8 /* TextChoiceCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = TextChoiceCell.xib; sourceTree = ""; }; 6F0221782264729E00A2DBC8 /* OtherTextChoiceCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = OtherTextChoiceCell.xib; sourceTree = ""; }; 6F04F523254C7B4500F4E74A /* TemporaryPasswordData.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = TemporaryPasswordData.plist; sourceTree = ""; }; - 6F07148824279452002749DA /* Default.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Default.xcconfig; sourceTree = ""; }; 6F07148B2428DCE2002749DA /* Collection+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Collection+Extensions.swift"; sourceTree = ""; }; 6F209F01242E5E96005DD23F /* Data+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Data+Extensions.swift"; sourceTree = ""; }; 6F214B9324603EFE008F2742 /* WKWebView+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "WKWebView+Extensions.swift"; sourceTree = ""; }; @@ -458,6 +457,7 @@ 7BDC002620C7855C409516D3 /* Pods-HPHC.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HPHC.debug.xcconfig"; path = "Pods/Target Support Files/Pods-HPHC/Pods-HPHC.debug.xcconfig"; sourceTree = ""; }; 84249C9C268DFDB400CE5E87 /* UITableView+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITableView+Extensions.swift"; sourceTree = ""; }; 847A250F2518C93800BCB50A /* UtilitiesTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UtilitiesTest.swift; sourceTree = ""; }; + 84D1E78327BFBE5B00619384 /* Default.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Default.xcconfig; sourceTree = ""; }; 84F9E38026FC27A1004A9FE8 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; 84FCC8D02514DCA70012904C /* AuthTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthTest.swift; sourceTree = ""; }; 89055912230148FD005FB284 /* Branding.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Branding.plist; sourceTree = ""; }; @@ -684,8 +684,8 @@ 6E7D2D581E433E8700763D4C /* MyStudies */ = { isa = PBXGroup; children = ( + 84D1E78327BFBE5B00619384 /* Default.xcconfig */, 84F9E38026FC27A1004A9FE8 /* GoogleService-Info.plist */, - 6F07148824279452002749DA /* Default.xcconfig */, 6F10BB15234DDFDA006388E2 /* Branding */, 6FE00CD5238FEDE80067A7B8 /* Utils */, 94CD96E31E4AF61800946477 /* Networking */, @@ -2390,7 +2390,7 @@ /* Begin XCBuildConfiguration section */ 6E7D2D7C1E433E8800763D4C /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6F07148824279452002749DA /* Default.xcconfig */; + baseConfigurationReference = 84D1E78327BFBE5B00619384 /* Default.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; @@ -2453,7 +2453,7 @@ }; 6E7D2D7D1E433E8800763D4C /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6F07148824279452002749DA /* Default.xcconfig */; + baseConfigurationReference = 84D1E78327BFBE5B00619384 /* Default.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; diff --git a/iOS/MyStudies/MyStudies/AppDelegate.swift b/iOS/MyStudies/MyStudies/AppDelegate.swift index 269109242b..64b5759fdd 100644 --- a/iOS/MyStudies/MyStudies/AppDelegate.swift +++ b/iOS/MyStudies/MyStudies/AppDelegate.swift @@ -23,6 +23,7 @@ import RealmSwift import UIKit import UserNotifications import Firebase +import FirebaseAnalytics @UIApplicationMain @@ -128,27 +129,27 @@ class AppDelegate: UIResponder, UIApplicationDelegate, MessagingDelegate { /// Handler for TimeZone changes, updates time zone in the local database func calculateTimeZoneChange() { - + let timeZoneCurrent = TimeZone.current + let valTimezone = timeZoneCurrent let differenceFromCurrent = timeZoneCurrent.secondsFromGMT() - + // Saving TimeZone to User Defaults let ud = UserDefaults.standard let setuptimeDiff = ud.value(forKey: ksetUpTimeIdentifier) as? Int - + // Saving time difference if setuptimeDiff == nil { ud.set(differenceFromCurrent, forKey: ksetUpTimeIdentifier) ud.set(0, forKey: "offset") - + + let timezoneArray = InitialTimezone.init(playerName: valTimezone) + let encodedData = NSKeyedArchiver.archivedData(withRootObject: timezoneArray) + ud.set(encodedData, forKey: "oldTimezone") } else { - let difference = differenceFromCurrent - setuptimeDiff! ud.set(difference, forKey: "offset") - if difference == 0 { - // Do Nothing - } else { - + if difference != 0 { Schedule.utcFormatter = nil Schedule.currentZoneFormatter = nil } @@ -214,21 +215,9 @@ class AppDelegate: UIResponder, UIApplicationDelegate, MessagingDelegate { self.isAppLaunched = true IQKeyboardManager.shared.enable = true self.customizeNavigationBar() - - //Fixes navigation bar tint issue in iOS 15.0 - if #available(iOS 15, *) { - let appearance = UINavigationBarAppearance() - let navigationBar = UINavigationBar() - - appearance.configureWithOpaqueBackground() - appearance.backgroundColor = .white - navigationBar.standardAppearance = appearance - UINavigationBar.appearance().standardAppearance.backgroundColor = .white - UINavigationBar.appearance().standardAppearance.shadowColor = .white - UINavigationBar.appearance().scrollEdgeAppearance = appearance - UINavigationBar.appearance().standardAppearance = appearance - } + NotificationCenter.default.addObserver(self, selector: #selector(self.receivedORKAction(_:)), + name: Notification.Name("ORKAction"), object: nil) // Use Firebase library to configure APIs FirebaseApp.configure() Messaging.messaging().delegate = self @@ -241,6 +230,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate, MessagingDelegate { UserServices().getUserManageApps(self) UIApplication.shared.applicationIconBadgeNumber = 0 + + UserDefaults.standard.removeObject(forKey: "applict") let ud1 = UserDefaults.standard @@ -283,6 +274,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate, MessagingDelegate { // set Flag to handle foreground to background transition self.appIsResignedButDidNotEnteredBackground = false + let ud = UserDefaults.standard + ud.set(false, forKey: kPasscodeIsPending) blockerScreen?.isHidden = true blockerScreen?.removeFromSuperview() } @@ -299,7 +292,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate, MessagingDelegate { self.checkForStudyUpdates() let number = UIApplication.shared.applicationIconBadgeNumber if number >= 1 { - self.updateNotification() + self.updateNotification(userInfoDetails: nil) } // Check For Manage Apps details self.addAndRemoveProgress(add: true) @@ -370,7 +363,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate, MessagingDelegate { if self.isAppLaunched! { self.isAppLaunched = false - DispatchQueue.main.async { // Update Local Notifications self.checkForRegisteredNotifications() @@ -390,12 +382,13 @@ class AppDelegate: UIResponder, UIApplicationDelegate, MessagingDelegate { _ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data ) { + ///UnComment the below for APNS approach of Push Notification let deviceTokenString = deviceToken.reduce("", { $0 + String(format: "%02X", $1) }) if User.currentUser.userType == .loggedInUser { User.currentUser.settings?.remoteNotifications = true User.currentUser.settings?.localNotifications = true - // Update device Token to Local server - UserServices().updateUserProfile(deviceToken: deviceTokenString, delegate: self) +// // Update device Token to Local server +// UserServices().updateUserProfile(deviceToken: deviceTokenString, delegate: self) } } @@ -652,114 +645,291 @@ class AppDelegate: UIResponder, UIApplicationDelegate, MessagingDelegate { leftController.changeViewController(.studyList) leftController.createLeftmenuItems() } + + if let dashboardTabBar = initialVC as? UITabBarController { + dashboardTabBar.selectedIndex = 2 // Go to resources screen. + if let resourcesVC = (dashboardTabBar.viewControllers?.first as? UINavigationController)?.topViewController as? ResourcesViewController + { + resourcesVC.userDidNavigateFromNotification() + } + } } /// Handler for local & remote notification /// - Parameter userInfoDetails: contains the info for notification - func handleLocalAndRemoteNotification(userInfoDetails: [String: Any]?) { - - // User info is valid - if let userInfoDetails = userInfoDetails, - !userInfoDetails.isEmpty + func handleLocalAndRemoteNotification(userInfoDetails: JSONDictionary?) { + var initialVC: UIViewController? + + if let dashboardTabBar = initialVC as? UITabBarController { + dashboardTabBar.selectedIndex = 2 // Go to resources screen. + if let resourcesVC = (dashboardTabBar.viewControllers?.first as? UINavigationController)?.topViewController as? ResourcesViewController + { + resourcesVC.userDidNavigateFromNotification() + } + } + + if let studyId = userInfoDetails?[kStudyId] as? String, + !studyId.isEmpty { - - let notificationType = userInfoDetails[kNotificationType] as? String ?? "" - - let subType = - AppNotification.NotificationSubType( - rawValue: (userInfoDetails[kNotificationSubType] as? String ?? "") - ) ?? .announcement - - if notificationType == AppNotification.NotificationType.study.rawValue { // Study Level Notification - - if let studyId = userInfoDetails[kStudyId] as? String, - !studyId.isEmpty - { - - var initialVC: UIViewController? - + let notificationType = userInfoDetails![kNotificationType] as? String ?? "" + let subType = AppNotification.NotificationSubType(rawValue: (userInfoDetails![kNotificationSubType] as? String ?? "")) ?? .announcement + + switch AppNotification.NotificationType(rawValue: notificationType) { + case .gateway: + hanldeGatewayNotificationType(userInfoDetails: userInfoDetails!, subType: subType) + break + case .study: + handleStudyNotificationType(userInfoDetails: userInfoDetails!, subType: subType) + default: + print(notificationType) + + } + } + } + + private func handleStudyNotificationType(userInfoDetails: [String: Any], subType: AppNotification.NotificationSubType) { + if let studyId = userInfoDetails[kStudyId] as? String, + !studyId.isEmpty + { + var initialVC: UIViewController? + + // fetch the visible view controller + let navigationController = self.window?.rootViewController as? UINavigationController + let menuVC = navigationController?.viewControllers.last + if menuVC is FDASlideMenuViewController { + let mainController = (menuVC as? FDASlideMenuViewController)? + .mainViewController + if mainController is UINavigationController { + let nav = mainController as? UINavigationController + initialVC = nav?.viewControllers.last + } + } + // Handling Notifications based on SubType + switch subType { + + case .study, .studyEvent: // Study Notifications + let leftController = + (menuVC as? FDASlideMenuViewController)?.leftViewController + as? LeftMenuViewController + + if (initialVC is StudyListViewController) { + let val = userInfoDetails["message"] as? String ?? "" + if val.containsIgnoringCase("has been paused") { + UserDefaults.standard.set("paused", forKey: "pausedNotification") + UserDefaults.standard.synchronize() + } + (initialVC as? StudyListViewController)!.addRightNavigationItem() + (initialVC as? StudyListViewController)!.performTaskBasedOnStudyStatus(studyID: studyId) + } else if !(initialVC is StudyListViewController) { + if initialVC is ProfileViewController + || initialVC + is ReachoutOptionsViewController + || initialVC is GatewayResourcesListViewController || initialVC is ActivitiesViewController || initialVC is ResourcesViewController || + initialVC is StudyDashboardViewController || initialVC is StudyDashboardTabbarViewController || + initialVC is NotificationViewController || initialVC is LeftMenuViewController + { + + NotificationHandler.instance.appOpenFromNotification = true + NotificationHandler.instance.studyId = studyId + + leftController?.changeViewController(.studyList) + leftController?.createLeftmenuItems() + + } + } else { + + NotificationHandler.instance.appOpenFromNotification = true + NotificationHandler.instance.studyId = studyId + + + leftController?.changeViewController(.studyList) + leftController?.createLeftmenuItems() + } + + case .activity: // Activity Notifications + + if !(initialVC is UITabBarController) { + (initialVC as? StudyListViewController)!.performTaskBasedOnStudyStatus(studyID: studyId) + + // push tabbar and switch to activty tab + if let initialVC = initialVC { + self.pushToTabbar( + viewController: initialVC, + selectedTab: subType == .activity ? 0 : 2 + ) + } + } else { + // switch to activity tab + (initialVC as? UITabBarController)?.selectedIndex = + subType == .activity ? 0 : 2 + } + + case .resource: + if !(initialVC is UITabBarController) { + if Gateway.instance.studies?.isEmpty == false { - guard - let study = Gateway.instance.studies?.filter({ $0.studyId == studyId }) + guard let study = Gateway.instance.studies?.filter({ $0.studyId == studyId }) .first else { return } Study.updateCurrentStudy(study: study) } - // fetch the visible view controller - let navigationController = self.window?.rootViewController as? UINavigationController - let menuVC = navigationController?.viewControllers.last - if menuVC is FDASlideMenuViewController { - let mainController = (menuVC as? FDASlideMenuViewController)? - .mainViewController - if mainController is UINavigationController { - let nav = mainController as? UINavigationController - initialVC = nav?.viewControllers.last - } + + // push tabbar and switch to resource tab + if let initialVC = initialVC { + self.pushToTabbar( + viewController: initialVC, + selectedTab: 2 + ) } - // Handling Notifications based on SubType - switch subType { - case .activity, .resource: // Activity & Resource Notifications - - if !(initialVC is UITabBarController) { - // push tabbar and switch to activty tab - if let initialVC = initialVC { - self.pushToTabbar( - viewController: initialVC, - selectedTab: subType == .activity ? 0 : 2 - ) - } - } else { - // switch to activity tab - (initialVC as? UITabBarController)?.selectedIndex = - subType == .activity ? 0 : 2 - } - - case .study, .studyEvent: // Study Notifications - - let leftController = - (menuVC as? FDASlideMenuViewController)?.leftViewController - as? LeftMenuViewController - - if !(initialVC is StudyListViewController) { - - if initialVC is ProfileViewController - || initialVC - is ReachoutOptionsViewController - || initialVC is GatewayResourcesListViewController - { - - NotificationHandler.instance.appOpenFromNotification = true - NotificationHandler.instance.studyId = studyId - - leftController?.changeViewController(.studyList) - leftController?.createLeftmenuItems() - - } - } else { - - NotificationHandler.instance.appOpenFromNotification = true - NotificationHandler.instance.studyId = studyId - - leftController?.changeViewController(.studyList) - leftController?.createLeftmenuItems() - } + } + else { + (initialVC as? UITabBarController)?.selectedIndex = 2 + } + + case .announcement: + if !(initialVC is UITabBarController) { + (initialVC as? StudyListViewController)!.performTaskBasedOnStudyStatus(studyID: studyId) + + // push tabbar and switch to activty tab + if let initialVC = initialVC { + self.pushToTabbar( + viewController: initialVC, + selectedTab: subType == .announcement ? 0 : 2 + ) + } + } else { + // switch to activity tab + (initialVC as? UITabBarController)?.selectedIndex = + subType == .announcement ? 0 : 2 + } + } + } + } + + private func hanldeGatewayNotificationType(userInfoDetails: [String: Any], subType: AppNotification.NotificationSubType) { + if let studyId = userInfoDetails[kStudyId] as? String, + !studyId.isEmpty + { + var initialVC: UIViewController? + + // fetch the visible view controller + let navigationController = self.window?.rootViewController as? UINavigationController + let menuVC = navigationController?.viewControllers.last + if menuVC is FDASlideMenuViewController { + let mainController = (menuVC as? FDASlideMenuViewController)? + .mainViewController + if mainController is UINavigationController { + let nav = mainController as? UINavigationController + initialVC = nav?.viewControllers.last + } + } + // Handling Notifications based on SubType + switch subType { + + case .study, .studyEvent: // Study Notifications + let leftController = + (menuVC as? FDASlideMenuViewController)?.leftViewController + as? LeftMenuViewController + + if (initialVC is StudyListViewController) { + (initialVC as? StudyListViewController)!.addRightNavigationItem() + (initialVC as? StudyListViewController)!.performTaskBasedOnStudyStatus(studyID: studyId) + } else if !(initialVC is StudyListViewController) { + if initialVC is ProfileViewController || initialVC is ReachoutOptionsViewController || initialVC is GatewayResourcesListViewController || + initialVC is ActivitiesViewController || initialVC is ResourcesViewController || + initialVC is StudyDashboardViewController || initialVC is StudyDashboardTabbarViewController || + initialVC is NotificationViewController || initialVC is LeftMenuViewController + { + + NotificationHandler.instance.appOpenFromNotification = true + NotificationHandler.instance.studyId = studyId + + leftController?.changeViewController(.studyList) + leftController?.createLeftmenuItems() - case .announcement: - break } + } else { + + NotificationHandler.instance.appOpenFromNotification = true + NotificationHandler.instance.studyId = studyId + + leftController?.changeViewController(.studyList) + leftController?.createLeftmenuItems() + } + + case .activity: // Activity Notifications + + if !(initialVC is UITabBarController) { + (initialVC as? StudyListViewController)!.performTaskBasedOnStudyStatus(studyID: studyId) + + // push tabbar and switch to activty tab + if let initialVC = initialVC { + self.pushToTabbar( + viewController: initialVC, + selectedTab: subType == .activity ? 0 : 2 + ) + } + } else { + (initialVC as? UITabBarController)?.selectedIndex = + subType == .activity ? 0 : 2 + } + + case .resource: // Resource Notifications + if !(initialVC is UITabBarController) { + if Gateway.instance.studies?.isEmpty == false { + guard let study = Gateway.instance.studies?.filter({ $0.studyId == studyId }) + .first + else { return } + Study.updateCurrentStudy(study: study) + } + + // push tabbar and switch to resource tab + if let initialVC = initialVC { + self.pushToTabbar( + viewController: initialVC, + selectedTab: 2 + ) + } + } else { + (initialVC as? UITabBarController)?.selectedIndex = 2 + } + + case .announcement: + if !(initialVC is UITabBarController) { + (initialVC as? StudyListViewController)!.performTaskBasedOnStudyStatus(studyID: studyId) + + // push tabbar and switch to activty tab + if let initialVC = initialVC { + self.pushToTabbar( + viewController: initialVC, + selectedTab: subType == .announcement ? 0 : 2 + ) + } + } else { + (initialVC as? UITabBarController)?.selectedIndex = + subType == .announcement ? 0 : 2 } } } - self.notificationDetails = nil + } + + func navigateToStudyHome(viewController: UIViewController, studyID: String? = nil) { + let studyStoryBoard = UIStoryboard(name: kStudyStoryboard, bundle: Bundle.main) + let studyHomeController = + (studyStoryBoard.instantiateViewController( + withIdentifier: String(describing: StudyHomeViewController.classForCoder()) + ) + as? StudyHomeViewController)! + viewController.navigationController?.pushViewController(studyHomeController, animated: true) } /// Push to tabbar Controller with tabs Activity, Dashboard & Resource /// - Parameters: /// - viewController: Instance of `UIViewController` /// - selectedTab: Selected tab in form of `Int` - func pushToTabbar(viewController: UIViewController, selectedTab: Int) { - + func pushToTabbar(viewController: UIViewController, selectedTab: Int, studyID: String? = nil) { + DispatchQueue.main.async { let studyStoryBoard = UIStoryboard.init(name: kStudyStoryboard, bundle: Bundle.main) let studyDashboard = @@ -771,6 +941,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate, MessagingDelegate { studyDashboard.selectedIndex = selectedTab viewController.navigationController?.navigationBar.isHidden = true viewController.navigationController?.pushViewController(studyDashboard, animated: true) + } } /// Verifies passcode if enabled or set passcode @@ -902,7 +1073,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate, MessagingDelegate { // Update User Defaults let ud = UserDefaults.standard - ud.set(false, forKey: kPasscodeIsPending) + ud.set(true, forKey: kPasscodeIsPending) ud.set(false, forKey: kShowNotification) ud.synchronize() @@ -938,7 +1109,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate, MessagingDelegate { ORKPasscodeViewController.removePasscodeFromKeychain() } let ud = UserDefaults.standard - ud.set(false, forKey: kPasscodeIsPending) + ud.set(true, forKey: kPasscodeIsPending) ud.set(false, forKey: kShowNotification) ud.synchronize() @@ -966,8 +1137,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate, MessagingDelegate { } /// Checks for `StudyListViewController` and adds right navigation item - func updateNotification() { - + func updateNotification(userInfoDetails: [String:Any]?) { let ud = UserDefaults.standard ud.set(true, forKey: kShowNotification) ud.synchronize() @@ -987,7 +1157,50 @@ class AppDelegate: UIResponder, UIApplicationDelegate, MessagingDelegate { let studyListVC = nav?.viewControllers.last if studyListVC is StudyListViewController { (studyListVC as? StudyListViewController)!.addRightNavigationItem() + if let studyId = userInfoDetails?[kStudyId] as? String, + !studyId.isEmpty + { + let notificationType = userInfoDetails![kNotificationType] as? String ?? "" + + let subType = AppNotification.NotificationSubType(rawValue: (userInfoDetails![kNotificationSubType] as? String ?? "")) ?? .announcement + + switch AppNotification.NotificationType(rawValue: notificationType) { + case .gateway: + hanldeGatewayNotificationType(userInfoDetails: userInfoDetails!, subType: subType) + break + case .study: + handleStudyNotificationType(userInfoDetails: userInfoDetails!, subType: subType) + default: + print(notificationType) + + } + } + } + } + } + } + func updateActiveNotification() { + let ud = UserDefaults.standard + ud.set(true, forKey: kShowNotification) + ud.synchronize() + var nav: UINavigationController? + // fetch the visible view controller + guard let navigationController = self.window?.rootViewController as? UINavigationController else { + return + } + + let menuVC = navigationController.viewControllers.last + + if menuVC is FDASlideMenuViewController { + let mainController = (menuVC as? FDASlideMenuViewController)!.mainViewController + + if mainController is UINavigationController { + nav = (mainController as? UINavigationController)! + let studyListVC = nav?.viewControllers.last + if studyListVC is StudyListViewController { + (studyListVC as? StudyListViewController)!.addRightNavigationItem() + } } } @@ -1358,7 +1571,7 @@ extension AppDelegate: ORKTaskViewControllerDelegate { case ORKTaskViewControllerFinishReason.completed: if !(taskViewController.task?.identifier == kConsentTaskIdentifier) { // other surveys/Active tasks/ Passcode let ud = UserDefaults.standard - ud.set(false, forKey: kPasscodeIsPending) + ud.set(true, forKey: kPasscodeIsPending) ud.synchronize() self.appIsResignedButDidNotEnteredBackground = false } @@ -1773,7 +1986,10 @@ extension AppDelegate: ORKPasscodeDelegate { } func passcodeViewControllerForgotPasscodeTapped(_ viewController: UIViewController) { - + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Forgot Passcode?ActionClicked" + ]) + var topVC = UIApplication.shared.keyWindow?.rootViewController while topVC?.presentedViewController != nil { @@ -1787,6 +2003,9 @@ extension AppDelegate: ORKPasscodeDelegate { errorAlertActionTitle2: NSLocalizedString(kTitleCancel, comment: ""), viewControllerUsed: topVC!, action1: { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "ForgotPasscodeAlert OK" + ]) self.window?.addProgressIndicatorOnWindowFromTop() viewController.dismiss( @@ -1809,7 +2028,11 @@ extension AppDelegate: ORKPasscodeDelegate { } ) }, - action2: {} + action2: { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "ForgotPasscodeAlert Cancel" + ]) + } ) } } @@ -1825,6 +2048,14 @@ extension AppDelegate: ComprehensionFailureDelegate { // Create Consent Task on Retry self.createEligibilityConsentTask() } + + @objc func receivedORKAction(_ notification: Notification) { + let value = notification.userInfo + if let action = value?["ORKAction"] as? String { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [buttonClickReasonsKey: action]) + } + } + } // MARK: - UNUserNotification Delegate @@ -1842,7 +2073,7 @@ extension AppDelegate: UNUserNotificationCenterDelegate { let userInfo = notification.request.content.userInfo if userInfo.count > 0 && userInfo.keys.contains(kType) { - self.updateNotification() + self.updateActiveNotification() } if let userInfo = userInfo as? JSONDictionary { refreshStudyActivitiesState(with: userInfo) @@ -1855,7 +2086,6 @@ extension AppDelegate: UNUserNotificationCenterDelegate { didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void ) { - let userInfo = response.notification.request.content.userInfo UIApplication.shared.applicationIconBadgeNumber = 0 @@ -1863,15 +2093,12 @@ extension AppDelegate: UNUserNotificationCenterDelegate { || UIApplication.shared.applicationState == UIApplication.State.active { - self.handleLocalAndRemoteNotification(userInfoDetails: (userInfo as? [String: Any])!) + self.handleLocalAndRemoteNotification(userInfoDetails: (userInfo as? JSONDictionary ?? [:])) } // UserInfo is valid & contains Type for Notification if userInfo.count > 0 && userInfo.keys.contains(kType) { - self.updateNotification() - - } else { - self.handleLocalNotification(userInfoDetails: userInfo as? JSONDictionary ?? [:]) + self.handleLocalAndRemoteNotification(userInfoDetails: (userInfo as? JSONDictionary ?? [:])) } completionHandler() } @@ -1928,3 +2155,10 @@ extension UIWindow { } } } + +enum EnumORKAction: String { + case ORKCancel, ORKDone, ORKSave, ORKSkip, ORKContinue, ORKClearAnswer, ORKButtonTapped, ORKBackButton, ORKEndTask, + ORKProceed, ORKLearnMore, ORKSaveForLater, ORKCancelAlert, ORKReviewAgreeAlert, ORKReviewCancel, ORKReviewAgree, ORKReviewDisAgree, + ORKContinueButton, ORKLearnMoreDone, ORKKeyboardDone, ORKKeyboardPlusMinus, ORKTryAgain, ORKNext, ORKClearSign, ORKPasscodeCancel, + ORKPasscodeInvalidAlertOK, ORKActivityTimeOut, ORKCopyRightOkAlert, ORKShowCopyRight, ORKPlaybackNextItem, ORKOK +} diff --git a/iOS/MyStudies/MyStudies/Assets/Study.xcassets/leftIconBlue2.imageset/Contents.json b/iOS/MyStudies/MyStudies/Assets/Study.xcassets/leftIconBlue2.imageset/Contents.json new file mode 100644 index 0000000000..f50a0dadea --- /dev/null +++ b/iOS/MyStudies/MyStudies/Assets/Study.xcassets/leftIconBlue2.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "arrow2_left@3x copy.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iOS/MyStudies/MyStudies/Assets/Study.xcassets/leftIconBlue2.imageset/arrow2_left@3x copy.png b/iOS/MyStudies/MyStudies/Assets/Study.xcassets/leftIconBlue2.imageset/arrow2_left@3x copy.png new file mode 100644 index 0000000000..aac17743b3 Binary files /dev/null and b/iOS/MyStudies/MyStudies/Assets/Study.xcassets/leftIconBlue2.imageset/arrow2_left@3x copy.png differ diff --git a/iOS/MyStudies/MyStudies/Controllers/ConsentUI/ConsentPdfViewerStepViewController.swift b/iOS/MyStudies/MyStudies/Controllers/ConsentUI/ConsentPdfViewerStepViewController.swift index 6edb4301fe..00c8c10025 100644 --- a/iOS/MyStudies/MyStudies/Controllers/ConsentUI/ConsentPdfViewerStepViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/ConsentUI/ConsentPdfViewerStepViewController.swift @@ -20,6 +20,7 @@ import MessageUI import ResearchKit import UIKit import WebKit +import FirebaseAnalytics let kPdfMimeType = "application/pdf" let kUTF8Encoding = "UTF-8" @@ -62,6 +63,8 @@ class ConsentPdfViewerStepViewController: ORKStepViewController { } override func goForward() { + NotificationCenter.default.post(name: Notification.Name("GoForward"), object: nil) + super.goForward() } @@ -124,10 +127,16 @@ class ConsentPdfViewerStepViewController: ORKStepViewController { // MARK: - Button Actions @IBAction func buttonActionNext(sender: UIBarButtonItem?) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "ConsentPdfViewerStep Done" + ]) self.goForward() } @IBAction func buttonActionEmailPdf(sender: UIBarButtonItem?) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "ConsentPdfViewerStep SharePdf" + ]) self.sendConsentByMail() } @@ -155,6 +164,9 @@ extension ConsentPdfViewerStepViewController: WKNavigationDelegate { title: buttonTitleOK, style: .default, handler: { (_) in + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Ok Alert" + ]) self.dismiss(animated: true, completion: nil) } diff --git a/iOS/MyStudies/MyStudies/Controllers/EligibilityUI/EligibilityStepViewController.swift b/iOS/MyStudies/MyStudies/Controllers/EligibilityUI/EligibilityStepViewController.swift index 18bfc0ef1b..2f00ce826d 100644 --- a/iOS/MyStudies/MyStudies/Controllers/EligibilityUI/EligibilityStepViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/EligibilityUI/EligibilityStepViewController.swift @@ -20,6 +20,7 @@ import IQKeyboardManagerSwift import ResearchKit import UIKit +import FirebaseAnalytics let kTitleOK = "OK" @@ -78,6 +79,7 @@ class EligibilityStepViewController: ORKStepViewController { } override func goForward() { + NotificationCenter.default.post(name: Notification.Name("GoForward"), object: nil) super.goForward() } @@ -160,6 +162,9 @@ class EligibilityStepViewController: ORKStepViewController { // MARK: - Action @IBAction func buttonActionSubmit(sender: UIButton?) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "EligibilityStep Submit" + ]) self.view.endEditing(true) let token = tokenTextField.text @@ -230,7 +235,7 @@ extension EligibilityStepViewController: NMWebServiceDelegate { } else { self.taskResult.enrollmentToken = "" } - + NotificationCenter.default.post(name: Notification.Name("GoForward"), object: nil) self.goForward() } diff --git a/iOS/MyStudies/MyStudies/Controllers/EligibilityUI/InEligibilityStepViewController.swift b/iOS/MyStudies/MyStudies/Controllers/EligibilityUI/InEligibilityStepViewController.swift index be7803d170..28c5cbb65a 100644 --- a/iOS/MyStudies/MyStudies/Controllers/EligibilityUI/InEligibilityStepViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/EligibilityUI/InEligibilityStepViewController.swift @@ -18,6 +18,7 @@ import ResearchKit import UIKit +import FirebaseAnalytics class InEligibilityStep: ORKStep { @@ -51,6 +52,7 @@ class InEligibilityStepViewController: ORKStepViewController { } override func goForward() { + NotificationCenter.default.post(name: Notification.Name("GoForward"), object: nil) super.goForward() } @@ -62,6 +64,9 @@ class InEligibilityStepViewController: ORKStepViewController { // MARK: - Actions @IBAction func buttonActionDone(sender: UIButton?) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "InEligibility Done" + ]) self.goForward() self.taskViewController?.dismiss(animated: true, completion: nil) } diff --git a/iOS/MyStudies/MyStudies/Controllers/FetalKickUI/FetalKickCounterStepViewController/FetalKickCounterStepViewController.swift b/iOS/MyStudies/MyStudies/Controllers/FetalKickUI/FetalKickCounterStepViewController/FetalKickCounterStepViewController.swift index 7bc26dfa1d..5c9ca6f4ae 100644 --- a/iOS/MyStudies/MyStudies/Controllers/FetalKickUI/FetalKickCounterStepViewController/FetalKickCounterStepViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/FetalKickUI/FetalKickCounterStepViewController/FetalKickCounterStepViewController.swift @@ -21,6 +21,7 @@ import ActionSheetPicker_3_0 import Foundation import IQKeyboardManagerSwift import ResearchKit +import FirebaseAnalytics let kFetalKickCounterStepDefaultIdentifier = "defaultIdentifier" let kTapToRecordKick = "TAP TO RECORD A KICK" @@ -173,7 +174,7 @@ class FetalKickCounterStepViewController: ORKStepViewController { self.startButtonAction(UIButton()) } backgroundTaskIdentifier = UIApplication.shared.beginBackgroundTask(expirationHandler: {}) - + // adding guesture to view to support outside tap let gestureRecognizer = UITapGestureRecognizer( target: self, @@ -183,13 +184,26 @@ class FetalKickCounterStepViewController: ORKStepViewController { self.view.addGestureRecognizer(gestureRecognizer) } } - + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + + counterTextField?.text = "00" + "\(self.kickCounter!)" + + let isAlertShown = UserDefaults.standard.bool(forKey: "isAlertShown") + if Int((counterTextField?.text)!) == self.maxKicksAllowed! && !isAlertShown { + UserDefaults.standard.setValue(true, forKey: "isAlertShown") + self.showAlertOnCompletion() + } + } + override func hasNextStep() -> Bool { super.hasNextStep() return true } override func goForward() { + NotificationCenter.default.post(name: Notification.Name("GoForward"), object: nil) super.goForward() } @@ -228,6 +242,7 @@ class FetalKickCounterStepViewController: ORKStepViewController { if self.timerValue! > self.totalTime! { self.setResults() + UserDefaults.standard.setValue(true, forKey: "isAlertShown") self.showAlertOnCompletion() } else { @@ -266,20 +281,19 @@ class FetalKickCounterStepViewController: ORKStepViewController { if ud.object(forKey: kFetalKickStartTimeStamp) != nil { ud.set(true, forKey: "FKC") - + ud.set(Study.currentActivity?.actvityId, forKey: kFetalKickActivityId) ud.set(Study.currentStudy?.studyId, forKey: kFetalkickStudyId) ud.set(self.kickCounter, forKey: kFetalKickCounterValue) - + // check if runid is saved if ud.object(forKey: kFetalKickCounterRunId) == nil { ud.set(Study.currentActivity?.currentRun.runId, forKey: kFetalKickCounterRunId) } - + ud.synchronize() } - } /// Resets the keys when app becomes Active. @@ -288,6 +302,7 @@ class FetalKickCounterStepViewController: ORKStepViewController { let ud = UserDefaults.standard ud.set(false, forKey: "FKC") ud.synchronize() + } /// Alerts User if Kick counts or time is exceeded. @@ -296,12 +311,19 @@ class FetalKickCounterStepViewController: ORKStepViewController { let message = kGreaterValueMessage + "\(self.maxKicksAllowed!) kicks, " + "please enter " + "\(self.maxKicksAllowed!) kicks only" - - Utilities.showAlertWithTitleAndMessage( + + UserDefaults.standard.setValue(true, forKey: "isGreaterAlertShown") + + Utilities.showAlertWithTitleAndMessage ( title: kMessage, message: message, - on: self - ) + on: self, + cancelAction: { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "FetalKick Greater value cancel alert" + ]) + UserDefaults.standard.setValue(true, forKey: "isGreaterAlertDismissed") + }) } /// Updates results for the Task. @@ -365,15 +387,26 @@ class FetalKickCounterStepViewController: ORKStepViewController { let message = kConfirmMessage + "\(self.kickCounter!) kicks in " + "\(timeConsumed!)." + kConfirmMessage2 - + +// UserDefaults.standard.setValue(true, forKey: "isAlertShown") + UIUtilities.showAlertMessageWithTwoActionsAndHandler( NSLocalizedString(kConfirmation, comment: ""), errorMessage: NSLocalizedString(message, comment: ""), errorAlertActionTitle: NSLocalizedString(kTitleCancel, comment: ""), errorAlertActionTitle2: NSLocalizedString(kProceedTitle, comment: ""), viewControllerUsed: self, - action1: {}, + action1: { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "OnCompletion Cancel Alert" + ]) + }, action2: { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "OnCompletion GoFoward Alert" + ]) + UserDefaults.standard.removeObject(forKey: "isAlertShown") + UserDefaults.standard.synchronize() self.goForward() } ) @@ -382,6 +415,9 @@ class FetalKickCounterStepViewController: ORKStepViewController { // MARK: Button Actions @IBAction func editCounterButtonAction(_ sender: UIButton) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "FetalKickCounter EditCounter" + ]) counterTextField?.isUserInteractionEnabled = true counterTextField?.isHidden = false seperatorLineView?.isHidden = false @@ -389,6 +425,9 @@ class FetalKickCounterStepViewController: ORKStepViewController { } @IBAction func startButtonAction(_ sender: UIButton) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "FetalKickCounter Start" + ]) if Int((self.counterTextField?.text)!)! == 0 { @@ -435,11 +474,13 @@ class FetalKickCounterStepViewController: ORKStepViewController { if self.kickCounter == self.maxKicksAllowed! { self.setResults() + UserDefaults.standard.setValue(true, forKey: "isAlertShown") self.showAlertOnCompletion() } } else if self.kickCounter! == self.maxKicksAllowed! { self.setResults() + UserDefaults.standard.setValue(true, forKey: "isAlertShown") self.showAlertOnCompletion() } else if self.kickCounter! > self.maxKicksAllowed! { @@ -453,9 +494,16 @@ class FetalKickCounterStepViewController: ORKStepViewController { self.taskResult.duration = self.timerValue! self.taskResult.totalKickCount = self.kickCounter == nil ? 0 : self.kickCounter! self.perform(#selector(self.goForward)) + + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "FetalKickCounterStep Submit" + ]) } @IBAction func editTimerButtonAction(_ sender: UIButton) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "FetalKickCounterStep EditTimer" + ]) let timerArray = self.getTimerArray() let defaultTime = self.getIndexes() @@ -468,6 +516,10 @@ class FetalKickCounterStepViewController: ORKStepViewController { _, _, indexes in + + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "EditTimer Done Alert" + ]) let result: [String] = (indexes as! [String]) let hours = result.first?.components( @@ -496,10 +548,14 @@ class FetalKickCounterStepViewController: ORKStepViewController { (hours < 10 ? "0\(hours):" : "\(hours):") + (minutes < 10 ? "0\(minutes):" : "\(minutes):") + (seconds < 10 ? "0\(seconds)" : "\(seconds)") - Utilities.showAlertWithTitleAndMessage( + Utilities.showAlertWithTitleAndMessageAction( title: kMessage, message: "Please select a valid time(Max " + value + ")", - on: self + on: self, cancelAction: { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "EditTimer Cancel Alert" + ]) + } ) } else { @@ -508,6 +564,9 @@ class FetalKickCounterStepViewController: ORKStepViewController { return }, cancel: { _ in + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "EditTimer Cancel Alert" + ]) return }, origin: sender @@ -610,6 +669,7 @@ extension FetalKickCounterStepViewController: UITextFieldDelegate { if self.kickCounter == self.maxKicksAllowed! { self.setResults() + UserDefaults.standard.setValue(true, forKey: "isAlertShown") self.showAlertOnCompletion() } @@ -626,13 +686,21 @@ extension FetalKickCounterStepViewController: UITextFieldDelegate { let finalString = textField.text! + string if textField == counterTextField && finalString.count > 0 { - + if Int(finalString)! <= self.maxKicksAllowed! { return true } else { - + if Int(finalString)! >= self.maxKicksAllowed! { + let finalValue = (Int((counterTextField?.text)!)) + self.editCounterButton?.isUserInteractionEnabled = true + counterTextField?.isHidden = false + seperatorLineView?.isHidden = false + counterTextField?.becomeFirstResponder() + counterTextField?.text = "\(finalValue ?? 0)" + } + self.showAlertForGreaterValues() return false } diff --git a/iOS/MyStudies/MyStudies/Controllers/FetalKickUI/FetalKickIntroStepViewController/FetalKickIntroStepViewController.swift b/iOS/MyStudies/MyStudies/Controllers/FetalKickUI/FetalKickIntroStepViewController/FetalKickIntroStepViewController.swift index 2b1553dc54..5a3715fb76 100644 --- a/iOS/MyStudies/MyStudies/Controllers/FetalKickUI/FetalKickIntroStepViewController/FetalKickIntroStepViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/FetalKickUI/FetalKickIntroStepViewController/FetalKickIntroStepViewController.swift @@ -18,6 +18,7 @@ import Foundation import ResearchKit +import FirebaseAnalytics let kFetalKickIntroStepDefaultIdentifier = "FetalIntroStepIdentifier" @@ -79,6 +80,9 @@ class FetalKickIntroStepViewController: ORKStepViewController { // MARK: IBActions @IBAction func nextButtonAction(_ sender: UIButton) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "FetalKickIntroStep Next" + ]) self.goForward() } diff --git a/iOS/MyStudies/MyStudies/Controllers/GatewayUI/ChangePasswordViewController.swift b/iOS/MyStudies/MyStudies/Controllers/GatewayUI/ChangePasswordViewController.swift index 039c972314..c98357a04f 100644 --- a/iOS/MyStudies/MyStudies/Controllers/GatewayUI/ChangePasswordViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/GatewayUI/ChangePasswordViewController.swift @@ -19,6 +19,7 @@ import IQKeyboardManagerSwift import UIKit +import FirebaseAnalytics enum CPTextFeildTags: Int { case oldPassword = 100 @@ -55,7 +56,7 @@ class ChangePasswordViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() - + // Used to set border color for bottom view buttonSubmit?.layer.borderColor = kUicolorForButtonBackground @@ -171,24 +172,50 @@ class ChangePasswordViewController: UIViewController { /// Validations after clicking on submit button /// If all the validations satisfy send user feedback request. @IBAction func submitButtonAction(_ sender: Any) { + + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "ChangePassword Submit" + ]) + self.view.endEditing(true) if self.oldPassword.isEmpty && self.newPassword.isEmpty && self.confirmPassword.isEmpty { self.showAlertMessages(textMessage: kMessageAllFieldsAreEmpty) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Fill all fields alert" + ]) } else if self.oldPassword == "" { self.showAlertMessages(textMessage: kMessageCurrentPasswordBlank) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Current Password Alert" + ]) } else if self.newPassword == "" { self.showAlertMessages(textMessage: kMessageNewPasswordBlank) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "New Password Alert" + ]) } else if self.confirmPassword == "" { self.showAlertMessages(textMessage: kMessageProfileConfirmPasswordBlank) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Confirm Password alert" + ]) } else if Utilities.isPasswordValid(text: self.newPassword) == false { self.showAlertMessages(textMessage: kMessageValidatePasswordComplexity) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Password criteria alert" + ]) } else if self.newPassword == User.currentUser.emailId { self.showAlertMessages(textMessage: kMessagePasswordMatchingToOtherFeilds) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Password+Email match alert" + ]) } else if self.newPassword != self.confirmPassword { self.showAlertMessages(textMessage: kMessageProfileValidatePasswords) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Password dont match alert" + ]) } else { self.requestToChangePassword() } @@ -282,14 +309,23 @@ extension ChangePasswordViewController: UITextFieldDelegate { if let password = textField.text, !password.isEmpty { if !Utilities.isPasswordValid(text: password) { self.showAlertMessages(textMessage: kMessageValidatePasswordComplexity) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Password criteria alert" + ]) } else if password == User.currentUser.emailId { self.showAlertMessages(textMessage: kMessagePasswordMatchingToOtherFeilds) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Password+Email match alert" + ]) } } case .confirmPassword: self.confirmPassword = textField.text ?? "" if self.confirmPassword != "" && self.newPassword != self.confirmPassword { self.showAlertMessages(textMessage: kMessageProfileValidatePasswords) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Password dont match alert" + ]) } } } diff --git a/iOS/MyStudies/MyStudies/Controllers/GatewayUI/ConfirmationViewUI/ConfirmationViewController.swift b/iOS/MyStudies/MyStudies/Controllers/GatewayUI/ConfirmationViewUI/ConfirmationViewController.swift index 9e67e15ec1..e8ba6ca717 100644 --- a/iOS/MyStudies/MyStudies/Controllers/GatewayUI/ConfirmationViewUI/ConfirmationViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/GatewayUI/ConfirmationViewUI/ConfirmationViewController.swift @@ -17,6 +17,7 @@ // OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR // OTHER DEALINGS IN THE SOFTWARE. import UIKit +import FirebaseAnalytics let kConfirmationSegueIdentifier = "confirmationSegue" let kHeaderDescription = @@ -189,6 +190,9 @@ class ConfirmationViewController: UIViewController { /// Delete account button clicked. @IBAction func deleteAccountAction(_ sender: UIButton) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Delete Account" + ]) var found: Bool = false for withdrawnStudy in studiesToWithdraw where withdrawnStudy.shouldDelete == nil { @@ -212,6 +216,9 @@ class ConfirmationViewController: UIViewController { /// Don't Delete button action. @IBAction func doNotDeleteAccountAction(_ sender: UIButton) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "DoNot Delete Account" + ]) _ = self.navigationController?.popViewController(animated: true) } } diff --git a/iOS/MyStudies/MyStudies/Controllers/GatewayUI/NotificationUI/NotificationViewController.swift b/iOS/MyStudies/MyStudies/Controllers/GatewayUI/NotificationUI/NotificationViewController.swift index ed07241bc8..9c89bd531b 100644 --- a/iOS/MyStudies/MyStudies/Controllers/GatewayUI/NotificationUI/NotificationViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/GatewayUI/NotificationUI/NotificationViewController.swift @@ -185,6 +185,10 @@ class NotificationViewController: UIViewController { case .activity: viewController?.selectedIndex = 0 self.navigationController?.pushViewController(viewController!, animated: true) + + case .announcement: + viewController?.selectedIndex = 0 + self.navigationController?.pushViewController(viewController!, animated: true) default: self.navigationController?.setNavigationBarHidden(false, animated: true) diff --git a/iOS/MyStudies/MyStudies/Controllers/GatewayUI/ProfileViewUI/ProfileViewController.swift b/iOS/MyStudies/MyStudies/Controllers/GatewayUI/ProfileViewUI/ProfileViewController.swift index a49de8f262..550ae82310 100644 --- a/iOS/MyStudies/MyStudies/Controllers/GatewayUI/ProfileViewUI/ProfileViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/GatewayUI/ProfileViewUI/ProfileViewController.swift @@ -21,6 +21,7 @@ import IQKeyboardManagerSwift import LocalAuthentication import SlideMenuControllerSwift import UIKit +import FirebaseAnalytics let kProfileTableViewCellIdentifier = "ProfileTableViewCell" @@ -90,6 +91,9 @@ class ProfileViewController: UIViewController, SlideMenuControllerDelegate { override func viewDidLoad() { super.viewDidLoad() + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "LeftMenu MyAccount" + ]) // Load plist info let plistPath = Bundle.main.path(forResource: "Profile", ofType: ".plist", inDirectory: nil) @@ -128,6 +132,9 @@ class ProfileViewController: UIViewController, SlideMenuControllerDelegate { /// Change password button clicked. @IBAction func buttonActionChangePassCode(_ sender: UIButton) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Change Passcode" + ]) let passcodeViewController = ORKPasscodeViewController.passcodeEditingViewController( withText: kSetPasscodeDescription, @@ -141,6 +148,9 @@ class ProfileViewController: UIViewController, SlideMenuControllerDelegate { /// Edit Profile button clicked @IBAction func editBarButtonAction(_ sender: UIBarButtonItem) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Profile Edit" + ]) if self.isCellEditable! == false { self.isCellEditable = true @@ -161,6 +171,9 @@ class ProfileViewController: UIViewController, SlideMenuControllerDelegate { /// Button action for LeadtimeButton, CancelButton & DoneButton. @IBAction func buttonActionLeadTime(_ sender: UIButton) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Lead Time" + ]) let alertView = UIAlertController( title: kLeadTimeSelectText, @@ -186,6 +199,9 @@ class ProfileViewController: UIViewController, SlideMenuControllerDelegate { style: UIAlertAction.Style.default, handler: { _ in + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "LeadTime Done Alert" + ]) let calender: Calendar? = Calendar.current @@ -216,6 +232,9 @@ class ProfileViewController: UIViewController, SlideMenuControllerDelegate { style: UIAlertAction.Style.default, handler: { _ in + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "LeadTime Cancel Alert" + ]) } ) @@ -228,6 +247,9 @@ class ProfileViewController: UIViewController, SlideMenuControllerDelegate { /// Signout Button Clicked. @IBAction func buttonActionSignOut(_ sender: UIButton) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Sign-Out" + ]) UIUtilities.showAlertMessageWithTwoActionsAndHandler( NSLocalizedString(kSignOutText, comment: ""), @@ -236,11 +258,17 @@ class ProfileViewController: UIViewController, SlideMenuControllerDelegate { errorAlertActionTitle2: NSLocalizedString(kTitleCancel, comment: ""), viewControllerUsed: self, action1: { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Sign-Out Ok" + ]) self.isSigningOut = true LeftMenuViewController.updatePushTokenToEmptyString(delegate: self) }, action2: { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Sign-Out Cancel" + ]) // Handle cancel action } ) @@ -249,6 +277,9 @@ class ProfileViewController: UIViewController, SlideMenuControllerDelegate { /// Delete Account clicked. @IBAction func buttonActionDeleteAccount(_ sender: UIButton) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Delete Account" + ]) if (Gateway.instance.studies?.count)! > 0 { let studies = Gateway.instance.studies @@ -291,11 +322,17 @@ class ProfileViewController: UIViewController, SlideMenuControllerDelegate { errorAlertActionTitle2: NSLocalizedString(kTitleCancel, comment: ""), viewControllerUsed: self, action1: { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "DeleteAccount Ok" + ]) self.sendRequestToDeleteAccount() }, action2: { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "DeleteAccount Cancel" + ]) // Handle cancel action } ) @@ -369,6 +406,9 @@ class ProfileViewController: UIViewController, SlideMenuControllerDelegate { buttonTitle: NSLocalizedString(kTitleOk, comment: ""), viewControllerUsed: self ) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Account Deleted OKAlert" + ]) if Utilities.isStandaloneApp() { @@ -448,6 +488,9 @@ class ProfileViewController: UIViewController, SlideMenuControllerDelegate { } @objc func toggleValueChanged(_ sender: UISwitch) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "ToggleValue Changed" + ]) let toggle = sender @@ -494,6 +537,9 @@ class ProfileViewController: UIViewController, SlideMenuControllerDelegate { /// Button action for Change password button. @objc func pushToChangePassword(_ sender: UIButton) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Change Password" + ]) self.performSegue(withIdentifier: kChangePasswordSegueIdentifier, sender: nil) } @@ -503,12 +549,21 @@ class ProfileViewController: UIViewController, SlideMenuControllerDelegate { if (user.emailId?.isEmpty)! { self.showAlertMessages(textMessage: kMessageAllFieldsAreEmpty) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Fill all fields alert" + ]) return false } else if user.emailId == "" { self.showAlertMessages(textMessage: kMessageEmailBlank) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Enter email alert" + ]) return false } else if !(Utilities.isValidEmail(testStr: user.emailId!)) { self.showAlertMessages(textMessage: kMessageValidEmail) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Enter valid email alert" + ]) return false } return true diff --git a/iOS/MyStudies/MyStudies/Controllers/GatewayUI/ReachoutUI/ContactUsViewController.swift b/iOS/MyStudies/MyStudies/Controllers/GatewayUI/ReachoutUI/ContactUsViewController.swift index 57a0c32315..529fcb11d4 100644 --- a/iOS/MyStudies/MyStudies/Controllers/GatewayUI/ReachoutUI/ContactUsViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/GatewayUI/ReachoutUI/ContactUsViewController.swift @@ -20,6 +20,7 @@ import Foundation import IQKeyboardManagerSwift import UIKit +import FirebaseAnalytics // Contact us field description struct ContactUsFields { @@ -97,6 +98,9 @@ class ContactUsViewController: UIViewController { /// Validations after clicking on submit button /// If all the validations satisfy send contact-us request @IBAction func buttonSubmitAciton(_ sender: UIButton) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "ContactUs Submit" + ]) self.view.endEditing(true) if ContactUsFields.firstName.isEmpty && ContactUsFields.email.isEmpty && ContactUsFields @@ -108,26 +112,44 @@ class ContactUsViewController: UIViewController { UIUtilities.showAlertWithMessage( alertMessage: NSLocalizedString(kMessageAllFieldsAreEmpty, comment: "") ) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Fill all fields alert" + ]) } else if ContactUsFields.firstName.isEmpty { UIUtilities.showAlertWithMessage( alertMessage: NSLocalizedString(kMessageFirstNameBlank, comment: "") ) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Enter first name alert" + ]) } else if ContactUsFields.email.isEmpty { UIUtilities.showAlertWithMessage( alertMessage: NSLocalizedString(kMessageEmailBlank, comment: "") ) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Enter email alert" + ]) } else if ContactUsFields.subject.isEmpty { UIUtilities.showAlertWithMessage( alertMessage: NSLocalizedString(kMessageSubjectBlankCheck, comment: "") ) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Enter subject alert" + ]) } else if ContactUsFields.message.isEmpty { UIUtilities.showAlertWithMessage( alertMessage: NSLocalizedString(kMessageMessageBlankCheck, comment: "") ) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Enter message alert" + ]) } else if !(Utilities.isValidEmail(testStr: ContactUsFields.email)) { UIUtilities.showAlertWithMessage( alertMessage: NSLocalizedString(kMessageValidEmail, comment: "") ) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Valid email alert" + ]) } else { UserServices().sendUserContactUsRequest(delegate: self) } diff --git a/iOS/MyStudies/MyStudies/Controllers/GatewayUI/ReachoutUI/FeedBackViewController.swift b/iOS/MyStudies/MyStudies/Controllers/GatewayUI/ReachoutUI/FeedBackViewController.swift index bb8b2eedee..d3ac30b9be 100644 --- a/iOS/MyStudies/MyStudies/Controllers/GatewayUI/ReachoutUI/FeedBackViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/GatewayUI/ReachoutUI/FeedBackViewController.swift @@ -20,6 +20,7 @@ import Foundation import IQKeyboardManagerSwift import UIKit +import FirebaseAnalytics struct FeedbackDetail { @@ -65,20 +66,33 @@ class FeedBackViewController: UIViewController { /// If all the validations satisfy send user feedback request /// - Parameter sender: Instance of submit UIButton. @IBAction func buttonSubmitAciton(_ sender: UIButton) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Feedback Submit" + ]) + self.view.endEditing(true) if FeedbackDetail.subject.isEmpty && FeedbackDetail.feedback.isEmpty { UIUtilities.showAlertWithMessage( alertMessage: NSLocalizedString(kMessageAllFieldsAreEmpty, comment: "") ) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Fill all fields alert" + ]) } else if FeedbackDetail.subject.isEmpty { UIUtilities.showAlertWithMessage( alertMessage: NSLocalizedString("Please enter the message", comment: "") ) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Enter message alert" + ]) } else if FeedbackDetail.feedback.isEmpty { UIUtilities.showAlertWithMessage( alertMessage: NSLocalizedString("Please provide your feedback", comment: "") ) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Provide feedback alert" + ]) } else { UserServices().sendUserFeedback(delegate: self) } diff --git a/iOS/MyStudies/MyStudies/Controllers/GatewayUI/ReachoutUI/ReachoutOptionsViewController.swift b/iOS/MyStudies/MyStudies/Controllers/GatewayUI/ReachoutUI/ReachoutOptionsViewController.swift index 8257ca185e..f2b7f26bc1 100644 --- a/iOS/MyStudies/MyStudies/Controllers/GatewayUI/ReachoutUI/ReachoutOptionsViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/GatewayUI/ReachoutUI/ReachoutOptionsViewController.swift @@ -18,6 +18,7 @@ // OTHER DEALINGS IN THE SOFTWARE. import UIKit +import FirebaseAnalytics class ReachoutOptionsViewController: UIViewController { @@ -26,6 +27,12 @@ class ReachoutOptionsViewController: UIViewController { // MARK: - Viewcontroller Lifecycle override func viewDidLoad() { super.viewDidLoad() + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "LeftMenu Reach Out" + ]) + NotificationCenter.default.addObserver(self, selector: #selector(self.methodOfReceivedNotification(notification:)), + name: Notification.Name("Menu Clicked"), object: nil) + self.navigationItem.title = NSLocalizedString("Reach out", comment: "") } @@ -33,6 +40,12 @@ class ReachoutOptionsViewController: UIViewController { super.viewWillAppear(animated) self.setNavigationBarItem() } + + @objc func methodOfReceivedNotification(notification: Notification) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Menu Clicked" + ]) + } } diff --git a/iOS/MyStudies/MyStudies/Controllers/GatewayUI/Resource/GatewayResourcesListViewController.swift b/iOS/MyStudies/MyStudies/Controllers/GatewayUI/Resource/GatewayResourcesListViewController.swift index 34779d6aad..f75c230641 100644 --- a/iOS/MyStudies/MyStudies/Controllers/GatewayUI/Resource/GatewayResourcesListViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/GatewayUI/Resource/GatewayResourcesListViewController.swift @@ -18,6 +18,7 @@ // OTHER DEALINGS IN THE SOFTWARE. import UIKit +import FirebaseAnalytics class GatewayResourcesListViewController: UIViewController { @@ -48,6 +49,9 @@ class GatewayResourcesListViewController: UIViewController { // MARK: - ViewController Lifecycle. override func viewDidLoad() { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "LeftMenu Resources" + ]) super.viewDidLoad() self.navigationItem.title = NSLocalizedString("Resources", comment: "") } diff --git a/iOS/MyStudies/MyStudies/Controllers/GatewayUI/SlideMenu/LeftMenuViewController.swift b/iOS/MyStudies/MyStudies/Controllers/GatewayUI/SlideMenu/LeftMenuViewController.swift index b3720b0f14..c1285e00c5 100644 --- a/iOS/MyStudies/MyStudies/Controllers/GatewayUI/SlideMenu/LeftMenuViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/GatewayUI/SlideMenu/LeftMenuViewController.swift @@ -20,6 +20,7 @@ import SlideMenuControllerSwift import Toast_Swift import UIKit +import FirebaseAnalytics let kStoryboardIdentifierLogin = "Login" let kStoryboardIdentifierHomeView = "HomeViewController" @@ -133,6 +134,10 @@ class LeftMenuViewController: UIViewController, LeftMenuProtocol { } self.labelVersion.text = "V" + "\(Utilities.getAppVersion())" + + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Menu Clicked" + ]) } override func viewDidAppear(_ animated: Bool) { @@ -149,6 +154,7 @@ class LeftMenuViewController: UIViewController, LeftMenuProtocol { withIdentifier: String(describing: StudyListViewController.classForCoder()) ) as? UINavigationController)! +// NotificationCenter.default.post(name: Notification.Name("LeftMenu Home"), object: nil) self.notificationController = (storyboard.instantiateViewController( @@ -182,6 +188,9 @@ class LeftMenuViewController: UIViewController, LeftMenuProtocol { /// This method will setup the Menu in case of Standalone app. final private func setupStandaloneMenu() { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Menu Clicked" + ]) let studyStoryBoard = UIStoryboard.init(name: kStudyStoryboard, bundle: Bundle.main) // for standalone @@ -198,6 +207,8 @@ class LeftMenuViewController: UIViewController, LeftMenuProtocol { withIdentifier: String(describing: StudyListViewController.classForCoder()) ) as? UINavigationController +// NotificationCenter.default.post(name: Notification.Name("LeftMenu Home"), object: nil) + self.studyHomeViewController = studyStoryBoard.instantiateViewController( @@ -360,11 +371,15 @@ class LeftMenuViewController: UIViewController, LeftMenuProtocol { if isStandalone { if Study.currentStudy?.userParticipateState.status == .enrolled { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "LeftMenu Home" + ]) self.slideMenuController()?.changeMainViewController( self.studyTabBarController, close: true ) } else { + NotificationCenter.default.post(name: Notification.Name("LeftMenu Home"), object: nil) self.slideMenuController()?.changeMainViewController( self.studyHomeViewController, close: true @@ -372,6 +387,8 @@ class LeftMenuViewController: UIViewController, LeftMenuProtocol { } } else { + NotificationCenter.default.post(name: Notification.Name("LeftMenu Home"), object: nil) + self.slideMenuController()?.changeMainViewController( self.studyListViewController, close: true @@ -422,6 +439,9 @@ class LeftMenuViewController: UIViewController, LeftMenuProtocol { close: true ) case .signOut: + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "LeftMenu Sign-Out" + ]) buttonActionSignOut() } } @@ -442,9 +462,15 @@ class LeftMenuViewController: UIViewController, LeftMenuProtocol { errorAlertActionTitle2: NSLocalizedString(kAlertSignOutLaterTitle, comment: ""), viewControllerUsed: self, action1: { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Sign-Out1" + ]) LeftMenuViewController.updatePushTokenToEmptyString(delegate: self) }, action2: { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Sign-Out Cancel1" + ]) // Cancel Action. } ) @@ -457,9 +483,15 @@ class LeftMenuViewController: UIViewController, LeftMenuProtocol { errorAlertActionTitle2: NSLocalizedString(kTitleCancel, comment: ""), viewControllerUsed: self, action1: { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Sign-Out2" + ]) LeftMenuViewController.updatePushTokenToEmptyString(delegate: self) }, action2: { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Sign-Out Cancel2" + ]) // Cancel Action. } ) diff --git a/iOS/MyStudies/MyStudies/Controllers/GatewayUI/StudyUI/StudyFilterViewController.swift b/iOS/MyStudies/MyStudies/Controllers/GatewayUI/StudyUI/StudyFilterViewController.swift index d67facd38c..8097d89094 100644 --- a/iOS/MyStudies/MyStudies/Controllers/GatewayUI/StudyUI/StudyFilterViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/GatewayUI/StudyUI/StudyFilterViewController.swift @@ -19,6 +19,7 @@ import Foundation import UIKit +import FirebaseAnalytics // Used to do filter based on Apply and Cancel actions protocol StudyFilterDelegates: class { @@ -95,6 +96,9 @@ class StudyFilterViewController: UIViewController { /// Navigate to Studylist screen on Apply button clicked. @IBAction func applyButtonAction(_ sender: AnyObject) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Filter Apply" + ]) for filterOptions in StudyFilterHandler.instance.filterOptions { @@ -131,6 +135,9 @@ class StudyFilterViewController: UIViewController { /// Navigate to Studylist screen on Cancel button clicked. @IBAction func cancelButtonAction(_ sender: AnyObject) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Filter Cancel" + ]) self.delegate?.didCancelFilter(true) self.dismiss(animated: true, completion: nil) } diff --git a/iOS/MyStudies/MyStudies/Controllers/GatewayUI/StudyUI/StudyListViewController.swift b/iOS/MyStudies/MyStudies/Controllers/GatewayUI/StudyUI/StudyListViewController.swift index 4436fbd1d7..1745762d70 100644 --- a/iOS/MyStudies/MyStudies/Controllers/GatewayUI/StudyUI/StudyListViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/GatewayUI/StudyUI/StudyListViewController.swift @@ -19,6 +19,7 @@ import IQKeyboardManagerSwift import UIKit +import FirebaseAnalytics let kHelperTextForFilteredStudiesNotFound = "No studies found for the filters applied." @@ -55,17 +56,26 @@ class StudyListViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() + NotificationCenter.default.addObserver(self, selector: #selector(self.methodOfReceivedNotification(notification:)), + name: Notification.Name("Menu Clicked"), object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(self.methodOfReceivedNotification1(notification:)), + name: Notification.Name("LeftMenu Home"), object: nil) + addNavigationTitle() isComingFromFilterScreen = false DispatchQueue.main.async { [weak self] in self?.setupStudyListTableView() } + if #available(iOS 15, *) { + UITableView.appearance().sectionHeaderTopPadding = CGFloat(0) + } } override func viewWillAppear(_ animated: Bool) { if !isComingFromFilterScreen { self.addProgressIndicator() } + setNavigationBarColor() } override func viewDidAppear(_ animated: Bool) { @@ -236,7 +246,18 @@ class StudyListViewController: UIViewController { refresher.attributedTitle = NSAttributedString(string: "Pull to refresh") tableView.refreshControl = refresher } - + + @objc func methodOfReceivedNotification(notification: Notification) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Menu Clicked" + ]) + } + + @objc func methodOfReceivedNotification1(notification: Notification) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "LeftMenu Home" + ]) + } // MARK: - Utils func checkIfNotificationEnabled() { @@ -460,6 +481,9 @@ class StudyListViewController: UIViewController { /// Navigate to notification screen on button clicked. @IBAction func buttonActionNotification(_: UIBarButtonItem) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Notification icon clicked" + ]) navigateToNotifications() } @@ -470,11 +494,17 @@ class StudyListViewController: UIViewController { /// Navigate to StudyFilter screen on button clicked. @IBAction func filterAction(_: UIBarButtonItem) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Filter icon clicked" + ]) isComingFromFilterScreen = true performSegue(withIdentifier: filterListSegue, sender: nil) } @IBAction func searchButtonAction(_: UIBarButtonItem) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Search icon clicked" + ]) searchView = SearchBarView.instanceFromNib( frame: CGRect(x: 0, y: -200, width: view.frame.size.width, height: 64.0), @@ -625,6 +655,8 @@ class StudyListViewController: UIViewController { if userStudyStatus == .completed || userStudyStatus == .enrolled { pushToStudyDashboard() + } else if userStudyStatus == .yetToEnroll { + checkDatabaseForStudyInfo(study: currentStudy) } else { checkDatabaseForStudyInfo(study: currentStudy) } @@ -637,11 +669,39 @@ class StudyListViewController: UIViewController { } /// Checks `Study` status and do the action. - func performTaskBasedOnStudyStatus() { + func performTaskBasedOnStudyStatus(studyID: String? = nil) { + // Study ID from notification + if let studyID = studyID, + let study = studiesList.filter({ $0.studyId == studyID }).first { + Study.updateCurrentStudy(study: study) + } + guard let study = Study.currentStudy else { return } if User.currentUser.userType == UserType.loggedInUser { - if study.status == .active { + let val = UserDefaults.standard.value(forKey: "pausedNotification") as? String ?? "" + if Study.currentStudy?.status == .paused || val == "paused" { + UserDefaults.standard.set("", forKey: "pausedNotification") + UserDefaults.standard.synchronize() + let userStudyStatus = study.userParticipateState.status + + if userStudyStatus == .completed || userStudyStatus == .enrolled { + DispatchQueue.main.async { + if (studyID == nil) { + UIUtilities.showAlertWithTitleAndMessage( + title: "", + message: NSLocalizedString( + kMessageForStudyPausedAfterJoiningState, + comment: "" + ) + as NSString + ) + } + } + } else { + checkForStudyUpdate(study: study) + } + } else if study.status == .active { let userStudyStatus = study.userParticipateState.status if userStudyStatus == .completed || userStudyStatus == .enrolled { @@ -652,26 +712,11 @@ class StudyListViewController: UIViewController { addProgressIndicator() perform(#selector(loadStudyDetails), with: self, afterDelay: 1) } + } else if userStudyStatus == .yetToEnroll { + checkDatabaseForStudyInfo(study: study) } else { checkForStudyUpdate(study: study) } - } else if Study.currentStudy?.status == .paused { - let userStudyStatus = study.userParticipateState.status - - if userStudyStatus == .completed || userStudyStatus == .enrolled { - UIUtilities.showAlertWithTitleAndMessage( - title: "", - message: NSLocalizedString( - kMessageForStudyPausedAfterJoiningState, - comment: "" - ) - as NSString - ) - } else { - checkForStudyUpdate(study: study) - } - } else { - checkForStudyUpdate(study: study) } } else { checkForStudyUpdate(study: study) diff --git a/iOS/MyStudies/MyStudies/Controllers/LoginRegisterUI/GatewayOverviewUI/FirstGatewayOverviewViewController.swift b/iOS/MyStudies/MyStudies/Controllers/LoginRegisterUI/GatewayOverviewUI/FirstGatewayOverviewViewController.swift index 2ee704d174..65e5df065f 100644 --- a/iOS/MyStudies/MyStudies/Controllers/LoginRegisterUI/GatewayOverviewUI/FirstGatewayOverviewViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/LoginRegisterUI/GatewayOverviewUI/FirstGatewayOverviewViewController.swift @@ -20,6 +20,7 @@ import AVKit import Foundation import MediaPlayer import UIKit +import FirebaseAnalytics class FirstGatewayOverviewViewController: UIViewController { @@ -67,6 +68,9 @@ class FirstGatewayOverviewViewController: UIViewController { /// Watch video button clicked. @IBAction func watchVideoButtonClicked(_ sender: Any) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Watch Video" + ]) let urlString = overviewSectionDetail.link! if urlString.contains("youtube") { guard let url = URL(string: urlString), @@ -93,6 +97,9 @@ class FirstGatewayOverviewViewController: UIViewController { /// Used to create FDASlideMenuViewController and Gateway storyboard. @IBAction func getStartedButtonClicked(_ sender: Any) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Get Started" + ]) self.createMenuView() } diff --git a/iOS/MyStudies/MyStudies/Controllers/LoginRegisterUI/GatewayOverviewUI/HomeViewController.swift b/iOS/MyStudies/MyStudies/Controllers/LoginRegisterUI/GatewayOverviewUI/HomeViewController.swift index eb88f33ea7..f0ea110365 100644 --- a/iOS/MyStudies/MyStudies/Controllers/LoginRegisterUI/GatewayOverviewUI/HomeViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/LoginRegisterUI/GatewayOverviewUI/HomeViewController.swift @@ -20,6 +20,7 @@ import Foundation import SlideMenuControllerSwift import UIKit +import FirebaseAnalytics class HomeViewController: UIViewController { @@ -129,6 +130,11 @@ class HomeViewController: UIViewController { /// Calls menu view. @IBAction func getStartedButtonClicked(_ sender: UIButton) { + + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Get Started" + ]) + self.createMenuView() } @@ -161,6 +167,10 @@ class HomeViewController: UIViewController { /// To initialize WebViewController using /// Main storyboard. @IBAction func linkButtonAction(_ sender: Any) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Open Website" + ]) + guard let websiteLink = URL(string: Branding.websiteLink) else { return } let loginStoryboard = UIStoryboard.init(name: "Main", bundle: Bundle.main) let webViewController = @@ -169,6 +179,7 @@ class HomeViewController: UIViewController { ) as! UINavigationController let webView = webViewController.viewControllers[0] as! WebViewController webView.requestLink = websiteLink.absoluteString + self.navigationController?.present(webViewController, animated: true, completion: nil) } @@ -187,7 +198,6 @@ class HomeViewController: UIViewController { /// To navigate back to Signin. /// - Parameter segue: The segue which is connected to 1 controller to another. @IBAction func unwindForSignIn(_ segue: UIStoryboardSegue) { - DispatchQueue.main.asyncAfter(deadline: .now()) { self.buttonSignin.sendActions(for: .touchUpInside) } diff --git a/iOS/MyStudies/MyStudies/Controllers/LoginRegisterUI/GatewayOverviewUI/SecondGatewayOverviewViewController.swift b/iOS/MyStudies/MyStudies/Controllers/LoginRegisterUI/GatewayOverviewUI/SecondGatewayOverviewViewController.swift index 88f261fc46..2e7e6115f5 100644 --- a/iOS/MyStudies/MyStudies/Controllers/LoginRegisterUI/GatewayOverviewUI/SecondGatewayOverviewViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/LoginRegisterUI/GatewayOverviewUI/SecondGatewayOverviewViewController.swift @@ -18,6 +18,7 @@ import Foundation import UIKit +import FirebaseAnalytics class SecondGatewayOverviewViewController: UIViewController { @@ -67,6 +68,9 @@ class SecondGatewayOverviewViewController: UIViewController { /// To create FDASlideMenuViewController and Gateway storyboard. @IBAction func getStartedButtonClicked(_ sender: Any) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "SecondGateway GetStarted" + ]) self.createMenuView() } } diff --git a/iOS/MyStudies/MyStudies/Controllers/LoginRegisterUI/LoginUI/ForgotPasswordViewController.swift b/iOS/MyStudies/MyStudies/Controllers/LoginRegisterUI/LoginUI/ForgotPasswordViewController.swift index c07a3b5ffd..00738798cf 100644 --- a/iOS/MyStudies/MyStudies/Controllers/LoginRegisterUI/LoginUI/ForgotPasswordViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/LoginRegisterUI/LoginUI/ForgotPasswordViewController.swift @@ -19,6 +19,7 @@ import Foundation import UIKit +import FirebaseAnalytics let kVerifyViewControllerSegue = "VerifyViewControllerSegue" let kVerficationMessageFromForgotPassword = @@ -77,6 +78,9 @@ class ForgotPasswordViewController: UIViewController { /// Dismiss key board when clicked on Background. @objc func dismissKeyboard() { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "ForgotPassword KeyboardDone" + ]) self.view.endEditing(true) } @@ -99,12 +103,21 @@ class ForgotPasswordViewController: UIViewController { /// To check all the validations /// before making a logout webservice call. @IBAction func submitButtonAction(_ sender: Any) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "ForgotPassword Submit" + ]) self.dismissKeyboard() if textFieldEmail?.text == "" { self.showAlertMessages(textMessage: kMessageEmailBlank) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Enter email alert" + ]) } else if !(Utilities.isValidEmail(testStr: (textFieldEmail?.text)!)) { self.showAlertMessages(textMessage: kMessageValidEmail) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Valid email alert" + ]) } else if let email = textFieldEmail?.text { requestPassword(with: email) } @@ -142,6 +155,9 @@ class ForgotPasswordViewController: UIViewController { buttonTitle: NSLocalizedString(kTitleOk, comment: ""), viewControllerUsed: self ) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "ForgotPassword Ok Alert" + ]) _ = self.navigationController?.popViewController(animated: true) } } else if let error = error { @@ -176,6 +192,9 @@ extension ForgotPasswordViewController: NMWebServiceDelegate { title: NSLocalizedString(kAlertMessageText, comment: "") as NSString, message: NSLocalizedString(kAlertMessageResendEmail, comment: "") as NSString ) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Resend email alert" + ]) } func failedRequest(_ manager: NetworkManager, requestName: NSString, error: NSError) { diff --git a/iOS/MyStudies/MyStudies/Controllers/LoginRegisterUI/LoginUI/SignInViewController.swift b/iOS/MyStudies/MyStudies/Controllers/LoginRegisterUI/LoginUI/SignInViewController.swift index 497f69f95f..21113e0003 100644 --- a/iOS/MyStudies/MyStudies/Controllers/LoginRegisterUI/LoginUI/SignInViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/LoginRegisterUI/LoginUI/SignInViewController.swift @@ -22,6 +22,7 @@ import IQKeyboardManagerSwift import SlideMenuControllerSwift import UIKit import WebKit +import FirebaseAnalytics let kVerifyMessageFromSignIn = """ @@ -86,6 +87,10 @@ class SignInViewController: UIViewController { override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) + + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Sign In" + ]) // unhide navigationbar self.view.isUserInteractionEnabled = true self.webKitView.isUserInteractionEnabled = true @@ -96,6 +101,8 @@ class SignInViewController: UIViewController { let delegate = UIApplication.shared.delegate as? AppDelegate delegate?.window?.removeProgressIndicatorFromWindow() + progressView.removeFromSuperview() + removeProgressIndicator() setupProgressView() setupEstimatedProgressObserver() diff --git a/iOS/MyStudies/MyStudies/Controllers/LoginRegisterUI/RegisterUI/SignUpCompleteViewController.swift b/iOS/MyStudies/MyStudies/Controllers/LoginRegisterUI/RegisterUI/SignUpCompleteViewController.swift index 81ebb3400b..95d377fda0 100644 --- a/iOS/MyStudies/MyStudies/Controllers/LoginRegisterUI/RegisterUI/SignUpCompleteViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/LoginRegisterUI/RegisterUI/SignUpCompleteViewController.swift @@ -18,6 +18,7 @@ import Foundation import UIKit +import FirebaseAnalytics enum CompletionLoadFrom: Int { case signup @@ -58,6 +59,9 @@ class SignUpCompleteViewController: UIViewController { /// Next button clicked and navigate the screen to GateWay dashboard. @IBAction func nextButtonAction(_ sender: Any) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Sign-UpComplete Next" + ]) // Updating Key & Vector let appDelegate = UIApplication.shared.delegate as! AppDelegate diff --git a/iOS/MyStudies/MyStudies/Controllers/LoginRegisterUI/RegisterUI/SignUpViewController.swift b/iOS/MyStudies/MyStudies/Controllers/LoginRegisterUI/RegisterUI/SignUpViewController.swift index 6790207f29..62969b619c 100644 --- a/iOS/MyStudies/MyStudies/Controllers/LoginRegisterUI/RegisterUI/SignUpViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/LoginRegisterUI/RegisterUI/SignUpViewController.swift @@ -20,6 +20,9 @@ import Foundation import IQKeyboardManagerSwift import UIKit +import GoogleUtilities +import GoogleDataTransport +import FirebaseAnalytics let kVerifyMessageFromSignUp = "An email has been sent to xyz@gmail.com. Please type in the verification code received in the email to complete account setup." @@ -63,6 +66,10 @@ class SignUpViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() + + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "New User" + ]) self.navigationController?.navigationBar.backgroundColor = .white navigationController?.navigationBar.barTintColor = .white @@ -95,6 +102,7 @@ class SignUpViewController: UIViewController { let terms = Branding.termsAndConditionURL TermsAndPolicy.currentTermsAndPolicy?.initWith(terms: terms, policy: policyURL) self.agreeToTermsAndConditions() + setNavigationBarColor() } override func viewWillAppear(_ animated: Bool) { @@ -130,11 +138,12 @@ class SignUpViewController: UIViewController { /// Attributed string for Terms & Privacy Policy. func agreeToTermsAndConditions() { - + self.termsAndCondition?.delegate = self let attributedString = (termsAndCondition?.attributedText.mutableCopy() as? NSMutableAttributedString)! var foundRange = attributedString.mutableString.range(of: "terms") + attributedString.addAttribute( NSAttributedString.Key.link, value: (TermsAndPolicy.currentTermsAndPolicy?.termsURL!)! as String, @@ -170,27 +179,51 @@ class SignUpViewController: UIViewController { .isEmpty { self.showAlertMessages(textMessage: kMessageAllFieldsAreEmpty) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Sign-Up required fields alert" + ]) return false } else if self.user.emailId == "" { self.showAlertMessages(textMessage: kMessageEmailBlank) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Enter email alert" + ]) return false } else if !(Utilities.isValidEmail(testStr: self.user.emailId!)) { self.showAlertMessages(textMessage: kMessageValidEmail) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Enter validMail alert" + ]) return false } else if self.user.password == "" { self.showAlertMessages(textMessage: kMessagePasswordBlank) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Enter password alert" + ]) return false } else if Utilities.isPasswordValid(text: (self.user.password)!) == false { self.showAlertMessages(textMessage: kMessageValidatePasswordComplexity) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Password criteria alert" + ]) return false } else if (self.user.password)! == user.emailId { self.showAlertMessages(textMessage: kMessagePasswordMatchingToOtherFeilds) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Password+Email match alert" + ]) return false } else if confirmPassword == "" { self.showAlertMessages(textMessage: kMessageProfileConfirmPasswordBlank) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Confirm password alert" + ]) return false } else if self.user.password != confirmPassword { self.showAlertMessages(textMessage: kMessageValidatePasswords) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Password dont match alert" + ]) return false } return true @@ -200,6 +233,9 @@ class SignUpViewController: UIViewController { if self.user.emailId == "" { } else if !(Utilities.isValidEmail(testStr: self.user.emailId!)) { self.showAlertMessages(textMessage: kMessageValidEmail) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Enter validMail Alert" + ]) } } @@ -207,8 +243,14 @@ class SignUpViewController: UIViewController { if self.user.password == "" { } else if Utilities.isPasswordValid(text: (self.user.password)!) == false { self.showAlertMessages(textMessage: kMessageValidatePasswordComplexity) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Password criteria alert" + ]) } else if (self.user.password)! == user.emailId { self.showAlertMessages(textMessage: kMessagePasswordMatchingToOtherFeilds) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Password+Email match alert" + ]) } } @@ -216,6 +258,9 @@ class SignUpViewController: UIViewController { if confirmPassword == "" { } else if self.user.password ?? "" != "" && self.user.password != confirmPassword { self.showAlertMessages(textMessage: kMessageValidatePasswords) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Password dont match alert" + ]) } } @@ -239,12 +284,18 @@ class SignUpViewController: UIViewController { /// Used to check all the validations /// before making a Register webservice call. @IBAction func submitButtonAction(_ sender: Any) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Sign-Up Submit" + ]) self.view.endEditing(true) if self.validateAllFields() == true { if !(agreedToTerms) { self.showAlertMessages(textMessage: kMessageAgreeToTermsAndConditions) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Review terms/conditions alert" + ]) } else { // Call the Webservice UserServices().registerUser(self as NMWebServiceDelegate) @@ -261,6 +312,10 @@ class SignUpViewController: UIViewController { agreedToTerms = true (sender as? UIButton)!.isSelected = !(sender as? UIButton)!.isSelected } + + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Sign-Up Terms&Policy" + ]) } // MARK: - Segue Method @@ -330,6 +385,9 @@ extension SignUpViewController: UITextViewDelegate { { var link: String = TermsAndPolicy.currentTermsAndPolicy?.termsURL ?? "" + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Sign-Up Terms" + ]) var title: String = kNavigationTitleTerms if URL.absoluteString == TermsAndPolicy.currentTermsAndPolicy?.policyURL && characterRange @@ -337,7 +395,11 @@ extension SignUpViewController: UITextViewDelegate { { link = TermsAndPolicy.currentTermsAndPolicy?.policyURL ?? "" title = kNavigationTitlePrivacyPolicy + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Sign-Up PrivacyPolicy" + ]) } + guard !link.isEmpty else { return false } let loginStoryboard = UIStoryboard.init(name: "Main", bundle: Bundle.main) let webViewController = @@ -487,6 +549,9 @@ extension SignUpViewController: UITextFieldDelegate { !Utilities.isPasswordValid(text: password) { self.showAlertMessages(textMessage: kMessageValidatePasswordComplexity) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Password criteria alert" + ]) } self.user.password = password validatePasswordField() diff --git a/iOS/MyStudies/MyStudies/Controllers/LoginRegisterUI/RegisterUI/VerificationViewController.swift b/iOS/MyStudies/MyStudies/Controllers/LoginRegisterUI/RegisterUI/VerificationViewController.swift index e5c6215620..4d4fc30a2b 100644 --- a/iOS/MyStudies/MyStudies/Controllers/LoginRegisterUI/RegisterUI/VerificationViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/LoginRegisterUI/RegisterUI/VerificationViewController.swift @@ -19,6 +19,7 @@ import Foundation import UIKit +import FirebaseAnalytics let kDefaultEmail = "xyz@gmail.com" let kSignupCompletionSegue = "signupCompletionSegue" @@ -78,6 +79,11 @@ class VerificationViewController: UIViewController { /// Navigate to previous screen. @IBAction func buttonActionBack(_ sender: UIButton) { + + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Back from verification" + ]) + if viewLoadFrom == .login, let homeVC = self.navigationController?.viewControllers .first(where: { $0.isKind(of: HomeViewController.self) }) @@ -90,11 +96,18 @@ class VerificationViewController: UIViewController { /// Used to send the verification mail to registered mail id. @IBAction func continueTwoButtonAction(_ sender: UIButton) { + + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Verify Email" + ]) self.view.endEditing(true) if self.textFieldVerificationCode?.text == "" { self.showAlertMessages(textMessage: kMessageVerificationCodeEmpty) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Valid code ok alert" + ]) } else { UserServices().verifyEmail( emailId: self.emailId!, @@ -106,6 +119,11 @@ class VerificationViewController: UIViewController { /// Send the verification mail id to registered. @IBAction func continueButtonAction(_ sender: Any) { + + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "VerificationCode Continue" + ]) + if (textFieldVerificationCode?.text?.count)! > 0 { UserServices().verifyEmail( emailId: User.currentUser.emailId!, @@ -114,11 +132,18 @@ class VerificationViewController: UIViewController { ) } else { self.showAlertMessages(textMessage: kMessageVerificationCodeEmpty) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Valid code ok alert" + ]) } } /// Resend the verification code to registered mail id. @IBAction func resendEmailButtonAction(_ sender: UIButton) { + + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Verification Resend" + ]) var finalEmail: String = User.currentUser.emailId! @@ -127,6 +152,9 @@ class VerificationViewController: UIViewController { } if (finalEmail.isEmpty) || !(Utilities.isValidEmail(testStr: finalEmail)) { self.showAlertMessages(textMessage: kMessageValidEmail) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Valid email alert" + ]) } else { UserServices().resendEmailConfirmation(emailId: finalEmail, delegate: self) } @@ -233,11 +261,17 @@ extension VerificationViewController: NMWebServiceDelegate { title: NSLocalizedString(kAlertMessageText, comment: "") as NSString, message: NSLocalizedString(kAlertMessageResendEmail, comment: "") as NSString ) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Resend email alert" + ]) } else { UIUtilities.showAlertWithTitleAndMessage( title: NSLocalizedString(kAlertMessageText, comment: "") as NSString, message: NSLocalizedString(kAlertMessageVerifyEmail, comment: "") as NSString ) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Verify email alert" + ]) } } } diff --git a/iOS/MyStudies/MyStudies/Controllers/SplashViewController.swift b/iOS/MyStudies/MyStudies/Controllers/SplashViewController.swift index d40c5e670f..020a06ccea 100644 --- a/iOS/MyStudies/MyStudies/Controllers/SplashViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/SplashViewController.swift @@ -39,6 +39,8 @@ class SplashViewController: UIViewController { ud.set(true, forKey: kFromSplashScreen) ud.set(Upgrade.fromSplash.rawValue, forKey: kFromBackground) ud.set(false, forKey: kIsShowUpdateAppVersion) + ud.set("", forKey: "pausedNotification") + ud.removeObject(forKey: "isAlertShown") ud.synchronize() } diff --git a/iOS/MyStudies/MyStudies/Controllers/StudyUI/ActivityUI/ActivitiesViewController.swift b/iOS/MyStudies/MyStudies/Controllers/StudyUI/ActivityUI/ActivitiesViewController.swift index cecf37a465..e5273b525e 100644 --- a/iOS/MyStudies/MyStudies/Controllers/StudyUI/ActivityUI/ActivitiesViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/StudyUI/ActivityUI/ActivitiesViewController.swift @@ -21,6 +21,7 @@ import Foundation import IQKeyboardManagerSwift import ResearchKit import UIKit +import FirebaseAnalytics let kActivities = "activities" @@ -82,6 +83,9 @@ class ActivitiesViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Activities" + ]) addObservers() selectedFilter = ActivityFilterType.all @@ -115,12 +119,21 @@ class ActivitiesViewController: UIViewController { tableView?.addSubview(refreshControl!) setupStandaloneNotifications() + + if #available(iOS 15, *) { + UITableView.appearance().sectionHeaderTopPadding = CGFloat(0) + } + + UserDefaults.standard.removeObject(forKey: "isAlertShown") + UserDefaults.standard.synchronize() + } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.navigationController?.interactivePopGestureRecognizer?.isEnabled = false - + setNavigationBarColor() + if Utilities.isStandaloneApp() { self.setNavigationBarItem() } else { @@ -509,6 +522,30 @@ class ActivitiesViewController: UIViewController { } } + + func updateNewActivityRun(status: UserActivityStatus.ActivityStatus, alert: Bool = true) -> UserActivityStatus? { + + guard let activity = Study.currentActivity else { return nil } + + let activityStatus = User.currentUser.updateActivityStatus( + studyId: activity.studyId!, + activityId: activity.actvityId!, + runId: String(activity.currentRunId), + status: status + ) + activityStatus.compeltedRuns = activity.compeltedRuns + activityStatus.incompletedRuns = activity.incompletedRuns + activityStatus.totalRuns = activity.totalRuns + activityStatus.activityVersion = activity.version + + /// Update participationStatus to DB + DBHandler.updateParticipationStatus(for: activity) + + if status == .completed { + self.updateCompletionAdherence(with: alert) + } + return activityStatus + } /// Calculates the Completion & Adherence based on following criteria. /// @@ -621,6 +658,11 @@ class ActivitiesViewController: UIViewController { func updateActivityStatusToComplete(alert: Bool) { self.updateActivityRun(status: .completed, alert: alert) } + + func updateNewActivityStatusToComplete(alert: Bool) -> UserActivityStatus? { + let valUserActivityStatus = self.updateNewActivityRun(status: .completed, alert: alert) + return valUserActivityStatus + } /// Schedules AD resources with activity response. /// - Parameters: @@ -663,7 +705,39 @@ class ActivitiesViewController: UIViewController { self.updateActivityStatusToComplete(alert: alert) let activityResponse = self.lastActivityResponse ?? [:] lastActivityResponse = [:] - let isActivitylifeTimeUpdated = DBHandler.updateTargetActivityAnchorDateDetail( + let isActivitylifeTimeUpdated = DBHandler.updateTargetForActivityAnchorDateDetail( + studyId: studyID, + activityId: activityID, + response: activityResponse + ) + scheduleAnchorDateResources(studyID, activityID, activityResponse) + if isActivitylifeTimeUpdated { + Study.currentStudy?.activitiesLocalNotificationUpdated = false + self.loadActivitiesFromDatabase() + } else { + self.tableView?.reloadData() + } + } + + func updateNewRunCountStatusToComplete(with alert: Bool = true) -> UserActivityStatus? { + guard let currentActivity = Study.currentActivity, + let activityID = currentActivity.actvityId, + let studyID = currentActivity.studyId + else { return nil} + + let key = "Response" + studyID + UserDefaults.standard.set(false, forKey: key) + + currentActivity.compeltedRuns += 1 + DBHandler.updateRunToComplete( + runId: currentActivity.currentRunId, + activityId: activityID, + studyId: studyID + ) + let valUserActivityStatus = self.updateNewActivityStatusToComplete(alert: alert) + let activityResponse = self.lastActivityResponse ?? [:] + lastActivityResponse = [:] + let isActivitylifeTimeUpdated = DBHandler.updateTargetForActivityAnchorDateDetail( studyId: studyID, activityId: activityID, response: activityResponse @@ -675,6 +749,7 @@ class ActivitiesViewController: UIViewController { } else { self.tableView?.reloadData() } + return valUserActivityStatus } /// Update Run Status based on Run Id. @@ -775,10 +850,16 @@ class ActivitiesViewController: UIViewController { // MARK: - Button Actions @IBAction func homeButtonAction(_ sender: AnyObject) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Activities Home" + ]) self.performSegue(withIdentifier: kActivityUnwindToStudyListIdentifier, sender: self) } @IBAction func filterButtonAction(_ sender: AnyObject) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Activities Filter" + ]) let frame = self.view.frame if self.selectedFilter == nil { self.selectedFilter = ActivityFilterType.all @@ -1017,6 +1098,7 @@ extension ActivitiesViewController: NMWebServiceDelegate { func startedRequest(_ manager: NetworkManager, requestName: NSString) { let requestName = requestName as String + if requestName != EnrollmentMethods.updateStudyState.method.methodName && requestName != ResponseMethods.updateActivityState.method.methodName && requestName != WCPMethods.studyDashboard.method.methodName @@ -1031,7 +1113,7 @@ extension ActivitiesViewController: NMWebServiceDelegate { } func finishedRequest(_ manager: NetworkManager, requestName: NSString, response: AnyObject?) { - + if requestName as String == ResponseMethods.activityState.method.methodName { self.sendRequesToGetActivityList() } else if requestName as String == WCPMethods.activityList.method.methodName { @@ -1054,7 +1136,6 @@ extension ActivitiesViewController: NMWebServiceDelegate { } else if requestName as String == ResponseMethods.processResponse.method.methodName { self.removeProgressIndicator() - self.updateRunStatusToComplete(with: false) self.checkForActivitiesUpdates() } else if requestName as String == WCPMethods.studyUpdates.method.methodName { @@ -1082,11 +1163,12 @@ extension ActivitiesViewController: NMWebServiceDelegate { DispatchQueue.main.async { ResourcesViewController.refreshNotifications() } + } else if requestName as String == EnrollmentMethods.updateStudyState.method.methodName { + self.removeProgressIndicator() } } func failedRequest(_ manager: NetworkManager, requestName: NSString, error: NSError) { - self.removeProgressIndicator() if self.refreshControl != nil && (self.refreshControl?.isRefreshing)! { @@ -1099,15 +1181,19 @@ extension ActivitiesViewController: NMWebServiceDelegate { buttonTitle: kTitleOk, viewControllerUsed: self, action: { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Activity Error Ok Alert" + ]) + self.fdaSlideMenuController()?.navigateToHomeAfterUnauthorizedAccess() } ) return } let requestName = requestName as String - + switch requestName { - + case ResponseMethods.activityState.method.methodName: if error.code != kNoNetworkErrorCode { self.loadActivitiesFromDatabase() @@ -1123,10 +1209,22 @@ extension ActivitiesViewController: NMWebServiceDelegate { } case ResponseMethods.processResponse.method.methodName: if error.code == kNoNetworkErrorCode { - self.updateRunStatusToComplete(with: false) + _ = self.updateNewRunCountStatusToComplete(with: false) } else { self.lastActivityResponse = nil } + self.loadActivitiesFromDatabase() + self.removeProgressIndicator() + if self.refreshControl != nil && (self.refreshControl?.isRefreshing)! { + self.refreshControl?.endRefreshing() + } + + DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) { + self.tableView?.beginUpdates() + self.tableView?.reloadData() + self.removeProgressIndicator() + self.tableView?.endUpdates() + } default: break } @@ -1222,6 +1320,20 @@ extension ActivitiesViewController: ORKTaskViewControllerDelegate { ActivityBuilder.currentActivityBuilder.activity?.restortionData = taskViewController .restorationData + + let study = Study.currentStudy + let activity = Study.currentActivity + + if activity?.type != .activeTask { + + // Update RestortionData for Activity in DB + DBHandler.updateActivityRestortionDataFor( + activity: activity!, + studyId: (study?.studyId)!, + restortionData: taskViewController.restorationData! + ) + activity?.currentRun.restortionData = taskViewController.restorationData! + } } self.checkForActivitiesUpdates() @@ -1381,7 +1493,9 @@ extension ActivitiesViewController: ORKTaskViewControllerDelegate { } self.lastActivityResponse = response // Save response to server. - ResponseServices().processResponse(responseData: response ?? [:], delegate: self) + let valActivityStatus = self.updateNewRunCountStatusToComplete(with: false)! + + ResponseServices().processUpdateResponse(responseData: response ?? [:], activityStatus: valActivityStatus, delegate: self) } } @@ -1400,7 +1514,7 @@ extension ActivitiesViewController: ORKTaskViewControllerDelegate { // runid is changed self.updateRunStatusForRunId(runId: runid) } else { - self.updateRunStatusToComplete() + _ = self.updateNewRunCountStatusToComplete() } } @@ -1498,12 +1612,7 @@ extension ActivitiesViewController: ORKTaskViewControllerDelegate { && activityId != nil && activityId == Study.currentActivity?.actvityId && (stepViewController is ORKInstructionStepViewController) - { - - DispatchQueue.main.asyncAfter(deadline: .now()) { - stepViewController.goForward() - } - } + {} // Disable back button if stepViewController is FetalKickCounterStepViewController { @@ -1512,6 +1621,23 @@ extension ActivitiesViewController: ORKTaskViewControllerDelegate { } } } + + fileprivate func updatedActivityStatus( + for activity: Activity, + status: UserActivityStatus.ActivityStatus + ) -> UserActivityStatus { + let activityStatus = User.currentUser.updateActivityStatus( + studyId: activity.studyId ?? "", + activityId: activity.actvityId ?? "", + runId: String(activity.currentRunId), + status: status + ) + activityStatus.compeltedRuns = activity.compeltedRuns + activityStatus.incompletedRuns = activity.incompletedRuns + activityStatus.totalRuns = activity.totalRuns + activityStatus.activityVersion = activity.version + return activityStatus + } // MARK: - StepViewController Delegate public func stepViewController( @@ -1540,6 +1666,15 @@ extension ActivitiesViewController: ORKTaskViewControllerDelegate { if let step = step as? QuestionStep, step.answerFormat?.isKind(of: ORKTextChoiceAnswerFormat.self) ?? false { + let valStep = step + if valStep.isOptional { + UserDefaults.standard.set("true", forKey: "isOptionalTextChoice") + UserDefaults.standard.synchronize() + } else { + UserDefaults.standard.set("false", forKey: "isOptionalTextChoice") + UserDefaults.standard.synchronize() + } + if let result = taskViewController.result.stepResult(forStepIdentifier: step.identifier) { self.managedResult[step.identifier] = result } @@ -1562,6 +1697,8 @@ extension ActivitiesViewController: ORKTaskViewControllerDelegate { return textChoiceQuestionController } + UserDefaults.standard.set("", forKey: "isOptionalTextChoice") + UserDefaults.standard.synchronize() if let step = step as? CustomInstructionStep { return CustomInstructionStepViewController(step: step) } diff --git a/iOS/MyStudies/MyStudies/Controllers/StudyUI/ActivityUI/QuestionStepController/TextChoiceQuestionController.swift b/iOS/MyStudies/MyStudies/Controllers/StudyUI/ActivityUI/QuestionStepController/TextChoiceQuestionController.swift index 938ecae0b6..5fdae6f27f 100644 --- a/iOS/MyStudies/MyStudies/Controllers/StudyUI/ActivityUI/QuestionStepController/TextChoiceQuestionController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/StudyUI/ActivityUI/QuestionStepController/TextChoiceQuestionController.swift @@ -19,6 +19,7 @@ import ResearchKit import UIKit +import FirebaseAnalytics /// A value type whose instances will have Other Choice configuration in TextChoiceQuestionStep . struct OtherChoice { @@ -224,7 +225,7 @@ class TextChoiceQuestionController: ORKQuestionStepViewController { override func viewDidLoad() { super.viewDidLoad() - stepDidChange() + self.stepDidChange() } override func viewWillAppear(_ animated: Bool) { @@ -233,6 +234,9 @@ class TextChoiceQuestionController: ORKQuestionStepViewController { override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) + + UserDefaults.standard.set("", forKey: "isOptionalTextChoice") + UserDefaults.standard.synchronize() if self.answerFormat?.style == .multipleChoice { self.tableView?.allowsMultipleSelection = true @@ -245,18 +249,18 @@ class TextChoiceQuestionController: ORKQuestionStepViewController { self.updateNextOrContinueBtnState() } - + /// Ready the view private func stepDidChange() { - + guard let step = self.step as? QuestionStep, isViewLoaded else { return } self.questionStep = step self.textChoices = answerFormat?.textChoices ?? [] - + self.otherChoice = step.otherChoice - + if let indexOfOtherChoiceValue = self.answers?.firstIndex(of: self.otherChoice.value) { self.answers?.remove(at: indexOfOtherChoiceValue) } @@ -264,7 +268,7 @@ class TextChoiceQuestionController: ORKQuestionStepViewController { if let answers = self.answers { for answer in answers { if let selectedChoice = self.textChoices.filter({ $0.value as! String == answer }) - .first + .first { self.selectedChoices.append(selectedChoice) } else { // unable to find the answer in textchoices, perhaps other choice was selected @@ -274,7 +278,7 @@ class TextChoiceQuestionController: ORKQuestionStepViewController { } self.answers = nil } - + // Get the ref of the super class table view if let tableView = self.view.allSubViewsOf(type: UITableView.self).first { self.tableView = tableView @@ -282,25 +286,62 @@ class TextChoiceQuestionController: ORKQuestionStepViewController { tableView.registerCell(cell: OtherTextChoiceCell.self) tableView.isHidden = true } - + if self.isShowSearchBar { self.searchBar = UISearchBar() searchBar?.delegate = self } - + // Try to get the ref of the continue of the next button if let nextBtn = self.view.allSubViewsOf(type: ORKContinueButton.self).last { self.continueBtn = nextBtn + if self.questionStep?.isOptional ?? false { + self.continueBtn?.setTitle("Next", for: .normal) + } + if self.questionStep?.isOptional ?? false { + self.continueBtn?.setTitle("Next", for: .normal) + } continueBtn?.addTarget( self, action: #selector(didTapOnDoneOrNextBtn), for: .touchUpInside ) - } else { - fatalError("Couldn't able to find continue Button") + } + + if super.hasPreviousStep() { + if navigationItem.leftBarButtonItem == nil { + let view = UIView(frame: CGRect(x: -15, y: 0, width: 46, height: 36)) + + // Filter Button + let filterButton = addFilterButton() + filterButton.clipsToBounds = true + view.addSubview(filterButton) + filterButton.isExclusiveTouch = true + + let barButton = UIBarButtonItem(customView: view) + navigationItem.leftBarButtonItem = barButton + } } } - + + func addFilterButton() -> UIButton { + let filterButton = UIButton(type: .custom) + filterButton.setImage( + #imageLiteral(resourceName: "leftIconBlue2"), + for: UIControl.State.normal + ) + filterButton.addTarget(self, action: #selector(filterAction(_:)), for: .touchUpInside) + filterButton.frame = CGRect(x: -17, y: 0, width: 46, height: 36) + return filterButton + } + + @IBAction func filterAction(_: UIBarButtonItem) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "TextChoiceQuestion BackButton" + ]) + super.goBackward() + } + // MARK: - UI /// Header View of the question displayed in the Table View section. @@ -525,6 +566,8 @@ class TextChoiceQuestionController: ORKQuestionStepViewController { } override func skipForward() { + NotificationCenter.default.post(name: Notification.Name("GoForward"), object: nil) + self.answers = [] self.selectedChoices = [] self.isOtherCellSelected = false @@ -532,7 +575,6 @@ class TextChoiceQuestionController: ORKQuestionStepViewController { } override func goForward() { - if self.otherChoice.otherChoiceText.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty, self.isOtherCellSelected, self.otherChoice.isMandatory @@ -559,12 +601,17 @@ class TextChoiceQuestionController: ORKQuestionStepViewController { updateNextOrContinueBtnState() } else { + NotificationCenter.default.post(name: Notification.Name("GoForward"), object: nil) + super.goForward() } } @objc func didTapOnDoneOrNextBtn(_ sender: UIButton) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "TextChoice Done/Next" + ]) // Next or done button pressed. } diff --git a/iOS/MyStudies/MyStudies/Controllers/StudyUI/ChartsUI/ChartsViewController.swift b/iOS/MyStudies/MyStudies/Controllers/StudyUI/ChartsUI/ChartsViewController.swift index a0f00cec95..425072b4dc 100644 --- a/iOS/MyStudies/MyStudies/Controllers/StudyUI/ChartsUI/ChartsViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/StudyUI/ChartsUI/ChartsViewController.swift @@ -18,6 +18,7 @@ // OTHER DEALINGS IN THE SOFTWARE. import UIKit +import FirebaseAnalytics let kMessageForSharingCharts = "This action will create a shareable image file of the charts currently seen in this section. Proceed?" @@ -50,10 +51,16 @@ class ChartsViewController: UIViewController { // MARK: - Actions @IBAction func backButtonAction(_ sender: UIButton) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Back Button" + ]) self.navigationController?.popViewController(animated: true) } @IBAction func shareButtonAction(_ sender: AnyObject) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Charts Share" + ]) if StudyDashboard.instance.charts.count > 0 { @@ -69,6 +76,9 @@ class ChartsViewController: UIViewController { }, action2: { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Charts Cancel" + ]) // Handle cancel action. } ) diff --git a/iOS/MyStudies/MyStudies/Controllers/StudyUI/ResourceUI/GatewayResourceDetailViewController.swift b/iOS/MyStudies/MyStudies/Controllers/StudyUI/ResourceUI/GatewayResourceDetailViewController.swift index e3a183c703..bfb2d6e443 100644 --- a/iOS/MyStudies/MyStudies/Controllers/StudyUI/ResourceUI/GatewayResourceDetailViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/StudyUI/ResourceUI/GatewayResourceDetailViewController.swift @@ -20,6 +20,7 @@ import MessageUI import UIKit import WebKit +import FirebaseAnalytics let resourcesDownloadPath = AKUtility.baseFilePath + "/Resources" @@ -150,10 +151,16 @@ class GatewayResourceDetailViewController: UIViewController { // MARK: Button Actions @IBAction func cancelButtonClicked(_ sender: Any) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "GatewatResourceDetail Cancel" + ]) self.dismiss(animated: true, completion: nil) } @IBAction func buttonActionForward(_ sender: UIBarButtonItem) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "App Glosary Share" + ]) self.shareResource() } diff --git a/iOS/MyStudies/MyStudies/Controllers/StudyUI/ResourceUI/ResourceDetailViewController.swift b/iOS/MyStudies/MyStudies/Controllers/StudyUI/ResourceUI/ResourceDetailViewController.swift index c789ff6b82..8f53ab9032 100644 --- a/iOS/MyStudies/MyStudies/Controllers/StudyUI/ResourceUI/ResourceDetailViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/StudyUI/ResourceUI/ResourceDetailViewController.swift @@ -21,6 +21,7 @@ import MessageUI import SafariServices import UIKit import WebKit +import FirebaseAnalytics class ResourceDetailViewController: UIViewController { @@ -53,6 +54,7 @@ class ResourceDetailViewController: UIViewController { self.hidesBottomBarWhenPushed = true self.addBackBarButton() self.title = resource?.title + setNavigationBarColor() } override func viewDidAppear(_ animated: Bool) { @@ -90,7 +92,7 @@ class ResourceDetailViewController: UIViewController { { activityIndicator.startAnimating() activityIndicator.isHidden.toggle() - let fileURL = checkIfFileExists(pdfNameFromUrl: "\(resource?.file?.name ?? "").pdf") + let fileURL = checkIfFileExists(pdfNameFromUrl: "\(resource?.file?.name?.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) ?? "").pdf") if let url = fileURL { webView.loadFileURL(url, allowingReadAccessTo: url) self.isFileAvailable = true @@ -150,10 +152,16 @@ class ResourceDetailViewController: UIViewController { // MARK: - Button Actions @IBAction func cancelButtonClicked(_ sender: Any) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "ResourceDetail Cancel" + ]) self.dismiss(animated: true, completion: nil) } @IBAction func buttonActionForward(_ sender: UIBarButtonItem) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "ResourceDetail Share" + ]) self.shareResource { [weak self] (status) in if !status { self?.view.makeToast(kResourceShareError) @@ -162,6 +170,9 @@ class ResourceDetailViewController: UIViewController { } @IBAction func buttonActionBack(_ sender: UIBarButtonItem) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "ResourceDetail Back" + ]) if webView.canGoBack { webView.goBack() } else if webView.backForwardList.backList.count == 0 { @@ -173,6 +184,9 @@ class ResourceDetailViewController: UIViewController { } @IBAction func buttonActionGoForward(_ sender: UIBarButtonItem) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "ResourceDetail GoForward" + ]) if webView.canGoForward { webView.goForward() } @@ -263,7 +277,7 @@ extension ResourceDetailViewController { } else if self.resource?.file?.mimeType == .pdf, isFileAvailable, let path = resourceLink, - let documentURL = checkIfFileExists(pdfNameFromUrl: "\(resource?.file?.name ?? "").pdf") + let documentURL = checkIfFileExists(pdfNameFromUrl: "\(resource?.file?.name?.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) ?? "").pdf") { attachResource(from: documentURL) completion(true) @@ -275,7 +289,9 @@ extension ResourceDetailViewController { attachResource(from: tempPath) completion(true) } else { - ResourceDetailViewController.saveTempPdf(from: pdfData, name: self.resource?.file?.name ?? "Resource") { + let valName = self.resource?.file?.name?.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) ?? "Resource" + ResourceDetailViewController.saveTempPdf(from: pdfData, name: + valName) { [weak self] (url) in self?.tempResourceFilePath = url if let tempPath = url { @@ -313,7 +329,7 @@ extension ResourceDetailViewController { DispatchQueue.global(qos: .background).async { [weak self] in let pdfData = try? Data(contentsOf: url) - let pdfNameFromUrl = "\(self?.resource?.file?.name ?? "").pdf" + let pdfNameFromUrl = "\(self?.resource?.file?.name?.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) ?? "").pdf" let actualPath = AKUtility.cacheDirectoryPath.appendingPathComponent(pdfNameFromUrl) do { try pdfData?.write(to: actualPath, options: .atomic) @@ -343,7 +359,7 @@ extension ResourceDetailViewController { completion: @escaping (_ url: URL?) -> Void ) { DispatchQueue.global(qos: .background).async { - let pdfNameFromUrl = name + ".pdf" + let pdfNameFromUrl = name.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) ?? "" + ".pdf" let tempPath = AKUtility.cacheDirectoryPath.appendingPathComponent(pdfNameFromUrl) do { try data.write(to: tempPath, options: .atomic) diff --git a/iOS/MyStudies/MyStudies/Controllers/StudyUI/ResourceUI/ResourcesViewController.swift b/iOS/MyStudies/MyStudies/Controllers/StudyUI/ResourceUI/ResourcesViewController.swift index 3bbebda5c9..a70fbdbb73 100644 --- a/iOS/MyStudies/MyStudies/Controllers/StudyUI/ResourceUI/ResourcesViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/StudyUI/ResourceUI/ResourcesViewController.swift @@ -19,6 +19,7 @@ import Foundation import UIKit +import FirebaseAnalytics let kConsentPdfKey = "consent" @@ -74,6 +75,8 @@ class ResourcesViewController: UIViewController { var resourcePrivacy: String = TableRow.privacy.title var aboutTheStudy: String = TableRow.about.title var consentPDF: String = TableRow.consent.title + private lazy var tableViewSections: [[String: Any]]! = [] + private lazy var selectedIndexPath: IndexPath? = nil private var tableRows: [ResourceRow] = [] @@ -83,6 +86,9 @@ class ResourcesViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Resources" + ]) self.navigationItem.title = NSLocalizedString("Resources", comment: "") @@ -91,6 +97,12 @@ class ResourcesViewController: UIViewController { appDelegate.checkConsentStatus(controller: self) } tableRows = getStaticResources() + setNavigationBarColor() + let appDelegate = (UIApplication.shared.delegate as? AppDelegate)! + if appDelegate.notificationDetails != nil, User.currentUser.userType == .loggedInUser { + appDelegate.notificationDetails = nil + StudyUpdates.studyResourcesUpdated = true + } } override func viewWillAppear(_ animated: Bool) { @@ -177,6 +189,22 @@ class ResourcesViewController: UIViewController { ResourcesViewController.scheduleNotificationForResources() } } + + func userDidNavigateFromNotification() { + let activityId = NotificationHandler.instance.studyId + let rowDetail = tableViewSections[0] + let activities = rowDetail["activities"] as? [Activity] ?? [] + if let index = activities.firstIndex(where: { $0.studyId == activityId }), + let tableView = self.tableView + { + let indexPath = IndexPath(row: index, section: 2) + self.selectedIndexPath = indexPath + tableView.selectRow(at: indexPath, animated: true, scrollPosition: .middle) + tableView.delegate?.tableView?(tableView, didSelectRowAt: indexPath) + } + NotificationHandler.instance.reset() + } + func checkIfResourcePresent() { if DBHandler.isResourcesEmpty((Study.currentStudy?.studyId)!) { @@ -215,6 +243,9 @@ class ResourcesViewController: UIViewController { } @IBAction func homeButtonAction(_ sender: AnyObject) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Resource Home" + ]) self.navigationController?.navigationBar.isHidden = false self.performSegue(withIdentifier: kUnwindToStudyListIdentifier, sender: self) @@ -345,12 +376,18 @@ class ResourcesViewController: UIViewController { viewControllerUsed: self, action1: { // Retain Action + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Retain Alert Action" + ]) self.shouldDeleteData = false self.withdrawalFromStudy(deleteResponse: false) }, action2: { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Delete Alert Action" + ]) // Delete action self.shouldDeleteData = true @@ -383,10 +420,17 @@ class ResourcesViewController: UIViewController { errorAlertActionTitle2: NSLocalizedString("Cancel", comment: ""), viewControllerUsed: self, action1: { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "LeaveStudy Alert OK" + ]) self.shouldDeleteData = false self.withdrawalFromStudy(deleteResponse: false) }, - action2: {} + action2: { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "LeaveStudy Alert Cancel" + ]) + } ) } diff --git a/iOS/MyStudies/MyStudies/Controllers/StudyUI/StudyDashboardUI/StudyDashboardTabbarViewController.swift b/iOS/MyStudies/MyStudies/Controllers/StudyUI/StudyDashboardUI/StudyDashboardTabbarViewController.swift index e45733d8eb..41f3d2008b 100644 --- a/iOS/MyStudies/MyStudies/Controllers/StudyUI/StudyDashboardUI/StudyDashboardTabbarViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/StudyUI/StudyDashboardUI/StudyDashboardTabbarViewController.swift @@ -19,11 +19,18 @@ import MessageUI import UIKit +import FirebaseAnalytics class StudyDashboardTabbarViewController: UITabBarController { override func viewDidLoad() { super.viewDidLoad() + + self.tabBar.layer.shadowColor = UIColor.lightGray.cgColor + self.tabBar.layer.borderWidth = 1.0 + if #available(iOS 13.0, *) { + self.tabBar.layer.borderColor = UIColor.systemGray4.cgColor + } } override func viewWillAppear(_ animated: Bool) { @@ -60,6 +67,9 @@ class StudyDashboardTabbarViewController: UITabBarController { title: NSLocalizedString(kTitleOk, comment: ""), style: .default, handler: { (_) in + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "StudyDashboardTabBar OK Alert" + ]) self.dismiss(animated: true, completion: nil) diff --git a/iOS/MyStudies/MyStudies/Controllers/StudyUI/StudyDashboardUI/StudyDashboardViewController.swift b/iOS/MyStudies/MyStudies/Controllers/StudyUI/StudyDashboardUI/StudyDashboardViewController.swift index 6d6314b12b..73c469a226 100644 --- a/iOS/MyStudies/MyStudies/Controllers/StudyUI/StudyDashboardUI/StudyDashboardViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/StudyUI/StudyDashboardUI/StudyDashboardViewController.swift @@ -19,6 +19,7 @@ import Foundation import UIKit +import FirebaseAnalytics let kMessageForSharingDashboard = "This action will create a shareable image file of the dashboard currently seen in this section. Proceed?" @@ -71,6 +72,9 @@ class StudyDashboardViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "StudyDashboard" + ]) // load plist info let plistPath = Bundle.main.path( forResource: "StudyDashboard", @@ -203,6 +207,9 @@ class StudyDashboardViewController: UIViewController { /// Home button clicked. @IBAction func homeButtonAction(_ sender: AnyObject) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "StudyDashboard Home" + ]) let button = sender as! UIButton if button.tag == 200 { self.slideMenuController()?.openLeft() @@ -213,7 +220,9 @@ class StudyDashboardViewController: UIViewController { /// Share to others button clicked. @IBAction func shareButtonAction(_ sender: AnyObject) { - + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "StudyDashboard Share" + ]) UIUtilities.showAlertMessageWithTwoActionsAndHandler( NSLocalizedString(kTitleMessage, comment: ""), errorMessage: NSLocalizedString(kMessageForSharingDashboard, comment: ""), @@ -221,9 +230,17 @@ class StudyDashboardViewController: UIViewController { errorAlertActionTitle2: NSLocalizedString(kTitleCancel, comment: ""), viewControllerUsed: self, action1: { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "StudyDashboard Ok Alert" + ]) + self.shareScreenShotByMail() }, action2: { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "StudyDashboard Cancel Alert" + ]) + // Handle cancel action } ) @@ -457,6 +474,8 @@ extension StudyDashboardViewController: ORKTaskViewControllerDelegate { // Checking if Signature is consented after Review Step if consentSignatureResult?.didTapOnViewPdf == false { + NotificationCenter.default.post(name: Notification.Name("GoForward"), object: nil) + // Directly moving to completion step by skipping Intermediate PDF viewer screen stepViewController.goForward() } diff --git a/iOS/MyStudies/MyStudies/Controllers/StudyUI/StudyOverviewUI/StudyHomeViewController.swift b/iOS/MyStudies/MyStudies/Controllers/StudyUI/StudyOverviewUI/StudyHomeViewController.swift index 41f40f14e7..e3fab88d1d 100644 --- a/iOS/MyStudies/MyStudies/Controllers/StudyUI/StudyOverviewUI/StudyHomeViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/StudyUI/StudyOverviewUI/StudyHomeViewController.swift @@ -20,6 +20,7 @@ import Foundation import ResearchKit import UIKit +import FirebaseAnalytics let kEligibilityConsentTask = "EligibilityConsentTask" let kEligibilityTokenStep = "EligibilityTokenStep" @@ -113,6 +114,9 @@ class StudyHomeViewController: UIViewController { let viewConsent = Branding.viewConsentButtonTitle buttonViewConsent?.setTitle(viewConsent, for: .normal) + +// NotificationCenter.default.addObserver(self, selector: #selector(self.methodOfReceivedNotification(notification:)), +// name: Notification.Name("ORKCancel"), object: nil) } override func viewWillAppear(_ animated: Bool) { @@ -159,6 +163,12 @@ class StudyHomeViewController: UIViewController { configureStandaloneUI() } + + @objc func methodOfReceivedNotification(notification: Notification) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "ORKCancel" + ]) + } // MARK: - UI Utils @@ -543,6 +553,9 @@ class StudyHomeViewController: UIViewController { // MARK: - Button Actions @IBAction func buttonActionJoinStudy(_: UIButton) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Join Study Clicked" + ]) if User.currentUser.userType == .anonymousUser { /// User not logged in yet. @@ -601,6 +614,9 @@ class StudyHomeViewController: UIViewController { } @IBAction func backButtonAction(_ sender: Any) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Home Button" + ]) let button = sender as! UIButton if button.tag == 200 { slideMenuController()?.openLeft() @@ -610,8 +626,12 @@ class StudyHomeViewController: UIViewController { } @IBAction func visitWebsiteButtonAction(_ sender: UIButton) { + if sender.tag == 1188 { // Visit Website + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Visit Website Clicked" + ]) navigateToWebView( link: Study.currentStudy?.overview.websiteLink, @@ -621,6 +641,9 @@ class StudyHomeViewController: UIViewController { } else { // View Consent + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "View Consent" + ]) if Study.currentStudy?.studyId != nil { WCPServices().getConsentDocument( @@ -1159,6 +1182,8 @@ extension StudyHomeViewController: ORKTaskViewControllerDelegate { // Checking if Signature is consented after Review Step if consentSignatureResult?.didTapOnViewPdf == false { + NotificationCenter.default.post(name: Notification.Name("GoForward"), object: nil) + // Directly moving to completion step by skipping Intermediate PDF viewer screen stepViewController.goForward() } else { diff --git a/iOS/MyStudies/MyStudies/Controllers/StudyUI/StudyOverviewUI/StudyOverviewPageViewControllerFirst.swift b/iOS/MyStudies/MyStudies/Controllers/StudyUI/StudyOverviewUI/StudyOverviewPageViewControllerFirst.swift index 5aef9d38db..8cb741ded3 100644 --- a/iOS/MyStudies/MyStudies/Controllers/StudyUI/StudyOverviewUI/StudyOverviewPageViewControllerFirst.swift +++ b/iOS/MyStudies/MyStudies/Controllers/StudyUI/StudyOverviewUI/StudyOverviewPageViewControllerFirst.swift @@ -23,6 +23,7 @@ import MediaPlayer import ResearchKit import SDWebImage import UIKit +import FirebaseAnalytics class StudyOverviewViewControllerFirst: UIViewController { @@ -112,10 +113,25 @@ class StudyOverviewViewControllerFirst: UIViewController { self.textViewDescription?.dataDetectorTypes = [.link, .phoneNumber] self.textViewDescription?.text = detailText if detailText.stringByDecodingHTMLEntities.range(of: regex, options: .regularExpression) == nil { - self.textViewDescription?.text = detailText + if let valReConversiontoHTMLfromHTML = + detailText.stringByDecodingHTMLEntities.htmlToAttributedString?.attributedString2Html { + + if let attributedText = valReConversiontoHTMLfromHTML.stringByDecodingHTMLEntities.htmlToAttributedString, + attributedText.length > 0 { + textViewDescription?.attributedText = attributedText + } else if let attributedText = + detailText.htmlToAttributedString?.attributedString2Html?.stringByDecodingHTMLEntities.htmlToAttributedString, + attributedText.length > 0 { + textViewDescription?.attributedText = attributedText + } else { + textViewDescription?.text = detailText + } + } else { + textViewDescription?.text = detailText + } } else { self.textViewDescription?.attributedText = - detailText.stringByDecodingHTMLEntities.htmlToAttributedString + detailText.stringByDecodingHTMLEntities.htmlToAttributedString } } else { self.textViewDescription?.text = "" @@ -155,6 +171,9 @@ class StudyOverviewViewControllerFirst: UIViewController { // MARK: - Button Actions @IBAction func watchVideoButtonAction(_ sender: Any) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "StudyOverViewFirst watch video" + ]) guard let urlString = overviewSectionDetail.link, let url = URL(string: urlString) @@ -183,6 +202,9 @@ class StudyOverviewViewControllerFirst: UIViewController { } @IBAction func buttonActionJoinStudy(_ sender: Any) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "StudyOverViewFirst Join Study" + ]) if User.currentUser.userType == UserType.anonymousUser { let leftController = @@ -193,6 +215,9 @@ class StudyOverviewViewControllerFirst: UIViewController { } @IBAction func visitWebsiteButtonAction(_ sender: Any) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "StudyOverviewFirst visit website" + ]) if overViewWebsiteLink != nil { diff --git a/iOS/MyStudies/MyStudies/Controllers/StudyUI/StudyOverviewUI/StudyOverviewViewControllerSecond.swift b/iOS/MyStudies/MyStudies/Controllers/StudyUI/StudyOverviewUI/StudyOverviewViewControllerSecond.swift index 87f4b90345..67004fbb04 100644 --- a/iOS/MyStudies/MyStudies/Controllers/StudyUI/StudyOverviewUI/StudyOverviewViewControllerSecond.swift +++ b/iOS/MyStudies/MyStudies/Controllers/StudyUI/StudyOverviewUI/StudyOverviewViewControllerSecond.swift @@ -20,6 +20,7 @@ import Foundation import SDWebImage import UIKit +import FirebaseAnalytics class StudyOverviewViewControllerSecond: UIViewController { @@ -103,7 +104,22 @@ class StudyOverviewViewControllerSecond: UIViewController { self.textViewDescription?.dataDetectorTypes = [.link, .phoneNumber] self.textViewDescription?.text = detailText if detailText.stringByDecodingHTMLEntities.range(of: regex, options: .regularExpression) == nil { - self.textViewDescription?.text = detailText + if let valReConversiontoHTMLfromHTML = + detailText.stringByDecodingHTMLEntities.htmlToAttributedString?.attributedString2Html { + + if let attributedText = valReConversiontoHTMLfromHTML.stringByDecodingHTMLEntities.htmlToAttributedString, + attributedText.length > 0 { + textViewDescription?.attributedText = attributedText + } else if let attributedText = + detailText.htmlToAttributedString?.attributedString2Html?.stringByDecodingHTMLEntities.htmlToAttributedString, + attributedText.length > 0 { + textViewDescription?.attributedText = attributedText + } else { + textViewDescription?.text = detailText + } + } else { + textViewDescription?.text = detailText + } } else { self.textViewDescription?.attributedText = detailText.stringByDecodingHTMLEntities.htmlToAttributedString @@ -118,6 +134,9 @@ class StudyOverviewViewControllerSecond: UIViewController { // MARK: - Button Actions @IBAction func buttonActionJoinStudy(_ sender: Any) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "StudyOverview JoinStudy" + ]) if User.currentUser.userType == UserType.anonymousUser { let leftController = @@ -134,6 +153,9 @@ class StudyOverviewViewControllerSecond: UIViewController { } @IBAction func visitWebsiteButtonAction(_ sender: UIButton) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "StudyOverview Website" + ]) let loginStoryboard = UIStoryboard.init(name: "Main", bundle: Bundle.main) let webViewController = diff --git a/iOS/MyStudies/MyStudies/Controllers/WebViewController.swift b/iOS/MyStudies/MyStudies/Controllers/WebViewController.swift index 3c4f87d44e..74f6274167 100644 --- a/iOS/MyStudies/MyStudies/Controllers/WebViewController.swift +++ b/iOS/MyStudies/MyStudies/Controllers/WebViewController.swift @@ -21,6 +21,7 @@ import Foundation import MessageUI import UIKit import WebKit +import FirebaseAnalytics class WebViewController: UIViewController { @@ -47,6 +48,7 @@ class WebViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() + setNavigationBarColor() } override func viewWillAppear(_ animated: Bool) { @@ -103,12 +105,21 @@ class WebViewController: UIViewController { /// Dismiss ViewController @IBAction func cancelButtonClicked(_ sender: Any) { self.dismiss(animated: true, completion: nil) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Cancel Website/Consent/Terms/PrivacyPolicy" + ]) } @IBAction func buttonActionShare(_ sender: UIBarButtonItem) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Share Document" + ]) self.shareDocument { [weak self] (status) in if !status { self?.view.makeToast(kResourceShareError) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Unable to ShareResourceAlert Ok" + ]) } } } diff --git a/iOS/MyStudies/MyStudies/Models/Activity/Activity.swift b/iOS/MyStudies/MyStudies/Models/Activity/Activity.swift index 7708593332..251f1f7ca3 100644 --- a/iOS/MyStudies/MyStudies/Models/Activity/Activity.swift +++ b/iOS/MyStudies/MyStudies/Models/Activity/Activity.swift @@ -120,6 +120,8 @@ class Activity { var lastModified: Date? var userStatus: UserActivityStatus.ActivityStatus = .yetToJoin var startDate: Date? + var startRawDate: String? + var endRawDate: String? var endDate: Date? var branching: Bool? var randomization: Bool? @@ -176,6 +178,8 @@ class Activity { self.lastModified = nil self.userStatus = .yetToJoin self.startDate = nil + self.startRawDate = "" + self.endRawDate = "" self.endDate = nil self.shortName = "" @@ -238,6 +242,7 @@ class Activity { self.startDate = Utilities.getDateFromStringWithOutTimezone( dateString: (infoDict[kActivityStartTime] as? String)! ) + self.startRawDate = infoDict[kActivityStartTime] as? String } if Utilities.isValidValue(someObject: infoDict["schedulingType"] as AnyObject) { let scheduleValue = infoDict["schedulingType"] as? String ?? "Regular" @@ -247,6 +252,7 @@ class Activity { self.endDate = Utilities.getDateFromStringWithOutTimezone( dateString: (infoDict[kActivityEndTime] as? String)! ) + self.endRawDate = infoDict[kActivityEndTime] as? String } if Utilities.isValidObject(someObject: infoDict[kActivityFrequency] as AnyObject?) { @@ -381,7 +387,13 @@ class Activity { } self.startDate = startdate + let val1 = TimeZone.current.secondsFromGMT(for: self.startDate!) + self.startRawDate = "\(startdate!)W\(val1)" + self.endDate = endDate + if endDate != nil { + self.endRawDate = "\(endDate!)W\(val1)" + } } else if anchorDate?.sourceType == "ActivityResponse" && isLaunchWithStudy { diff --git a/iOS/MyStudies/MyStudies/Models/Database/DBActivity.swift b/iOS/MyStudies/MyStudies/Models/Database/DBActivity.swift index 2e1dce8407..155299c335 100644 --- a/iOS/MyStudies/MyStudies/Models/Database/DBActivity.swift +++ b/iOS/MyStudies/MyStudies/Models/Database/DBActivity.swift @@ -33,6 +33,8 @@ class DBActivity: Object { @objc dynamic var lastModified: Date? @objc dynamic var startDate: Date? + @objc dynamic var startRawDate: String? + @objc dynamic var endRawDate: String? @objc dynamic var endDate: Date? @objc dynamic var branching: Bool = false @objc dynamic var randomization: Bool = false diff --git a/iOS/MyStudies/MyStudies/Models/Database/DBHandler.swift b/iOS/MyStudies/MyStudies/Models/Database/DBHandler.swift index e39779789d..2da6154e05 100644 --- a/iOS/MyStudies/MyStudies/Models/Database/DBHandler.swift +++ b/iOS/MyStudies/MyStudies/Models/Database/DBHandler.swift @@ -25,7 +25,7 @@ class DBHandler: NSObject { private static var realm: Realm? = { let key = FDAKeychain.shared[kRealmEncryptionKeychainKey] let data = Data.init(base64Encoded: key!) - let encryptionConfig = Realm.Configuration(encryptionKey: data) + let encryptionConfig = Realm.Configuration.defaultConfiguration return try? Realm(configuration: encryptionConfig) }() @@ -178,7 +178,6 @@ class DBHandler: NSObject { .rawValue { dbStudy?.updatedVersion = study.version - } else { dbStudy?.updatedVersion = study.version } @@ -622,6 +621,8 @@ class DBHandler: NSObject { dbActivity.type = activity.type?.rawValue dbActivity.name = activity.name dbActivity.startDate = activity.startDate + dbActivity.startRawDate = activity.startRawDate + dbActivity.endRawDate = activity.endRawDate dbActivity.endDate = activity.endDate dbActivity.version = activity.version dbActivity.state = activity.state @@ -746,7 +747,6 @@ class DBHandler: NSObject { return false } let date = Utilities.getDateFromString(dateString: userInputDate) - for activity in dbActivities { if let anchorDate = date { self.updateActivityLifeTimeFor(activity, anchorDate: anchorDate) @@ -754,6 +754,50 @@ class DBHandler: NSObject { } return date != nil } + + class func updateTargetForActivityAnchorDateDetail( + studyId: String, + activityId: String, + response: [String: Any] + ) -> Bool { + guard !response.isEmpty else { return false } + let realm = DBHandler.getRealmObject()! + let dbActivities = realm.objects(DBActivity.self) + .filter { + $0.sourceActivityId == activityId + && $0.studyId == studyId + } + + // get source question value and key + var date: Date? = nil + if let results = response["results"] as? [[String: Any]] { + var quesStepKey: String + var dictionary: [String: Any] = [:] + + for dbActivity in dbActivities { + + let sourceKey = (dbActivity.sourceKey)! + if dbActivity.sourceFormKey != nil && dbActivity.sourceFormKey!.count > 0 { + quesStepKey = dbActivity.sourceFormKey! + let quesResults = results.filter { $0["key"] as! String == quesStepKey }.first + let resultsArray = ((quesResults!["value"] as? [[Any]])?.first) as? [[String: Any]] + dictionary = resultsArray!.filter { $0["key"] as! String == sourceKey }.first! + } else { + dictionary = results.filter { $0["key"] as! String == sourceKey }.first! + } + + guard let userInputDate = dictionary["value"] as? String else { + return false + } + date = Utilities.getDateFromString(dateString: userInputDate) + + if let anchorDate = date { + self.updateActivityLifeTimeFor(dbActivity, anchorDate: anchorDate) + } + } + } + return date != nil + } /// Updates resources lifetime from anchor date received from source activity questionnaire response. /// - Parameters: @@ -814,7 +858,7 @@ class DBHandler: NSObject { /// - Parameters: /// - dbActivity: Instance of `DBActivity` for which anchor date will be updated. /// - anchorDate: Calculated anchor date. - class func updateActivityLifeTimeFor(_ dbActivity: DBActivity, anchorDate: Date) { + class func updateActivityLifeTimeFor(_ dbActivity: DBActivity, anchorDate: Date, _ anchorRawDate: String = "") { var date = anchorDate let realm = DBHandler.getRealmObject()! @@ -824,7 +868,6 @@ class DBHandler: NSObject { let startTimeEnrollment = "00:00:00" startDateStringEnrollment = (startDateStringEnrollment ?? "") + " " + startTimeEnrollment date = Utilities.findDateFromString(dateString: startDateStringEnrollment ?? "")! - let frequency = Frequency(rawValue: (dbActivity.frequencyType)!)! let lifeTime = DBHandler.getLifeTime( date, @@ -833,10 +876,10 @@ class DBHandler: NSObject { endDays: (dbActivity.endDays), repeatInterval: (dbActivity.repeatInterval) ) - + guard var anchorStartDate = lifeTime.0 else { return } - + var anchorEndDate = lifeTime.1 // Update Start date and time. if let startTime = dbActivity.startTime, @@ -846,7 +889,7 @@ class DBHandler: NSObject { } else if let activityStartDate = dbActivity.startDate { anchorStartDate = activityStartDate } - + // Update End date and time. if let endTime = dbActivity.endTime, let updatedEndDate = DateHelper.updateTime(of: anchorEndDate, with: endTime) @@ -861,7 +904,12 @@ class DBHandler: NSObject { let activity = DBHandler.getActivityFromDBActivity(dbActivity, runDate: currentDate) activity.startDate = anchorStartDate + let val1 = TimeZone.current.secondsFromGMT(for: activity.startDate!) + activity.startRawDate = "\(anchorStartDate)W\(val1)" activity.endDate = anchorEndDate + if anchorEndDate != nil { + activity.endRawDate = "\(anchorEndDate!)W\(val1)" + } activity.anchorDate?.anchorDateValue = date Schedule().getRunsForActivity( activity: activity, @@ -884,7 +932,12 @@ class DBHandler: NSObject { try? realm.write { dbActivity.activityRuns.append(objectsIn: dbActivityRuns) dbActivity.startDate = anchorStartDate + dbActivity.startRawDate = "\(anchorStartDate)W\(val1)" dbActivity.endDate = anchorEndDate + if anchorEndDate != nil { + dbActivity.endRawDate = "\(anchorEndDate!)W\(val1)" + } + dbActivity.anchorDateValue = date } } @@ -942,7 +995,6 @@ class DBHandler: NSObject { endDate = date.addingTimeInterval(endDateInterval) } - return (startDate, endDate) } @@ -1033,7 +1085,9 @@ class DBHandler: NSObject { activity.studyId = dbActivity.studyId activity.name = dbActivity.name activity.startDate = dbActivity.startDate + activity.startRawDate = dbActivity.startRawDate activity.endDate = dbActivity.endDate + activity.endRawDate = dbActivity.endRawDate activity.type = ActivityType(rawValue: dbActivity.type!) activity.frequencyType = Frequency(rawValue: dbActivity.frequencyType!)! activity.schedulingType = ActivityScheduleType(rawValue: dbActivity.schedulingType!)! @@ -1073,11 +1127,11 @@ class DBHandler: NSObject { if activity.frequencyType == Frequency.oneTime && activity.endDate == nil { run = runs.last } else { - runsBeforeToday = runs.filter({ $0.endDate <= date }) + runsBeforeToday = runs.filter({ $0.endDate ?? Date() <= date }) run = runs.filter { $0.startDate <= date - && $0.endDate > date + && $0.endDate ?? Date() > date }.first // current run } @@ -1152,6 +1206,7 @@ class DBHandler: NSObject { anchorDate.endDays = dbActivity.endDays anchorDate.repeatInterval = dbActivity.repeatInterval anchorDate.endTime = dbActivity.endTime + anchorDate.anchorDateValue = dbActivity.anchorDateValue activity.anchorDate = anchorDate return activity diff --git a/iOS/MyStudies/MyStudies/Models/Notification/AppNotification.swift b/iOS/MyStudies/MyStudies/Models/Notification/AppNotification.swift index 8c10ae7722..f9b51c19b6 100644 --- a/iOS/MyStudies/MyStudies/Models/Notification/AppNotification.swift +++ b/iOS/MyStudies/MyStudies/Models/Notification/AppNotification.swift @@ -58,7 +58,7 @@ class AppLocalNotification: AppNotification { class AppNotification { - enum NotificationType: String { + enum NotificationType: String, CaseIterable { case gateway = "Gateway" case study = "Study" } @@ -68,7 +68,7 @@ class AppNotification { case study = "Study" case resource = "Resource" case activity = "Activity" - case studyEvent + case studyEvent = "studyEvent" } var id: String? diff --git a/iOS/MyStudies/MyStudies/Models/UserModel/User.swift b/iOS/MyStudies/MyStudies/Models/UserModel/User.swift index ccf4de0bdc..c481b714d1 100644 --- a/iOS/MyStudies/MyStudies/Models/UserModel/User.swift +++ b/iOS/MyStudies/MyStudies/Models/UserModel/User.swift @@ -811,4 +811,15 @@ class UserActivityStatus { return studyDetail } + + func getParticipatedUserUpdateRunActivityStatus() -> [String: Any] { + let runDetail = [ + "total": self.totalRuns, + "completed": self.compeltedRuns, + "missed": self.incompletedRuns, + ] + + return runDetail + } + } diff --git a/iOS/MyStudies/MyStudies/Networking/APIs/ResponseServices.swift b/iOS/MyStudies/MyStudies/Networking/APIs/ResponseServices.swift index 03214bd9bd..df2ab88f53 100644 --- a/iOS/MyStudies/MyStudies/Networking/APIs/ResponseServices.swift +++ b/iOS/MyStudies/MyStudies/Networking/APIs/ResponseServices.swift @@ -55,7 +55,10 @@ class ResponseServices: NSObject { /// - Parameters: /// - responseData: Response in form of `JSONDictionary` /// - delegate: Class object to receive response - func processResponse(responseData: [String: Any], delegate: NMWebServiceDelegate) { + func processResponse( + responseData: [String: Any], + delegate: NMWebServiceDelegate + ) { self.delegate = delegate let method = ResponseMethods.processResponse.method @@ -101,6 +104,58 @@ class ResponseServices: NSObject { self.sendRequestWith(method: method, params: params, headers: headers) } } + + func processUpdateResponse( + responseData: [String: Any], + activityStatus: UserActivityStatus, + delegate: NMWebServiceDelegate + ) { + self.delegate = delegate + + let method = ResponseMethods.processResponse.method + + let currentUser = User.currentUser + if let userStudyStatus = currentUser.participatedStudies.filter({ + $0.studyId == Study.currentStudy?.studyId! + }).first { + let currentStudy = Study.currentStudy + + let studyId = currentStudy?.studyId ?? "" + let activiyId = Study.currentActivity?.actvityId ?? "" + let activityName = Study.currentActivity?.shortName ?? "" + let activityVersion = Study.currentActivity?.version ?? "" + let currentRunId = Study.currentActivity?.currentRunId ?? 0 + let studyVersion = currentStudy?.version ?? "" + let info = + [ + kStudyId: studyId, + kActivityId: activiyId, + kActivityName: activityName, + "version": activityVersion, + kActivityRunId: "\(currentRunId)", + JSONKey.studyVersion: studyVersion, + ] + + let activityType = Study.currentActivity?.type?.rawValue + + let params = + [ + kActivityType: activityType!, + kActivityInfoMetaData: info, + kParticipantId: userStudyStatus.participantId ?? "", + JSONKey.tokenIdentifier: userStudyStatus.tokenIdentifier ?? "", + JSONKey.siteID: userStudyStatus.siteID ?? "", + kActivityResponseData: responseData, + JSONKey.applicationId: AppConfiguration.appID, + "activityRun": activityStatus.getParticipatedUserUpdateRunActivityStatus(), + ] as [String: Any] + + let headers: [String: String] = [ + JSONKey.userID: currentUser.userId ?? "" + ] + self.sendRequestWith(method: method, params: params, headers: headers) + } + } /// Creates a request to receive participant response /// - Parameters: diff --git a/iOS/MyStudies/MyStudies/Networking/Network setup/NetworkWebServiceHandler.swift b/iOS/MyStudies/MyStudies/Networking/Network setup/NetworkWebServiceHandler.swift index edb9f8d7d1..eae510b12c 100644 --- a/iOS/MyStudies/MyStudies/Networking/Network setup/NetworkWebServiceHandler.swift +++ b/iOS/MyStudies/MyStudies/Networking/Network setup/NetworkWebServiceHandler.swift @@ -18,6 +18,7 @@ // OTHER DEALINGS IN THE SOFTWARE. import Foundation +import FirebaseAnalytics enum RequestType: NSInteger { case requestTypeJSON @@ -306,6 +307,7 @@ class NetworkWebServiceHandler: NSObject, URLSessionDelegate { if httpHeaders != nil && (httpHeaders?.count)! > 0 { request.allHTTPHeaderFields = httpHeaders as? [String: String] } + self.fireRequest(request, requestName: requestName) } @@ -422,7 +424,7 @@ class NetworkWebServiceHandler: NSObject, URLSessionDelegate { requestName: NSString?, error: NSError? ) { - + if error != nil { if shouldRetryRequest && maxRequestRetryCount > 0 { maxRequestRetryCount -= 1 @@ -450,6 +452,7 @@ class NetworkWebServiceHandler: NSObject, URLSessionDelegate { responseDict = try JSONSerialization.jsonObject(with: data!, options: []) as? NSDictionary + } catch let error { Logger.sharedInstance.error("Serialization error: \(requestName ?? "")", error.localizedDescription) responseDict = [:] @@ -474,12 +477,17 @@ class NetworkWebServiceHandler: NSObject, URLSessionDelegate { options: .allowFragments ) as? [String: Any] + if let errorBody = responseDict { error1 = self.configuration.parseError(errorResponse: errorBody) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Account Existing OKAlert" + ]) } else { error1 = error ?? NSError(domain: "", code: statusCode, userInfo: [:]) } } else { + error1 = NSError( domain: NSURLErrorDomain, code: statusCode, diff --git a/iOS/MyStudies/MyStudies/Storyboards/Study.storyboard b/iOS/MyStudies/MyStudies/Storyboards/Study.storyboard index 81be1b6b86..dbde74b505 100644 --- a/iOS/MyStudies/MyStudies/Storyboards/Study.storyboard +++ b/iOS/MyStudies/MyStudies/Storyboards/Study.storyboard @@ -1751,7 +1751,7 @@ - + @@ -1994,5 +1994,8 @@ + + + diff --git a/iOS/MyStudies/MyStudies/Utils/Extension/Date+Extensions.swift b/iOS/MyStudies/MyStudies/Utils/Extension/Date+Extensions.swift index 02d0678b37..282747264b 100644 --- a/iOS/MyStudies/MyStudies/Utils/Extension/Date+Extensions.swift +++ b/iOS/MyStudies/MyStudies/Utils/Extension/Date+Extensions.swift @@ -7,17 +7,160 @@ import Foundation extension Date { - + /// This method will update date with the timezone change offset and removing daylight savings. mutating func updateWithOffset() { - if var difference = UserDefaults.standard.value(forKey: "offset") as? Int { - difference *= -1 - if TimeZone.current.isDaylightSavingTime(for: self) { - let offset = TimeZone.current.daylightSavingTimeOffset(for: self) - self.addTimeInterval(-offset) + if let differenceCapturedInUD = UserDefaults.standard.value(forKey: "offset") as? Int, differenceCapturedInUD != 0 { + let timeZoneCurrent = TimeZone.current + let differenceFromCurrent = timeZoneCurrent.secondsFromGMT() + + var playerResult: InitialTimezone? + let ud = UserDefaults.standard + if let decoded = ud.object(forKey: "oldTimezone") as? NSData { + let array = NSKeyedUnarchiver.unarchiveObject(with: decoded as Data) as! InitialTimezone + playerResult = array + } + + let timeZoneOriginal = playerResult?.playerName + let differenceFromOriginal = timeZoneOriginal?.secondsFromGMT() ?? 0 + + let offsetCurrentDaylight = TimeZone.current.daylightSavingTimeOffset(for: Date()) + + if !(timeZoneOriginal?.isDaylightSavingTime() ?? true) { + var difference = differenceFromCurrent - Int(offsetCurrentDaylight) - differenceFromOriginal + + difference *= -1 + if TimeZone.current.isDaylightSavingTime(for: Date()) { + let offset = TimeZone.current.daylightSavingTimeOffset(for: Date()) + self.addTimeInterval(-offset) + } + if timeZoneOriginal!.isDaylightSavingTime(for: Date()) { + let offset = timeZoneOriginal!.daylightSavingTimeOffset(for: Date()) + self.addTimeInterval(+offset) + } else { + if Int(offsetCurrentDaylight) != 0 { + self.addTimeInterval(+offsetCurrentDaylight) + self.addTimeInterval(TimeInterval(-(difference + differenceCapturedInUD))) + } else { + if Int(difference) == 0 { + self.addTimeInterval(TimeInterval(-differenceCapturedInUD))//main offset + } else { + self.addTimeInterval(TimeInterval(-(difference + differenceCapturedInUD))) + } + } + } + self.addTimeInterval(TimeInterval(difference)) + } else { + var difference = differenceFromCurrent - Int(offsetCurrentDaylight) - differenceFromOriginal + difference *= -1 + if TimeZone.current.isDaylightSavingTime(for: Date()) { + let offset = TimeZone.current.daylightSavingTimeOffset(for: Date()) + self.addTimeInterval(-offset) + self.addTimeInterval(TimeInterval(difference)) + } + if !timeZoneOriginal!.isDaylightSavingTime(for: Date()) { + let offset = timeZoneOriginal!.daylightSavingTimeOffset(for: Date()) + if Int(offset) != 0 { + self.addTimeInterval(+offset) + self.addTimeInterval(TimeInterval(difference)) + } else { + self.addTimeInterval(-offset) + self.addTimeInterval(TimeInterval(-difference)) + } + } else { + let offsetTimezoneOriginalDL = timeZoneOriginal!.daylightSavingTimeOffset(for: Date()) + if Int(offsetCurrentDaylight) != 0 { + self.addTimeInterval(-offsetCurrentDaylight) + } + if differenceFromCurrent < 0, timeZoneOriginal?.isDaylightSavingTime() ?? false, + timeZoneCurrent.isDaylightSavingTime() { + self.addTimeInterval(-(TimeInterval(-differenceFromCurrent + differenceFromOriginal))) + if Int(offsetTimezoneOriginalDL) != 0 { + self.addTimeInterval(TimeInterval(Int(offsetTimezoneOriginalDL))) + if Int(offsetCurrentDaylight) != 0 { + self.addTimeInterval(-offsetCurrentDaylight) + } + } + } + if differenceFromOriginal < 0, timeZoneOriginal?.isDaylightSavingTime() ?? false, + timeZoneCurrent.isDaylightSavingTime() { + self.addTimeInterval((TimeInterval(-difference + (Int(offsetCurrentDaylight))))) + if differenceFromOriginal < 0, Int(offsetTimezoneOriginalDL) != 0 { + if differenceFromCurrent < 0, timeZoneOriginal?.isDaylightSavingTime() ?? false, + timeZoneCurrent.isDaylightSavingTime(), Int(offsetCurrentDaylight) != 0 { + self.addTimeInterval(-offsetCurrentDaylight) + } + self.addTimeInterval(TimeInterval(Int(-offsetTimezoneOriginalDL))) + } + } + if differenceFromOriginal > 0, differenceFromCurrent > 0, timeZoneOriginal?.isDaylightSavingTime() ?? false, + timeZoneCurrent.isDaylightSavingTime(), Int(offsetTimezoneOriginalDL) != 0, Int(offsetCurrentDaylight) != 0 { + self.addTimeInterval(-offsetCurrentDaylight) + } + + let val1 = [differenceFromOriginal > 0, differenceFromCurrent > 0, timeZoneOriginal?.isDaylightSavingTime() ?? false, + !timeZoneCurrent.isDaylightSavingTime(), Int(offsetTimezoneOriginalDL) != 0] + let val2 = [differenceFromCurrent < 0, differenceFromOriginal > 0, timeZoneOriginal?.isDaylightSavingTime() ?? false, + !timeZoneCurrent.isDaylightSavingTime(), Int(offsetTimezoneOriginalDL) > 0] + let val3 = [differenceFromOriginal < 0, differenceFromCurrent > 0, timeZoneOriginal?.isDaylightSavingTime() ?? false, + !timeZoneCurrent.isDaylightSavingTime(), Int(offsetCurrentDaylight) == 0, Int(offsetTimezoneOriginalDL) > 0] + + if (val1.allSatisfy({$0}) || val2.allSatisfy({$0}) || val3.allSatisfy({$0})) { + self.addTimeInterval(-offsetTimezoneOriginalDL) + } + self.addTimeInterval(TimeInterval(difference)) + } } - self.addTimeInterval(TimeInterval(difference)) } } + + func convertToTimeZone(timeDifference: Int, date2: Date) -> Date { + let val1 = timeDifference + let val2 = date2.addingTimeInterval(TimeInterval(val1)) + return val2 + } +} +extension Date { + + // Convert local time to UTC (or GMT) + func toGlobalTime() -> Date { + let timezone = TimeZone.current + let seconds = -TimeInterval(timezone.secondsFromGMT(for: self)) + return Date(timeInterval: seconds, since: self) + } + + // Convert UTC (or GMT) to local time + func toLocalTime() -> Date { + let timezone = TimeZone.current + let seconds = TimeInterval(timezone.secondsFromGMT(for: self)) + return Date(timeInterval: seconds, since: self) + } + +} + +class InitialTimezone: NSObject, NSCoding { + private var name: TimeZone! + var playerName: TimeZone { + get { + return name + } + set { + name = newValue + } + } + + init(playerName: TimeZone) { + name = playerName + } + + required convenience init(coder aDecoder: NSCoder) { + let name = aDecoder.decodeObject(forKey: "name") as! TimeZone + self.init(playerName: name) + } + + func encode(with aCoder: NSCoder){ + aCoder.encode(name, forKey: "name") + } + } diff --git a/iOS/MyStudies/MyStudies/Utils/Extension/String+Extensions.swift b/iOS/MyStudies/MyStudies/Utils/Extension/String+Extensions.swift index 26d85c03f0..17c86714b7 100644 --- a/iOS/MyStudies/MyStudies/Utils/Extension/String+Extensions.swift +++ b/iOS/MyStudies/MyStudies/Utils/Extension/String+Extensions.swift @@ -188,6 +188,11 @@ extension String { result.append(contentsOf: self[position...]) return result } + + func replacingFirstOccurrence(of target: String, with replacement: String) -> String { + guard let range = self.range(of: target) else { return self } + return self.replacingCharacters(in: range, with: replacement) + } } extension NSAttributedString { diff --git a/iOS/MyStudies/MyStudies/Utils/Extension/UIViewController+Extensions.swift b/iOS/MyStudies/MyStudies/Utils/Extension/UIViewController+Extensions.swift index a5c6133be6..c00c9d3120 100755 --- a/iOS/MyStudies/MyStudies/Utils/Extension/UIViewController+Extensions.swift +++ b/iOS/MyStudies/MyStudies/Utils/Extension/UIViewController+Extensions.swift @@ -19,6 +19,7 @@ import QuickLook import UIKit +import FirebaseAnalytics let kResourceName = "fda_preload" @@ -48,14 +49,32 @@ extension UIViewController { } func setNavigationBarItem() { - + self.addLeftBarButtonWithImage(UIImage(named: "menu_icn")!) self.slideMenuController()?.removeLeftGestures() self.slideMenuController()?.removeRightGestures() self.slideMenuController()?.addLeftGestures() self.slideMenuController()?.addRightGestures() + setNavigationBarColor() + } + + func setNavigationBarColor() { + if #available(iOS 15, *) { + let appearance = UINavigationBarAppearance() + let navigationBar = UINavigationBar() + appearance.configureWithTransparentBackground() + appearance.backgroundColor = .white + appearance.shadowColor = .lightGray + navigationBar.standardAppearance = appearance + + self.navigationController?.navigationBar.scrollEdgeAppearance = appearance + self.navigationController?.navigationBar.standardAppearance = appearance + self.navigationController?.navigationBar.scrollEdgeAppearance?.backgroundColor = .white + self.navigationController?.navigationBar.standardAppearance.backgroundColor = .white + } } + func showAlert(title: String, message: String) { let alert = UIAlertController( @@ -157,7 +176,7 @@ extension UIViewController { /// - Returns: Instance of child `UIButton` @discardableResult public func addBackBarButton() -> UIButton { - + let customView = UIView(frame: CGRect(x: -15, y: 0, width: 46, height: 36)) let backbutton: UIButton = UIButton.init(frame: customView.frame) @@ -204,6 +223,9 @@ extension UIViewController { } @objc public func popController() { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Back Button" + ]) _ = self.navigationController?.popViewController(animated: true) } } @@ -243,3 +265,4 @@ extension UIViewController { } } + diff --git a/iOS/MyStudies/MyStudies/Utils/Helpers/AnchorDateHandler.swift b/iOS/MyStudies/MyStudies/Utils/Helpers/AnchorDateHandler.swift index f29efb6f27..2ddb8fba04 100644 --- a/iOS/MyStudies/MyStudies/Utils/Helpers/AnchorDateHandler.swift +++ b/iOS/MyStudies/MyStudies/Utils/Helpers/AnchorDateHandler.swift @@ -32,6 +32,7 @@ class AnchorDateQueryMetaData { var sourceActivityId: String! var sourceFormKey: String? var anchorDate: Date? + var anchorRawDate: String? var sourceFormId: String! var isFinishedFetching: Bool = false var fetchAnchorDateFor: FetchAnchorDateFor = .activity @@ -236,13 +237,14 @@ class AnchorDateHandler { } if let data = latestResponse["data"] as? [JSONDictionary], - let userResponseDict = data[safe: 2], + let userResponseDict = data.first(where: { $0[emptyAnchorDateDetail.sourceKey] != nil }), let anchorDateObject = userResponseDict[emptyAnchorDateDetail.sourceKey] as? [String: String], let anchorDateString = anchorDateObject["value"] { let date = AnchorDateHandler.anchorDateFormatter.date(from: anchorDateString) emptyAnchorDateDetail.anchorDate = date + emptyAnchorDateDetail.anchorRawDate = anchorDateString completion() } else { completion() @@ -273,7 +275,7 @@ class AnchorDateHandler { } for item in listItems { if item.fetchAnchorDateFor == .activity { - DBHandler.updateActivityLifeTimeFor(item.activity, anchorDate: item.anchorDate!) + DBHandler.updateActivityLifeTimeFor(item.activity, anchorDate: item.anchorDate!, item.anchorRawDate ?? "") } else if item.fetchAnchorDateFor == .resource { var startDateStringEnrollment = Utilities.formatterShort?.string( diff --git a/iOS/MyStudies/MyStudies/Utils/Helpers/Constants/Constants.swift b/iOS/MyStudies/MyStudies/Utils/Helpers/Constants/Constants.swift index c791af877d..7494c04503 100644 --- a/iOS/MyStudies/MyStudies/Utils/Helpers/Constants/Constants.swift +++ b/iOS/MyStudies/MyStudies/Utils/Helpers/Constants/Constants.swift @@ -315,3 +315,6 @@ public func log( let activityBuilder: ActivityBuilder? = ActivityBuilder.currentActivityBuilder let consentbuilder: ConsentBuilder? = ConsentBuilder() + +let analyticsButtonClickEventsName = "button_click" +let buttonClickReasonsKey = "button_click_reason" diff --git a/iOS/MyStudies/MyStudies/Utils/Helpers/Managers/LocalNotification.swift b/iOS/MyStudies/MyStudies/Utils/Helpers/Managers/LocalNotification.swift index 73a3fcfdf4..0ef348ec18 100644 --- a/iOS/MyStudies/MyStudies/Utils/Helpers/Managers/LocalNotification.swift +++ b/iOS/MyStudies/MyStudies/Utils/Helpers/Managers/LocalNotification.swift @@ -119,7 +119,7 @@ class LocalNotification: NSObject { if activity.frequencyType == Frequency.oneTime && activity.endDate == nil { runsBeforeToday = activity.activityRuns } else { - runsBeforeToday = activity.activityRuns.filter({ $0.endDate >= date }) + runsBeforeToday = activity.activityRuns.filter({ $0.endDate ?? Date() >= date }) } for run in runsBeforeToday { @@ -344,8 +344,9 @@ class LocalNotification: NSObject { ] if let message = notification.message, - let startDate = notification.startDate + var startDate = notification.startDate { + startDate.updateWithOffset() // Reschedule top 50 Local Notifications. LocalNotification.scheduleNotificationOn( date: startDate, diff --git a/iOS/MyStudies/MyStudies/Utils/Utilities.swift b/iOS/MyStudies/MyStudies/Utils/Utilities.swift index 17ee1121a3..a9340ebc15 100644 --- a/iOS/MyStudies/MyStudies/Utils/Utilities.swift +++ b/iOS/MyStudies/MyStudies/Utils/Utilities.swift @@ -316,6 +316,13 @@ class Utilities: NSObject { let finalDate = dateFormatter.date(from: dateString) return finalDate } + + class func findDateFromStringWithTimezone(dateString: String) -> Date? { + let dateFormatter = DateFormatter() + dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss Z" + let finalDate = dateFormatter.date(from: dateString) + return finalDate + } // Method to get StringFromDate for default dateFormatter // @date:a date of format "yyyy-MM-dd'T'HH:mm:ssZ" @@ -355,7 +362,7 @@ class Utilities: NSObject { // MARK: Alert handlers - class func showAlertWithTitleAndMessage(title: String, message: String, on vc: UIViewController) { + class func showAlertWithTitleAndMessage(title: String, message: String, on vc: UIViewController, cancelAction: () -> Void) { let alertVC = UIAlertController(title: title, message: message, preferredStyle: .alert) let okAction = UIAlertAction(title: "Ok", style: .default, handler: nil) @@ -363,6 +370,14 @@ class Utilities: NSObject { vc.present(alertVC, animated: true, completion: nil) } + + class func showAlertWithTitleAndMessageAction(title: String, + message: String, on vc: UIViewController, cancelAction: @escaping AlertAction) { + let alertVC = UIAlertController(title: title, message: message, preferredStyle: .alert) + let okAction = UIAlertAction(title: "Ok", style: .default, handler: { (_) in cancelAction() }) + alertVC.addAction(okAction) + vc.present(alertVC, animated: true, completion: nil) + } class func randomString(length: Int) -> String { diff --git a/iOS/MyStudies/MyStudies/Views/Cells/LineChartCell.swift b/iOS/MyStudies/MyStudies/Views/Cells/LineChartCell.swift index 4144ebea00..c643edb0ec 100644 --- a/iOS/MyStudies/MyStudies/Views/Cells/LineChartCell.swift +++ b/iOS/MyStudies/MyStudies/Views/Cells/LineChartCell.swift @@ -18,6 +18,7 @@ // OTHER DEALINGS IN THE SOFTWARE. import UIKit +import FirebaseAnalytics class GraphChartTableViewCell: UITableViewCell { @IBOutlet weak var graphView: ORKGraphChartView! @@ -242,6 +243,9 @@ class LineChartCell: GraphChartTableViewCell { // MARK: - Actions @IBAction func buttonForwardAction(_ sender: UIButton) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "LineChart Forward" + ]) let timeRange = currentChart.dataSourceTimeRange! let chartTimeRange = ChartTimeRange(rawValue: timeRange)! @@ -705,10 +709,7 @@ class LineChartCell: GraphChartTableViewCell { func handleHoursOfDayForDate(date: Date) { - let dataList: [DBStatisticsData] = currentChart.statList.filter({ - $0.startDate! >= date.startOfDay && $0.startDate! <= date.endOfDay! - }) - + let dataList: [DBStatisticsData] = Array(currentChart.statList.sorted(byKeyPath: "startDate", ascending: true)) var points: [ORKValueRange] = [] xAxisTitles = [] plotPoints = [] @@ -756,11 +757,8 @@ class LineChartCell: GraphChartTableViewCell { } func handleRunsForDate(startDate: Date, endDate: Date, runs: [[String: Any]]) { - - var dataList: [DBStatisticsData] = currentChart.statList.filter({ - $0.startDate! >= startDate && $0.startDate! <= endDate - }) - + var dataList: [DBStatisticsData] = Array(currentChart.statList.sorted(byKeyPath: "startDate", ascending: true)) + if !currentChart.scrollable, dataList.count > frequencyPageSize { // If the chart is not scrollable, only show the latest responses based on the page size. let frequencyPageSizeData = dataList.suffix(from: dataList.count - frequencyPageSize) diff --git a/iOS/MyStudies/MyStudies/Views/Cells/TableView/Activity/ActivitiesTableViewCell.swift b/iOS/MyStudies/MyStudies/Views/Cells/TableView/Activity/ActivitiesTableViewCell.swift index faf6d37d53..79bc45a4ef 100644 --- a/iOS/MyStudies/MyStudies/Views/Cells/TableView/Activity/ActivitiesTableViewCell.swift +++ b/iOS/MyStudies/MyStudies/Views/Cells/TableView/Activity/ActivitiesTableViewCell.swift @@ -18,6 +18,7 @@ // OTHER DEALINGS IN THE SOFTWARE. import UIKit +import FirebaseAnalytics let kActivityTitle = "title" @@ -631,6 +632,9 @@ class ActivitiesTableViewCell: UITableViewCell { /// Clicked on More Schedules. @IBAction func buttonMoreSchedulesClicked(_: UIButton) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Activities More Schedules" + ]) self.delegate?.activityCell(cell: self, activity: self.currentActivity) } diff --git a/iOS/MyStudies/MyStudies/Views/Cells/TableView/ConformationStep/ConfirmationOptionalTableViewCell.swift b/iOS/MyStudies/MyStudies/Views/Cells/TableView/ConformationStep/ConfirmationOptionalTableViewCell.swift index 264e3d15fc..6670c75a91 100644 --- a/iOS/MyStudies/MyStudies/Views/Cells/TableView/ConformationStep/ConfirmationOptionalTableViewCell.swift +++ b/iOS/MyStudies/MyStudies/Views/Cells/TableView/ConformationStep/ConfirmationOptionalTableViewCell.swift @@ -18,6 +18,7 @@ // OTHER DEALINGS IN THE SOFTWARE. import UIKit +import FirebaseAnalytics let kDeleteButtonTag = 11220 let kRetainButtonTag = 11221 @@ -60,6 +61,9 @@ class ConfirmationOptionalTableViewCell: UITableViewCell { /// When user press on Delete data or Retail Data button @IBAction func deleteOrRetainDataButtonAction(_ sender: UIButton) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "ConfirmationOptional Detele/Retain" + ]) var deleteData = false if sender.tag == kDeleteButtonTag { diff --git a/iOS/MyStudies/MyStudies/Views/Cells/TableView/Study/StudyDashboardStatisticsTableViewCell.swift b/iOS/MyStudies/MyStudies/Views/Cells/TableView/Study/StudyDashboardStatisticsTableViewCell.swift index 48df384780..68d509ca61 100644 --- a/iOS/MyStudies/MyStudies/Views/Cells/TableView/Study/StudyDashboardStatisticsTableViewCell.swift +++ b/iOS/MyStudies/MyStudies/Views/Cells/TableView/Study/StudyDashboardStatisticsTableViewCell.swift @@ -18,6 +18,7 @@ // OTHER DEALINGS IN THE SOFTWARE. import UIKit +import FirebaseAnalytics enum SelectedTab: String { case day = "Day" @@ -129,6 +130,10 @@ class StudyDashboardStatisticsTableViewCell: UITableViewCell { @IBAction func dayWeekMonthButtonAction(_ sender: AnyObject) { if sender.tag == 11 { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "StudyDashboard Day" + ]) + // Day clicked buttonDay?.setTitle(kDaySpaces, for: UIControl.State.normal) buttonWeek?.setTitle(kWeek, for: UIControl.State.normal) @@ -149,6 +154,10 @@ class StudyDashboardStatisticsTableViewCell: UITableViewCell { self.updateForwardBtnState() } else if sender.tag == 12 { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "StudyDashboard Week" + ]) + // Week clicked buttonWeek?.setTitle(kWeekSpaces, for: UIControl.State.normal) buttonDay?.setTitle(kDay, for: UIControl.State.normal) @@ -173,6 +182,9 @@ class StudyDashboardStatisticsTableViewCell: UITableViewCell { self.updateForwardBtnState() } else if sender.tag == 13 { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "StudyDashboard Month" + ]) // Months clicked buttonMonth?.setTitle(kMonthSpaces, for: UIControl.State.normal) @@ -196,6 +208,9 @@ class StudyDashboardStatisticsTableViewCell: UITableViewCell { } @IBAction func buttonForwardClicked(_ sender: UIButton) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "StudyDashboard Ascending" + ]) let calendar = Calendar.current @@ -234,6 +249,9 @@ class StudyDashboardStatisticsTableViewCell: UITableViewCell { } @IBAction func buttonBackwardClicked(_ sender: UIButton) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "StudyDashboard Descending" + ]) let calendar = Calendar.current diff --git a/iOS/MyStudies/MyStudies/Views/Steps/ActivityStep/ActivityQuestionStep.swift b/iOS/MyStudies/MyStudies/Views/Steps/ActivityStep/ActivityQuestionStep.swift index aa162305d5..f1d8b8b331 100644 --- a/iOS/MyStudies/MyStudies/Views/Steps/ActivityStep/ActivityQuestionStep.swift +++ b/iOS/MyStudies/MyStudies/Views/Steps/ActivityStep/ActivityQuestionStep.swift @@ -568,6 +568,8 @@ class ActivityQuestionStep: ActivityStep { // By default a step is skippable if skippable == false { questionStep?.isOptional = false + } else { + questionStep?.isOptional = true } // setting the placeholder Value if exist any if Utilities.isValidValue(someObject: placeholderText as AnyObject?) { diff --git a/iOS/MyStudies/MyStudies/Views/Steps/ActivityStep/ActivityResultModel/ActivityResult.swift b/iOS/MyStudies/MyStudies/Views/Steps/ActivityStep/ActivityResultModel/ActivityResult.swift index 6b87dfb99a..55453db3b7 100644 --- a/iOS/MyStudies/MyStudies/Views/Steps/ActivityStep/ActivityResultModel/ActivityResult.swift +++ b/iOS/MyStudies/MyStudies/Views/Steps/ActivityStep/ActivityResultModel/ActivityResult.swift @@ -22,6 +22,7 @@ import ResearchKit let kActivityResult = "result" let kActivityResults = "results" +let kActivityStepSubmittedTime = "submittedTime" /// ActivityResult stores the result of each activity, whether it is questionary or active task. class ActivityResult { @@ -123,6 +124,9 @@ class ActivityResult { activityDict?[kActivityEndTime] = Utilities.getStringFromDate(date: self.endTime!) } + let currentDate = Date() + let dateString = Utilities.getStringFromDate(date: currentDate) + activityDict?[kActivityStepSubmittedTime] = dateString if Utilities.isValidObject(someObject: result as AnyObject?) { diff --git a/iOS/MyStudies/MyStudies/Views/Steps/CustomIntructionStep/CustomInstructionStepViewController.swift b/iOS/MyStudies/MyStudies/Views/Steps/CustomIntructionStep/CustomInstructionStepViewController.swift index 4d26b54ccd..2d8060c0af 100644 --- a/iOS/MyStudies/MyStudies/Views/Steps/CustomIntructionStep/CustomInstructionStepViewController.swift +++ b/iOS/MyStudies/MyStudies/Views/Steps/CustomIntructionStep/CustomInstructionStepViewController.swift @@ -70,10 +70,22 @@ class CustomInstructionStepViewController: ORKStepViewController { let detailText = step?.detailText ?? "" let regex = "<[^>]+>" if detailText.stringByDecodingHTMLEntities.range(of: regex, options: .regularExpression) == nil { - textView.text = detailText + if let valReConversiontoHTMLfromHTML = detailText.stringByDecodingHTMLEntities.htmlToAttributedString?.attributedString2Html { + + if let attributedText = valReConversiontoHTMLfromHTML.stringByDecodingHTMLEntities.htmlToAttributedString, attributedText.length > 0 { + textView.attributedText = attributedText + } else if let attributedText = + detailText.htmlToAttributedString?.attributedString2Html?.stringByDecodingHTMLEntities.htmlToAttributedString, + attributedText.length > 0 { + textView.attributedText = attributedText + } else { + textView.text = detailText + } + } else { + textView.text = detailText + } } else { - textView.attributedText = - detailText.stringByDecodingHTMLEntities.htmlToAttributedString + textView.attributedText = detailText.stringByDecodingHTMLEntities.htmlToAttributedString } textView.delegate = self return textView @@ -111,9 +123,37 @@ class CustomInstructionStepViewController: ORKStepViewController { self.addFooterView() self.addTextLabel() } + if super.hasPreviousStep() { + if navigationItem.leftBarButtonItem == nil { + let view = UIView(frame: CGRect(x: 0, y: 0, width: 26, height: 26)) + //Back Button + let backButton = addBackButton() + backButton.clipsToBounds = true + view.addSubview(backButton) + backButton.isExclusiveTouch = true + + let barButton = UIBarButtonItem(customView: view) + navigationItem.leftBarButtonItem = barButton + } + } + } + + @IBAction func backAction(_: UIBarButtonItem) { + super.goBackward() } // MARK: - UI Utils + + func addBackButton() -> UIButton { + let backButton = UIButton(type: .custom) + backButton.setImage( + #imageLiteral(resourceName: "leftIconBlue2"), + for: UIControl.State.normal + ) + backButton.addTarget(self, action: #selector(backAction(_:)), for: .touchUpInside) + backButton.frame = CGRect(x: 0, y: 0, width: 26, height: 26) + return backButton + } /// Adds a footer view. private func addFooterView() { diff --git a/iOS/MyStudies/MyStudies/Views/UIViews+Additions/Activity/ActivityFilterView/ActivityFilterView.swift b/iOS/MyStudies/MyStudies/Views/UIViews+Additions/Activity/ActivityFilterView/ActivityFilterView.swift index 5838b1cc35..69f9c45cd5 100644 --- a/iOS/MyStudies/MyStudies/Views/UIViews+Additions/Activity/ActivityFilterView/ActivityFilterView.swift +++ b/iOS/MyStudies/MyStudies/Views/UIViews+Additions/Activity/ActivityFilterView/ActivityFilterView.swift @@ -17,6 +17,7 @@ // OTHER DEALINGS IN THE SOFTWARE. import Foundation +import FirebaseAnalytics // MARK: - ActivitySchedules Class @@ -76,6 +77,9 @@ class ActivityFilterView: UIView, UITableViewDelegate, UITableViewDataSource { // MARK: - Button Action @IBAction func buttonCancelClicked(_: UIButton) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Activity Filter Cancel" + ]) self.removeFromSuperview() } @@ -108,6 +112,9 @@ extension ActivityFilterView { func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { tableView.deselectRow(at: indexPath, animated: true) + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "ActivityFilterType Selected" + ]) self.selectedIndex = ActivityFilterType.init(rawValue: indexPath.row)! self.delegate?.setSelectedFilter(selectedIndex: self.selectedIndex) self.tableview?.reloadData() diff --git a/iOS/MyStudies/MyStudies/Views/UIViews+Additions/Activity/ActivitySchedule/ActivitySchedules.swift b/iOS/MyStudies/MyStudies/Views/UIViews+Additions/Activity/ActivitySchedule/ActivitySchedules.swift index 62c4bc73fe..29790e6615 100644 --- a/iOS/MyStudies/MyStudies/Views/UIViews+Additions/Activity/ActivitySchedule/ActivitySchedules.swift +++ b/iOS/MyStudies/MyStudies/Views/UIViews+Additions/Activity/ActivitySchedule/ActivitySchedules.swift @@ -18,6 +18,7 @@ // OTHER DEALINGS IN THE SOFTWARE. import UIKit +import FirebaseAnalytics // MARK: - ActivitySchedules Class class ActivitySchedules: UIView, UITableViewDelegate, UITableViewDataSource { @@ -82,6 +83,9 @@ class ActivitySchedules: UIView, UITableViewDelegate, UITableViewDataSource { // MARK: - Button Action @IBAction func buttonCancelClicked(_: UIButton) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "ActivitySchedules Cancel" + ]) self.removeFromSuperview() } diff --git a/iOS/MyStudies/MyStudies/Views/UIViews+Additions/ComprehensionFailureUI/ComprehensionFailure.swift b/iOS/MyStudies/MyStudies/Views/UIViews+Additions/ComprehensionFailureUI/ComprehensionFailure.swift index 506ffbd7ff..4f9b71a458 100644 --- a/iOS/MyStudies/MyStudies/Views/UIViews+Additions/ComprehensionFailureUI/ComprehensionFailure.swift +++ b/iOS/MyStudies/MyStudies/Views/UIViews+Additions/ComprehensionFailureUI/ComprehensionFailure.swift @@ -17,6 +17,7 @@ // OTHER DEALINGS IN THE SOFTWARE. import Foundation +import FirebaseAnalytics let kComprehensionFailureViewIdentifier = "ComprehensionFailure" @@ -53,16 +54,28 @@ class ComprehensionFailure: UIView { return view } - + + override func layoutSubviews() { + buttonCancel.translatesAutoresizingMaskIntoConstraints = false + buttonCancel.topAnchor.constraint(equalTo: self.topAnchor, constant: 40).isActive = true + buttonCancel.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -16).isActive = true + } + // MARK: - Button Actions @IBAction func buttonCancelAction() { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "ComprehensionFailure Cancel" + ]) + self.delegate?.didTapOnCancel() self.isHidden = true self.removeFromSuperview() - self.delegate?.didTapOnCancel() } @IBAction func buttonRetryAction() { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "ComprehensionFailure Retry" + ]) self.delegate?.didTapOnRetry() self.isHidden = true self.removeFromSuperview() diff --git a/iOS/MyStudies/MyStudies/Views/UIViews+Additions/ForceUpdate/AppUpdateBlocker.swift b/iOS/MyStudies/MyStudies/Views/UIViews+Additions/ForceUpdate/AppUpdateBlocker.swift index d642ea2c9d..e3b72fbc9a 100644 --- a/iOS/MyStudies/MyStudies/Views/UIViews+Additions/ForceUpdate/AppUpdateBlocker.swift +++ b/iOS/MyStudies/MyStudies/Views/UIViews+Additions/ForceUpdate/AppUpdateBlocker.swift @@ -17,6 +17,7 @@ // OTHER DEALINGS IN THE SOFTWARE. import UIKit +import FirebaseAnalytics class AppUpdateBlocker: UIView { @@ -96,6 +97,9 @@ class AppUpdateBlocker: UIView { // MARK: - Actions @IBAction func buttonUpgradeAction() { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "AppUpgrade" + ]) guard let appleID = Branding.appleID, !appleID.isEmpty else { // Ask user to update from AppStore. self.makeToast(LocalizableString.appStoreUpdateText.localizedString) @@ -109,6 +113,9 @@ class AppUpdateBlocker: UIView { } @IBAction func buttonYesAction() { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "AppUpgrade Yes" + ]) guard let appleID = Branding.appleID, !appleID.isEmpty else { // Ask user to update from AppStore. self.makeToast(LocalizableString.appStoreUpdateText.localizedString) @@ -122,6 +129,9 @@ class AppUpdateBlocker: UIView { } @IBAction func buttonSkipAction() { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "AppUpgrade Skip" + ]) self.isHidden = true self.removeFromSuperview() } diff --git a/iOS/MyStudies/MyStudies/Views/UIViews+Additions/JailbrokeBlocker/JailbrokeBlocker.swift b/iOS/MyStudies/MyStudies/Views/UIViews+Additions/JailbrokeBlocker/JailbrokeBlocker.swift index 51b62cc416..d01d623eeb 100644 --- a/iOS/MyStudies/MyStudies/Views/UIViews+Additions/JailbrokeBlocker/JailbrokeBlocker.swift +++ b/iOS/MyStudies/MyStudies/Views/UIViews+Additions/JailbrokeBlocker/JailbrokeBlocker.swift @@ -17,6 +17,7 @@ // OTHER DEALINGS IN THE SOFTWARE. import UIKit +import FirebaseAnalytics class JailbrokeBlocker: UIView { @@ -51,6 +52,9 @@ class JailbrokeBlocker: UIView { // MARK: - Action @IBAction func buttonUpgradeAction(_ sender: UIButton) { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "JailBroke Upgrade" + ]) guard let url = URL( diff --git a/iOS/MyStudies/MyStudies/Views/UIViews+Additions/SearchBar/SearchBarView.swift b/iOS/MyStudies/MyStudies/Views/UIViews+Additions/SearchBar/SearchBarView.swift index 8e5528a7f5..e76f55c2d2 100644 --- a/iOS/MyStudies/MyStudies/Views/UIViews+Additions/SearchBar/SearchBarView.swift +++ b/iOS/MyStudies/MyStudies/Views/UIViews+Additions/SearchBar/SearchBarView.swift @@ -16,6 +16,7 @@ // OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR // OTHER DEALINGS IN THE SOFTWARE. import Foundation +import FirebaseAnalytics protocol searchBarDelegate: class { func didTapOnCancel() @@ -53,6 +54,9 @@ class SearchBarView: UIView { } @IBAction func buttonCancelAction() { + Analytics.logEvent(analyticsButtonClickEventsName, parameters: [ + buttonClickReasonsKey: "Search Cancel" + ]) UIView.animate( withDuration: 0.2, diff --git a/iOS/MyStudies/Podfile b/iOS/MyStudies/Podfile index 00877e1584..9b30f9d7a9 100644 --- a/iOS/MyStudies/Podfile +++ b/iOS/MyStudies/Podfile @@ -16,6 +16,7 @@ def main_pods pod 'ReachabilitySwift' pod 'Alamofire' pod 'Firebase/Messaging' + pod 'Firebase/Analytics' end target 'MyStudies' do diff --git a/iOS/MyStudies/Podfile.lock b/iOS/MyStudies/Podfile.lock index 93797d5422..68759b31ae 100644 --- a/iOS/MyStudies/Podfile.lock +++ b/iOS/MyStudies/Podfile.lock @@ -1,55 +1,102 @@ PODS: - ActionSheetPicker-3.0 (2.7.1) - - Alamofire (5.4.3) - - CryptoSwift (1.4.0) - - Firebase/CoreOnly (8.4.0): - - FirebaseCore (= 8.4.0) - - Firebase/Messaging (8.4.0): + - Alamofire (5.5.0) + - CryptoSwift (1.4.3) + - Firebase/Analytics (8.12.1): + - Firebase/Core + - Firebase/Core (8.12.1): - Firebase/CoreOnly - - FirebaseMessaging (~> 8.4.0) - - FirebaseCore (8.4.0): + - FirebaseAnalytics (~> 8.12.0) + - Firebase/CoreOnly (8.12.1): + - FirebaseCore (= 8.12.1) + - Firebase/Messaging (8.12.1): + - Firebase/CoreOnly + - FirebaseMessaging (~> 8.12.0) + - FirebaseAnalytics (8.12.0): + - FirebaseAnalytics/AdIdSupport (= 8.12.0) + - FirebaseCore (~> 8.0) + - FirebaseInstallations (~> 8.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.7) + - GoogleUtilities/MethodSwizzler (~> 7.7) + - GoogleUtilities/Network (~> 7.7) + - "GoogleUtilities/NSData+zlib (~> 7.7)" + - nanopb (~> 2.30908.0) + - FirebaseAnalytics/AdIdSupport (8.12.0): + - FirebaseCore (~> 8.0) + - FirebaseInstallations (~> 8.0) + - GoogleAppMeasurement (= 8.12.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.7) + - GoogleUtilities/MethodSwizzler (~> 7.7) + - GoogleUtilities/Network (~> 7.7) + - "GoogleUtilities/NSData+zlib (~> 7.7)" + - nanopb (~> 2.30908.0) + - FirebaseCore (8.12.1): - FirebaseCoreDiagnostics (~> 8.0) - - GoogleUtilities/Environment (~> 7.4) - - GoogleUtilities/Logger (~> 7.4) - - FirebaseCoreDiagnostics (8.4.0): - - GoogleDataTransport (~> 9.0) - - GoogleUtilities/Environment (~> 7.4) - - GoogleUtilities/Logger (~> 7.4) + - GoogleUtilities/Environment (~> 7.7) + - GoogleUtilities/Logger (~> 7.7) + - FirebaseCoreDiagnostics (8.12.0): + - GoogleDataTransport (~> 9.1) + - GoogleUtilities/Environment (~> 7.7) + - GoogleUtilities/Logger (~> 7.7) - nanopb (~> 2.30908.0) - - FirebaseInstallations (8.4.0): + - FirebaseInstallations (8.12.0): - FirebaseCore (~> 8.0) - - GoogleUtilities/Environment (~> 7.4) - - GoogleUtilities/UserDefaults (~> 7.4) + - GoogleUtilities/Environment (~> 7.7) + - GoogleUtilities/UserDefaults (~> 7.7) - PromisesObjC (< 3.0, >= 1.2) - - FirebaseMessaging (8.4.0): + - FirebaseMessaging (8.12.0): - FirebaseCore (~> 8.0) - FirebaseInstallations (~> 8.0) - - GoogleUtilities/AppDelegateSwizzler (~> 7.4) - - GoogleUtilities/Environment (~> 7.4) - - GoogleUtilities/Reachability (~> 7.4) - - GoogleUtilities/UserDefaults (~> 7.4) - - GoogleDataTransport (9.1.0): + - GoogleDataTransport (~> 9.1) + - GoogleUtilities/AppDelegateSwizzler (~> 7.7) + - GoogleUtilities/Environment (~> 7.7) + - GoogleUtilities/Reachability (~> 7.7) + - GoogleUtilities/UserDefaults (~> 7.7) + - nanopb (~> 2.30908.0) + - GoogleAppMeasurement (8.12.0): + - GoogleAppMeasurement/AdIdSupport (= 8.12.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.7) + - GoogleUtilities/MethodSwizzler (~> 7.7) + - GoogleUtilities/Network (~> 7.7) + - "GoogleUtilities/NSData+zlib (~> 7.7)" + - nanopb (~> 2.30908.0) + - GoogleAppMeasurement/AdIdSupport (8.12.0): + - GoogleAppMeasurement/WithoutAdIdSupport (= 8.12.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.7) + - GoogleUtilities/MethodSwizzler (~> 7.7) + - GoogleUtilities/Network (~> 7.7) + - "GoogleUtilities/NSData+zlib (~> 7.7)" + - nanopb (~> 2.30908.0) + - GoogleAppMeasurement/WithoutAdIdSupport (8.12.0): + - GoogleUtilities/AppDelegateSwizzler (~> 7.7) + - GoogleUtilities/MethodSwizzler (~> 7.7) + - GoogleUtilities/Network (~> 7.7) + - "GoogleUtilities/NSData+zlib (~> 7.7)" + - nanopb (~> 2.30908.0) + - GoogleDataTransport (9.1.2): - GoogleUtilities/Environment (~> 7.2) - nanopb (~> 2.30908.0) - PromisesObjC (< 3.0, >= 1.2) - - GoogleUtilities/AppDelegateSwizzler (7.5.0): + - GoogleUtilities/AppDelegateSwizzler (7.7.0): - GoogleUtilities/Environment - GoogleUtilities/Logger - GoogleUtilities/Network - - GoogleUtilities/Environment (7.5.0): + - GoogleUtilities/Environment (7.7.0): - PromisesObjC (< 3.0, >= 1.2) - - GoogleUtilities/Logger (7.5.0): + - GoogleUtilities/Logger (7.7.0): - GoogleUtilities/Environment - - GoogleUtilities/Network (7.5.0): + - GoogleUtilities/MethodSwizzler (7.7.0): + - GoogleUtilities/Logger + - GoogleUtilities/Network (7.7.0): - GoogleUtilities/Logger - "GoogleUtilities/NSData+zlib" - GoogleUtilities/Reachability - - "GoogleUtilities/NSData+zlib (7.5.0)" - - GoogleUtilities/Reachability (7.5.0): + - "GoogleUtilities/NSData+zlib (7.7.0)" + - GoogleUtilities/Reachability (7.7.0): - GoogleUtilities/Logger - - GoogleUtilities/UserDefaults (7.5.0): + - GoogleUtilities/UserDefaults (7.7.0): - GoogleUtilities/Logger - - IQKeyboardManagerSwift (6.5.6) + - IQKeyboardManagerSwift (6.5.9) - Mockingjay (3.0.0-alpha.1): - Mockingjay/Core (= 3.0.0-alpha.1) - Mockingjay/XCTest (= 3.0.0-alpha.1) @@ -69,17 +116,18 @@ PODS: - Realm/Headers (5.3.5) - RealmSwift (5.3.5): - Realm (= 5.3.5) - - SDWebImage (5.11.1): - - SDWebImage/Core (= 5.11.1) - - SDWebImage/Core (5.11.1) + - SDWebImage (5.12.3): + - SDWebImage/Core (= 5.12.3) + - SDWebImage/Core (5.12.3) - SlideMenuControllerSwift (5.0.0) - Toast-Swift (5.0.1) - - URITemplate (3.0.0) + - URITemplate (3.0.1) DEPENDENCIES: - ActionSheetPicker-3.0 - Alamofire - CryptoSwift + - Firebase/Analytics - Firebase/Messaging - IQKeyboardManagerSwift - Mockingjay (= 3.0.0-alpha.1) @@ -95,10 +143,12 @@ SPEC REPOS: - Alamofire - CryptoSwift - Firebase + - FirebaseAnalytics - FirebaseCore - FirebaseCoreDiagnostics - FirebaseInstallations - FirebaseMessaging + - GoogleAppMeasurement - GoogleDataTransport - GoogleUtilities - IQKeyboardManagerSwift @@ -124,27 +174,29 @@ CHECKOUT OPTIONS: SPEC CHECKSUMS: ActionSheetPicker-3.0: 36da254b97a09ff89679ecb8b8510bd3e5bdc773 - Alamofire: e447a2774a40c996748296fa2c55112fdbbc42f9 - CryptoSwift: 7cc902df1784de3b389a387756c7d710f197730c - Firebase: 54cdc8bc9c9b3de54f43dab86e62f5a76b47034f - FirebaseCore: 31f389c37ac1ea52454a53d3081f2d7019485a4a - FirebaseCoreDiagnostics: cad03be1904b975f845e632f2720c3337da27faf - FirebaseInstallations: 1585729afc787877763208c2088ed84221161f77 - FirebaseMessaging: 78025c56654f05c7ebd6f7f87f9d4b12c5231207 - GoogleDataTransport: 85fd18ff3019bb85d3f2c551d04c481dedf71fc9 - GoogleUtilities: eea970f4a389963963bffe8d8fabe43540678b9c - IQKeyboardManagerSwift: c7df9d2deb356c04522f5c4b7b6e4ce4d8ed94fe + Alamofire: 1c4fb5369c3fe93d2857c780d8bbe09f06f97e7c + CryptoSwift: a0799ee936271bd2253a006f1e4523df21845000 + Firebase: 580d09e8edafc3073ebf09c03fd42e4d80d35fe9 + FirebaseAnalytics: bd10d7706ba8d6e01ea2816f8fe9e9b881cb0918 + FirebaseCore: 8138de860a90ca7eec5e324da5788fb0ebf1d93c + FirebaseCoreDiagnostics: 3b40dfadef5b90433a60ae01f01e90fe87aa76aa + FirebaseInstallations: 25764cf322e77f99449395870a65b2bef88e1545 + FirebaseMessaging: 23db8bf05585e929ada8af0f0968933c25252808 + GoogleAppMeasurement: ae033c3aad67e68294369373056b4d74cc8ae0d6 + GoogleDataTransport: 629c20a4d363167143f30ea78320d5a7eb8bd940 + GoogleUtilities: e0913149f6b0625b553d70dae12b49fc62914fd1 + IQKeyboardManagerSwift: 6e839c575c4aa1078d58a596e41244e77abe918f Mockingjay: 0f7c5aa49c7f1b95621cee3c79b557141f5a225c nanopb: a0ba3315591a9ae0a16a309ee504766e90db0c96 PromisesObjC: 68159ce6952d93e17b2dfe273b8c40907db5ba58 ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825 Realm: 2b52fcc86fc0ed3d75a56ac0eb1e73c4f1a60e16 RealmSwift: a6ea2ea561039fc3833c08dec81371a9a3bb5ca6 - SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d + SDWebImage: 53179a2dba77246efa8a9b85f5c5b21f8f43e38f SlideMenuControllerSwift: d740ea24105a658fe6a8c256f2bf5832fee7c047 Toast-Swift: 9b6a70f28b3bf0b96c40d46c0c4b9d6639846711 - URITemplate: 58e0d47f967006c5d59888af5356c4a8ed3b197d + URITemplate: 5f5a79f3e384884102c4e6b3325d159c20a8035a -PODFILE CHECKSUM: 873c948a2141ebc68332c6f5cb665f77c7c3e0e9 +PODFILE CHECKSUM: a01d0006ab9fc73a2ae03c9562484d7053653a13 -COCOAPODS: 1.10.1 +COCOAPODS: 1.11.2 diff --git a/iOS/MyStudies/Pods/Alamofire/README.md b/iOS/MyStudies/Pods/Alamofire/README.md index 9a5a806319..c2209006ae 100644 --- a/iOS/MyStudies/Pods/Alamofire/README.md +++ b/iOS/MyStudies/Pods/Alamofire/README.md @@ -1,12 +1,12 @@ -![Alamofire: Elegant Networking in Swift](https://raw.githubusercontent.com/Alamofire/Alamofire/master/alamofire.png) +![Alamofire: Elegant Networking in Swift](https://raw.githubusercontent.com/Alamofire/Alamofire/master/Resources/AlamofireLogo.png) -[![Build Status](https://github.com/Alamofire/Alamofire/workflows/Alamofire%20CI/badge.svg?branch=master)](https://github.com/Alamofire/Alamofire/actions) -[![CocoaPods Compatible](https://img.shields.io/cocoapods/v/Alamofire.svg)](https://img.shields.io/cocoapods/v/Alamofire.svg) -[![Carthage Compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) -[![Platform](https://img.shields.io/cocoapods/p/Alamofire.svg?style=flat)](https://alamofire.github.io/Alamofire) -[![Twitter](https://img.shields.io/badge/twitter-@AlamofireSF-blue.svg?style=flat)](https://twitter.com/AlamofireSF) -[![Gitter](https://badges.gitter.im/Alamofire/Alamofire.svg)](https://gitter.im/Alamofire/Alamofire?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) -[![Open Source Helpers](https://www.codetriage.com/alamofire/alamofire/badges/users.svg)](https://www.codetriage.com/alamofire/alamofire) +[![Swift](https://img.shields.io/badge/Swift-5.3_5.4_5.5-orange?style=flat-square)](https://img.shields.io/badge/Swift-5.3_5.4_5.5-Orange?style=flat-square) +[![Platforms](https://img.shields.io/badge/Platforms-macOS_iOS_tvOS_watchOS_Linux_Windows-yellowgreen?style=flat-square)](https://img.shields.io/badge/Platforms-macOS_iOS_tvOS_watchOS_Linux_Windows-Green?style=flat-square) +[![CocoaPods Compatible](https://img.shields.io/cocoapods/v/Alamofire.svg?style=flat-square)](https://img.shields.io/cocoapods/v/Alamofire.svg) +[![Carthage Compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat-square)](https://github.com/Carthage/Carthage) +[![Swift Package Manager](https://img.shields.io/badge/Swift_Package_Manager-compatible-orange?style=flat-square)](https://img.shields.io/badge/Swift_Package_Manager-compatible-orange?style=flat-square) +[![Twitter](https://img.shields.io/badge/twitter-@AlamofireSF-blue.svg?style=flat-square)](https://twitter.com/AlamofireSF) +[![Swift Forums](https://img.shields.io/badge/Swift_Forums-Alamofire-orange?style=flat-square)](https://forums.swift.org/c/related-projects/alamofire/37) Alamofire is an HTTP networking library written in Swift. @@ -16,16 +16,18 @@ Alamofire is an HTTP networking library written in Swift. - [Migration Guides](#migration-guides) - [Communication](#communication) - [Installation](#installation) +- [Contributing](#contributing) - [Usage](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#using-alamofire) - - [**Introduction -**](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#introduction) [Making Requests](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#making-requests), [Response Handling](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#response-handling), [Response Validation](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#response-validation), [Response Caching](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#response-caching) - - **HTTP -** [HTTP Methods](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#http-methods), [Parameters and Parameter Encoder](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md##request-parameters-and-parameter-encoders), [HTTP Headers](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#http-headers), [Authentication](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#authentication) - - **Large Data -** [Downloading Data to a File](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#downloading-data-to-a-file), [Uploading Data to a Server](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#uploading-data-to-a-server) - - **Tools -** [Statistical Metrics](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#statistical-metrics), [cURL Command Output](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#curl-command-output) + - [**Introduction -**](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#introduction) [Making Requests](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#making-requests), [Response Handling](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#response-handling), [Response Validation](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#response-validation), [Response Caching](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#response-caching) + - **HTTP -** [HTTP Methods](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#http-methods), [Parameters and Parameter Encoder](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md##request-parameters-and-parameter-encoders), [HTTP Headers](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#http-headers), [Authentication](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#authentication) + - **Large Data -** [Downloading Data to a File](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#downloading-data-to-a-file), [Uploading Data to a Server](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#uploading-data-to-a-server) + - **Tools -** [Statistical Metrics](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#statistical-metrics), [cURL Command Output](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#curl-command-output) - [Advanced Usage](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md) - - **URL Session -** [Session Manager](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#session), [Session Delegate](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#sessiondelegate), [Request](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#request) - - **Routing -** [Routing Requests](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#routing-requests), [Adapting and Retrying Requests](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#adapting-and-retrying-requests-with-requestinterceptor) - - **Model Objects -** [Custom Response Handlers](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#customizing-response-handlers) - - **Connection -** [Security](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#security), [Network Reachability](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#network-reachability) + - **URL Session -** [Session Manager](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#session), [Session Delegate](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#sessiondelegate), [Request](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#request) + - **Routing -** [Routing Requests](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#routing-requests), [Adapting and Retrying Requests](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#adapting-and-retrying-requests-with-requestinterceptor) + - **Model Objects -** [Custom Response Handlers](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#customizing-response-handlers) + - **Advanced Concurrency -** [Swift Concurrency](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#using-alamofire-with-swift-concurrency) and [Combine](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#using-alamofire-with-combine) + - **Connection -** [Security](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#security), [Network Reachability](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#network-reachability) - [Open Radars](#open-radars) - [FAQ](#faq) - [Credits](#credits) @@ -35,6 +37,7 @@ Alamofire is an HTTP networking library written in Swift. ## Features - [x] Chainable Request / Response Methods +- [x] Swift Concurrency Support Back to iOS 13, macOS 10.15, tvOS 13, and watchOS 6. - [x] Combine Support - [x] URL / JSON Parameter Encoding - [x] Upload File / Data / Stream / MultipartFormData @@ -58,9 +61,21 @@ In order to keep Alamofire focused specifically on core networking implementatio ## Requirements -- iOS 10.0+ / macOS 10.12+ / tvOS 10.0+ / watchOS 3.0+ -- Xcode 11+ -- Swift 5.1+ +| Platform | Minimum Swift Version | Installation | Status | +| --- | --- | --- | --- | +| iOS 10.0+ / macOS 10.12+ / tvOS 10.0+ / watchOS 3.0+ | 5.3 | [CocoaPods](#cocoapods), [Carthage](#carthage), [Swift Package Manager](#swift-package-manager), [Manual](#manually) | Fully Tested | +| Linux | Latest Only | [Swift Package Manager](#swift-package-manager) | Building But Unsupported | +| Windows | Latest Only | [Swift Package Manager](#swift-package-manager) | Building But Unsupported | + +#### Known Issues on Linux and Windows + +Alamofire builds on Linux and Windows but there are missing features and many issues in the underlying `swift-corelibs-foundation` that prevent full functionality and may cause crashes. These include: +- `ServerTrustManager` and associated certificate functionality is unavailable, so there is no certificate pinning and no client certificate support. +- Various methods of HTTP authentication may crash, including HTTP Basic and HTTP Digest. Crashes may occur if responses contain server challenges. +- Cache control through `CachedResponseHandler` and associated APIs is unavailable, as the underlying delegate methods aren't called. +- `URLSessionTaskMetrics` are never gathered. + +Due to these issues, Alamofire is unsupported on Linux and Windows. Please report any crashes to the [Swift bug reporter](https://bugs.swift.org). ## Migration Guides @@ -76,7 +91,6 @@ In order to keep Alamofire focused specifically on core networking implementatio - If you'd like to **discuss Alamofire best practices**, use [our forum on swift.org](https://forums.swift.org/c/related-projects/alamofire). - If you'd like to **discuss a feature request**, use [our forum on swift.org](https://forums.swift.org/c/related-projects/alamofire). - If you **found a bug**, open an issue here on GitHub and follow the guide. The more detail the better! -- If you **want to contribute**, submit a pull request! ## Installation @@ -85,7 +99,7 @@ In order to keep Alamofire focused specifically on core networking implementatio [CocoaPods](https://cocoapods.org) is a dependency manager for Cocoa projects. For usage and installation instructions, visit their website. To integrate Alamofire into your Xcode project using CocoaPods, specify it in your `Podfile`: ```ruby -pod 'Alamofire', '~> 5.2' +pod 'Alamofire', '~> 5.5' ``` ### Carthage @@ -93,7 +107,7 @@ pod 'Alamofire', '~> 5.2' [Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. To integrate Alamofire into your Xcode project using Carthage, specify it in your `Cartfile`: ```ogdl -github "Alamofire/Alamofire" ~> 5.2 +github "Alamofire/Alamofire" ~> 5.5 ``` ### Swift Package Manager @@ -104,7 +118,7 @@ Once you have your Swift package set up, adding Alamofire as a dependency is as ```swift dependencies: [ - .package(url: "https://github.com/Alamofire/Alamofire.git", .upToNextMajor(from: "5.2.0")) + .package(url: "https://github.com/Alamofire/Alamofire.git", .upToNextMajor(from: "5.5.0")) ] ``` @@ -146,6 +160,10 @@ If you prefer not to use any of the aforementioned dependency managers, you can > The `Alamofire.framework` is automagically added as a target dependency, linked framework and embedded framework in a copy files build phase which is all you need to build on the simulator and a device. +## Contributing + +Before contributing to Alamofire, please read the instructions detailed in our [contribution guide](https://github.com/Alamofire/Alamofire/blob/master/CONTRIBUTING.md). + ## Open Radars The following radars have some effect on the current implementation of Alamofire. @@ -153,7 +171,6 @@ The following radars have some effect on the current implementation of Alamofire - [`rdar://21349340`](http://www.openradar.me/radar?id=5517037090635776) - Compiler throwing warning due to toll-free bridging issue in the test case - `rdar://26870455` - Background URL Session Configurations do not work in the simulator - `rdar://26849668` - Some URLProtocol APIs do not properly handle `URLRequest` -- `FB7624529` - `urlSession(_:task:didFinishCollecting:)` never called on watchOS ## Resolved Radars @@ -163,10 +180,8 @@ The following radars have been resolved over time after being filed against the - (Resolved): 9/1/17 in Xcode 9 beta 6. - [`rdar://36082113`](http://openradar.appspot.com/radar?id=4942308441063424) - `URLSessionTaskMetrics` failing to link on watchOS 3.0+ - (Resolved): Just add `CFNetwork` to your linked frameworks. - -## Workarounds - -- Collection of `URLSessionTaskMetrics` is currently disabled on watchOS due to `FB7624529`. +- `FB7624529` - `urlSession(_:task:didFinishCollecting:)` never called on watchOS + - (Resolved): Metrics now collected on watchOS 7+. ## FAQ @@ -201,6 +216,12 @@ Any amount you can donate today to help us reach our goal would be greatly appre [![paypal](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=W34WPEE74APJQ) +## Supporters + +[MacStadium](https://macstadium.com) provides Alamofire with a free, hosted Mac mini. + +![Powered by MacStadium](https://raw.githubusercontent.com/Alamofire/Alamofire/master/Resources/MacStadiumLogo.png) + ## License Alamofire is released under the MIT license. [See LICENSE](https://github.com/Alamofire/Alamofire/blob/master/LICENSE) for details. diff --git a/iOS/MyStudies/Pods/Alamofire/Source/AFError.swift b/iOS/MyStudies/Pods/Alamofire/Source/AFError.swift index e8e4fe8327..8cd60c70cb 100644 --- a/iOS/MyStudies/Pods/Alamofire/Source/AFError.swift +++ b/iOS/MyStudies/Pods/Alamofire/Source/AFError.swift @@ -129,6 +129,7 @@ public enum AFError: Error { case invalidEmptyResponse(type: String) } + #if !(os(Linux) || os(Windows)) /// Underlying reason a server trust evaluation error occurred. public enum ServerTrustFailureReason { /// The output of a server trust evaluation. @@ -178,6 +179,7 @@ public enum AFError: Error { /// Custom server trust evaluation failed due to the associated `Error`. case customEvaluationFailed(error: Error) } + #endif /// The underlying reason the `.urlRequestValidationFailed` public enum URLRequestValidationFailureReason { @@ -209,8 +211,10 @@ public enum AFError: Error { case responseValidationFailed(reason: ResponseValidationFailureReason) /// Response serialization failed. case responseSerializationFailed(reason: ResponseSerializationFailureReason) + #if !(os(Linux) || os(Windows)) /// `ServerTrustEvaluating` instance threw an error during trust evaluation. case serverTrustEvaluationFailed(reason: ServerTrustFailureReason) + #endif /// `Session` which issued the `Request` was deinitialized, most likely because its reference went out of scope. case sessionDeinitialized /// `Session` was explicitly invalidated, possibly with the `Error` produced by the underlying `URLSession`. @@ -310,12 +314,14 @@ extension AFError { return false } + #if !(os(Linux) || os(Windows)) /// Returns whether the instance is `.serverTrustEvaluationFailed`. When `true`, the `underlyingError` property will /// contain the associated value. public var isServerTrustEvaluationError: Bool { if case .serverTrustEvaluationFailed = self { return true } return false } + #endif /// Returns whether the instance is `requestRetryFailed`. When `true`, the `underlyingError` property will /// contain the associated value. @@ -387,8 +393,10 @@ extension AFError { return reason.underlyingError case let .responseSerializationFailed(reason): return reason.underlyingError + #if !(os(Linux) || os(Windows)) case let .serverTrustEvaluationFailed(reason): return reason.underlyingError + #endif case let .sessionInvalidated(error): return error case let .createUploadableFailed(error): @@ -443,10 +451,12 @@ extension AFError { return destination } + #if !(os(Linux) || os(Windows)) /// The download resume data of any underlying network error. Only produced by `DownloadRequest`s. public var downloadResumeData: Data? { (underlyingError as? URLError)?.userInfo[NSURLSessionDownloadTaskResumeData] as? Data } + #endif } extension AFError.ParameterEncodingFailureReason { @@ -600,6 +610,7 @@ extension AFError.ResponseSerializationFailureReason { } } +#if !(os(Linux) || os(Windows)) extension AFError.ServerTrustFailureReason { var output: AFError.ServerTrustFailureReason.Output? { switch self { @@ -642,6 +653,7 @@ extension AFError.ServerTrustFailureReason { } } } +#endif // MARK: - Error Descriptions @@ -676,8 +688,10 @@ extension AFError: LocalizedError { """ case let .sessionInvalidated(error): return "Session was invalidated with error: \(error?.localizedDescription ?? "No description.")" + #if !(os(Linux) || os(Windows)) case let .serverTrustEvaluationFailed(reason): return "Server trust evaluation failed due to reason: \(reason.localizedDescription)" + #endif case let .urlRequestValidationFailed(reason): return "URLRequest validation failed due to reason: \(reason.localizedDescription)" case let .createUploadableFailed(error): @@ -808,6 +822,7 @@ extension AFError.ResponseValidationFailureReason { } } +#if !(os(Linux) || os(Windows)) extension AFError.ServerTrustFailureReason { var localizedDescription: String { switch self { @@ -840,6 +855,7 @@ extension AFError.ServerTrustFailureReason { } } } +#endif extension AFError.URLRequestValidationFailureReason { var localizedDescription: String { diff --git a/iOS/MyStudies/Pods/Alamofire/Source/Alamofire.swift b/iOS/MyStudies/Pods/Alamofire/Source/Alamofire.swift index bcf43d02e5..0d3f5dcb80 100644 --- a/iOS/MyStudies/Pods/Alamofire/Source/Alamofire.swift +++ b/iOS/MyStudies/Pods/Alamofire/Source/Alamofire.swift @@ -22,8 +22,14 @@ // THE SOFTWARE. // +import Dispatch +import Foundation +#if canImport(FoundationNetworking) +@_exported import FoundationNetworking +#endif + /// Reference to `Session.default` for quick bootstrapping and examples. public let AF = Session.default /// Current Alamofire version. Necessary since SPM doesn't use dynamic libraries. Plus this will be more accurate. -let version = "5.4.3" +let version = "5.5.0" diff --git a/iOS/MyStudies/Pods/Alamofire/Source/AuthenticationInterceptor.swift b/iOS/MyStudies/Pods/Alamofire/Source/AuthenticationInterceptor.swift index 9d7f8360d2..c3a3f31e4f 100644 --- a/iOS/MyStudies/Pods/Alamofire/Source/AuthenticationInterceptor.swift +++ b/iOS/MyStudies/Pods/Alamofire/Source/AuthenticationInterceptor.swift @@ -217,15 +217,15 @@ public class AuthenticationInterceptor: RequestInterceptor wh /// The `Credential` used to authenticate requests. public var credential: Credential? { - get { mutableState.credential } - set { mutableState.credential = newValue } + get { $mutableState.credential } + set { $mutableState.credential = newValue } } let authenticator: AuthenticatorType let queue = DispatchQueue(label: "org.alamofire.authentication.inspector") @Protected - private var mutableState = MutableState() + private var mutableState: MutableState // MARK: Initialization @@ -242,8 +242,7 @@ public class AuthenticationInterceptor: RequestInterceptor wh credential: Credential? = nil, refreshWindow: RefreshWindow? = RefreshWindow()) { self.authenticator = authenticator - mutableState.credential = credential - mutableState.refreshWindow = refreshWindow + mutableState = MutableState(credential: credential, refreshWindow: refreshWindow) } // MARK: Adapt diff --git a/iOS/MyStudies/Pods/Alamofire/Source/CachedResponseHandler.swift b/iOS/MyStudies/Pods/Alamofire/Source/CachedResponseHandler.swift index b6e0d4b2ac..e7d0060b3e 100644 --- a/iOS/MyStudies/Pods/Alamofire/Source/CachedResponseHandler.swift +++ b/iOS/MyStudies/Pods/Alamofire/Source/CachedResponseHandler.swift @@ -58,9 +58,9 @@ public struct ResponseCacher { case modify((URLSessionDataTask, CachedURLResponse) -> CachedURLResponse?) } - /// Returns a `ResponseCacher` with a follow `Behavior`. + /// Returns a `ResponseCacher` with a `.cache` `Behavior`. public static let cache = ResponseCacher(behavior: .cache) - /// Returns a `ResponseCacher` with a do not follow `Behavior`. + /// Returns a `ResponseCacher` with a `.doNotCache` `Behavior`. public static let doNotCache = ResponseCacher(behavior: .doNotCache) /// The `Behavior` of the `ResponseCacher`. @@ -89,3 +89,21 @@ extension ResponseCacher: CachedResponseHandler { } } } + +#if swift(>=5.5) +extension CachedResponseHandler where Self == ResponseCacher { + /// Provides a `ResponseCacher` which caches the response, if allowed. Equivalent to `ResponseCacher.cache`. + public static var cache: ResponseCacher { .cache } + + /// Provides a `ResponseCacher` which does not cache the response. Equivalent to `ResponseCacher.doNotCache`. + public static var doNotCache: ResponseCacher { .doNotCache } + + /// Creates a `ResponseCacher` which modifies the proposed `CachedURLResponse` using the provided closure. + /// + /// - Parameter closure: Closure used to modify the `CachedURLResponse`. + /// - Returns: The `ResponseCacher`. + public static func modify(using closure: @escaping ((URLSessionDataTask, CachedURLResponse) -> CachedURLResponse?)) -> ResponseCacher { + ResponseCacher(behavior: .modify(closure)) + } +} +#endif diff --git a/iOS/MyStudies/Pods/Alamofire/Source/Combine.swift b/iOS/MyStudies/Pods/Alamofire/Source/Combine.swift index a138249465..066ba47635 100644 --- a/iOS/MyStudies/Pods/Alamofire/Source/Combine.swift +++ b/iOS/MyStudies/Pods/Alamofire/Source/Combine.swift @@ -22,7 +22,7 @@ // THE SOFTWARE. // -#if canImport(Combine) +#if !((os(iOS) && (arch(i386) || arch(arm))) || os(Windows) || os(Linux)) import Combine import Dispatch @@ -71,14 +71,14 @@ public struct DataResponsePublisher: Publisher { /// /// - Returns: The `AnyPublisher` publishing the `Result` value. public func result() -> AnyPublisher, Never> { - map { $0.result }.eraseToAnyPublisher() + map(\.result).eraseToAnyPublisher() } /// Publishes the `Result` of the `DataResponse` as a single `Value` or fail with the `AFError` instance. /// /// - Returns: The `AnyPublisher` publishing the stream. public func value() -> AnyPublisher { - setFailureType(to: AFError.self).flatMap { $0.result.publisher }.eraseToAnyPublisher() + setFailureType(to: AFError.self).flatMap(\.result.publisher).eraseToAnyPublisher() } public func receive(subscriber: S) where S: Subscriber, DataResponsePublisher.Failure == S.Failure, DataResponsePublisher.Output == S.Input { @@ -197,14 +197,31 @@ extension DataRequest { on: queue) } + @_disfavoredOverload + @available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) + @available(*, deprecated, message: "Renamed publishDecodable(type:queue:preprocessor:decoder:emptyResponseCodes:emptyRequestMethods).") + public func publishDecodable(type: T.Type = T.self, + queue: DispatchQueue = .main, + preprocessor: DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, + decoder: DataDecoder = JSONDecoder(), + emptyResponseCodes: Set = DecodableResponseSerializer.defaultEmptyResponseCodes, + emptyResponseMethods: Set = DecodableResponseSerializer.defaultEmptyRequestMethods) -> DataResponsePublisher { + publishResponse(using: DecodableResponseSerializer(dataPreprocessor: preprocessor, + decoder: decoder, + emptyResponseCodes: emptyResponseCodes, + emptyRequestMethods: emptyResponseMethods), + on: queue) + } + /// Creates a `DataResponsePublisher` for this instance and uses a `DecodableResponseSerializer` to serialize the /// response. /// /// - Parameters: - /// - type: `Decodable` type to which to decode response `Data`. Inferred from the context by default. + /// - type: `Decodable` type to which to decode response `Data`. Inferred from the context by + /// default. /// - queue: `DispatchQueue` on which the `DataResponse` will be published. `.main` by default. - /// - preprocessor: `DataPreprocessor` which filters the `Data` before serialization. `PassthroughPreprocessor()` - /// by default. + /// - preprocessor: `DataPreprocessor` which filters the `Data` before serialization. + /// `PassthroughPreprocessor()` by default. /// - decoder: `DataDecoder` instance used to decode response `Data`. `JSONDecoder()` by default. /// - emptyResponseCodes: `Set` of HTTP status codes for which empty responses are allowed. `[204, 205]` by /// default. @@ -218,11 +235,11 @@ extension DataRequest { preprocessor: DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, decoder: DataDecoder = JSONDecoder(), emptyResponseCodes: Set = DecodableResponseSerializer.defaultEmptyResponseCodes, - emptyResponseMethods: Set = DecodableResponseSerializer.defaultEmptyRequestMethods) -> DataResponsePublisher { + emptyRequestMethods: Set = DecodableResponseSerializer.defaultEmptyRequestMethods) -> DataResponsePublisher { publishResponse(using: DecodableResponseSerializer(dataPreprocessor: preprocessor, decoder: decoder, emptyResponseCodes: emptyResponseCodes, - emptyRequestMethods: emptyResponseMethods), + emptyRequestMethods: emptyRequestMethods), on: queue) } @@ -282,7 +299,7 @@ public struct DataStreamPublisher: Publisher { /// /// - Returns: The `AnyPublisher` publishing the stream. public func value() -> AnyPublisher { - result().setFailureType(to: AFError.self).flatMap { $0.publisher }.eraseToAnyPublisher() + result().setFailureType(to: AFError.self).flatMap(\.publisher).eraseToAnyPublisher() } public func receive(subscriber: S) where S: Subscriber, DataStreamPublisher.Failure == S.Failure, DataStreamPublisher.Output == S.Input { @@ -425,14 +442,14 @@ public struct DownloadResponsePublisher: Publisher { /// /// - Returns: The `AnyPublisher` publishing the `Result` value. public func result() -> AnyPublisher, Never> { - map { $0.result }.eraseToAnyPublisher() + map(\.result).eraseToAnyPublisher() } /// Publishes the `Result` of the `DownloadResponse` as a single `Value` or fail with the `AFError` instance. /// /// - Returns: The `AnyPublisher` publishing the stream. public func value() -> AnyPublisher { - setFailureType(to: AFError.self).flatMap { $0.result.publisher }.eraseToAnyPublisher() + setFailureType(to: AFError.self).flatMap(\.result.publisher).eraseToAnyPublisher() } public func receive(subscriber: S) where S: Subscriber, DownloadResponsePublisher.Failure == S.Failure, DownloadResponsePublisher.Output == S.Input { @@ -538,7 +555,7 @@ extension DownloadRequest { on: queue) } - /// Creates a `DataResponsePublisher` for this instance and uses a `StringResponseSerializer` to serialize the + /// Creates a `DownloadResponsePublisher` for this instance and uses a `StringResponseSerializer` to serialize the /// response. /// /// - Parameters: @@ -567,19 +584,35 @@ extension DownloadRequest { on: queue) } - /// Creates a `DataResponsePublisher` for this instance and uses a `DecodableResponseSerializer` to serialize the - /// response. + @_disfavoredOverload + @available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) + @available(*, deprecated, message: "Renamed publishDecodable(type:queue:preprocessor:decoder:emptyResponseCodes:emptyRequestMethods).") + public func publishDecodable(type: T.Type = T.self, + queue: DispatchQueue = .main, + preprocessor: DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, + decoder: DataDecoder = JSONDecoder(), + emptyResponseCodes: Set = DecodableResponseSerializer.defaultEmptyResponseCodes, + emptyResponseMethods: Set = DecodableResponseSerializer.defaultEmptyRequestMethods) -> DownloadResponsePublisher { + publishResponse(using: DecodableResponseSerializer(dataPreprocessor: preprocessor, + decoder: decoder, + emptyResponseCodes: emptyResponseCodes, + emptyRequestMethods: emptyResponseMethods), + on: queue) + } + + /// Creates a `DownloadResponsePublisher` for this instance and uses a `DecodableResponseSerializer` to serialize + /// the response. /// /// - Parameters: /// - type: `Decodable` type to which to decode response `Data`. Inferred from the context by default. /// - queue: `DispatchQueue` on which the `DataResponse` will be published. `.main` by default. - /// - preprocessor: `DataPreprocessor` which filters the `Data` before serialization. `PassthroughPreprocessor()` - /// by default. + /// - preprocessor: `DataPreprocessor` which filters the `Data` before serialization. + /// `PassthroughPreprocessor()` by default. /// - decoder: `DataDecoder` instance used to decode response `Data`. `JSONDecoder()` by default. /// - emptyResponseCodes: `Set` of HTTP status codes for which empty responses are allowed. `[204, 205]` by /// default. - /// - emptyRequestMethods: `Set` of `HTTPMethod`s for which empty responses are allowed, regardless of - /// status code. `[.head]` by default. + /// - emptyRequestMethods: `Set` of `HTTPMethod`s for which empty responses are allowed, regardless + /// of status code. `[.head]` by default. /// /// - Returns: The `DownloadResponsePublisher`. @available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) @@ -588,11 +621,11 @@ extension DownloadRequest { preprocessor: DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, decoder: DataDecoder = JSONDecoder(), emptyResponseCodes: Set = DecodableResponseSerializer.defaultEmptyResponseCodes, - emptyResponseMethods: Set = DecodableResponseSerializer.defaultEmptyRequestMethods) -> DownloadResponsePublisher { + emptyRequestMethods: Set = DecodableResponseSerializer.defaultEmptyRequestMethods) -> DownloadResponsePublisher { publishResponse(using: DecodableResponseSerializer(dataPreprocessor: preprocessor, decoder: decoder, emptyResponseCodes: emptyResponseCodes, - emptyRequestMethods: emptyResponseMethods), + emptyRequestMethods: emptyRequestMethods), on: queue) } } diff --git a/iOS/MyStudies/Pods/Alamofire/Source/Concurrency.swift b/iOS/MyStudies/Pods/Alamofire/Source/Concurrency.swift new file mode 100644 index 0000000000..24843358e6 --- /dev/null +++ b/iOS/MyStudies/Pods/Alamofire/Source/Concurrency.swift @@ -0,0 +1,698 @@ +// +// Concurrency.swift +// +// Copyright (c) 2021 Alamofire Software Foundation (http://alamofire.org/) +// +// 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. +// + +#if compiler(>=5.5.2) && canImport(_Concurrency) + +import Foundation + +// MARK: - Request Event Streams + +@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) +extension Request { + /// Creates a `StreamOf` for the instance's upload progress. + /// + /// - Parameter bufferingPolicy: `BufferingPolicy` that determines the stream's buffering behavior.`.unbounded` by default. + /// + /// - Returns: The `StreamOf`. + public func uploadProgress(bufferingPolicy: StreamOf.BufferingPolicy = .unbounded) -> StreamOf { + stream(bufferingPolicy: bufferingPolicy) { [unowned self] continuation in + uploadProgress(queue: .singleEventQueue) { progress in + continuation.yield(progress) + } + } + } + + /// Creates a `StreamOf` for the instance's download progress. + /// + /// - Parameter bufferingPolicy: `BufferingPolicy` that determines the stream's buffering behavior.`.unbounded` by default. + /// + /// - Returns: The `StreamOf`. + public func downloadProgress(bufferingPolicy: StreamOf.BufferingPolicy = .unbounded) -> StreamOf { + stream(bufferingPolicy: bufferingPolicy) { [unowned self] continuation in + downloadProgress(queue: .singleEventQueue) { progress in + continuation.yield(progress) + } + } + } + + /// Creates a `StreamOf` for the `URLRequest`s produced for the instance. + /// + /// - Parameter bufferingPolicy: `BufferingPolicy` that determines the stream's buffering behavior.`.unbounded` by default. + /// + /// - Returns: The `StreamOf`. + public func urlRequests(bufferingPolicy: StreamOf.BufferingPolicy = .unbounded) -> StreamOf { + stream(bufferingPolicy: bufferingPolicy) { [unowned self] continuation in + onURLRequestCreation(on: .singleEventQueue) { request in + continuation.yield(request) + } + } + } + + /// Creates a `StreamOf` for the `URLSessionTask`s produced for the instance. + /// + /// - Parameter bufferingPolicy: `BufferingPolicy` that determines the stream's buffering behavior.`.unbounded` by default. + /// + /// - Returns: The `StreamOf`. + public func urlSessionTasks(bufferingPolicy: StreamOf.BufferingPolicy = .unbounded) -> StreamOf { + stream(bufferingPolicy: bufferingPolicy) { [unowned self] continuation in + onURLSessionTaskCreation(on: .singleEventQueue) { task in + continuation.yield(task) + } + } + } + + /// Creates a `StreamOf` for the cURL descriptions produced for the instance. + /// + /// - Parameter bufferingPolicy: `BufferingPolicy` that determines the stream's buffering behavior.`.unbounded` by default. + /// + /// - Returns: The `StreamOf`. + public func cURLDescriptions(bufferingPolicy: StreamOf.BufferingPolicy = .unbounded) -> StreamOf { + stream(bufferingPolicy: bufferingPolicy) { [unowned self] continuation in + cURLDescription(on: .singleEventQueue) { description in + continuation.yield(description) + } + } + } + + private func stream(of type: T.Type = T.self, + bufferingPolicy: StreamOf.BufferingPolicy = .unbounded, + yielder: @escaping (StreamOf.Continuation) -> Void) -> StreamOf { + StreamOf(bufferingPolicy: bufferingPolicy) { [unowned self] continuation in + yielder(continuation) + // Must come after serializers run in order to catch retry progress. + onFinish { + continuation.finish() + } + } + } +} + +// MARK: - DataTask + +/// Value used to `await` a `DataResponse` and associated values. +@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) +public struct DataTask { + /// `DataResponse` produced by the `DataRequest` and its response handler. + public var response: DataResponse { + get async { + if shouldAutomaticallyCancel { + return await withTaskCancellationHandler { + self.cancel() + } operation: { + await task.value + } + } else { + return await task.value + } + } + } + + /// `Result` of any response serialization performed for the `response`. + public var result: Result { + get async { await response.result } + } + + /// `Value` returned by the `response`. + public var value: Value { + get async throws { + try await result.get() + } + } + + private let request: DataRequest + private let task: Task, Never> + private let shouldAutomaticallyCancel: Bool + + fileprivate init(request: DataRequest, task: Task, Never>, shouldAutomaticallyCancel: Bool) { + self.request = request + self.task = task + self.shouldAutomaticallyCancel = shouldAutomaticallyCancel + } + + /// Cancel the underlying `DataRequest` and `Task`. + public func cancel() { + task.cancel() + } + + /// Resume the underlying `DataRequest`. + public func resume() { + request.resume() + } + + /// Suspend the underlying `DataRequest`. + public func suspend() { + request.suspend() + } +} + +@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) +extension DataRequest { + /// Creates a `DataTask` to `await` a `Data` value. + /// + /// - Parameters: + /// - shouldAutomaticallyCancel: `Bool` determining whether or not the request should be cancelled when the + /// enclosing async context is cancelled. Only applies to `DataTask`'s async + /// properties. `false` by default. + /// - dataPreprocessor: `DataPreprocessor` which processes the received `Data` before completion. + /// - emptyResponseCodes: HTTP response codes for which empty responses are allowed. `[204, 205]` by default. + /// - emptyRequestMethods: `HTTPMethod`s for which empty responses are always valid. `[.head]` by default. + /// + /// - Returns: The `DataTask`. + public func serializingData(automaticallyCancelling shouldAutomaticallyCancel: Bool = false, + dataPreprocessor: DataPreprocessor = DataResponseSerializer.defaultDataPreprocessor, + emptyResponseCodes: Set = DataResponseSerializer.defaultEmptyResponseCodes, + emptyRequestMethods: Set = DataResponseSerializer.defaultEmptyRequestMethods) -> DataTask { + serializingResponse(using: DataResponseSerializer(dataPreprocessor: dataPreprocessor, + emptyResponseCodes: emptyResponseCodes, + emptyRequestMethods: emptyRequestMethods), + automaticallyCancelling: shouldAutomaticallyCancel) + } + + /// Creates a `DataTask` to `await` serialization of a `Decodable` value. + /// + /// - Parameters: + /// - type: `Decodable` type to decode from response data. + /// - shouldAutomaticallyCancel: `Bool` determining whether or not the request should be cancelled when the + /// enclosing async context is cancelled. Only applies to `DataTask`'s async + /// properties. `false` by default. + /// - dataPreprocessor: `DataPreprocessor` which processes the received `Data` before calling the serializer. + /// `PassthroughPreprocessor()` by default. + /// - decoder: `DataDecoder` to use to decode the response. `JSONDecoder()` by default. + /// - emptyResponseCodes: HTTP status codes for which empty responses are always valid. `[204, 205]` by default. + /// - emptyRequestMethods: `HTTPMethod`s for which empty responses are always valid. `[.head]` by default. + /// + /// - Returns: The `DataTask`. + public func serializingDecodable(_ type: Value.Type = Value.self, + automaticallyCancelling shouldAutomaticallyCancel: Bool = false, + dataPreprocessor: DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, + decoder: DataDecoder = JSONDecoder(), + emptyResponseCodes: Set = DecodableResponseSerializer.defaultEmptyResponseCodes, + emptyRequestMethods: Set = DecodableResponseSerializer.defaultEmptyRequestMethods) -> DataTask { + serializingResponse(using: DecodableResponseSerializer(dataPreprocessor: dataPreprocessor, + decoder: decoder, + emptyResponseCodes: emptyResponseCodes, + emptyRequestMethods: emptyRequestMethods), + automaticallyCancelling: shouldAutomaticallyCancel) + } + + /// Creates a `DataTask` to `await` serialization of a `String` value. + /// + /// - Parameters: + /// - shouldAutomaticallyCancel: `Bool` determining whether or not the request should be cancelled when the + /// enclosing async context is cancelled. Only applies to `DataTask`'s async + /// properties. `false` by default. + /// - dataPreprocessor: `DataPreprocessor` which processes the received `Data` before calling the serializer. + /// `PassthroughPreprocessor()` by default. + /// - encoding: `String.Encoding` to use during serialization. Defaults to `nil`, in which case + /// the encoding will be determined from the server response, falling back to the + /// default HTTP character set, `ISO-8859-1`. + /// - emptyResponseCodes: HTTP status codes for which empty responses are always valid. `[204, 205]` by default. + /// - emptyRequestMethods: `HTTPMethod`s for which empty responses are always valid. `[.head]` by default. + /// + /// - Returns: The `DataTask`. + public func serializingString(automaticallyCancelling shouldAutomaticallyCancel: Bool = false, + dataPreprocessor: DataPreprocessor = StringResponseSerializer.defaultDataPreprocessor, + encoding: String.Encoding? = nil, + emptyResponseCodes: Set = StringResponseSerializer.defaultEmptyResponseCodes, + emptyRequestMethods: Set = StringResponseSerializer.defaultEmptyRequestMethods) -> DataTask { + serializingResponse(using: StringResponseSerializer(dataPreprocessor: dataPreprocessor, + encoding: encoding, + emptyResponseCodes: emptyResponseCodes, + emptyRequestMethods: emptyRequestMethods), + automaticallyCancelling: shouldAutomaticallyCancel) + } + + /// Creates a `DataTask` to `await` serialization using the provided `ResponseSerializer` instance. + /// + /// - Parameters: + /// - serializer: `ResponseSerializer` responsible for serializing the request, response, and data. + /// - shouldAutomaticallyCancel: `Bool` determining whether or not the request should be cancelled when the + /// enclosing async context is cancelled. Only applies to `DataTask`'s async + /// properties. `false` by default. + /// + /// - Returns: The `DataTask`. + public func serializingResponse(using serializer: Serializer, + automaticallyCancelling shouldAutomaticallyCancel: Bool = false) + -> DataTask { + dataTask(automaticallyCancelling: shouldAutomaticallyCancel) { + self.response(queue: .singleEventQueue, + responseSerializer: serializer, + completionHandler: $0) + } + } + + /// Creates a `DataTask` to `await` serialization using the provided `DataResponseSerializerProtocol` instance. + /// + /// - Parameters: + /// - serializer: `DataResponseSerializerProtocol` responsible for serializing the request, + /// response, and data. + /// - shouldAutomaticallyCancel: `Bool` determining whether or not the request should be cancelled when the + /// enclosing async context is cancelled. Only applies to `DataTask`'s async + /// properties. `false` by default. + /// + /// - Returns: The `DataTask`. + public func serializingResponse(using serializer: Serializer, + automaticallyCancelling shouldAutomaticallyCancel: Bool = false) + -> DataTask { + dataTask(automaticallyCancelling: shouldAutomaticallyCancel) { + self.response(queue: .singleEventQueue, + responseSerializer: serializer, + completionHandler: $0) + } + } + + private func dataTask(automaticallyCancelling shouldAutomaticallyCancel: Bool, + forResponse onResponse: @escaping (@escaping (DataResponse) -> Void) -> Void) + -> DataTask { + let task = Task { + await withTaskCancellationHandler { + self.cancel() + } operation: { + await withCheckedContinuation { continuation in + onResponse { + continuation.resume(returning: $0) + } + } + } + } + + return DataTask(request: self, task: task, shouldAutomaticallyCancel: shouldAutomaticallyCancel) + } +} + +// MARK: - DownloadTask + +/// Value used to `await` a `DownloadResponse` and associated values. +@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) +public struct DownloadTask { + /// `DownloadResponse` produced by the `DownloadRequest` and its response handler. + public var response: DownloadResponse { + get async { + if shouldAutomaticallyCancel { + return await withTaskCancellationHandler { + self.cancel() + } operation: { + await task.value + } + } else { + return await task.value + } + } + } + + /// `Result` of any response serialization performed for the `response`. + public var result: Result { + get async { await response.result } + } + + /// `Value` returned by the `response`. + public var value: Value { + get async throws { + try await result.get() + } + } + + private let task: Task, Never> + private let request: DownloadRequest + private let shouldAutomaticallyCancel: Bool + + fileprivate init(request: DownloadRequest, task: Task, Never>, shouldAutomaticallyCancel: Bool) { + self.request = request + self.task = task + self.shouldAutomaticallyCancel = shouldAutomaticallyCancel + } + + /// Cancel the underlying `DownloadRequest` and `Task`. + public func cancel() { + task.cancel() + } + + /// Resume the underlying `DownloadRequest`. + public func resume() { + request.resume() + } + + /// Suspend the underlying `DownloadRequest`. + public func suspend() { + request.suspend() + } +} + +@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) +extension DownloadRequest { + /// Creates a `DownloadTask` to `await` a `Data` value. + /// + /// - Parameters: + /// - shouldAutomaticallyCancel: `Bool` determining whether or not the request should be cancelled when the + /// enclosing async context is cancelled. Only applies to `DownloadTask`'s async + /// properties. `false` by default. + /// - dataPreprocessor: `DataPreprocessor` which processes the received `Data` before completion. + /// - emptyResponseCodes: HTTP response codes for which empty responses are allowed. `[204, 205]` by default. + /// - emptyRequestMethods: `HTTPMethod`s for which empty responses are always valid. `[.head]` by default. + /// + /// - Returns: The `DownloadTask`. + public func serializingData(automaticallyCancelling shouldAutomaticallyCancel: Bool = false, + dataPreprocessor: DataPreprocessor = DataResponseSerializer.defaultDataPreprocessor, + emptyResponseCodes: Set = DataResponseSerializer.defaultEmptyResponseCodes, + emptyRequestMethods: Set = DataResponseSerializer.defaultEmptyRequestMethods) -> DownloadTask { + serializingDownload(using: DataResponseSerializer(dataPreprocessor: dataPreprocessor, + emptyResponseCodes: emptyResponseCodes, + emptyRequestMethods: emptyRequestMethods), + automaticallyCancelling: shouldAutomaticallyCancel) + } + + /// Creates a `DownloadTask` to `await` serialization of a `Decodable` value. + /// + /// - Note: This serializer reads the entire response into memory before parsing. + /// + /// - Parameters: + /// - type: `Decodable` type to decode from response data. + /// - shouldAutomaticallyCancel: `Bool` determining whether or not the request should be cancelled when the + /// enclosing async context is cancelled. Only applies to `DownloadTask`'s async + /// properties. `false` by default. + /// - dataPreprocessor: `DataPreprocessor` which processes the received `Data` before calling the serializer. + /// `PassthroughPreprocessor()` by default. + /// - decoder: `DataDecoder` to use to decode the response. `JSONDecoder()` by default. + /// - emptyResponseCodes: HTTP status codes for which empty responses are always valid. `[204, 205]` by default. + /// - emptyRequestMethods: `HTTPMethod`s for which empty responses are always valid. `[.head]` by default. + /// + /// - Returns: The `DownloadTask`. + public func serializingDecodable(_ type: Value.Type = Value.self, + automaticallyCancelling shouldAutomaticallyCancel: Bool = false, + dataPreprocessor: DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, + decoder: DataDecoder = JSONDecoder(), + emptyResponseCodes: Set = DecodableResponseSerializer.defaultEmptyResponseCodes, + emptyRequestMethods: Set = DecodableResponseSerializer.defaultEmptyRequestMethods) -> DownloadTask { + serializingDownload(using: DecodableResponseSerializer(dataPreprocessor: dataPreprocessor, + decoder: decoder, + emptyResponseCodes: emptyResponseCodes, + emptyRequestMethods: emptyRequestMethods), + automaticallyCancelling: shouldAutomaticallyCancel) + } + + /// Creates a `DownloadTask` to `await` serialization of the downloaded file's `URL` on disk. + /// + /// - Returns: The `DownloadTask`. + public func serializingDownloadedFileURL() -> DownloadTask { + serializingDownload(using: URLResponseSerializer()) + } + + /// Creates a `DownloadTask` to `await` serialization of a `String` value. + /// + /// - Parameters: + /// - shouldAutomaticallyCancel: `Bool` determining whether or not the request should be cancelled when the + /// enclosing async context is cancelled. Only applies to `DownloadTask`'s async + /// properties. `false` by default. + /// - dataPreprocessor: `DataPreprocessor` which processes the received `Data` before calling the + /// serializer. `PassthroughPreprocessor()` by default. + /// - encoding: `String.Encoding` to use during serialization. Defaults to `nil`, in which case + /// the encoding will be determined from the server response, falling back to the + /// default HTTP character set, `ISO-8859-1`. + /// - emptyResponseCodes: HTTP status codes for which empty responses are always valid. `[204, 205]` by default. + /// - emptyRequestMethods: `HTTPMethod`s for which empty responses are always valid. `[.head]` by default. + /// + /// - Returns: The `DownloadTask`. + public func serializingString(automaticallyCancelling shouldAutomaticallyCancel: Bool = false, + dataPreprocessor: DataPreprocessor = StringResponseSerializer.defaultDataPreprocessor, + encoding: String.Encoding? = nil, + emptyResponseCodes: Set = StringResponseSerializer.defaultEmptyResponseCodes, + emptyRequestMethods: Set = StringResponseSerializer.defaultEmptyRequestMethods) -> DownloadTask { + serializingDownload(using: StringResponseSerializer(dataPreprocessor: dataPreprocessor, + encoding: encoding, + emptyResponseCodes: emptyResponseCodes, + emptyRequestMethods: emptyRequestMethods), + automaticallyCancelling: shouldAutomaticallyCancel) + } + + /// Creates a `DownloadTask` to `await` serialization using the provided `ResponseSerializer` instance. + /// + /// - Parameters: + /// - serializer: `ResponseSerializer` responsible for serializing the request, response, and data. + /// - shouldAutomaticallyCancel: `Bool` determining whether or not the request should be cancelled when the + /// enclosing async context is cancelled. Only applies to `DownloadTask`'s async + /// properties. `false` by default. + /// + /// - Returns: The `DownloadTask`. + public func serializingDownload(using serializer: Serializer, + automaticallyCancelling shouldAutomaticallyCancel: Bool = false) + -> DownloadTask { + downloadTask(automaticallyCancelling: shouldAutomaticallyCancel) { + self.response(queue: .singleEventQueue, + responseSerializer: serializer, + completionHandler: $0) + } + } + + /// Creates a `DownloadTask` to `await` serialization using the provided `DownloadResponseSerializerProtocol` + /// instance. + /// + /// - Parameters: + /// - serializer: `DownloadResponseSerializerProtocol` responsible for serializing the request, + /// response, and data. + /// - shouldAutomaticallyCancel: `Bool` determining whether or not the request should be cancelled when the + /// enclosing async context is cancelled. Only applies to `DownloadTask`'s async + /// properties. `false` by default. + /// + /// - Returns: The `DownloadTask`. + public func serializingDownload(using serializer: Serializer, + automaticallyCancelling shouldAutomaticallyCancel: Bool = false) + -> DownloadTask { + downloadTask(automaticallyCancelling: shouldAutomaticallyCancel) { + self.response(queue: .singleEventQueue, + responseSerializer: serializer, + completionHandler: $0) + } + } + + private func downloadTask(automaticallyCancelling shouldAutomaticallyCancel: Bool, + forResponse onResponse: @escaping (@escaping (DownloadResponse) -> Void) -> Void) + -> DownloadTask { + let task = Task { + await withTaskCancellationHandler { + self.cancel() + } operation: { + await withCheckedContinuation { continuation in + onResponse { + continuation.resume(returning: $0) + } + } + } + } + + return DownloadTask(request: self, task: task, shouldAutomaticallyCancel: shouldAutomaticallyCancel) + } +} + +// MARK: - DataStreamTask + +@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) +public struct DataStreamTask { + // Type of created streams. + public typealias Stream = StreamOf> + + private let request: DataStreamRequest + + fileprivate init(request: DataStreamRequest) { + self.request = request + } + + /// Creates a `Stream` of `Data` values from the underlying `DataStreamRequest`. + /// + /// - Parameters: + /// - shouldAutomaticallyCancel: `Bool` indicating whether the underlying `DataStreamRequest` should be canceled + /// which observation of the stream stops. `true` by default. + /// - bufferingPolicy: ` BufferingPolicy` that determines the stream's buffering behavior.`.unbounded` by default. + /// + /// - Returns: The `Stream`. + public func streamingData(automaticallyCancelling shouldAutomaticallyCancel: Bool = true, bufferingPolicy: Stream.BufferingPolicy = .unbounded) -> Stream { + createStream(automaticallyCancelling: shouldAutomaticallyCancel, bufferingPolicy: bufferingPolicy) { onStream in + self.request.responseStream(on: .streamCompletionQueue(forRequestID: request.id), stream: onStream) + } + } + + /// Creates a `Stream` of `UTF-8` `String`s from the underlying `DataStreamRequest`. + /// + /// - Parameters: + /// - shouldAutomaticallyCancel: `Bool` indicating whether the underlying `DataStreamRequest` should be canceled + /// which observation of the stream stops. `true` by default. + /// - bufferingPolicy: ` BufferingPolicy` that determines the stream's buffering behavior.`.unbounded` by default. + /// - Returns: + public func streamingStrings(automaticallyCancelling shouldAutomaticallyCancel: Bool = true, bufferingPolicy: Stream.BufferingPolicy = .unbounded) -> Stream { + createStream(automaticallyCancelling: shouldAutomaticallyCancel, bufferingPolicy: bufferingPolicy) { onStream in + self.request.responseStreamString(on: .streamCompletionQueue(forRequestID: request.id), stream: onStream) + } + } + + /// Creates a `Stream` of `Decodable` values from the underlying `DataStreamRequest`. + /// + /// - Parameters: + /// - type: `Decodable` type to be serialized from stream payloads. + /// - shouldAutomaticallyCancel: `Bool` indicating whether the underlying `DataStreamRequest` should be canceled + /// which observation of the stream stops. `true` by default. + /// - bufferingPolicy: `BufferingPolicy` that determines the stream's buffering behavior.`.unbounded` by default. + /// + /// - Returns: The `Stream`. + public func streamingDecodables(_ type: T.Type = T.self, + automaticallyCancelling shouldAutomaticallyCancel: Bool = true, + bufferingPolicy: Stream.BufferingPolicy = .unbounded) + -> Stream where T: Decodable { + streamingResponses(serializedUsing: DecodableStreamSerializer(), + automaticallyCancelling: shouldAutomaticallyCancel, + bufferingPolicy: bufferingPolicy) + } + + /// Creates a `Stream` of values using the provided `DataStreamSerializer` from the underlying `DataStreamRequest`. + /// + /// - Parameters: + /// - serializer: `DataStreamSerializer` to use to serialize incoming `Data`. + /// - shouldAutomaticallyCancel: `Bool` indicating whether the underlying `DataStreamRequest` should be canceled + /// which observation of the stream stops. `true` by default. + /// - bufferingPolicy: `BufferingPolicy` that determines the stream's buffering behavior.`.unbounded` by default. + /// + /// - Returns: The `Stream`. + public func streamingResponses(serializedUsing serializer: Serializer, + automaticallyCancelling shouldAutomaticallyCancel: Bool = true, + bufferingPolicy: Stream.BufferingPolicy = .unbounded) + -> Stream { + createStream(automaticallyCancelling: shouldAutomaticallyCancel, bufferingPolicy: bufferingPolicy) { onStream in + self.request.responseStream(using: serializer, + on: .streamCompletionQueue(forRequestID: request.id), + stream: onStream) + } + } + + private func createStream(automaticallyCancelling shouldAutomaticallyCancel: Bool = true, + bufferingPolicy: Stream.BufferingPolicy = .unbounded, + forResponse onResponse: @escaping (@escaping (DataStreamRequest.Stream) -> Void) -> Void) + -> Stream { + StreamOf(bufferingPolicy: bufferingPolicy) { + guard shouldAutomaticallyCancel, + request.isInitialized || request.isResumed || request.isSuspended else { return } + + cancel() + } builder: { continuation in + onResponse { stream in + continuation.yield(stream) + if case .complete = stream.event { + continuation.finish() + } + } + } + } + + /// Cancel the underlying `DataStreamRequest`. + public func cancel() { + request.cancel() + } + + /// Resume the underlying `DataStreamRequest`. + public func resume() { + request.resume() + } + + /// Suspend the underlying `DataStreamRequest`. + public func suspend() { + request.suspend() + } +} + +@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) +extension DataStreamRequest { + /// Creates a `DataStreamTask` used to `await` streams of serialized values. + /// + /// - Returns: The `DataStreamTask`. + public func streamTask() -> DataStreamTask { + DataStreamTask(request: self) + } +} + +extension DispatchQueue { + fileprivate static let singleEventQueue = DispatchQueue(label: "org.alamofire.concurrencySingleEventQueue", + attributes: .concurrent) + + fileprivate static func streamCompletionQueue(forRequestID id: UUID) -> DispatchQueue { + DispatchQueue(label: "org.alamofire.concurrencyStreamCompletionQueue-\(id)", target: .singleEventQueue) + } +} + +/// An asynchronous sequence generated from an underlying `AsyncStream`. Only produced by Alamofire. +@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) +public struct StreamOf: AsyncSequence { + public typealias AsyncIterator = Iterator + public typealias BufferingPolicy = AsyncStream.Continuation.BufferingPolicy + fileprivate typealias Continuation = AsyncStream.Continuation + + private let bufferingPolicy: BufferingPolicy + private let onTermination: (() -> Void)? + private let builder: (Continuation) -> Void + + fileprivate init(bufferingPolicy: BufferingPolicy = .unbounded, + onTermination: (() -> Void)? = nil, + builder: @escaping (Continuation) -> Void) { + self.bufferingPolicy = bufferingPolicy + self.onTermination = onTermination + self.builder = builder + } + + public func makeAsyncIterator() -> Iterator { + var continuation: AsyncStream.Continuation? + let stream = AsyncStream { innerContinuation in + continuation = innerContinuation + builder(innerContinuation) + } + + return Iterator(iterator: stream.makeAsyncIterator()) { + continuation?.finish() + self.onTermination?() + } + } + + public struct Iterator: AsyncIteratorProtocol { + private final class Token { + private let onDeinit: () -> Void + + init(onDeinit: @escaping () -> Void) { + self.onDeinit = onDeinit + } + + deinit { + onDeinit() + } + } + + private var iterator: AsyncStream.AsyncIterator + private let token: Token + + init(iterator: AsyncStream.AsyncIterator, onCancellation: @escaping () -> Void) { + self.iterator = iterator + token = Token(onDeinit: onCancellation) + } + + public mutating func next() async -> Element? { + await iterator.next() + } + } +} + +#endif diff --git a/iOS/MyStudies/Pods/Alamofire/Source/HTTPHeaders.swift b/iOS/MyStudies/Pods/Alamofire/Source/HTTPHeaders.swift index 7829fc69b9..cdbdbc6b5e 100644 --- a/iOS/MyStudies/Pods/Alamofire/Source/HTTPHeaders.swift +++ b/iOS/MyStudies/Pods/Alamofire/Source/HTTPHeaders.swift @@ -183,7 +183,7 @@ extension HTTPHeaders: Collection { extension HTTPHeaders: CustomStringConvertible { public var description: String { - headers.map { $0.description } + headers.map(\.description) .joined(separator: "\n") } } @@ -360,9 +360,7 @@ extension HTTPHeader { /// `preferredLanguages`. /// /// See the [Accept-Language HTTP header documentation](https://tools.ietf.org/html/rfc7231#section-5.3.5). - public static let defaultAcceptLanguage: HTTPHeader = { - .acceptLanguage(Locale.preferredLanguages.prefix(6).qualityEncoded()) - }() + public static let defaultAcceptLanguage: HTTPHeader = .acceptLanguage(Locale.preferredLanguages.prefix(6).qualityEncoded()) /// Returns Alamofire's default `User-Agent` header. /// @@ -371,12 +369,12 @@ extension HTTPHeader { /// Example: `iOS Example/1.0 (org.alamofire.iOS-Example; build:1; iOS 13.0.0) Alamofire/5.0.0` public static let defaultUserAgent: HTTPHeader = { let info = Bundle.main.infoDictionary - let executable = (info?[kCFBundleExecutableKey as String] as? String) ?? + let executable = (info?["CFBundleExecutable"] as? String) ?? (ProcessInfo.processInfo.arguments.first?.split(separator: "/").last.map(String.init)) ?? "Unknown" - let bundle = info?[kCFBundleIdentifierKey as String] as? String ?? "Unknown" + let bundle = info?["CFBundleIdentifier"] as? String ?? "Unknown" let appVersion = info?["CFBundleShortVersionString"] as? String ?? "Unknown" - let appBuild = info?[kCFBundleVersionKey as String] as? String ?? "Unknown" + let appBuild = info?["CFBundleVersion"] as? String ?? "Unknown" let osNameVersion: String = { let version = ProcessInfo.processInfo.operatingSystemVersion diff --git a/iOS/MyStudies/Pods/Alamofire/Source/MultipartFormData.swift b/iOS/MyStudies/Pods/Alamofire/Source/MultipartFormData.swift index d9cecef5e5..8f72860b1e 100644 --- a/iOS/MyStudies/Pods/Alamofire/Source/MultipartFormData.swift +++ b/iOS/MyStudies/Pods/Alamofire/Source/MultipartFormData.swift @@ -213,6 +213,7 @@ open class MultipartFormData { // Check 2 - is file URL reachable? //============================================================ + #if !(os(Linux) || os(Windows)) do { let isReachable = try fileURL.checkPromisedItemIsReachable() guard isReachable else { @@ -223,6 +224,7 @@ open class MultipartFormData { setBodyPartError(withReason: .bodyPartFileNotReachableWithError(atURL: fileURL, error: error)) return } + #endif //============================================================ // Check 3 - is file URL a directory? @@ -509,11 +511,13 @@ open class MultipartFormData { // MARK: - Private - Mime Type private func mimeType(forPathExtension pathExtension: String) -> String { + #if !(os(Linux) || os(Windows)) if let id = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension as CFString, nil)?.takeRetainedValue(), let contentType = UTTypeCopyPreferredTagWithClass(id, kUTTagClassMIMEType)?.takeRetainedValue() { return contentType as String } + #endif return "application/octet-stream" } diff --git a/iOS/MyStudies/Pods/Alamofire/Source/MultipartUpload.swift b/iOS/MyStudies/Pods/Alamofire/Source/MultipartUpload.swift index 606bd33ee2..ceda21f286 100644 --- a/iOS/MyStudies/Pods/Alamofire/Source/MultipartUpload.swift +++ b/iOS/MyStudies/Pods/Alamofire/Source/MultipartUpload.swift @@ -45,8 +45,8 @@ final class MultipartUpload { func build() throws -> UploadRequest.Uploadable { let uploadable: UploadRequest.Uploadable - if multipartFormData.contentLength < encodingMemoryThreshold { - let data = try multipartFormData.encode() + if $multipartFormData.contentLength < encodingMemoryThreshold { + let data = try $multipartFormData.read { try $0.encode() } uploadable = .data(data) } else { @@ -58,7 +58,7 @@ final class MultipartUpload { try fileManager.createDirectory(at: directoryURL, withIntermediateDirectories: true, attributes: nil) do { - try multipartFormData.writeEncodedData(to: fileURL) + try $multipartFormData.read { try $0.writeEncodedData(to: fileURL) } } catch { // Cleanup after attempted write if it fails. try? fileManager.removeItem(at: fileURL) diff --git a/iOS/MyStudies/Pods/Alamofire/Source/NetworkReachabilityManager.swift b/iOS/MyStudies/Pods/Alamofire/Source/NetworkReachabilityManager.swift index b97b62fa40..deeb3a42ec 100644 --- a/iOS/MyStudies/Pods/Alamofire/Source/NetworkReachabilityManager.swift +++ b/iOS/MyStudies/Pods/Alamofire/Source/NetworkReachabilityManager.swift @@ -22,7 +22,7 @@ // THE SOFTWARE. // -#if !(os(watchOS) || os(Linux)) +#if !(os(watchOS) || os(Linux) || os(Windows)) import Foundation import SystemConfiguration diff --git a/iOS/MyStudies/Pods/Alamofire/Source/ParameterEncoder.swift b/iOS/MyStudies/Pods/Alamofire/Source/ParameterEncoder.swift index f4facbee39..2263660da9 100644 --- a/iOS/MyStudies/Pods/Alamofire/Source/ParameterEncoder.swift +++ b/iOS/MyStudies/Pods/Alamofire/Source/ParameterEncoder.swift @@ -92,6 +92,21 @@ open class JSONParameterEncoder: ParameterEncoder { } } +#if swift(>=5.5) +extension ParameterEncoder where Self == JSONParameterEncoder { + /// Provides a default `JSONParameterEncoder` instance. + public static var json: JSONParameterEncoder { JSONParameterEncoder() } + + /// Creates a `JSONParameterEncoder` using the provided `JSONEncoder`. + /// + /// - Parameter encoder: `JSONEncoder` used to encode parameters. `JSONEncoder()` by default. + /// - Returns: The `JSONParameterEncoder`. + public static func json(encoder: JSONEncoder = JSONEncoder()) -> JSONParameterEncoder { + JSONParameterEncoder(encoder: encoder) + } +} +#endif + /// A `ParameterEncoder` that encodes types as URL-encoded query strings to be set on the URL or as body data, depending /// on the `Destination` set. /// @@ -182,3 +197,21 @@ open class URLEncodedFormParameterEncoder: ParameterEncoder { return request } } + +#if swift(>=5.5) +extension ParameterEncoder where Self == URLEncodedFormParameterEncoder { + /// Provides a default `URLEncodedFormParameterEncoder` instance. + public static var urlEncodedForm: URLEncodedFormParameterEncoder { URLEncodedFormParameterEncoder() } + + /// Creates a `URLEncodedFormParameterEncoder` with the provided encoder and destination. + /// + /// - Parameters: + /// - encoder: `URLEncodedFormEncoder` used to encode the parameters. `URLEncodedFormEncoder()` by default. + /// - destination: `Destination` to which to encode the parameters. `.methodDependent` by default. + /// - Returns: The `URLEncodedFormParameterEncoder`. + public static func urlEncodedForm(encoder: URLEncodedFormEncoder = URLEncodedFormEncoder(), + destination: URLEncodedFormParameterEncoder.Destination = .methodDependent) -> URLEncodedFormParameterEncoder { + URLEncodedFormParameterEncoder(encoder: encoder, destination: destination) + } +} +#endif diff --git a/iOS/MyStudies/Pods/Alamofire/Source/ParameterEncoding.swift b/iOS/MyStudies/Pods/Alamofire/Source/ParameterEncoding.swift index 6e72604c7a..e7fa452161 100644 --- a/iOS/MyStudies/Pods/Alamofire/Source/ParameterEncoding.swift +++ b/iOS/MyStudies/Pods/Alamofire/Source/ParameterEncoding.swift @@ -85,13 +85,17 @@ public struct URLEncoding: ParameterEncoding { case brackets /// No brackets are appended. The key is encoded as is. case noBrackets + /// Brackets containing the item index are appended. This matches the jQuery and Node.js behavior. + case indexInBrackets - func encode(key: String) -> String { + func encode(key: String, atIndex index: Int) -> String { switch self { case .brackets: return "\(key)[]" case .noBrackets: return key + case .indexInBrackets: + return "\(key)[\(index)]" } } } @@ -193,8 +197,8 @@ public struct URLEncoding: ParameterEncoding { components += queryComponents(fromKey: "\(key)[\(nestedKey)]", value: value) } case let array as [Any]: - for value in array { - components += queryComponents(fromKey: arrayEncoding.encode(key: key), value: value) + for (index, value) in array.enumerated() { + components += queryComponents(fromKey: arrayEncoding.encode(key: key, atIndex: index), value: value) } case let number as NSNumber: if number.isBool { diff --git a/iOS/MyStudies/Pods/Alamofire/Source/Protected.swift b/iOS/MyStudies/Pods/Alamofire/Source/Protected.swift index 6288205e64..2c056fa58a 100644 --- a/iOS/MyStudies/Pods/Alamofire/Source/Protected.swift +++ b/iOS/MyStudies/Pods/Alamofire/Source/Protected.swift @@ -35,51 +35,24 @@ extension Lock { /// - Parameter closure: The closure to run. /// /// - Returns: The value the closure generated. - func around(_ closure: () -> T) -> T { + func around(_ closure: () throws -> T) rethrows -> T { lock(); defer { unlock() } - return closure() + return try closure() } /// Execute a closure while acquiring the lock. /// /// - Parameter closure: The closure to run. - func around(_ closure: () -> Void) { + func around(_ closure: () throws -> Void) rethrows { lock(); defer { unlock() } - closure() + try closure() } } -#if os(Linux) -/// A `pthread_mutex_t` wrapper. -final class MutexLock: Lock { - private var mutex: UnsafeMutablePointer +#if os(Linux) || os(Windows) - init() { - mutex = .allocate(capacity: 1) - - var attr = pthread_mutexattr_t() - pthread_mutexattr_init(&attr) - pthread_mutexattr_settype(&attr, .init(PTHREAD_MUTEX_ERRORCHECK)) - - let error = pthread_mutex_init(mutex, &attr) - precondition(error == 0, "Failed to create pthread_mutex") - } +extension NSLock: Lock {} - deinit { - let error = pthread_mutex_destroy(mutex) - precondition(error == 0, "Failed to destroy pthread_mutex") - } - - fileprivate func lock() { - let error = pthread_mutex_lock(mutex) - precondition(error == 0, "Failed to lock pthread_mutex") - } - - fileprivate func unlock() { - let error = pthread_mutex_unlock(mutex) - precondition(error == 0, "Failed to unlock pthread_mutex") - } -} #endif #if os(macOS) || os(iOS) || os(watchOS) || os(tvOS) @@ -113,8 +86,8 @@ final class UnfairLock: Lock { final class Protected { #if os(macOS) || os(iOS) || os(watchOS) || os(tvOS) private let lock = UnfairLock() - #elseif os(Linux) - private let lock = MutexLock() + #elseif os(Linux) || os(Windows) + private let lock = NSLock() #endif private var value: T @@ -139,8 +112,8 @@ final class Protected { /// - Parameter closure: The closure to execute. /// /// - Returns: The return value of the closure passed. - func read(_ closure: (T) -> U) -> U { - lock.around { closure(self.value) } + func read(_ closure: (T) throws -> U) rethrows -> U { + try lock.around { try closure(self.value) } } /// Synchronously modify the protected value. @@ -149,53 +122,17 @@ final class Protected { /// /// - Returns: The modified value. @discardableResult - func write(_ closure: (inout T) -> U) -> U { - lock.around { closure(&self.value) } + func write(_ closure: (inout T) throws -> U) rethrows -> U { + try lock.around { try closure(&self.value) } } subscript(dynamicMember keyPath: WritableKeyPath) -> Property { get { lock.around { value[keyPath: keyPath] } } set { lock.around { value[keyPath: keyPath] = newValue } } } -} -extension Protected where T: RangeReplaceableCollection { - /// Adds a new element to the end of this protected collection. - /// - /// - Parameter newElement: The `Element` to append. - func append(_ newElement: T.Element) { - write { (ward: inout T) in - ward.append(newElement) - } - } - - /// Adds the elements of a sequence to the end of this protected collection. - /// - /// - Parameter newElements: The `Sequence` to append. - func append(contentsOf newElements: S) where S.Element == T.Element { - write { (ward: inout T) in - ward.append(contentsOf: newElements) - } - } - - /// Add the elements of a collection to the end of the protected collection. - /// - /// - Parameter newElements: The `Collection` to append. - func append(contentsOf newElements: C) where C.Element == T.Element { - write { (ward: inout T) in - ward.append(contentsOf: newElements) - } - } -} - -extension Protected where T == Data? { - /// Adds the contents of a `Data` value to the end of the protected `Data`. - /// - /// - Parameter data: The `Data` to be appended. - func append(_ data: Data) { - write { (ward: inout T) in - ward?.append(data) - } + subscript(dynamicMember keyPath: KeyPath) -> Property { + lock.around { value[keyPath: keyPath] } } } diff --git a/iOS/MyStudies/Pods/Alamofire/Source/RedirectHandler.swift b/iOS/MyStudies/Pods/Alamofire/Source/RedirectHandler.swift index b6c069cad9..5c232b8afb 100644 --- a/iOS/MyStudies/Pods/Alamofire/Source/RedirectHandler.swift +++ b/iOS/MyStudies/Pods/Alamofire/Source/RedirectHandler.swift @@ -93,3 +93,21 @@ extension Redirector: RedirectHandler { } } } + +#if swift(>=5.5) +extension RedirectHandler where Self == Redirector { + /// Provides a `Redirector` which follows redirects. Equivalent to `Redirector.follow`. + public static var follow: Redirector { .follow } + + /// Provides a `Redirector` which does not follow redirects. Equivalent to `Redirector.doNotFollow`. + public static var doNotFollow: Redirector { .doNotFollow } + + /// Creates a `Redirector` which modifies the redirected `URLRequest` using the provided closure. + /// + /// - Parameter closure: Closure used to modify the redirect. + /// - Returns: The `Redirector`. + public static func modify(using closure: @escaping (URLSessionTask, URLRequest, HTTPURLResponse) -> URLRequest?) -> Redirector { + Redirector(behavior: .modify(closure)) + } +} +#endif diff --git a/iOS/MyStudies/Pods/Alamofire/Source/Request.swift b/iOS/MyStudies/Pods/Alamofire/Source/Request.swift index 849f878471..fdbdf11d01 100644 --- a/iOS/MyStudies/Pods/Alamofire/Source/Request.swift +++ b/iOS/MyStudies/Pods/Alamofire/Source/Request.swift @@ -120,6 +120,8 @@ public class Request { /// Whether the instance has had `finish()` called and is running the serializers. Should be replaced with a /// representation in the state machine in the future. var isFinishing = false + /// Actions to run when requests are finished. Use for concurrency support. + var finishHandlers: [() -> Void] = [] } /// Protected `MutableState` value that provides thread-safe access to state values. @@ -127,7 +129,7 @@ public class Request { fileprivate var mutableState = MutableState() /// `State` of the `Request`. - public var state: State { mutableState.state } + public var state: State { $mutableState.state } /// Returns whether `state` is `.initialized`. public var isInitialized: Bool { state == .initialized } /// Returns whether `state is `.resumed`. @@ -150,38 +152,38 @@ public class Request { public let downloadProgress = Progress(totalUnitCount: 0) /// `ProgressHandler` called when `uploadProgress` is updated, on the provided `DispatchQueue`. private var uploadProgressHandler: (handler: ProgressHandler, queue: DispatchQueue)? { - get { mutableState.uploadProgressHandler } - set { mutableState.uploadProgressHandler = newValue } + get { $mutableState.uploadProgressHandler } + set { $mutableState.uploadProgressHandler = newValue } } /// `ProgressHandler` called when `downloadProgress` is updated, on the provided `DispatchQueue`. fileprivate var downloadProgressHandler: (handler: ProgressHandler, queue: DispatchQueue)? { - get { mutableState.downloadProgressHandler } - set { mutableState.downloadProgressHandler = newValue } + get { $mutableState.downloadProgressHandler } + set { $mutableState.downloadProgressHandler = newValue } } // MARK: Redirect Handling /// `RedirectHandler` set on the instance. public private(set) var redirectHandler: RedirectHandler? { - get { mutableState.redirectHandler } - set { mutableState.redirectHandler = newValue } + get { $mutableState.redirectHandler } + set { $mutableState.redirectHandler = newValue } } // MARK: Cached Response Handling /// `CachedResponseHandler` set on the instance. public private(set) var cachedResponseHandler: CachedResponseHandler? { - get { mutableState.cachedResponseHandler } - set { mutableState.cachedResponseHandler = newValue } + get { $mutableState.cachedResponseHandler } + set { $mutableState.cachedResponseHandler = newValue } } // MARK: URLCredential /// `URLCredential` used for authentication challenges. Created by calling one of the `authenticate` methods. public private(set) var credential: URLCredential? { - get { mutableState.credential } - set { mutableState.credential = newValue } + get { $mutableState.credential } + set { $mutableState.credential = newValue } } // MARK: Validators @@ -193,7 +195,7 @@ public class Request { // MARK: URLRequests /// All `URLRequests` created on behalf of the `Request`, including original and adapted requests. - public var requests: [URLRequest] { mutableState.requests } + public var requests: [URLRequest] { $mutableState.requests } /// First `URLRequest` created on behalf of the `Request`. May not be the first one actually executed. public var firstRequest: URLRequest? { requests.first } /// Last `URLRequest` created on behalf of the `Request`. @@ -203,7 +205,7 @@ public class Request { /// `URLRequest`s from all of the `URLSessionTask`s executed on behalf of the `Request`. May be different from /// `requests` due to `URLSession` manipulation. - public var performedRequests: [URLRequest] { $mutableState.read { $0.tasks.compactMap { $0.currentRequest } } } + public var performedRequests: [URLRequest] { $mutableState.read { $0.tasks.compactMap(\.currentRequest) } } // MARK: HTTPURLResponse @@ -214,7 +216,7 @@ public class Request { // MARK: Tasks /// All `URLSessionTask`s created on behalf of the `Request`. - public var tasks: [URLSessionTask] { mutableState.tasks } + public var tasks: [URLSessionTask] { $mutableState.tasks } /// First `URLSessionTask` created on behalf of the `Request`. public var firstTask: URLSessionTask? { tasks.first } /// Last `URLSessionTask` crated on behalf of the `Request`. @@ -225,7 +227,7 @@ public class Request { // MARK: Metrics /// All `URLSessionTaskMetrics` gathered on behalf of the `Request`. Should correspond to the `tasks` created. - public var allMetrics: [URLSessionTaskMetrics] { mutableState.metrics } + public var allMetrics: [URLSessionTaskMetrics] { $mutableState.metrics } /// First `URLSessionTaskMetrics` gathered on behalf of the `Request`. public var firstMetrics: URLSessionTaskMetrics? { allMetrics.first } /// Last `URLSessionTaskMetrics` gathered on behalf of the `Request`. @@ -236,14 +238,14 @@ public class Request { // MARK: Retry Count /// Number of times the `Request` has been retried. - public var retryCount: Int { mutableState.retryCount } + public var retryCount: Int { $mutableState.retryCount } // MARK: Error /// `Error` returned from Alamofire internally, from the network request directly, or any validators executed. public fileprivate(set) var error: AFError? { - get { mutableState.error } - set { mutableState.error = newValue } + get { $mutableState.error } + set { $mutableState.error = newValue } } /// Default initializer for the `Request` superclass. @@ -511,9 +513,9 @@ public class Request { func finish(error: AFError? = nil) { dispatchPrecondition(condition: .onQueue(underlyingQueue)) - guard !mutableState.isFinishing else { return } + guard !$mutableState.isFinishing else { return } - mutableState.isFinishing = true + $mutableState.isFinishing = true if let error = error { self.error = error } @@ -752,7 +754,7 @@ public class Request { /// - Returns: The instance. @discardableResult public func authenticate(with credential: URLCredential) -> Self { - mutableState.credential = credential + $mutableState.credential = credential return self } @@ -768,7 +770,7 @@ public class Request { /// - Returns: The instance. @discardableResult public func downloadProgress(queue: DispatchQueue = .main, closure: @escaping ProgressHandler) -> Self { - mutableState.downloadProgressHandler = (handler: closure, queue: queue) + $mutableState.downloadProgressHandler = (handler: closure, queue: queue) return self } @@ -784,7 +786,7 @@ public class Request { /// - Returns: The instance. @discardableResult public func uploadProgress(queue: DispatchQueue = .main, closure: @escaping ProgressHandler) -> Self { - mutableState.uploadProgressHandler = (handler: closure, queue: queue) + $mutableState.uploadProgressHandler = (handler: closure, queue: queue) return self } @@ -920,10 +922,25 @@ public class Request { // MARK: Cleanup + /// Adds a `finishHandler` closure to be called when the request completes. + /// + /// - Parameter closure: Closure to be called when the request finishes. + func onFinish(perform finishHandler: @escaping () -> Void) { + guard !isFinished else { finishHandler(); return } + + $mutableState.write { state in + state.finishHandlers.append(finishHandler) + } + } + /// Final cleanup step executed when the instance finishes response serialization. func cleanup() { delegate?.cleanup(after: self) - // No-op: override in subclass + let handlers = $mutableState.finishHandlers + handlers.forEach { $0() } + $mutableState.write { state in + state.finishHandlers.removeAll() + } } } @@ -1298,12 +1315,14 @@ public final class DataStreamRequest: Request { func didReceive(data: Data) { $streamMutableState.write { state in + #if !(os(Linux) || os(Windows)) if let stream = state.outputStream { underlyingQueue.async { var bytes = Array(data) stream.write(&bytes, maxLength: bytes.count) } } + #endif state.numberOfExecutingStreams += state.streams.count let localState = state underlyingQueue.async { localState.streams.forEach { $0(data) } } @@ -1337,6 +1356,7 @@ public final class DataStreamRequest: Request { return self } + #if !(os(Linux) || os(Windows)) /// Produces an `InputStream` that receives the `Data` received by the instance. /// /// - Note: The `InputStream` produced by this method must have `open()` called before being able to read `Data`. @@ -1359,6 +1379,7 @@ public final class DataStreamRequest: Request { return inputStream } + #endif func capturingError(from closure: () throws -> Void) { do { @@ -1532,9 +1553,16 @@ public class DownloadRequest: Request { /// using the `download(resumingWith data:)` API. /// /// - Note: For more information about `resumeData`, see [Apple's documentation](https://developer.apple.com/documentation/foundation/urlsessiondownloadtask/1411634-cancel). - public var resumeData: Data? { mutableDownloadState.resumeData ?? error?.downloadResumeData } + public var resumeData: Data? { + #if !(os(Linux) || os(Windows)) + return $mutableDownloadState.resumeData ?? error?.downloadResumeData + #else + return $mutableDownloadState.resumeData + #endif + } + /// If the download is successful, the `URL` where the file was downloaded. - public var fileURL: URL? { mutableDownloadState.fileURL } + public var fileURL: URL? { $mutableDownloadState.fileURL } // MARK: Initial State @@ -1592,7 +1620,7 @@ public class DownloadRequest: Request { eventMonitor?.request(self, didFinishDownloadingUsing: task, with: result) switch result { - case let .success(url): mutableDownloadState.fileURL = url + case let .success(url): $mutableDownloadState.fileURL = url case let .failure(error): self.error = error } } @@ -1686,7 +1714,7 @@ public class DownloadRequest: Request { // Resume to ensure metrics are gathered. task.resume() task.cancel { resumeData in - self.mutableDownloadState.resumeData = resumeData + self.$mutableDownloadState.resumeData = resumeData self.underlyingQueue.async { self.didCancelTask(task) } completionHandler(resumeData) } @@ -1771,6 +1799,8 @@ public class UploadRequest: DataRequest { /// `underlyingQueue`, but can be passed another queue from a `Session`. /// - eventMonitor: `EventMonitor` called for event callbacks from internal `Request` actions. /// - interceptor: `RequestInterceptor` used throughout the request lifecycle. + /// - fileManager: `FileManager` used to perform cleanup tasks, including the removal of multipart form + /// encoded payloads written to disk. /// - delegate: `RequestDelegate` that provides an interface to actions not performed by the `Request`. init(id: UUID = UUID(), convertible: UploadConvertible, @@ -1854,7 +1884,7 @@ public class UploadRequest: DataRequest { defer { super.cleanup() } guard - let uploadable = self.uploadable, + let uploadable = uploadable, case let .file(url, shouldRemove) = uploadable, shouldRemove else { return } diff --git a/iOS/MyStudies/Pods/Alamofire/Source/RequestInterceptor.swift b/iOS/MyStudies/Pods/Alamofire/Source/RequestInterceptor.swift index 1912e9c163..7ed39a5cb2 100644 --- a/iOS/MyStudies/Pods/Alamofire/Source/RequestInterceptor.swift +++ b/iOS/MyStudies/Pods/Alamofire/Source/RequestInterceptor.swift @@ -24,6 +24,17 @@ import Foundation +/// Stores all state associated with a `URLRequest` being adapted. +public struct RequestAdapterState { + /// The `UUID` of the `Request` associated with the `URLRequest` to adapt. + public let requestID: UUID + + /// The `Session` associated with the `URLRequest` to adapt. + public let session: Session +} + +// MARK: - + /// A type that can inspect and optionally adapt a `URLRequest` in some manner if necessary. public protocol RequestAdapter { /// Inspects and adapts the specified `URLRequest` in some manner and calls the completion handler with the Result. @@ -33,6 +44,20 @@ public protocol RequestAdapter { /// - session: The `Session` that will execute the `URLRequest`. /// - completion: The completion handler that must be called when adaptation is complete. func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) + + /// Inspects and adapts the specified `URLRequest` in some manner and calls the completion handler with the Result. + /// + /// - Parameters: + /// - urlRequest: The `URLRequest` to adapt. + /// - state: The `RequestAdapterState` associated with the `URLRequest`. + /// - completion: The completion handler that must be called when adaptation is complete. + func adapt(_ urlRequest: URLRequest, using state: RequestAdapterState, completion: @escaping (Result) -> Void) +} + +extension RequestAdapter { + public func adapt(_ urlRequest: URLRequest, using state: RequestAdapterState, completion: @escaping (Result) -> Void) { + adapt(urlRequest, for: state.session, completion: completion) + } } // MARK: - @@ -126,8 +151,24 @@ open class Adapter: RequestInterceptor { open func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) { adaptHandler(urlRequest, session, completion) } + + open func adapt(_ urlRequest: URLRequest, using state: RequestAdapterState, completion: @escaping (Result) -> Void) { + adaptHandler(urlRequest, state.session, completion) + } } +#if swift(>=5.5) +extension RequestAdapter where Self == Adapter { + /// Creates an `Adapter` using the provided `AdaptHandler` closure. + /// + /// - Parameter closure: `AdaptHandler` to use to adapt the request. + /// - Returns: The `Adapter`. + public static func adapter(using closure: @escaping AdaptHandler) -> Adapter { + Adapter(closure) + } +} +#endif + // MARK: - /// Closure-based `RequestRetrier`. @@ -149,6 +190,18 @@ open class Retrier: RequestInterceptor { } } +#if swift(>=5.5) +extension RequestRetrier where Self == Retrier { + /// Creates a `Retrier` using the provided `RetryHandler` closure. + /// + /// - Parameter closure: `RetryHandler` to use to retry the request. + /// - Returns: The `Retrier`. + public static func retrier(using closure: @escaping RetryHandler) -> Retrier { + Retrier(closure) + } +} +#endif + // MARK: - /// `RequestInterceptor` which can use multiple `RequestAdapter` and `RequestRetrier` values. @@ -213,6 +266,30 @@ open class Interceptor: RequestInterceptor { } } + open func adapt(_ urlRequest: URLRequest, using state: RequestAdapterState, completion: @escaping (Result) -> Void) { + adapt(urlRequest, using: state, adapters: adapters, completion: completion) + } + + private func adapt(_ urlRequest: URLRequest, + using state: RequestAdapterState, + adapters: [RequestAdapter], + completion: @escaping (Result) -> Void) { + var pendingAdapters = adapters + + guard !pendingAdapters.isEmpty else { completion(.success(urlRequest)); return } + + let adapter = pendingAdapters.removeFirst() + + adapter.adapt(urlRequest, using: state) { result in + switch result { + case let .success(urlRequest): + self.adapt(urlRequest, using: state, adapters: pendingAdapters, completion: completion) + case .failure: + completion(result) + } + } + } + open func retry(_ request: Request, for session: Session, dueTo error: Error, @@ -242,3 +319,39 @@ open class Interceptor: RequestInterceptor { } } } + +#if swift(>=5.5) +extension RequestInterceptor where Self == Interceptor { + /// Creates an `Interceptor` using the provided `AdaptHandler` and `RetryHandler` closures. + /// + /// - Parameters: + /// - adapter: `AdapterHandler`to use to adapt the request. + /// - retrier: `RetryHandler` to use to retry the request. + /// - Returns: The `Interceptor`. + public static func interceptor(adapter: @escaping AdaptHandler, retrier: @escaping RetryHandler) -> Interceptor { + Interceptor(adaptHandler: adapter, retryHandler: retrier) + } + + /// Creates an `Interceptor` using the provided `RequestAdapter` and `RequestRetrier` instances. + /// - Parameters: + /// - adapter: `RequestAdapter` to use to adapt the request + /// - retrier: `RequestRetrier` to use to retry the request. + /// - Returns: The `Interceptor`. + public static func interceptor(adapter: RequestAdapter, retrier: RequestRetrier) -> Interceptor { + Interceptor(adapter: adapter, retrier: retrier) + } + + /// Creates an `Interceptor` using the provided `RequestAdapter`s, `RequestRetrier`s, and `RequestInterceptor`s. + /// - Parameters: + /// - adapters: `RequestAdapter`s to use to adapt the request. These adapters will be run until one fails. + /// - retriers: `RequestRetrier`s to use to retry the request. These retriers will be run one at a time until + /// a retry is triggered. + /// - interceptors: `RequestInterceptor`s to use to intercept the request. + /// - Returns: The `Interceptor`. + public static func interceptor(adapters: [RequestAdapter] = [], + retriers: [RequestRetrier] = [], + interceptors: [RequestInterceptor] = []) -> Interceptor { + Interceptor(adapters: adapters, retriers: retriers, interceptors: interceptors) + } +} +#endif diff --git a/iOS/MyStudies/Pods/Alamofire/Source/Response.swift b/iOS/MyStudies/Pods/Alamofire/Source/Response.swift index 92e9c44eb9..d9ae9d8580 100644 --- a/iOS/MyStudies/Pods/Alamofire/Source/Response.swift +++ b/iOS/MyStudies/Pods/Alamofire/Source/Response.swift @@ -248,8 +248,7 @@ public struct DownloadResponse { /// - Parameters: /// - request: The `URLRequest` sent to the server. /// - response: The `HTTPURLResponse` from the server. - /// - temporaryURL: The temporary destination `URL` of the data returned from the server. - /// - destinationURL: The final destination `URL` of the data returned from the server, if it was moved. + /// - fileURL: The final destination URL of the data returned from the server after it is moved. /// - resumeData: The resume `Data` generated if the request was cancelled. /// - metrics: The `URLSessionTaskMetrics` of the `DownloadRequest`. /// - serializationDuration: The duration taken by serialization. diff --git a/iOS/MyStudies/Pods/Alamofire/Source/ResponseSerialization.swift b/iOS/MyStudies/Pods/Alamofire/Source/ResponseSerialization.swift index 1b77016d57..30973642d2 100644 --- a/iOS/MyStudies/Pods/Alamofire/Source/ResponseSerialization.swift +++ b/iOS/MyStudies/Pods/Alamofire/Source/ResponseSerialization.swift @@ -95,6 +95,18 @@ public struct GoogleXSSIPreprocessor: DataPreprocessor { } } +#if swift(>=5.5) +extension DataPreprocessor where Self == PassthroughPreprocessor { + /// Provides a `PassthroughPreprocessor` instance. + public static var passthrough: PassthroughPreprocessor { PassthroughPreprocessor() } +} + +extension DataPreprocessor where Self == GoogleXSSIPreprocessor { + /// Provides a `GoogleXSSIPreprocessor` instance. + public static var googleXSSI: GoogleXSSIPreprocessor { GoogleXSSIPreprocessor() } +} +#endif + extension ResponseSerializer { /// Default `DataPreprocessor`. `PassthroughPreprocessor` by default. public static var defaultDataPreprocessor: DataPreprocessor { PassthroughPreprocessor() } @@ -113,7 +125,7 @@ extension ResponseSerializer { /// /// - Returns: `Bool` representing the outcome of the evaluation, or `nil` if `request` was `nil`. public func requestAllowsEmptyResponseData(_ request: URLRequest?) -> Bool? { - request.flatMap { $0.httpMethod } + request.flatMap(\.httpMethod) .flatMap(HTTPMethod.init) .map { emptyRequestMethods.contains($0) } } @@ -124,7 +136,7 @@ extension ResponseSerializer { /// /// - Returns: `Bool` representing the outcome of the evaluation, or `nil` if `response` was `nil`. public func responseAllowsEmptyResponseData(_ response: HTTPURLResponse?) -> Bool? { - response.flatMap { $0.statusCode } + response.map(\.statusCode) .map { emptyResponseCodes.contains($0) } } @@ -199,18 +211,9 @@ extension DataRequest { return self } - /// Adds a handler to be called once the request has finished. - /// - /// - Parameters: - /// - queue: The queue on which the completion handler is dispatched. `.main` by default - /// - responseSerializer: The response serializer responsible for serializing the request, response, and data. - /// - completionHandler: The code to be executed once the request has finished. - /// - /// - Returns: The request. - @discardableResult - public func response(queue: DispatchQueue = .main, - responseSerializer: Serializer, - completionHandler: @escaping (AFDataResponse) -> Void) + private func _response(queue: DispatchQueue = .main, + responseSerializer: Serializer, + completionHandler: @escaping (AFDataResponse) -> Void) -> Self { appendResponseSerializer { // Start work that should be on the serialization queue. @@ -276,6 +279,38 @@ extension DataRequest { return self } + + /// Adds a handler to be called once the request has finished. + /// + /// - Parameters: + /// - queue: The queue on which the completion handler is dispatched. `.main` by default + /// - responseSerializer: The response serializer responsible for serializing the request, response, and data. + /// - completionHandler: The code to be executed once the request has finished. + /// + /// - Returns: The request. + @discardableResult + public func response(queue: DispatchQueue = .main, + responseSerializer: Serializer, + completionHandler: @escaping (AFDataResponse) -> Void) + -> Self { + _response(queue: queue, responseSerializer: responseSerializer, completionHandler: completionHandler) + } + + /// Adds a handler to be called once the request has finished. + /// + /// - Parameters: + /// - queue: The queue on which the completion handler is dispatched. `.main` by default + /// - responseSerializer: The response serializer responsible for serializing the request, response, and data. + /// - completionHandler: The code to be executed once the request has finished. + /// + /// - Returns: The request. + @discardableResult + public func response(queue: DispatchQueue = .main, + responseSerializer: Serializer, + completionHandler: @escaping (AFDataResponse) -> Void) + -> Self { + _response(queue: queue, responseSerializer: responseSerializer, completionHandler: completionHandler) + } } extension DownloadRequest { @@ -313,19 +348,9 @@ extension DownloadRequest { return self } - /// Adds a handler to be called once the request has finished. - /// - /// - Parameters: - /// - queue: The queue on which the completion handler is dispatched. `.main` by default. - /// - responseSerializer: The response serializer responsible for serializing the request, response, and data - /// contained in the destination `URL`. - /// - completionHandler: The code to be executed once the request has finished. - /// - /// - Returns: The request. - @discardableResult - public func response(queue: DispatchQueue = .main, - responseSerializer: Serializer, - completionHandler: @escaping (AFDownloadResponse) -> Void) + private func _response(queue: DispatchQueue = .main, + responseSerializer: Serializer, + completionHandler: @escaping (AFDownloadResponse) -> Void) -> Self { appendResponseSerializer { // Start work that should be on the serialization queue. @@ -392,6 +417,40 @@ extension DownloadRequest { return self } + + /// Adds a handler to be called once the request has finished. + /// + /// - Parameters: + /// - queue: The queue on which the completion handler is dispatched. `.main` by default. + /// - responseSerializer: The response serializer responsible for serializing the request, response, and data + /// contained in the destination `URL`. + /// - completionHandler: The code to be executed once the request has finished. + /// + /// - Returns: The request. + @discardableResult + public func response(queue: DispatchQueue = .main, + responseSerializer: Serializer, + completionHandler: @escaping (AFDownloadResponse) -> Void) + -> Self { + _response(queue: queue, responseSerializer: responseSerializer, completionHandler: completionHandler) + } + + /// Adds a handler to be called once the request has finished. + /// + /// - Parameters: + /// - queue: The queue on which the completion handler is dispatched. `.main` by default. + /// - responseSerializer: The response serializer responsible for serializing the request, response, and data + /// contained in the destination `URL`. + /// - completionHandler: The code to be executed once the request has finished. + /// + /// - Returns: The request. + @discardableResult + public func response(queue: DispatchQueue = .main, + responseSerializer: Serializer, + completionHandler: @escaping (AFDownloadResponse) -> Void) + -> Self { + _response(queue: queue, responseSerializer: responseSerializer, completionHandler: completionHandler) + } } // MARK: - URL @@ -416,6 +475,13 @@ public struct URLResponseSerializer: DownloadResponseSerializerProtocol { } } +#if swift(>=5.5) +extension DownloadResponseSerializerProtocol where Self == URLResponseSerializer { + /// Provides a `URLResponseSerializer` instance. + public static var url: URLResponseSerializer { URLResponseSerializer() } +} +#endif + extension DownloadRequest { /// Adds a handler using a `URLResponseSerializer` to be called once the request is finished. /// @@ -441,7 +507,7 @@ public final class DataResponseSerializer: ResponseSerializer { public let emptyResponseCodes: Set public let emptyRequestMethods: Set - /// Creates an instance using the provided values. + /// Creates a `DataResponseSerializer` using the provided parameters. /// /// - Parameters: /// - dataPreprocessor: `DataPreprocessor` used to prepare the received `Data` for serialization. @@ -472,6 +538,29 @@ public final class DataResponseSerializer: ResponseSerializer { } } +#if swift(>=5.5) +extension ResponseSerializer where Self == DataResponseSerializer { + /// Provides a default `DataResponseSerializer` instance. + public static var data: DataResponseSerializer { DataResponseSerializer() } + + /// Creates a `DataResponseSerializer` using the provided parameters. + /// + /// - Parameters: + /// - dataPreprocessor: `DataPreprocessor` used to prepare the received `Data` for serialization. + /// - emptyResponseCodes: The HTTP response codes for which empty responses are allowed. `[204, 205]` by default. + /// - emptyRequestMethods: The HTTP request methods for which empty responses are allowed. `[.head]` by default. + /// + /// - Returns: The `DataResponseSerializer`. + public static func data(dataPreprocessor: DataPreprocessor = DataResponseSerializer.defaultDataPreprocessor, + emptyResponseCodes: Set = DataResponseSerializer.defaultEmptyResponseCodes, + emptyRequestMethods: Set = DataResponseSerializer.defaultEmptyRequestMethods) -> DataResponseSerializer { + DataResponseSerializer(dataPreprocessor: dataPreprocessor, + emptyResponseCodes: emptyResponseCodes, + emptyRequestMethods: emptyRequestMethods) + } +} +#endif + extension DataRequest { /// Adds a handler using a `DataResponseSerializer` to be called once the request has finished. /// @@ -583,6 +672,33 @@ public final class StringResponseSerializer: ResponseSerializer { } } +#if swift(>=5.5) +extension ResponseSerializer where Self == StringResponseSerializer { + /// Provides a default `StringResponseSerializer` instance. + public static var string: StringResponseSerializer { StringResponseSerializer() } + + /// Creates a `StringResponseSerializer` with the provided values. + /// + /// - Parameters: + /// - dataPreprocessor: `DataPreprocessor` used to prepare the received `Data` for serialization. + /// - encoding: A string encoding. Defaults to `nil`, in which case the encoding will be determined + /// from the server response, falling back to the default HTTP character set, `ISO-8859-1`. + /// - emptyResponseCodes: The HTTP response codes for which empty responses are allowed. `[204, 205]` by default. + /// - emptyRequestMethods: The HTTP request methods for which empty responses are allowed. `[.head]` by default. + /// + /// - Returns: The `StringResponseSerializer`. + public static func string(dataPreprocessor: DataPreprocessor = StringResponseSerializer.defaultDataPreprocessor, + encoding: String.Encoding? = nil, + emptyResponseCodes: Set = StringResponseSerializer.defaultEmptyResponseCodes, + emptyRequestMethods: Set = StringResponseSerializer.defaultEmptyRequestMethods) -> StringResponseSerializer { + StringResponseSerializer(dataPreprocessor: dataPreprocessor, + encoding: encoding, + emptyResponseCodes: emptyResponseCodes, + emptyRequestMethods: emptyRequestMethods) + } +} +#endif + extension DataRequest { /// Adds a handler using a `StringResponseSerializer` to be called once the request has finished. /// @@ -648,6 +764,7 @@ extension DownloadRequest { /// A `ResponseSerializer` that decodes the response data using `JSONSerialization`. By default, a request returning /// `nil` or no data is considered an error. However, if the request has an `HTTPMethod` or the response has an /// HTTP status code valid for empty responses, then an `NSNull` value is returned. +@available(*, deprecated, message: "JSONResponseSerializer deprecated and will be removed in Alamofire 6. Use DecodableResponseSerializer instead.") public final class JSONResponseSerializer: ResponseSerializer { public let dataPreprocessor: DataPreprocessor public let emptyResponseCodes: Set @@ -709,6 +826,7 @@ extension DataRequest { /// - completionHandler: A closure to be executed once the request has finished. /// /// - Returns: The request. + @available(*, deprecated, message: "responseJSON deprecated and will be removed in Alamofire 6. Use responseDecodable instead.") @discardableResult public func responseJSON(queue: DispatchQueue = .main, dataPreprocessor: DataPreprocessor = JSONResponseSerializer.defaultDataPreprocessor, @@ -741,6 +859,7 @@ extension DownloadRequest { /// - completionHandler: A closure to be executed once the request has finished. /// /// - Returns: The request. + @available(*, deprecated, message: "responseJSON deprecated and will be removed in Alamofire 6. Use responseDecodable instead.") @discardableResult public func responseJSON(queue: DispatchQueue = .main, dataPreprocessor: DataPreprocessor = JSONResponseSerializer.defaultDataPreprocessor, @@ -856,6 +975,31 @@ public final class DecodableResponseSerializer: ResponseSerializer } } +#if swift(>=5.5) +extension ResponseSerializer { + /// Creates a `DecodableResponseSerializer` using the values provided. + /// + /// - Parameters: + /// - type: `Decodable` type to decode from response data. + /// - dataPreprocessor: `DataPreprocessor` used to prepare the received `Data` for serialization. + /// - decoder: The `DataDecoder`. `JSONDecoder()` by default. + /// - emptyResponseCodes: The HTTP response codes for which empty responses are allowed. `[204, 205]` by default. + /// - emptyRequestMethods: The HTTP request methods for which empty responses are allowed. `[.head]` by default. + /// + /// - Returns: The `DecodableResponseSerializer`. + public static func decodable(of type: T.Type, + dataPreprocessor: DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, + decoder: DataDecoder = JSONDecoder(), + emptyResponseCodes: Set = DecodableResponseSerializer.defaultEmptyResponseCodes, + emptyRequestMethods: Set = DecodableResponseSerializer.defaultEmptyRequestMethods) -> DecodableResponseSerializer where Self == DecodableResponseSerializer { + DecodableResponseSerializer(dataPreprocessor: dataPreprocessor, + decoder: decoder, + emptyResponseCodes: emptyResponseCodes, + emptyRequestMethods: emptyRequestMethods) + } +} +#endif + extension DataRequest { /// Adds a handler using a `DecodableResponseSerializer` to be called once the request has finished. /// @@ -869,8 +1013,6 @@ extension DataRequest { /// from the server response, falling back to the default HTTP character set, `ISO-8859-1`. /// - emptyResponseCodes: HTTP status codes for which empty responses are always valid. `[204, 205]` by default. /// - emptyRequestMethods: `HTTPMethod`s for which empty responses are always valid. `[.head]` by default. - /// - options: `JSONSerialization.ReadingOptions` used when parsing the response. `.allowFragments` - /// by default. /// - completionHandler: A closure to be executed once the request has finished. /// /// - Returns: The request. @@ -904,8 +1046,6 @@ extension DownloadRequest { /// from the server response, falling back to the default HTTP character set, `ISO-8859-1`. /// - emptyResponseCodes: HTTP status codes for which empty responses are always valid. `[204, 205]` by default. /// - emptyRequestMethods: `HTTPMethod`s for which empty responses are always valid. `[.head]` by default. - /// - options: `JSONSerialization.ReadingOptions` used when parsing the response. `.allowFragments` - /// by default. /// - completionHandler: A closure to be executed once the request has finished. /// /// - Returns: The request. @@ -950,8 +1090,9 @@ public struct DecodableStreamSerializer: DataStreamSerializer { /// Creates an instance with the provided `DataDecoder` and `DataPreprocessor`. /// - Parameters: - /// - decoder: ` DataDecoder` used to decode incoming `Data`. - /// - dataPreprocessor: `DataPreprocessor` used to process incoming `Data` before it's passed through the `decoder`. + /// - decoder: ` DataDecoder` used to decode incoming `Data`. `JSONDecoder()` by default. + /// - dataPreprocessor: `DataPreprocessor` used to process incoming `Data` before it's passed through the + /// `decoder`. `PassthroughPreprocessor()` by default. public init(decoder: DataDecoder = JSONDecoder(), dataPreprocessor: DataPreprocessor = PassthroughPreprocessor()) { self.decoder = decoder self.dataPreprocessor = dataPreprocessor @@ -969,16 +1110,49 @@ public struct DecodableStreamSerializer: DataStreamSerializer { /// `DataStreamSerializer` which performs no serialization on incoming `Data`. public struct PassthroughStreamSerializer: DataStreamSerializer { + /// Creates an instance. + public init() {} + public func serialize(_ data: Data) throws -> Data { data } } /// `DataStreamSerializer` which serializes incoming stream `Data` into `UTF8`-decoded `String` values. public struct StringStreamSerializer: DataStreamSerializer { + /// Creates an instance. + public init() {} + public func serialize(_ data: Data) throws -> String { String(decoding: data, as: UTF8.self) } } +#if swift(>=5.5) +extension DataStreamSerializer { + /// Creates a `DecodableStreamSerializer` instance with the provided `DataDecoder` and `DataPreprocessor`. + /// + /// - Parameters: + /// - type: `Decodable` type to decode from stream data. + /// - decoder: ` DataDecoder` used to decode incoming `Data`. `JSONDecoder()` by default. + /// - dataPreprocessor: `DataPreprocessor` used to process incoming `Data` before it's passed through the + /// `decoder`. `PassthroughPreprocessor()` by default. + public static func decodable(of type: T.Type, + decoder: DataDecoder = JSONDecoder(), + dataPreprocessor: DataPreprocessor = PassthroughPreprocessor()) -> Self where Self == DecodableStreamSerializer { + DecodableStreamSerializer(decoder: decoder, dataPreprocessor: dataPreprocessor) + } +} + +extension DataStreamSerializer where Self == PassthroughStreamSerializer { + /// Provides a `PassthroughStreamSerializer` instance. + public static var passthrough: PassthroughStreamSerializer { PassthroughStreamSerializer() } +} + +extension DataStreamSerializer where Self == StringStreamSerializer { + /// Provides a `StringStreamSerializer` instance. + public static var string: StringStreamSerializer { StringStreamSerializer() } +} +#endif + extension DataStreamRequest { /// Adds a `StreamHandler` which performs no parsing on incoming `Data`. /// diff --git a/iOS/MyStudies/Pods/Alamofire/Source/RetryPolicy.swift b/iOS/MyStudies/Pods/Alamofire/Source/RetryPolicy.swift index e9cbcaf451..f6fd8d3398 100644 --- a/iOS/MyStudies/Pods/Alamofire/Source/RetryPolicy.swift +++ b/iOS/MyStudies/Pods/Alamofire/Source/RetryPolicy.swift @@ -277,7 +277,7 @@ open class RetryPolicy: RequestInterceptor { /// The URL error codes that are automatically retried by the policy. public let retryableURLErrorCodes: Set - /// Creates an `ExponentialBackoffRetryPolicy` from the specified parameters. + /// Creates a `RetryPolicy` from the specified parameters. /// /// - Parameters: /// - retryLimit: The total number of times the request is allowed to be retried. `2` by default. @@ -339,6 +339,41 @@ open class RetryPolicy: RequestInterceptor { } } +#if swift(>=5.5) +extension RequestInterceptor where Self == RetryPolicy { + /// Provides a default `RetryPolicy` instance. + public static var retryPolicy: RetryPolicy { RetryPolicy() } + + /// Creates an `RetryPolicy` from the specified parameters. + /// + /// - Parameters: + /// - retryLimit: The total number of times the request is allowed to be retried. `2` by default. + /// - exponentialBackoffBase: The base of the exponential backoff policy. `2` by default. + /// - exponentialBackoffScale: The scale of the exponential backoff. `0.5` by default. + /// - retryableHTTPMethods: The HTTP methods that are allowed to be retried. + /// `RetryPolicy.defaultRetryableHTTPMethods` by default. + /// - retryableHTTPStatusCodes: The HTTP status codes that are automatically retried by the policy. + /// `RetryPolicy.defaultRetryableHTTPStatusCodes` by default. + /// - retryableURLErrorCodes: The URL error codes that are automatically retried by the policy. + /// `RetryPolicy.defaultRetryableURLErrorCodes` by default. + /// + /// - Returns: The `RetryPolicy` + public static func retryPolicy(retryLimit: UInt = RetryPolicy.defaultRetryLimit, + exponentialBackoffBase: UInt = RetryPolicy.defaultExponentialBackoffBase, + exponentialBackoffScale: Double = RetryPolicy.defaultExponentialBackoffScale, + retryableHTTPMethods: Set = RetryPolicy.defaultRetryableHTTPMethods, + retryableHTTPStatusCodes: Set = RetryPolicy.defaultRetryableHTTPStatusCodes, + retryableURLErrorCodes: Set = RetryPolicy.defaultRetryableURLErrorCodes) -> RetryPolicy { + RetryPolicy(retryLimit: retryLimit, + exponentialBackoffBase: exponentialBackoffBase, + exponentialBackoffScale: exponentialBackoffScale, + retryableHTTPMethods: retryableHTTPMethods, + retryableHTTPStatusCodes: retryableHTTPStatusCodes, + retryableURLErrorCodes: retryableURLErrorCodes) + } +} +#endif + // MARK: - /// A retry policy that automatically retries idempotent requests for network connection lost errors. For more @@ -368,3 +403,32 @@ open class ConnectionLostRetryPolicy: RetryPolicy { retryableURLErrorCodes: [.networkConnectionLost]) } } + +#if swift(>=5.5) +extension RequestInterceptor where Self == ConnectionLostRetryPolicy { + /// Provides a default `ConnectionLostRetryPolicy` instance. + public static var connectionLostRetryPolicy: ConnectionLostRetryPolicy { ConnectionLostRetryPolicy() } + + /// Creates a `ConnectionLostRetryPolicy` instance from the specified parameters. + /// + /// - Parameters: + /// - retryLimit: The total number of times the request is allowed to be retried. + /// `RetryPolicy.defaultRetryLimit` by default. + /// - exponentialBackoffBase: The base of the exponential backoff policy. + /// `RetryPolicy.defaultExponentialBackoffBase` by default. + /// - exponentialBackoffScale: The scale of the exponential backoff. + /// `RetryPolicy.defaultExponentialBackoffScale` by default. + /// - retryableHTTPMethods: The idempotent http methods to retry. + /// + /// - Returns: The `ConnectionLostRetryPolicy`. + public static func connectionLostRetryPolicy(retryLimit: UInt = RetryPolicy.defaultRetryLimit, + exponentialBackoffBase: UInt = RetryPolicy.defaultExponentialBackoffBase, + exponentialBackoffScale: Double = RetryPolicy.defaultExponentialBackoffScale, + retryableHTTPMethods: Set = RetryPolicy.defaultRetryableHTTPMethods) -> ConnectionLostRetryPolicy { + ConnectionLostRetryPolicy(retryLimit: retryLimit, + exponentialBackoffBase: exponentialBackoffBase, + exponentialBackoffScale: exponentialBackoffScale, + retryableHTTPMethods: retryableHTTPMethods) + } +} +#endif diff --git a/iOS/MyStudies/Pods/Alamofire/Source/ServerTrustEvaluation.swift b/iOS/MyStudies/Pods/Alamofire/Source/ServerTrustEvaluation.swift index 9ca94f161f..d63a63d7c1 100644 --- a/iOS/MyStudies/Pods/Alamofire/Source/ServerTrustEvaluation.swift +++ b/iOS/MyStudies/Pods/Alamofire/Source/ServerTrustEvaluation.swift @@ -48,6 +48,7 @@ open class ServerTrustManager { self.evaluators = evaluators } + #if !(os(Linux) || os(Windows)) /// Returns the `ServerTrustEvaluating` value for the given host, if one is set. /// /// By default, this method will return the policy that perfectly matches the given host. Subclasses could override @@ -69,12 +70,13 @@ open class ServerTrustManager { return evaluator } + #endif } /// A protocol describing the API used to evaluate server trusts. public protocol ServerTrustEvaluating { - #if os(Linux) - // Implement this once Linux has API for evaluating server trusts. + #if os(Linux) || os(Windows) + // Implement this once Linux/Windows has API for evaluating server trusts. #else /// Evaluates the given `SecTrust` value for the given `host`. /// @@ -89,6 +91,7 @@ public protocol ServerTrustEvaluating { // MARK: - Server Trust Evaluators +#if !(os(Linux) || os(Windows)) /// An evaluator which uses the default server trust evaluation while allowing you to control whether to validate the /// host provided by the challenge. Applications are encouraged to always validate the host in production environments /// to guarantee the validity of the server's certificate chain. @@ -150,19 +153,19 @@ public final class RevocationTrustEvaluator: ServerTrustEvaluating { private let validateHost: Bool private let options: Options - /// Creates a `RevocationTrustEvaluator`. + /// Creates a `RevocationTrustEvaluator` using the provided parameters. /// /// - Note: Default and host validation will fail when using this evaluator with self-signed certificates. Use /// `PinnedCertificatesTrustEvaluator` if you need to use self-signed certificates. /// /// - Parameters: - /// - performDefaultValidation: Determines whether default validation should be performed in addition to - /// evaluating the pinned certificates. `true` by default. - /// - validateHost: Determines whether or not the evaluator should validate the host, in addition - /// to performing the default evaluation, even if `performDefaultValidation` is - /// `false`. `true` by default. - /// - options: The `Options` to use to check the revocation status of the certificate. `.any` - /// by default. + /// - performDefaultValidation: Determines whether default validation should be performed in addition to + /// evaluating the pinned certificates. `true` by default. + /// - validateHost: Determines whether or not the evaluator should validate the host, in addition to + /// performing the default evaluation, even if `performDefaultValidation` is `false`. + /// `true` by default. + /// - options: The `Options` to use to check the revocation status of the certificate. `.any` by + /// default. public init(performDefaultValidation: Bool = true, validateHost: Bool = true, options: Options = .any) { self.performDefaultValidation = performDefaultValidation self.validateHost = validateHost @@ -188,6 +191,35 @@ public final class RevocationTrustEvaluator: ServerTrustEvaluating { } } +#if swift(>=5.5) +extension ServerTrustEvaluating where Self == RevocationTrustEvaluator { + /// Provides a default `RevocationTrustEvaluator` instance. + public static var revocationChecking: RevocationTrustEvaluator { RevocationTrustEvaluator() } + + /// Creates a `RevocationTrustEvaluator` using the provided parameters. + /// + /// - Note: Default and host validation will fail when using this evaluator with self-signed certificates. Use + /// `PinnedCertificatesTrustEvaluator` if you need to use self-signed certificates. + /// + /// - Parameters: + /// - performDefaultValidation: Determines whether default validation should be performed in addition to + /// evaluating the pinned certificates. `true` by default. + /// - validateHost: Determines whether or not the evaluator should validate the host, in addition + /// to performing the default evaluation, even if `performDefaultValidation` is + /// `false`. `true` by default. + /// - options: The `Options` to use to check the revocation status of the certificate. `.any` + /// by default. + /// - Returns: The `RevocationTrustEvaluator`. + public static func revocationChecking(performDefaultValidation: Bool = true, + validateHost: Bool = true, + options: RevocationTrustEvaluator.Options = .any) -> RevocationTrustEvaluator { + RevocationTrustEvaluator(performDefaultValidation: performDefaultValidation, + validateHost: validateHost, + options: options) + } +} +#endif + /// Uses the pinned certificates to validate the server trust. The server trust is considered valid if one of the pinned /// certificates match one of the server certificates. By validating both the certificate chain and host, certificate /// pinning provides a very secure form of server trust validation mitigating most, if not all, MITM attacks. @@ -199,7 +231,7 @@ public final class PinnedCertificatesTrustEvaluator: ServerTrustEvaluating { private let performDefaultValidation: Bool private let validateHost: Bool - /// Creates a `PinnedCertificatesTrustEvaluator`. + /// Creates a `PinnedCertificatesTrustEvaluator` from the provided parameters. /// /// - Parameters: /// - certificates: The certificates to use to evaluate the trust. All `cer`, `crt`, and `der` @@ -251,6 +283,36 @@ public final class PinnedCertificatesTrustEvaluator: ServerTrustEvaluating { } } +#if swift(>=5.5) +extension ServerTrustEvaluating where Self == PinnedCertificatesTrustEvaluator { + /// Provides a default `PinnedCertificatesTrustEvaluator` instance. + public static var pinnedCertificates: PinnedCertificatesTrustEvaluator { PinnedCertificatesTrustEvaluator() } + + /// Creates a `PinnedCertificatesTrustEvaluator` using the provided parameters. + /// + /// - Parameters: + /// - certificates: The certificates to use to evaluate the trust. All `cer`, `crt`, and `der` + /// certificates in `Bundle.main` by default. + /// - acceptSelfSignedCertificates: Adds the provided certificates as anchors for the trust evaluation, allowing + /// self-signed certificates to pass. `false` by default. THIS SETTING SHOULD BE + /// FALSE IN PRODUCTION! + /// - performDefaultValidation: Determines whether default validation should be performed in addition to + /// evaluating the pinned certificates. `true` by default. + /// - validateHost: Determines whether or not the evaluator should validate the host, in addition + /// to performing the default evaluation, even if `performDefaultValidation` is + /// `false`. `true` by default. + public static func pinnedCertificates(certificates: [SecCertificate] = Bundle.main.af.certificates, + acceptSelfSignedCertificates: Bool = false, + performDefaultValidation: Bool = true, + validateHost: Bool = true) -> PinnedCertificatesTrustEvaluator { + PinnedCertificatesTrustEvaluator(certificates: certificates, + acceptSelfSignedCertificates: acceptSelfSignedCertificates, + performDefaultValidation: performDefaultValidation, + validateHost: validateHost) + } +} +#endif + /// Uses the pinned public keys to validate the server trust. The server trust is considered valid if one of the pinned /// public keys match one of the server certificate public keys. By validating both the certificate chain and host, /// public key pinning provides a very secure form of server trust validation mitigating most, if not all, MITM attacks. @@ -261,7 +323,7 @@ public final class PublicKeysTrustEvaluator: ServerTrustEvaluating { private let performDefaultValidation: Bool private let validateHost: Bool - /// Creates a `PublicKeysTrustEvaluator`. + /// Creates a `PublicKeysTrustEvaluator` from the provided parameters. /// /// - Note: Default and host validation will fail when using this evaluator with self-signed certificates. Use /// `PinnedCertificatesTrustEvaluator` if you need to use self-signed certificates. @@ -315,12 +377,38 @@ public final class PublicKeysTrustEvaluator: ServerTrustEvaluating { } } +#if swift(>=5.5) +extension ServerTrustEvaluating where Self == PublicKeysTrustEvaluator { + /// Provides a default `PublicKeysTrustEvaluator` instance. + public static var publicKeys: PublicKeysTrustEvaluator { PublicKeysTrustEvaluator() } + + /// Creates a `PublicKeysTrustEvaluator` from the provided parameters. + /// + /// - Note: Default and host validation will fail when using this evaluator with self-signed certificates. Use + /// `PinnedCertificatesTrustEvaluator` if you need to use self-signed certificates. + /// + /// - Parameters: + /// - keys: The `SecKey`s to use to validate public keys. Defaults to the public keys of all + /// certificates included in the main bundle. + /// - performDefaultValidation: Determines whether default validation should be performed in addition to + /// evaluating the pinned certificates. `true` by default. + /// - validateHost: Determines whether or not the evaluator should validate the host, in addition to + /// performing the default evaluation, even if `performDefaultValidation` is `false`. + /// `true` by default. + public static func publicKeys(keys: [SecKey] = Bundle.main.af.publicKeys, + performDefaultValidation: Bool = true, + validateHost: Bool = true) -> PublicKeysTrustEvaluator { + PublicKeysTrustEvaluator(keys: keys, performDefaultValidation: performDefaultValidation, validateHost: validateHost) + } +} +#endif + /// Uses the provided evaluators to validate the server trust. The trust is only considered valid if all of the /// evaluators consider it valid. public final class CompositeTrustEvaluator: ServerTrustEvaluating { private let evaluators: [ServerTrustEvaluating] - /// Creates a `CompositeTrustEvaluator`. + /// Creates a `CompositeTrustEvaluator` from the provided evaluators. /// /// - Parameter evaluators: The `ServerTrustEvaluating` values used to evaluate the server trust. public init(evaluators: [ServerTrustEvaluating]) { @@ -332,6 +420,17 @@ public final class CompositeTrustEvaluator: ServerTrustEvaluating { } } +#if swift(>=5.5) +extension ServerTrustEvaluating where Self == CompositeTrustEvaluator { + /// Creates a `CompositeTrustEvaluator` from the provided evaluators. + /// + /// - Parameter evaluators: The `ServerTrustEvaluating` values used to evaluate the server trust. + public static func composite(evaluators: [ServerTrustEvaluating]) -> CompositeTrustEvaluator { + CompositeTrustEvaluator(evaluators: evaluators) + } +} +#endif + /// Disables all evaluation which in turn will always consider any server trust as valid. /// /// - Note: Instead of disabling server trust evaluation, it's a better idea to configure systems to properly trust test @@ -358,8 +457,8 @@ public final class DisabledTrustEvaluator: ServerTrustEvaluating { // MARK: - Extensions extension Array where Element == ServerTrustEvaluating { - #if os(Linux) - // Add this same convenience method for Linux. + #if os(Linux) || os(Windows) + // Add this same convenience method for Linux/Windows. #else /// Evaluates the given `SecTrust` value for the given `host`. /// @@ -586,7 +685,7 @@ extension AlamofireExtension where ExtendedType == [SecCertificate] { /// All public `SecKey` values for the contained `SecCertificate`s. public var publicKeys: [SecKey] { - type.compactMap { $0.af.publicKey } + type.compactMap(\.af.publicKey) } } @@ -617,3 +716,4 @@ extension AlamofireExtension where ExtendedType == SecTrustResultType { type == .unspecified || type == .proceed } } +#endif diff --git a/iOS/MyStudies/Pods/Alamofire/Source/Session.swift b/iOS/MyStudies/Pods/Alamofire/Source/Session.swift index ac0ab2295e..45888119a2 100644 --- a/iOS/MyStudies/Pods/Alamofire/Source/Session.swift +++ b/iOS/MyStudies/Pods/Alamofire/Source/Session.swift @@ -183,12 +183,15 @@ open class Session { eventMonitors: [EventMonitor] = []) { precondition(configuration.identifier == nil, "Alamofire does not support background URLSessionConfigurations.") - let delegateQueue = OperationQueue(maxConcurrentOperationCount: 1, underlyingQueue: rootQueue, name: "org.alamofire.session.sessionDelegateQueue") + // Retarget the incoming rootQueue for safety, unless it's the main queue, which we know is safe. + let serialRootQueue = (rootQueue === DispatchQueue.main) ? rootQueue : DispatchQueue(label: rootQueue.label, + target: rootQueue) + let delegateQueue = OperationQueue(maxConcurrentOperationCount: 1, underlyingQueue: serialRootQueue, name: "\(serialRootQueue.label).sessionDelegate") let session = URLSession(configuration: configuration, delegate: delegate, delegateQueue: delegateQueue) self.init(session: session, delegate: delegate, - rootQueue: rootQueue, + rootQueue: serialRootQueue, startRequestsImmediately: startRequestsImmediately, requestQueue: requestQueue, serializationQueue: serializationQueue, @@ -312,15 +315,17 @@ open class Session { /// `RequestInterceptor`. /// /// - Parameters: - /// - convertible: `URLConvertible` value to be used as the `URLRequest`'s `URL`. - /// - method: `HTTPMethod` for the `URLRequest`. `.get` by default. - /// - parameters: `Encodable` value to be encoded into the `URLRequest`. `nil` by default. - /// - encoder: `ParameterEncoder` to be used to encode the `parameters` value into the `URLRequest`. - /// `URLEncodedFormParameterEncoder.default` by default. - /// - headers: `HTTPHeaders` value to be added to the `URLRequest`. `nil` by default. - /// - interceptor: `RequestInterceptor` value to be used by the returned `DataRequest`. `nil` by default. + /// - convertible: `URLConvertible` value to be used as the `URLRequest`'s `URL`. + /// - method: `HTTPMethod` for the `URLRequest`. `.get` by default. + /// - parameters: `Encodable` value to be encoded into the `URLRequest`. `nil` by default. + /// - encoder: `ParameterEncoder` to be used to encode the `parameters` value into the `URLRequest`. + /// `URLEncodedFormParameterEncoder.default` by default. + /// - headers: `HTTPHeaders` value to be added to the `URLRequest`. `nil` by default. + /// - interceptor: `RequestInterceptor` value to be used by the returned `DataRequest`. `nil` by default. + /// - requestModifier: `RequestModifier` which will be applied to the `URLRequest` created from + /// the provided parameters. `nil` by default. /// - /// - Returns: The created `DataRequest`. + /// - Returns: The created `DataRequest`. open func request(_ convertible: URLConvertible, method: HTTPMethod = .get, parameters: Parameters? = nil, @@ -784,8 +789,8 @@ open class Session { /// technique was used. /// /// - Parameters: - /// - multipartFormData: `MultipartFormData` building closure. - /// - convertible: `URLConvertible` value to be used as the `URLRequest`'s `URL`. + /// - multipartFormData: `MultipartFormData` building closure. + /// - url: `URLConvertible` value to be used as the `URLRequest`'s `URL`. /// - encodingMemoryThreshold: Byte threshold used to determine whether the form data is encoded into memory or /// onto disk before being uploaded. `MultipartFormData.encodingMemoryThreshold` by /// default. @@ -1068,7 +1073,9 @@ open class Session { return } - adapter.adapt(initialRequest, for: self) { result in + let adapterState = RequestAdapterState(requestID: request.id, session: self) + + adapter.adapt(initialRequest, using: adapterState) { result in do { let adaptedRequest = try result.get() try adaptedRequest.validate() diff --git a/iOS/MyStudies/Pods/Alamofire/Source/SessionDelegate.swift b/iOS/MyStudies/Pods/Alamofire/Source/SessionDelegate.swift index befc80eabf..a794d83d0e 100644 --- a/iOS/MyStudies/Pods/Alamofire/Source/SessionDelegate.swift +++ b/iOS/MyStudies/Pods/Alamofire/Source/SessionDelegate.swift @@ -91,11 +91,15 @@ extension SessionDelegate: URLSessionTaskDelegate { let evaluation: ChallengeEvaluation switch challenge.protectionSpace.authenticationMethod { + case NSURLAuthenticationMethodHTTPBasic, NSURLAuthenticationMethodHTTPDigest, NSURLAuthenticationMethodNTLM, + NSURLAuthenticationMethodNegotiate: + evaluation = attemptCredentialAuthentication(for: challenge, belongingTo: task) + #if !(os(Linux) || os(Windows)) case NSURLAuthenticationMethodServerTrust: evaluation = attemptServerTrustAuthentication(with: challenge) - case NSURLAuthenticationMethodHTTPBasic, NSURLAuthenticationMethodHTTPDigest, NSURLAuthenticationMethodNTLM, - NSURLAuthenticationMethodNegotiate, NSURLAuthenticationMethodClientCertificate: + case NSURLAuthenticationMethodClientCertificate: evaluation = attemptCredentialAuthentication(for: challenge, belongingTo: task) + #endif default: evaluation = (.performDefaultHandling, nil, nil) } @@ -107,6 +111,7 @@ extension SessionDelegate: URLSessionTaskDelegate { completionHandler(evaluation.disposition, evaluation.credential) } + #if !(os(Linux) || os(Windows)) /// Evaluates the server trust `URLAuthenticationChallenge` received. /// /// - Parameter challenge: The `URLAuthenticationChallenge`. @@ -133,6 +138,7 @@ extension SessionDelegate: URLSessionTaskDelegate { return (.cancelAuthenticationChallenge, nil, error.asAFError(or: .serverTrustEvaluationFailed(reason: .customEvaluationFailed(error: error)))) } } + #endif /// Evaluates the credential-based authentication `URLAuthenticationChallenge` received for `task`. /// diff --git a/iOS/MyStudies/Pods/Alamofire/Source/URLEncodedFormEncoder.swift b/iOS/MyStudies/Pods/Alamofire/Source/URLEncodedFormEncoder.swift index e5cc0c50fe..dfadc2ec13 100644 --- a/iOS/MyStudies/Pods/Alamofire/Source/URLEncodedFormEncoder.swift +++ b/iOS/MyStudies/Pods/Alamofire/Source/URLEncodedFormEncoder.swift @@ -48,15 +48,21 @@ public final class URLEncodedFormEncoder { case brackets /// No brackets are appended to the key and the key is encoded as is. case noBrackets + /// Brackets containing the item index are appended. This matches the jQuery and Node.js behavior. + case indexInBrackets /// Encodes the key according to the encoding. /// - /// - Parameter key: The `key` to encode. - /// - Returns: The encoded key. - func encode(_ key: String) -> String { + /// - Parameters: + /// - key: The `key` to encode. + /// - index: When this enum instance is `.indexInBrackets`, the `index` to encode. + /// + /// - Returns: The encoded key. + func encode(_ key: String, atIndex index: Int) -> String { switch self { case .brackets: return "\(key)[]" case .noBrackets: return key + case .indexInBrackets: return "\(key)[\(index)]" } } } @@ -495,7 +501,7 @@ enum URLEncodedFormComponent { /// Recursive backing method to `set(to:at:)`. private func set(_ context: inout URLEncodedFormComponent, to value: URLEncodedFormComponent, at path: [CodingKey]) { - guard path.count >= 1 else { + guard !path.isEmpty else { context = value return } @@ -930,8 +936,8 @@ final class URLEncodedFormSerializer { } func serialize(_ array: [URLEncodedFormComponent], forKey key: String) -> String { - var segments: [String] = array.map { component in - let keyPath = arrayEncoding.encode(key) + var segments: [String] = array.enumerated().map { index, component in + let keyPath = arrayEncoding.encode(key, atIndex: index) return serialize(component, forKey: keyPath) } segments = alphabetizeKeyValuePairs ? segments.sorted() : segments diff --git a/iOS/MyStudies/Pods/Alamofire/Source/URLSessionConfiguration+Alamofire.swift b/iOS/MyStudies/Pods/Alamofire/Source/URLSessionConfiguration+Alamofire.swift index de3e290a32..292a8fe7d5 100644 --- a/iOS/MyStudies/Pods/Alamofire/Source/URLSessionConfiguration+Alamofire.swift +++ b/iOS/MyStudies/Pods/Alamofire/Source/URLSessionConfiguration+Alamofire.swift @@ -34,4 +34,13 @@ extension AlamofireExtension where ExtendedType: URLSessionConfiguration { return configuration } + + /// `.ephemeral` configuration with Alamofire's default `Accept-Language`, `Accept-Encoding`, and `User-Agent` + /// headers. + public static var ephemeral: URLSessionConfiguration { + let configuration = URLSessionConfiguration.ephemeral + configuration.headers = .default + + return configuration + } } diff --git a/iOS/MyStudies/Pods/Alamofire/Source/Validation.swift b/iOS/MyStudies/Pods/Alamofire/Source/Validation.swift index bd2a279535..1dc30253d9 100644 --- a/iOS/MyStudies/Pods/Alamofire/Source/Validation.swift +++ b/iOS/MyStudies/Pods/Alamofire/Source/Validation.swift @@ -117,7 +117,7 @@ extension Request { } let error: AFError = { - let reason: ErrorReason = .missingContentType(acceptableContentTypes: Array(acceptableContentTypes)) + let reason: ErrorReason = .missingContentType(acceptableContentTypes: acceptableContentTypes.sorted()) return AFError.responseValidationFailed(reason: reason) }() @@ -131,7 +131,7 @@ extension Request { } let error: AFError = { - let reason: ErrorReason = .unacceptableContentType(acceptableContentTypes: Array(acceptableContentTypes), + let reason: ErrorReason = .unacceptableContentType(acceptableContentTypes: acceptableContentTypes.sorted(), responseContentType: responseContentType) return AFError.responseValidationFailed(reason: reason) @@ -152,9 +152,9 @@ extension DataRequest { /// /// If validation fails, subsequent calls to response handlers will have an associated error. /// - /// - Parameter statusCode: `Sequence` of acceptable response status codes. + /// - Parameter acceptableStatusCodes: `Sequence` of acceptable response status codes. /// - /// - Returns: The instance. + /// - Returns: The instance. @discardableResult public func validate(statusCode acceptableStatusCodes: S) -> Self where S.Iterator.Element == Int { validate { [unowned self] _, response, _ in @@ -200,9 +200,9 @@ extension DataStreamRequest { /// /// If validation fails, subsequent calls to response handlers will have an associated error. /// - /// - Parameter statusCode: `Sequence` of acceptable response status codes. + /// - Parameter acceptableStatusCodes: `Sequence` of acceptable response status codes. /// - /// - Returns: The instance. + /// - Returns: The instance. @discardableResult public func validate(statusCode acceptableStatusCodes: S) -> Self where S.Iterator.Element == Int { validate { [unowned self] _, response in @@ -253,9 +253,9 @@ extension DownloadRequest { /// /// If validation fails, subsequent calls to response handlers will have an associated error. /// - /// - Parameter statusCode: `Sequence` of acceptable response status codes. + /// - Parameter acceptableStatusCodes: `Sequence` of acceptable response status codes. /// - /// - Returns: The instance. + /// - Returns: The instance. @discardableResult public func validate(statusCode acceptableStatusCodes: S) -> Self where S.Iterator.Element == Int { validate { [unowned self] _, response, _ in diff --git a/iOS/MyStudies/Pods/CryptoSwift/README.md b/iOS/MyStudies/Pods/CryptoSwift/README.md index a28f52a034..2b1c0b8c8f 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/README.md +++ b/iOS/MyStudies/Pods/CryptoSwift/README.md @@ -9,7 +9,7 @@ Crypto related functions and helpers for [Swift](https://swift.org) implemented in Swift. ([#PureSwift](https://twitter.com/hashtag/pureswift)) -**Note**: The `master` branch follows the latest currently released **version of Swift**. If you need an earlier version for an older version of Swift, you can specify its version in your `Podfile` or use the code on the branch for that version. Older branches are unsupported. Check [versions](#swift-versions-support) for details. +**Note**: The `main` branch follows the latest currently released **version of Swift**. If you need an earlier version for an older version of Swift, you can specify its version in your `Podfile` or use the code on the branch for that version. Older branches are unsupported. Check [versions](#swift-versions-support) for details. --- @@ -36,10 +36,10 @@ Good mood #### Hash (Digest) [MD5](http://tools.ietf.org/html/rfc1321) | [SHA1](http://tools.ietf.org/html/rfc3174) -| [SHA224](http://tools.ietf.org/html/rfc6234) -| [SHA256](http://tools.ietf.org/html/rfc6234) -| [SHA384](http://tools.ietf.org/html/rfc6234) -| [SHA512](http://tools.ietf.org/html/rfc6234) +| [SHA2-224](http://tools.ietf.org/html/rfc6234) +| [SHA2-256](http://tools.ietf.org/html/rfc6234) +| [SHA2-384](http://tools.ietf.org/html/rfc6234) +| [SHA2-512](http://tools.ietf.org/html/rfc6234) | [SHA3](http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf) #### Cyclic Redundancy Check (CRC) @@ -81,6 +81,7 @@ Good mood | [PKCS#7](http://tools.ietf.org/html/rfc5652#section-6.3) | [Zero padding](https://en.wikipedia.org/wiki/Padding_(cryptography)#Zero_padding) | [ISO78164](http://www.embedx.com/pdfs/ISO_STD_7816/info_isoiec7816-4%7Bed21.0%7Den.pdf) +| [ISO10126](https://en.wikipedia.org/wiki/Padding_(cryptography)#ISO_10126) | No padding #### Authenticated Encryption with Associated Data (AEAD) @@ -121,7 +122,7 @@ It is recommended to enable [Whole-Module Optimization](https://swift.org/blog/w You can use [Swift Package Manager](https://swift.org/package-manager/) and specify dependency in `Package.swift` by adding this: ```swift -.package(url: "https://github.com/krzyzanowskim/CryptoSwift.git", .upToNextMinor(from: "1.4.0")) +.package(url: "https://github.com/krzyzanowskim/CryptoSwift.git", .upToNextMajor(from: "1.4.3")) ``` See: [Package.swift - manual](http://blog.krzyzanowskim.com/2016/08/09/package-swift-manual/) @@ -133,7 +134,7 @@ Notice: Swift Package Manager uses debug configuration for debug Xcode build, th You can use [CocoaPods](https://cocoapods.org/pods/CryptoSwift). ```ruby -pod 'CryptoSwift', '~> 1.4.0' +pod 'CryptoSwift', '~> 1.4.1' ``` Bear in mind that CocoaPods will build CryptoSwift without [Whole-Module Optimization](https://swift.org/blog/whole-module-optimizations/) that may impact performance. You can change it manually after installation, or use [cocoapods-wholemodule](https://github.com/jedlewison/cocoapods-wholemodule) plugin. @@ -184,7 +185,7 @@ In the project, you'll find [single scheme](https://mxcl.dev/PromiseKit/news/201 - Swift 4.2, branch [swift42](https://github.com/krzyzanowskim/CryptoSwift/tree/swift42) version <= 0.15.0 - Swift 5.0, branch [swift5](https://github.com/krzyzanowskim/CryptoSwift/tree/swift5) version <= 1.2.0 - Swift 5.1, branch [swift5](https://github.com/krzyzanowskim/CryptoSwift/tree/swift51) version <= 1.3.3 -- Swift 5.3 and newer, branch [master](https://github.com/krzyzanowskim/CryptoSwift/tree/master) +- Swift 5.3 and newer, branch [main](https://github.com/krzyzanowskim/CryptoSwift/tree/main) ## How-to @@ -533,7 +534,7 @@ This distribution includes cryptographic software. The country in which you curr ## License -Copyright (C) 2014-2017 Marcin Krzyżanowski +Copyright (C) 2014-2021 Marcin Krzyżanowski 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/AEAD/AEAD.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/AEAD/AEAD.swift index 6d85c047aa..3b45ab44f2 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/AEAD/AEAD.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/AEAD/AEAD.swift @@ -2,7 +2,7 @@ // AEAD.swift // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/AEAD/AEADChaCha20Poly1305.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/AEAD/AEADChaCha20Poly1305.swift index 085f031e18..b4c9aeb0f4 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/AEAD/AEADChaCha20Poly1305.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/AEAD/AEADChaCha20Poly1305.swift @@ -2,7 +2,7 @@ // ChaCha20Poly1305.swift // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/AES.Cryptors.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/AES.Cryptors.swift index 3714df55fc..f84c92bcde 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/AES.Cryptors.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/AES.Cryptors.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/AES.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/AES.swift index bd50158ea1..211bda6d23 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/AES.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/AES.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Array+Extension.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Array+Extension.swift index 57fb3d9f6f..6ae3601a75 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Array+Extension.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Array+Extension.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Authenticator.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Authenticator.swift index 90b534e07a..fd0ad4bcda 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Authenticator.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Authenticator.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BatchedCollection.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BatchedCollection.swift index 1273f238a7..8d55d0a9da 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BatchedCollection.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BatchedCollection.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Bit.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Bit.swift index cac7dcdb0e..f1ec5b79ed 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Bit.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Bit.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockCipher.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockCipher.swift index b07f035040..f791178029 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockCipher.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockCipher.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockDecryptor.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockDecryptor.swift index 494e512d12..935cdfa320 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockDecryptor.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockDecryptor.swift @@ -1,6 +1,6 @@ // CryptoSwift // -// Copyright (C) 2014-2018 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockEncryptor.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockEncryptor.swift index e0dccc37bc..0ab1ed61ac 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockEncryptor.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockEncryptor.swift @@ -1,6 +1,6 @@ // CryptoSwift // -// Copyright (C) 2014-2018 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/BlockMode.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/BlockMode.swift index 37933c0f12..ff410d7a24 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/BlockMode.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/BlockMode.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/BlockModeOptions.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/BlockModeOptions.swift index 81a56007ea..a21dd89516 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/BlockModeOptions.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/BlockModeOptions.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/CBC.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/CBC.swift index 77f8b8fff6..ca5d6462f6 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/CBC.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/CBC.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/CCM.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/CCM.swift index 6be810bbb5..a42cbbfac8 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/CCM.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/CCM.swift @@ -1,6 +1,7 @@ -//// CryptoSwift // -// Copyright (C) 2014-2018 Marcin Krzyżanowski +// CryptoSwift +// +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/CFB.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/CFB.swift index e2f2c4cfeb..95e91add7b 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/CFB.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/CFB.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/CTR.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/CTR.swift index 0fd41d7441..f0074ae4d1 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/CTR.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/CTR.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/CipherModeWorker.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/CipherModeWorker.swift index e71b21bccb..9a926c81c4 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/CipherModeWorker.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/CipherModeWorker.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/ECB.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/ECB.swift index 07d8df4d15..4e8f9ba032 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/ECB.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/ECB.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/GCM.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/GCM.swift index d188017f2f..2aaeb34220 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/GCM.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/GCM.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/OFB.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/OFB.swift index 5fc9f2282c..46a9e2f3ab 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/OFB.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/OFB.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/PCBC.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/PCBC.swift index d3790a1941..eafd8beac7 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/PCBC.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/PCBC.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. @@ -68,7 +68,7 @@ struct PCBCModeWorker: BlockModeWorker { return Array(ciphertext) } let result: Array = xor(prev ?? self.iv, plaintext) - self.prev = xor(plaintext.slice, ciphertext) + self.prev = xor(result, ciphertext) return result } } diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Blowfish.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Blowfish.swift index 3c9b958e5a..8876fca2fa 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Blowfish.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Blowfish.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/CBCMAC.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/CBCMAC.swift index 0cd6029ef9..941e4d1fad 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/CBCMAC.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/CBCMAC.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/CMAC.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/CMAC.swift index c4e366d626..f0e691cdad 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/CMAC.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/CMAC.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/ChaCha20.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/ChaCha20.swift index 3e9e1efb16..f9ba5e4561 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/ChaCha20.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/ChaCha20.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Checksum.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Checksum.swift index ee48e93c40..26ec128825 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Checksum.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Checksum.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Cipher.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Cipher.swift index b7ffd4eea3..d7e669acbd 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Cipher.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Cipher.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Collection+Extension.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Collection+Extension.swift index 7a917b4dd5..a1b7d92d7e 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Collection+Extension.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Collection+Extension.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/CompactMap.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/CompactMap.swift index 7c360ff651..34a1a439e9 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/CompactMap.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/CompactMap.swift @@ -1,6 +1,7 @@ -//// CryptoSwift // -// Copyright (C) 2014-2018 Marcin Krzyżanowski +// CryptoSwift +// +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Cryptor.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Cryptor.swift index 34cd275ba0..25fd135cf4 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Cryptor.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Cryptor.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Cryptors.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Cryptors.swift index 97bae19798..2c22dde997 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Cryptors.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Cryptors.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Digest.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Digest.swift index a54e3632fe..58aa4bba43 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Digest.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Digest.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/DigestType.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/DigestType.swift index a635c1e610..c99f081ff6 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/DigestType.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/DigestType.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/AES+Foundation.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/AES+Foundation.swift index 00856e7010..3c6055c7b2 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/AES+Foundation.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/AES+Foundation.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/Array+Foundation.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/Array+Foundation.swift index e65fa51cc0..64f7f116ee 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/Array+Foundation.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/Array+Foundation.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. @@ -16,8 +16,8 @@ import Foundation public extension Array where Element == UInt8 { - func toBase64() -> String? { - Data( self).base64EncodedString() + func toBase64() -> String { + Data(self).base64EncodedString() } init(base64: String) { diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/Blowfish+Foundation.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/Blowfish+Foundation.swift index 244c466dbd..57c1eea7b1 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/Blowfish+Foundation.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/Blowfish+Foundation.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/ChaCha20+Foundation.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/ChaCha20+Foundation.swift index f4b7e7e16d..347f458877 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/ChaCha20+Foundation.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/ChaCha20+Foundation.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/Data+Extension.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/Data+Extension.swift index ab260b2486..3a9e2c9512 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/Data+Extension.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/Data+Extension.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/HMAC+Foundation.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/HMAC+Foundation.swift index 77ee8902b7..99b7b62707 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/HMAC+Foundation.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/HMAC+Foundation.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/Rabbit+Foundation.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/Rabbit+Foundation.swift index ff18c36fd7..d3543b2f67 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/Rabbit+Foundation.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/Rabbit+Foundation.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/String+FoundationExtension.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/String+FoundationExtension.swift index b19014d86d..89a846498c 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/String+FoundationExtension.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/String+FoundationExtension.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/Utils+Foundation.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/Utils+Foundation.swift index e5c0057d33..f146cf7652 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/Utils+Foundation.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Foundation/Utils+Foundation.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Generics.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Generics.swift index 14c6c7ccf6..dfd90bbe39 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Generics.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Generics.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/HKDF.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/HKDF.swift index fc1cd5c5b7..5f48c0a6c0 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/HKDF.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/HKDF.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. @@ -44,7 +44,7 @@ public struct HKDF { /// - salt: optional salt (if not provided, it is set to a sequence of variant.digestLength zeros) /// - info: optional context and application specific information /// - keyLength: intended length of derived key - public init(password: Array, salt: Array? = nil, info: Array? = nil, keyLength: Int? = nil /* dkLen */, variant: HMAC.Variant = .sha256) throws { + public init(password: Array, salt: Array? = nil, info: Array? = nil, keyLength: Int? = nil /* dkLen */, variant: HMAC.Variant = .sha2(.sha256)) throws { guard !password.isEmpty else { throw Error.invalidInput } diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/HMAC.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/HMAC.swift index 4d1374906d..d864131332 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/HMAC.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/HMAC.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. @@ -20,7 +20,13 @@ public final class HMAC: Authenticator { } public enum Variant { - case sha1, sha256, sha384, sha512, md5 + case md5 + case sha1 + case sha2(SHA2.Variant) + case sha3(SHA3.Variant) + + @available(*, deprecated, message: "Use sha2(variant) instead.") + case sha256, sha384, sha512 var digestLength: Int { switch self { @@ -32,6 +38,10 @@ public final class HMAC: Authenticator { return SHA2.Variant.sha384.digestLength case .sha512: return SHA2.Variant.sha512.digestLength + case .sha2(let variant): + return variant.digestLength + case .sha3(let variant): + return variant.digestLength case .md5: return MD5.digestLength } @@ -47,6 +57,10 @@ public final class HMAC: Authenticator { return Digest.sha384(bytes) case .sha512: return Digest.sha512(bytes) + case .sha2(let variant): + return Digest.sha2(bytes, variant: variant) + case .sha3(let variant): + return Digest.sha3(bytes, variant: variant) case .md5: return Digest.md5(bytes) } @@ -56,10 +70,18 @@ public final class HMAC: Authenticator { switch self { case .md5: return MD5.blockSize - case .sha1, .sha256: - return 64 - case .sha384, .sha512: - return 128 + case .sha1: + return SHA1.blockSize + case .sha256: + return SHA2.Variant.sha256.blockSize + case .sha384: + return SHA2.Variant.sha384.blockSize + case .sha512: + return SHA2.Variant.sha512.blockSize + case .sha2(let variant): + return variant.blockSize + case .sha3(let variant): + return variant.blockSize } } } diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/ISO10126Padding.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/ISO10126Padding.swift new file mode 100644 index 0000000000..8aebd1140c --- /dev/null +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/ISO10126Padding.swift @@ -0,0 +1,56 @@ +// +// CryptoSwift +// +// Copyright (C) Marcin Krzyżanowski +// 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: +// +// - 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 is required. +// - Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. +// - This notice may not be removed or altered from any source or binary distribution. +// + +import Foundation + +/// Padding with random bytes, ending with the number of added bytes. +/// Read the [Wikipedia](https://en.wikipedia.org/wiki/Padding_(cryptography)#ISO_10126) +/// and [Crypto-IT](http://www.crypto-it.net/eng/theory/padding.html) articles for more info. +struct ISO10126Padding: PaddingProtocol { + init() { + } + + @inlinable + func add(to bytes: Array, blockSize: Int) -> Array { + let padding = UInt8(blockSize - (bytes.count % blockSize)) + var withPadding = bytes + if padding > 0 { + withPadding += (0..<(padding - 1)).map { _ in UInt8.random(in: 0...255) } + [padding] + } + return withPadding + } + + @inlinable + func remove(from bytes: Array, blockSize: Int?) -> Array { + guard !bytes.isEmpty, let lastByte = bytes.last else { + return bytes + } + + assert(!bytes.isEmpty, "Need bytes to remove padding") + + let padding = Int(lastByte) // last byte + let finalLength = bytes.count - padding + + if finalLength < 0 { + return bytes + } + + if padding >= 1 { + return Array(bytes[0.. +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/MD5.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/MD5.swift index 217a708a3d..bd7925f1a9 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/MD5.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/MD5.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/NoPadding.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/NoPadding.swift index f2a1c4672b..9c75f6f3ad 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/NoPadding.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/NoPadding.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Operators.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Operators.swift index a15fe3c950..cee442d956 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Operators.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Operators.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/PKCS/PBKDF1.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/PKCS/PBKDF1.swift index a3a9dee61d..b7e8e70bf7 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/PKCS/PBKDF1.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/PKCS/PBKDF1.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/PKCS/PBKDF2.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/PKCS/PBKDF2.swift index a4cd05b43e..2e84303c3b 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/PKCS/PBKDF2.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/PKCS/PBKDF2.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. @@ -47,7 +47,7 @@ public extension PKCS5 { /// - iterations: iteration count, a positive integer /// - keyLength: intended length of derived key /// - variant: MAC variant. Defaults to SHA256 - public init(password: Array, salt: Array, iterations: Int = 4096 /* c */, keyLength: Int? = nil /* dkLen */, variant: HMAC.Variant = .sha256) throws { + public init(password: Array, salt: Array, iterations: Int = 4096 /* c */, keyLength: Int? = nil /* dkLen */, variant: HMAC.Variant = .sha2(.sha256)) throws { precondition(iterations > 0) let prf = HMAC(key: password, variant: variant) diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/PKCS/PKCS5.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/PKCS/PKCS5.swift index 59256f60a7..656f85ea43 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/PKCS/PKCS5.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/PKCS/PKCS5.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/PKCS/PKCS7.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/PKCS/PKCS7.swift index 41000386d6..2831c37137 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/PKCS/PKCS7.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/PKCS/PKCS7.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/PKCS/PKCS7Padding.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/PKCS/PKCS7Padding.swift index a524dd6756..cb97917a33 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/PKCS/PKCS7Padding.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/PKCS/PKCS7Padding.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Padding.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Padding.swift index f53b80b7d5..5c473ab6f3 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Padding.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Padding.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. @@ -19,7 +19,7 @@ public protocol PaddingProtocol { } public enum Padding: PaddingProtocol { - case noPadding, zeroPadding, pkcs7, pkcs5, iso78164 + case noPadding, zeroPadding, pkcs7, pkcs5, iso78164, iso10126 public func add(to: Array, blockSize: Int) -> Array { switch self { @@ -33,6 +33,8 @@ public enum Padding: PaddingProtocol { return PKCS5.Padding().add(to: to, blockSize: blockSize) case .iso78164: return ISO78164Padding().add(to: to, blockSize: blockSize) + case .iso10126: + return ISO10126Padding().add(to: to, blockSize: blockSize) } } @@ -48,6 +50,8 @@ public enum Padding: PaddingProtocol { return PKCS5.Padding().remove(from: from, blockSize: blockSize) case .iso78164: return ISO78164Padding().remove(from: from, blockSize: blockSize) + case .iso10126: + return ISO10126Padding().remove(from: from, blockSize: blockSize) } } } diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Poly1305.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Poly1305.swift index 1344c7ff23..3e8f7a3d68 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Poly1305.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Poly1305.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Rabbit.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Rabbit.swift index 2f1d4daf99..ad0303cb40 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Rabbit.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Rabbit.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/SHA1.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/SHA1.swift index 1f06f39d4d..59cabefcf6 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/SHA1.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/SHA1.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/SHA2.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/SHA2.swift index 0287d7284c..e5f84de952 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/SHA2.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/SHA2.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. @@ -43,6 +43,7 @@ public final class SHA2: DigestType { @usableFromInline var accumulatedHash64 = Array() + @frozen public enum Variant: RawRepresentable { case sha224, sha256, sha384, sha512 @@ -316,8 +317,6 @@ extension SHA2: Updatable { self.process32(block: chunk, currentHash: &self.accumulatedHash32) case .sha384, .sha512: self.process64(block: chunk, currentHash: &self.accumulatedHash64) - @unknown default: - preconditionFailure() } processedBytes += chunk.count } @@ -352,8 +351,6 @@ extension SHA2: Updatable { result[pos + 7] = UInt8(h & 0xff) pos += 8 } - @unknown default: - preconditionFailure() } // reset hash value for instance @@ -363,8 +360,6 @@ extension SHA2: Updatable { self.accumulatedHash32 = self.variant.h.lazy.map { UInt32($0) } // FIXME: UInt64 for process64 case .sha384, .sha512: self.accumulatedHash64 = self.variant.h - @unknown default: - preconditionFailure() } } diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/SHA3.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/SHA3.swift index d988f98aec..dc57504e6c 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/SHA3.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/SHA3.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Scrypt.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Scrypt.swift index 87be4c99b2..a3dfcee5bc 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Scrypt.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Scrypt.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. @@ -83,7 +83,7 @@ public final class Scrypt { /* 1: (B_0 ... B_{p-1}) <-- PBKDF2(P, S, 1, p * MFLen) */ // Expand the initial key - let barray = try PKCS5.PBKDF2(password: Array(self.password), salt: Array(self.salt), iterations: 1, keyLength: self.p * 128 * self.r, variant: .sha256).calculate() + let barray = try PKCS5.PBKDF2(password: Array(self.password), salt: Array(self.salt), iterations: 1, keyLength: self.p * 128 * self.r, variant: .sha2(.sha256)).calculate() barray.withUnsafeBytes { p in B.copyMemory(from: p.baseAddress!, byteCount: barray.count) } @@ -99,7 +99,7 @@ public final class Scrypt { let pointer = B.assumingMemoryBound(to: UInt8.self) let bufferPointer = UnsafeBufferPointer(start: pointer, count: p * 128 * self.r) let block = [UInt8](bufferPointer) - return try PKCS5.PBKDF2(password: Array(self.password), salt: block, iterations: 1, keyLength: self.dkLen, variant: .sha256).calculate() + return try PKCS5.PBKDF2(password: Array(self.password), salt: block, iterations: 1, keyLength: self.dkLen, variant: .sha2(.sha256)).calculate() } } diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/SecureBytes.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/SecureBytes.swift index fc7d1509f3..9d80fca8de 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/SecureBytes.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/SecureBytes.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/StreamDecryptor.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/StreamDecryptor.swift index cf64d66ae0..88802b56b1 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/StreamDecryptor.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/StreamDecryptor.swift @@ -1,6 +1,6 @@ // CryptoSwift // -// Copyright (C) 2014-2018 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/StreamEncryptor.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/StreamEncryptor.swift index 481b6821f8..10ce7b1aff 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/StreamEncryptor.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/StreamEncryptor.swift @@ -1,6 +1,6 @@ // CryptoSwift // -// Copyright (C) 2014-2018 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/String+Extension.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/String+Extension.swift index 2d922a2878..dc979ce3be 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/String+Extension.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/String+Extension.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. @@ -81,7 +81,7 @@ extension String { /// - parameter cipher: Instance of `Cipher` /// - returns: base64 encoded string of encrypted bytes @inlinable - public func encryptToBase64(cipher: Cipher) throws -> String? { + public func encryptToBase64(cipher: Cipher) throws -> String { try self.bytes.encrypt(cipher: cipher).toBase64() } diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/UInt128.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/UInt128.swift index 8e3c246b68..abc249331b 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/UInt128.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/UInt128.swift @@ -1,7 +1,7 @@ // // UInt128.swift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/UInt16+Extension.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/UInt16+Extension.swift index f3e4d2a9c4..777bd980a9 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/UInt16+Extension.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/UInt16+Extension.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/UInt32+Extension.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/UInt32+Extension.swift index e605f4f713..9155869290 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/UInt32+Extension.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/UInt32+Extension.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/UInt64+Extension.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/UInt64+Extension.swift index efabfbd521..224f71730b 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/UInt64+Extension.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/UInt64+Extension.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/UInt8+Extension.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/UInt8+Extension.swift index d2bfc91c30..906a9ded1e 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/UInt8+Extension.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/UInt8+Extension.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Updatable.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Updatable.swift index 7a3ad4d954..22031ad6e6 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Updatable.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Updatable.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Utils.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Utils.swift index d54bbcb23d..7afca0b4dd 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Utils.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/Utils.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/ZeroPadding.swift b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/ZeroPadding.swift index 3f61b856bd..b1b67dd45d 100644 --- a/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/ZeroPadding.swift +++ b/iOS/MyStudies/Pods/CryptoSwift/Sources/CryptoSwift/ZeroPadding.swift @@ -1,7 +1,7 @@ // // CryptoSwift // -// Copyright (C) 2014-2017 Marcin Krzyżanowski +// Copyright (C) 2014-2021 Marcin Krzyżanowski // 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. diff --git a/iOS/MyStudies/Pods/Firebase/README.md b/iOS/MyStudies/Pods/Firebase/README.md index 938e264b18..ce3a998b3c 100644 --- a/iOS/MyStudies/Pods/Firebase/README.md +++ b/iOS/MyStudies/Pods/Firebase/README.md @@ -27,7 +27,6 @@ [![Actions Status][gh-storage-badge]][gh-actions] [![Actions Status][gh-symbolcollision-badge]][gh-actions] [![Actions Status][gh-zip-badge]][gh-actions] -[![Travis](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk) # Firebase Apple Open Source Development @@ -35,21 +34,16 @@ This repository contains all Apple platform Firebase SDK source except FirebaseA and FirebaseML. Firebase is an app development platform with tools to help you build, grow and -monetize your app. More information about Firebase can be found at -[https://firebase.google.com](https://firebase.google.com). - -The repository also includes GoogleUtilities and GoogleDataTransport source -which are utilities used by Firebase and other Google products. - -**Note** _FirebaseCombineSwift_ contains support for Apple's Combine framework. This module is currently under development, and not yet supported for use in production environments. Fore more details, please refer to the [docs](FirebaseCombineSwift/README.md). +monetize your app. More information about Firebase can be found on the +[official Firebase website](https://firebase.google.com). ## Installation See the subsections below for details about the different installation methods. -1. [Standard pod install](README.md#standard-pod-install) -1. [Swift Package Manager](SwiftPackageManager.md) -1. [Installing from the GitHub repo](README.md#installing-from-github) -1. [Experimental Carthage](README.md#carthage-ios-only) +1. [Standard pod install](#standard-pod-install) +1. [Swift Package Manager](#swift-package-manager) +1. [Installing from the GitHub repo](#installing-from-github) +1. [Experimental Carthage](#carthage-ios-only) ### Standard pod install @@ -59,7 +53,7 @@ Go to ### Swift Package Manager Instructions for [Swift Package Manager](https://swift.org/package-manager/) support can be -found at [SwiftPackageManager.md](SwiftPackageManager.md). +found at [SwiftPackageManager](SwiftPackageManager.md) Markdown file. ### Installing from GitHub @@ -93,8 +87,7 @@ pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk' ### Carthage (iOS only) Instructions for the experimental Carthage distribution are at -[Carthage](Carthage.md). If you have a new Mac with an Apple silicon chip, please see -[these instructions](AppleSilicon.md). +[Carthage](Carthage.md). ### Using Firebase from a Framework or a library @@ -130,7 +123,7 @@ those platforms. Since 10.2, Xcode does not properly handle multi-platform CocoaPods workspaces. Firestore has a self contained Xcode project. See -[Firestore/README.md](Firestore/README.md). +[Firestore/README](Firestore/README.md) Markdown file. #### Development for Catalyst * `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios` @@ -156,11 +149,11 @@ Alternatively disable signing in each target: ### Adding a New Firebase Pod -See [AddNewPod.md](AddNewPod.md). +See [AddNewPod](AddNewPod.md) Markdown file. ### Managing Headers and Imports -See [HeadersImports.md](HeadersImports.md). +See [HeadersImports](HeadersImports.md) Markdown file. ### Code Formatting @@ -172,7 +165,7 @@ GitHub Actions will verify that any code changes are done in a style compliant way. Install `clang-format` and `mint`: ```console -brew install clang-format@12 +brew install clang-format@13 brew install mint ``` @@ -194,7 +187,7 @@ identifier (e.g. `com.google.Database-Example`) ### Coverage Report Generation -See [scripts/code_coverage_report/README.md](scripts/code_coverage_report/README.md). +See [scripts/code_coverage_report/README](scripts/code_coverage_report/README.md) Markdown file. ## Specific Component Instructions See the sections below for any special instructions for those components. @@ -250,61 +243,49 @@ physical device. ## Building with Firebase on Apple platforms -At this time, not all of Firebase's products are available across all Apple platforms. However, -Firebase is constantly evolving and community supported efforts have helped expand Firebase's support. -To keep up with the latest info regarding Firebase's support across Apple platforms, refer to +Firebase 8.9.0 introduces official beta support for macOS, Catalyst, and tvOS. watchOS continues +to be community supported. Thanks to community contributions for many of the multi-platform PRs. + +At this time, most of Firebase's products are available across Apple platforms. There are still +a few gaps, especially on watchOS. For details about the current support matrix, see [this chart](https://firebase.google.com/docs/ios/learn-more#firebase_library_support_by_platform) in Firebase's documentation. -### Community Supported Efforts - -We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are -very grateful! We'd like to empower as many developers as we can to be able to use Firebase and -participate in the Firebase community. - -#### tvOS, macOS, watchOS and Catalyst +### watchOS Thanks to contributions from the community, many of Firebase SDKs now compile, run unit tests, and -work on tvOS, macOS, watchOS and Catalyst. +work on watchOS. See the [Independent Watch App Sample](Example/watchOSSample). -For tvOS, see the [Sample](Example/tvOSSample). -For watchOS, currently only Messaging, Storage and Crashlytics (and their dependencies) have limited -support. See the [Independent Watch App Sample](Example/watchOSSample). - -Keep in mind that macOS, tvOS, watchOS and Catalyst are not officially supported by Firebase, and -this repository is actively developed primarily for iOS. While we can catch basic unit test issues -with GitHub Actions, there may be some changes where the SDK no longer works as expected on macOS, -tvOS or watchOS. If you encounter this, please +Keep in mind that watchOS is not officially supported by Firebase. While we can catch basic unit +test issues with GitHub Actions, there may be some changes where the SDK no longer works as expected +on watchOS. If you encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues). During app setup in the console, you may get to a step that mentions something like "Checking if the -app has communicated with our servers". This relies on Analytics and will not work on -macOS/tvOS/watchOS/Catalyst. +app has communicated with our servers". This relies on Analytics and will not work on watchOS. **It's safe to ignore the message and continue**, the rest of the SDKs will work as expected. -#### Additional MacOS and Catalyst Notes - -* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability` -to Build Settings. -* For Catalyst, FirebaseFirestore requires signing the -[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681). - #### Additional Crashlytics Notes * watchOS has limited support. Due to watchOS restrictions, mach exceptions and signal crashes are not recorded. (Crashes in SwiftUI are generated as mach exceptions, so will not be recorded) +## Combine +Thanks to contributions from the community, _FirebaseCombineSwift_ contains support for Apple's Combine +framework. This module is currently under development, and not yet supported for use in production +environments. Fore more details, please refer to the [docs](FirebaseCombineSwift/README.md). + ## Roadmap -See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source +See [Roadmap](ROADMAP.md) for more about the Firebase Apple SDK Open Source plans and directions. ## Contributing See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase -iOS SDK. +Apple SDK. ## License -The contents of this repository is licensed under the +The contents of this repository are licensed under the [Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0). Your use of Firebase is governed by the diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/Info.plist b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/Info.plist new file mode 100644 index 0000000000..f0625fec1a --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/Info.plist @@ -0,0 +1,97 @@ + + + + + AvailableLibraries + + + LibraryIdentifier + tvos-arm64 + LibraryPath + FirebaseAnalytics.framework + SupportedArchitectures + + arm64 + + SupportedPlatform + tvos + + + LibraryIdentifier + ios-arm64_i386_x86_64-simulator + LibraryPath + FirebaseAnalytics.framework + SupportedArchitectures + + arm64 + i386 + x86_64 + + SupportedPlatform + ios + SupportedPlatformVariant + simulator + + + LibraryIdentifier + ios-arm64_armv7 + LibraryPath + FirebaseAnalytics.framework + SupportedArchitectures + + arm64 + armv7 + + SupportedPlatform + ios + + + LibraryIdentifier + tvos-arm64_x86_64-simulator + LibraryPath + FirebaseAnalytics.framework + SupportedArchitectures + + arm64 + x86_64 + + SupportedPlatform + tvos + SupportedPlatformVariant + simulator + + + LibraryIdentifier + ios-arm64_x86_64-maccatalyst + LibraryPath + FirebaseAnalytics.framework + SupportedArchitectures + + arm64 + x86_64 + + SupportedPlatform + ios + SupportedPlatformVariant + maccatalyst + + + LibraryIdentifier + macos-arm64_x86_64 + LibraryPath + FirebaseAnalytics.framework + SupportedArchitectures + + arm64 + x86_64 + + SupportedPlatform + macos + + + CFBundlePackageType + XFWK + XCFrameworkFormatVersion + 1.0 + + diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/FirebaseAnalytics b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/FirebaseAnalytics new file mode 100644 index 0000000000..e6d99e92f7 Binary files /dev/null and b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/FirebaseAnalytics differ diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h new file mode 100644 index 0000000000..d499af668b --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h @@ -0,0 +1,62 @@ +#import + +#import "FIRAnalytics.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + * Provides App Delegate handlers to be used in your App Delegate. + * + * To save time integrating Firebase Analytics in an application, Firebase Analytics does not + * require delegation implementation from the AppDelegate. Instead this is automatically done by + * Firebase Analytics. Should you choose instead to delegate manually, you can turn off the App + * Delegate Proxy by adding FirebaseAppDelegateProxyEnabled into your app's Info.plist and setting + * it to NO, and adding the methods in this category to corresponding delegation handlers. + * + * To handle Universal Links, you must return YES in + * [UIApplicationDelegate application:didFinishLaunchingWithOptions:]. + */ +@interface FIRAnalytics (AppDelegate) + +/** + * Handles events related to a URL session that are waiting to be processed. + * + * For optimal use of Firebase Analytics, call this method from the + * [UIApplicationDelegate application:handleEventsForBackgroundURLSession:completionHandler] + * method of the app delegate in your app. + * + * @param identifier The identifier of the URL session requiring attention. + * @param completionHandler The completion handler to call when you finish processing the events. + * Calling this completion handler lets the system know that your app's user interface is + * updated and a new snapshot can be taken. + */ ++ (void)handleEventsForBackgroundURLSession:(NSString *)identifier + completionHandler:(nullable void (^)(void))completionHandler; + +/** + * Handles the event when the app is launched by a URL. + * + * Call this method from [UIApplicationDelegate application:openURL:options:] (on iOS 9.0 and + * above), or [UIApplicationDelegate application:openURL:sourceApplication:annotation:] (on + * iOS 8.x and below) in your app. + * + * @param url The URL resource to open. This resource can be a network resource or a file. + */ ++ (void)handleOpenURL:(NSURL *)url; + +/** + * Handles the event when the app receives data associated with user activity that includes a + * Universal Link (on iOS 9.0 and above). + * + * Call this method from [UIApplication continueUserActivity:restorationHandler:] in your app + * delegate (on iOS 9.0 and above). + * + * @param userActivity The activity object containing the data associated with the task the user + * was performing. + */ ++ (void)handleUserActivity:(id)userActivity; + +@end + +NS_ASSUME_NONNULL_END + diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FIRAnalytics+Consent.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FIRAnalytics+Consent.h new file mode 100644 index 0000000000..686a386ec6 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FIRAnalytics+Consent.h @@ -0,0 +1,33 @@ +#import + +#import "FIRAnalytics.h" + +NS_ASSUME_NONNULL_BEGIN + +/// The type of consent to set. Supported consent types are `ConsentType.adStorage` and +/// `ConsentType.analyticsStorage`. Omitting a type retains its previous status. +typedef NSString *FIRConsentType NS_TYPED_ENUM NS_SWIFT_NAME(ConsentType); +extern FIRConsentType const FIRConsentTypeAdStorage; +extern FIRConsentType const FIRConsentTypeAnalyticsStorage; + +/// The status value of the consent type. Supported statuses are `ConsentStatus.granted` and +/// `ConsentStatus.denied`. +typedef NSString *FIRConsentStatus NS_TYPED_ENUM NS_SWIFT_NAME(ConsentStatus); +extern FIRConsentStatus const FIRConsentStatusDenied; +extern FIRConsentStatus const FIRConsentStatusGranted; + +/// Sets the applicable end user consent state. +@interface FIRAnalytics (Consent) + +/// Sets the applicable end user consent state (e.g. for device identifiers) for this app on this +/// device. Use the consent settings to specify individual consent type values. Settings are +/// persisted across app sessions. By default consent types are set to `ConsentStatus.granted`. +/// +/// @param consentSettings An NSDictionary of consent types. Supported consent type keys are +/// `ConsentType.adStorage` and `ConsentType.analyticsStorage`. Valid values are +/// `ConsentStatus.granted` and `ConsentStatus.denied`. ++ (void)setConsent:(NSDictionary *)consentSettings; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FIRAnalytics.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FIRAnalytics.h new file mode 100644 index 0000000000..b9de09407d --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FIRAnalytics.h @@ -0,0 +1,142 @@ +#import + +#import "FIREventNames.h" +#import "FIRParameterNames.h" +#import "FIRUserPropertyNames.h" + +NS_ASSUME_NONNULL_BEGIN + +/// The top level Firebase Analytics singleton that provides methods for logging events and setting +/// user properties. See
the developer guides for general +/// information on using Firebase Analytics in your apps. +/// +/// @note The Analytics SDK uses SQLite to persist events and other app-specific data. Calling +/// certain thread-unsafe global SQLite methods like `sqlite3_shutdown()` can result in +/// unexpected crashes at runtime. +NS_SWIFT_NAME(Analytics) +@interface FIRAnalytics : NSObject + +/// Logs an app event. The event can have up to 25 parameters. Events with the same name must have +/// the same parameters. Up to 500 event names are supported. Using predefined events and/or +/// parameters is recommended for optimal reporting. +/// +/// The following event names are reserved and cannot be used: +///
    +///
  • ad_activeview
  • +///
  • ad_click
  • +///
  • ad_exposure
  • +///
  • ad_query
  • +///
  • ad_reward
  • +///
  • adunit_exposure
  • +///
  • app_background
  • +///
  • app_clear_data
  • +///
  • app_exception
  • +///
  • app_remove
  • +///
  • app_store_refund
  • +///
  • app_store_subscription_cancel
  • +///
  • app_store_subscription_convert
  • +///
  • app_store_subscription_renew
  • +///
  • app_update
  • +///
  • app_upgrade
  • +///
  • dynamic_link_app_open
  • +///
  • dynamic_link_app_update
  • +///
  • dynamic_link_first_open
  • +///
  • error
  • +///
  • firebase_campaign
  • +///
  • first_open
  • +///
  • first_visit
  • +///
  • in_app_purchase
  • +///
  • notification_dismiss
  • +///
  • notification_foreground
  • +///
  • notification_open
  • +///
  • notification_receive
  • +///
  • os_update
  • +///
  • session_start
  • +///
  • session_start_with_rollout
  • +///
  • user_engagement
  • +///
+/// +/// @param name The name of the event. Should contain 1 to 40 alphanumeric characters or +/// underscores. The name must start with an alphabetic character. Some event names are +/// reserved. See FIREventNames.h for the list of reserved event names. The "firebase_", +/// "google_", and "ga_" prefixes are reserved and should not be used. Note that event names are +/// case-sensitive and that logging two events whose names differ only in case will result in +/// two distinct events. To manually log screen view events, use the `screen_view` event name. +/// @param parameters The dictionary of event parameters. Passing nil indicates that the event has +/// no parameters. Parameter names can be up to 40 characters long and must start with an +/// alphabetic character and contain only alphanumeric characters and underscores. Only NSString +/// and NSNumber (signed 64-bit integer and 64-bit floating-point number) parameter types are +/// supported. NSString parameter values can be up to 100 characters long. The "firebase_", +/// "google_", and "ga_" prefixes are reserved and should not be used for parameter names. ++ (void)logEventWithName:(NSString *)name + parameters:(nullable NSDictionary *)parameters + NS_SWIFT_NAME(logEvent(_:parameters:)); + +/// Sets a user property to a given value. Up to 25 user property names are supported. Once set, +/// user property values persist throughout the app lifecycle and across sessions. +/// +/// The following user property names are reserved and cannot be used: +///
    +///
  • first_open_time
  • +///
  • last_deep_link_referrer
  • +///
  • user_id
  • +///
+/// +/// @param value The value of the user property. Values can be up to 36 characters long. Setting the +/// value to nil removes the user property. +/// @param name The name of the user property to set. Should contain 1 to 24 alphanumeric characters +/// or underscores and must start with an alphabetic character. The "firebase_", "google_", and +/// "ga_" prefixes are reserved and should not be used for user property names. ++ (void)setUserPropertyString:(nullable NSString *)value forName:(NSString *)name + NS_SWIFT_NAME(setUserProperty(_:forName:)); + +/// Sets the user ID property. This feature must be used in accordance with +/// Google's Privacy Policy +/// +/// @param userID The user ID to ascribe to the user of this app on this device, which must be +/// non-empty and no more than 256 characters long. Setting userID to nil removes the user ID. ++ (void)setUserID:(nullable NSString *)userID; + +/// Sets whether analytics collection is enabled for this app on this device. This setting is +/// persisted across app sessions. By default it is enabled. +/// +/// @param analyticsCollectionEnabled A flag that enables or disables Analytics collection. ++ (void)setAnalyticsCollectionEnabled:(BOOL)analyticsCollectionEnabled; + +/// Sets the interval of inactivity in seconds that terminates the current session. The default +/// value is 1800 seconds (30 minutes). +/// +/// @param sessionTimeoutInterval The custom time of inactivity in seconds before the current +/// session terminates. ++ (void)setSessionTimeoutInterval:(NSTimeInterval)sessionTimeoutInterval; + +/// Returns the unique ID for this instance of the application or nil if +/// `ConsentType.analyticsStorage` has been set to `ConsentStatus.denied`. +/// +/// @see `FIRAnalytics+Consent.h` ++ (nullable NSString *)appInstanceID; + +/// Clears all analytics data for this instance from the device and resets the app instance ID. +/// FIRAnalyticsConfiguration values will be reset to the default values. ++ (void)resetAnalyticsData; + +/// Adds parameters that will be set on every event logged from the SDK, including automatic ones. +/// The values passed in the parameters dictionary will be added to the dictionary of default event +/// parameters. These parameters persist across app runs. They are of lower precedence than event +/// parameters, so if an event parameter and a parameter set using this API have the same name, the +/// value of the event parameter will be used. The same limitations on event parameters apply to +/// default event parameters. +/// +/// @param parameters Parameters to be added to the dictionary of parameters added to every event. +/// They will be added to the dictionary of default event parameters, replacing any existing +/// parameter with the same name. Valid parameters are NSString and NSNumber (signed 64-bit +/// integer and 64-bit floating-point number). Setting a key's value to [NSNull null] will clear +/// that parameter. Passing in a nil dictionary will clear all parameters. ++ (void)setDefaultEventParameters:(nullable NSDictionary *)parameters; + +/// Unavailable. +- (instancetype)init NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FIREventNames.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FIREventNames.h new file mode 100644 index 0000000000..3f85456342 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FIREventNames.h @@ -0,0 +1,499 @@ +/// @file FIREventNames.h +/// +/// Predefined event names. +/// +/// An Event is an important occurrence in your app that you want to measure. You can report up to +/// 500 different types of Events per app and you can associate up to 25 unique parameters with each +/// Event type. Some common events are suggested below, but you may also choose to specify custom +/// Event types that are associated with your specific app. Each event type is identified by a +/// unique name. Event names can be up to 40 characters long, may only contain alphanumeric +/// characters and underscores ("_"), and must start with an alphabetic character. The "firebase_", +/// "google_", and "ga_" prefixes are reserved and should not be used. + +#import + +/// Ad Impression event. This event signifies when a user sees an ad impression. Note: If you supply +/// the @c kFIRParameterValue parameter, you must also supply the @c kFIRParameterCurrency parameter +/// so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterAdPlatform (NSString) (optional)
  • +///
  • @c kFIRParameterAdFormat (NSString) (optional)
  • +///
  • @c kFIRParameterAdSource (NSString) (optional)
  • +///
  • @c kFIRParameterAdUnitName (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventAdImpression NS_SWIFT_NAME(AnalyticsEventAdImpression) = + @"ad_impression"; + +/// Add Payment Info event. This event signifies that a user has submitted their payment +/// information. Note: If you supply the @c kFIRParameterValue parameter, you must also supply the +/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterPaymentType (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventAddPaymentInfo NS_SWIFT_NAME(AnalyticsEventAddPaymentInfo) = + @"add_payment_info"; + +/// Add Shipping Info event. This event signifies that a user has submitted their shipping +/// information. Note: If you supply the @c kFIRParameterValue parameter, you must also supply the +/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterShippingTier (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventAddShippingInfo NS_SWIFT_NAME(AnalyticsEventAddShippingInfo) = + @"add_shipping_info"; + +/// E-Commerce Add To Cart event. This event signifies that an item(s) was added to a cart for +/// purchase. Add this event to a funnel with @c kFIREventPurchase to gauge the effectiveness of +/// your checkout process. Note: If you supply the @c kFIRParameterValue parameter, you must also +/// supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed +/// accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventAddToCart NS_SWIFT_NAME(AnalyticsEventAddToCart) = @"add_to_cart"; + +/// E-Commerce Add To Wishlist event. This event signifies that an item was added to a wishlist. Use +/// this event to identify popular gift items. Note: If you supply the @c kFIRParameterValue +/// parameter, you must also supply the @c kFIRParameterCurrency parameter so that revenue metrics +/// can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventAddToWishlist NS_SWIFT_NAME(AnalyticsEventAddToWishlist) = + @"add_to_wishlist"; + +/// App Open event. By logging this event when an App becomes active, developers can understand how +/// often users leave and return during the course of a Session. Although Sessions are automatically +/// reported, this event can provide further clarification around the continuous engagement of +/// app-users. +static NSString *const kFIREventAppOpen NS_SWIFT_NAME(AnalyticsEventAppOpen) = @"app_open"; + +/// E-Commerce Begin Checkout event. This event signifies that a user has begun the process of +/// checking out. Add this event to a funnel with your @c kFIREventPurchase event to gauge the +/// effectiveness of your checkout process. Note: If you supply the @c kFIRParameterValue parameter, +/// you must also supply the @c kFIRParameterCurrency parameter so that revenue metrics can be +/// computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventBeginCheckout NS_SWIFT_NAME(AnalyticsEventBeginCheckout) = + @"begin_checkout"; + +/// Campaign Detail event. Log this event to supply the referral details of a re-engagement +/// campaign. Note: you must supply at least one of the required parameters kFIRParameterSource, +/// kFIRParameterMedium or kFIRParameterCampaign. Params: +/// +///
    +///
  • @c kFIRParameterSource (NSString)
  • +///
  • @c kFIRParameterMedium (NSString)
  • +///
  • @c kFIRParameterCampaign (NSString)
  • +///
  • @c kFIRParameterTerm (NSString) (optional)
  • +///
  • @c kFIRParameterContent (NSString) (optional)
  • +///
  • @c kFIRParameterAdNetworkClickID (NSString) (optional)
  • +///
  • @c kFIRParameterCP1 (NSString) (optional)
  • +///
  • @c kFIRParameterCampaignID (NSString) (optional)
  • +///
  • @c kFIRParameterCreativeFormat (NSString) (optional)
  • +///
  • @c kFIRParameterMarketingTactic (NSString) (optional)
  • +///
  • @c kFIRParameterSourcePlatform (NSString) (optional)
  • +///
+static NSString *const kFIREventCampaignDetails NS_SWIFT_NAME(AnalyticsEventCampaignDetails) = + @"campaign_details"; + +/// Checkout progress. Params: +/// +///
    +///
  • @c kFIRParameterCheckoutStep (unsigned 64-bit integer as NSNumber)
  • +///
  • @c kFIRParameterCheckoutOption (NSString) (optional)
  • +///
+/// This constant has been deprecated. +static NSString *const kFIREventCheckoutProgress NS_SWIFT_NAME(AnalyticsEventCheckoutProgress) = + @"checkout_progress"; + +/// Earn Virtual Currency event. This event tracks the awarding of virtual currency in your app. Log +/// this along with @c kFIREventSpendVirtualCurrency to better understand your virtual economy. +/// Params: +/// +///
    +///
  • @c kFIRParameterVirtualCurrencyName (NSString)
  • +///
  • @c kFIRParameterValue (signed 64-bit integer or double as NSNumber)
  • +///
+static NSString *const kFIREventEarnVirtualCurrency + NS_SWIFT_NAME(AnalyticsEventEarnVirtualCurrency) = @"earn_virtual_currency"; + +/// E-Commerce Purchase event. This event signifies that an item was purchased by a user. Note: +/// This is different from the in-app purchase event, which is reported automatically for App +/// Store-based apps. Note: If you supply the @c kFIRParameterValue parameter, you must also +/// supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed +/// accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTransactionID (NSString) (optional)
  • +///
  • @c kFIRParameterTax (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterShipping (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterLocation (NSString) (optional)
  • +///
  • @c kFIRParameterStartDate (NSString) (optional)
  • +///
  • @c kFIRParameterEndDate (NSString) (optional)
  • +///
  • @c kFIRParameterNumberOfNights (signed 64-bit integer as NSNumber) (optional) for +/// hotel bookings
  • +///
  • @c kFIRParameterNumberOfRooms (signed 64-bit integer as NSNumber) (optional) for +/// hotel bookings
  • +///
  • @c kFIRParameterNumberOfPassengers (signed 64-bit integer as NSNumber) (optional) +/// for travel bookings
  • +///
  • @c kFIRParameterOrigin (NSString) (optional)
  • +///
  • @c kFIRParameterDestination (NSString) (optional)
  • +///
  • @c kFIRParameterTravelClass (NSString) (optional) for travel bookings
  • +///
+/// This constant has been deprecated. Use @c kFIREventPurchase constant instead. +static NSString *const kFIREventEcommercePurchase NS_SWIFT_NAME(AnalyticsEventEcommercePurchase) = + @"ecommerce_purchase"; + +/// Generate Lead event. Log this event when a lead has been generated in the app to understand the +/// efficacy of your install and re-engagement campaigns. Note: If you supply the +/// @c kFIRParameterValue parameter, you must also supply the @c kFIRParameterCurrency +/// parameter so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventGenerateLead NS_SWIFT_NAME(AnalyticsEventGenerateLead) = + @"generate_lead"; + +/// Join Group event. Log this event when a user joins a group such as a guild, team or family. Use +/// this event to analyze how popular certain groups or social features are in your app. Params: +/// +///
    +///
  • @c kFIRParameterGroupID (NSString)
  • +///
+static NSString *const kFIREventJoinGroup NS_SWIFT_NAME(AnalyticsEventJoinGroup) = @"join_group"; + +/// Level End event. Log this event when the user finishes a level. Params: +/// +///
    +///
  • @c kFIRParameterLevelName (NSString)
  • +///
  • @c kFIRParameterSuccess (NSString)
  • +///
+static NSString *const kFIREventLevelEnd NS_SWIFT_NAME(AnalyticsEventLevelEnd) = @"level_end"; + +/// Level Start event. Log this event when the user starts a new level. Params: +/// +///
    +///
  • @c kFIRParameterLevelName (NSString)
  • +///
+static NSString *const kFIREventLevelStart NS_SWIFT_NAME(AnalyticsEventLevelStart) = @"level_start"; + +/// Level Up event. This event signifies that a player has leveled up in your gaming app. It can +/// help you gauge the level distribution of your userbase and help you identify certain levels that +/// are difficult to pass. Params: +/// +///
    +///
  • @c kFIRParameterLevel (signed 64-bit integer as NSNumber)
  • +///
  • @c kFIRParameterCharacter (NSString) (optional)
  • +///
+static NSString *const kFIREventLevelUp NS_SWIFT_NAME(AnalyticsEventLevelUp) = @"level_up"; + +/// Login event. Apps with a login feature can report this event to signify that a user has logged +/// in. +static NSString *const kFIREventLogin NS_SWIFT_NAME(AnalyticsEventLogin) = @"login"; + +/// Post Score event. Log this event when the user posts a score in your gaming app. This event can +/// help you understand how users are actually performing in your game and it can help you correlate +/// high scores with certain audiences or behaviors. Params: +/// +///
    +///
  • @c kFIRParameterScore (signed 64-bit integer as NSNumber)
  • +///
  • @c kFIRParameterLevel (signed 64-bit integer as NSNumber) (optional)
  • +///
  • @c kFIRParameterCharacter (NSString) (optional)
  • +///
+static NSString *const kFIREventPostScore NS_SWIFT_NAME(AnalyticsEventPostScore) = @"post_score"; + +/// Present Offer event. This event signifies that the app has presented a purchase offer to a user. +/// Add this event to a funnel with the kFIREventAddToCart and kFIREventEcommercePurchase to gauge +/// your conversion process. Note: If you supply the @c kFIRParameterValue parameter, you must +/// also supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed +/// accurately. Params: +/// +///
    +///
  • @c kFIRParameterQuantity (signed 64-bit integer as NSNumber)
  • +///
  • @c kFIRParameterItemID (NSString)
  • +///
  • @c kFIRParameterItemName (NSString)
  • +///
  • @c kFIRParameterItemCategory (NSString)
  • +///
  • @c kFIRParameterItemLocationID (NSString) (optional)
  • +///
  • @c kFIRParameterPrice (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+/// This constant has been deprecated. Use @c kFIREventViewPromotion constant instead. +static NSString *const kFIREventPresentOffer NS_SWIFT_NAME(AnalyticsEventPresentOffer) = + @"present_offer"; + +/// E-Commerce Purchase event. This event signifies that an item(s) was purchased by a user. Note: +/// This is different from the in-app purchase event, which is reported automatically for App +/// Store-based apps. Note: If you supply the @c kFIRParameterValue parameter, you must also supply +/// the @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. +/// Params: +/// +///
    +///
  • @c kFIRParameterAffiliation (NSString) (optional)
  • +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterShipping (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTax (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTransactionID (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventPurchase NS_SWIFT_NAME(AnalyticsEventPurchase) = @"purchase"; + +/// E-Commerce Purchase Refund event. This event signifies that an item purchase was refunded. +/// Note: If you supply the @c kFIRParameterValue parameter, you must also supply the +/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. +/// Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTransactionID (NSString) (optional)
  • +///
+/// This constant has been deprecated. Use @c kFIREventRefund constant instead. +static NSString *const kFIREventPurchaseRefund NS_SWIFT_NAME(AnalyticsEventPurchaseRefund) = + @"purchase_refund"; + +/// E-Commerce Refund event. This event signifies that a refund was issued. Note: If you supply the +/// @c kFIRParameterValue parameter, you must also supply the @c kFIRParameterCurrency parameter so +/// that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterAffiliation (NSString) (optional)
  • +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterShipping (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTax (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTransactionID (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventRefund NS_SWIFT_NAME(AnalyticsEventRefund) = @"refund"; + +/// E-Commerce Remove from Cart event. This event signifies that an item(s) was removed from a cart. +/// Note: If you supply the @c kFIRParameterValue parameter, you must also supply the @c +/// kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventRemoveFromCart NS_SWIFT_NAME(AnalyticsEventRemoveFromCart) = + @"remove_from_cart"; + +/// Screen View event. This event signifies a screen view. Use this when a screen transition occurs. +/// This event can be logged irrespective of whether automatic screen tracking is enabled. Params: +/// +///
    +///
  • @c kFIRParameterScreenClass (NSString) (optional)
  • +///
  • @c kFIRParameterScreenName (NSString) (optional)
  • +///
+static NSString *const kFIREventScreenView NS_SWIFT_NAME(AnalyticsEventScreenView) = @"screen_view"; + +/// Search event. Apps that support search features can use this event to contextualize search +/// operations by supplying the appropriate, corresponding parameters. This event can help you +/// identify the most popular content in your app. Params: +/// +///
    +///
  • @c kFIRParameterSearchTerm (NSString)
  • +///
  • @c kFIRParameterStartDate (NSString) (optional)
  • +///
  • @c kFIRParameterEndDate (NSString) (optional)
  • +///
  • @c kFIRParameterNumberOfNights (signed 64-bit integer as NSNumber) (optional) for +/// hotel bookings
  • +///
  • @c kFIRParameterNumberOfRooms (signed 64-bit integer as NSNumber) (optional) for +/// hotel bookings
  • +///
  • @c kFIRParameterNumberOfPassengers (signed 64-bit integer as NSNumber) (optional) +/// for travel bookings
  • +///
  • @c kFIRParameterOrigin (NSString) (optional)
  • +///
  • @c kFIRParameterDestination (NSString) (optional)
  • +///
  • @c kFIRParameterTravelClass (NSString) (optional) for travel bookings
  • +///
+static NSString *const kFIREventSearch NS_SWIFT_NAME(AnalyticsEventSearch) = @"search"; + +/// Select Content event. This general purpose event signifies that a user has selected some content +/// of a certain type in an app. The content can be any object in your app. This event can help you +/// identify popular content and categories of content in your app. Params: +/// +///
    +///
  • @c kFIRParameterContentType (NSString)
  • +///
  • @c kFIRParameterItemID (NSString)
  • +///
+static NSString *const kFIREventSelectContent NS_SWIFT_NAME(AnalyticsEventSelectContent) = + @"select_content"; + +/// Select Item event. This event signifies that an item was selected by a user from a list. Use the +/// appropriate parameters to contextualize the event. Use this event to discover the most popular +/// items selected. Params: +/// +///
    +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterItemListID (NSString) (optional)
  • +///
  • @c kFIRParameterItemListName (NSString) (optional)
  • +///
+static NSString *const kFIREventSelectItem NS_SWIFT_NAME(AnalyticsEventSelectItem) = @"select_item"; + +/// Select promotion event. This event signifies that a user has selected a promotion offer. Use the +/// appropriate parameters to contextualize the event, such as the item(s) for which the promotion +/// applies. Params: +/// +///
    +///
  • @c kFIRParameterCreativeName (NSString) (optional)
  • +///
  • @c kFIRParameterCreativeSlot (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterLocationID (NSString) (optional)
  • +///
  • @c kFIRParameterPromotionID (NSString) (optional)
  • +///
  • @c kFIRParameterPromotionName (NSString) (optional)
  • +///
+static NSString *const kFIREventSelectPromotion NS_SWIFT_NAME(AnalyticsEventSelectPromotion) = + @"select_promotion"; + +/// Set checkout option. Params: +/// +///
    +///
  • @c kFIRParameterCheckoutStep (unsigned 64-bit integer as NSNumber)
  • +///
  • @c kFIRParameterCheckoutOption (NSString)
  • +///
+/// This constant has been deprecated. +static NSString *const kFIREventSetCheckoutOption NS_SWIFT_NAME(AnalyticsEventSetCheckoutOption) = + @"set_checkout_option"; + +/// Share event. Apps with social features can log the Share event to identify the most viral +/// content. Params: +/// +///
    +///
  • @c kFIRParameterContentType (NSString)
  • +///
  • @c kFIRParameterItemID (NSString)
  • +///
+static NSString *const kFIREventShare NS_SWIFT_NAME(AnalyticsEventShare) = @"share"; + +/// Sign Up event. This event indicates that a user has signed up for an account in your app. The +/// parameter signifies the method by which the user signed up. Use this event to understand the +/// different behaviors between logged in and logged out users. Params: +/// +///
    +///
  • @c kFIRParameterSignUpMethod (NSString)
  • +///
+static NSString *const kFIREventSignUp NS_SWIFT_NAME(AnalyticsEventSignUp) = @"sign_up"; + +/// Spend Virtual Currency event. This event tracks the sale of virtual goods in your app and can +/// help you identify which virtual goods are the most popular objects of purchase. Params: +/// +///
    +///
  • @c kFIRParameterItemName (NSString)
  • +///
  • @c kFIRParameterVirtualCurrencyName (NSString)
  • +///
  • @c kFIRParameterValue (signed 64-bit integer or double as NSNumber)
  • +///
+static NSString *const kFIREventSpendVirtualCurrency + NS_SWIFT_NAME(AnalyticsEventSpendVirtualCurrency) = @"spend_virtual_currency"; + +/// Tutorial Begin event. This event signifies the start of the on-boarding process in your app. Use +/// this in a funnel with kFIREventTutorialComplete to understand how many users complete this +/// process and move on to the full app experience. +static NSString *const kFIREventTutorialBegin NS_SWIFT_NAME(AnalyticsEventTutorialBegin) = + @"tutorial_begin"; + +/// Tutorial End event. Use this event to signify the user's completion of your app's on-boarding +/// process. Add this to a funnel with kFIREventTutorialBegin to gauge the completion rate of your +/// on-boarding process. +static NSString *const kFIREventTutorialComplete NS_SWIFT_NAME(AnalyticsEventTutorialComplete) = + @"tutorial_complete"; + +/// Unlock Achievement event. Log this event when the user has unlocked an achievement in your +/// game. Since achievements generally represent the breadth of a gaming experience, this event can +/// help you understand how many users are experiencing all that your game has to offer. Params: +/// +///
    +///
  • @c kFIRParameterAchievementID (NSString)
  • +///
+static NSString *const kFIREventUnlockAchievement NS_SWIFT_NAME(AnalyticsEventUnlockAchievement) = + @"unlock_achievement"; + +/// E-commerce View Cart event. This event signifies that a user has viewed their cart. Use this to +/// analyze your purchase funnel. Note: If you supply the @c kFIRParameterValue parameter, you must +/// also supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed +/// accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventViewCart NS_SWIFT_NAME(AnalyticsEventViewCart) = @"view_cart"; + +/// View Item event. This event signifies that a user has viewed an item. Use the appropriate +/// parameters to contextualize the event. Use this event to discover the most popular items viewed +/// in your app. Note: If you supply the @c kFIRParameterValue parameter, you must also supply the +/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventViewItem NS_SWIFT_NAME(AnalyticsEventViewItem) = @"view_item"; + +/// View Item List event. Log this event when a user sees a list of items or offerings. Params: +/// +///
    +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterItemListID (NSString) (optional)
  • +///
  • @c kFIRParameterItemListName (NSString) (optional)
  • +///
+static NSString *const kFIREventViewItemList NS_SWIFT_NAME(AnalyticsEventViewItemList) = + @"view_item_list"; + +/// View Promotion event. This event signifies that a promotion was shown to a user. Add this event +/// to a funnel with the @c kFIREventAddToCart and @c kFIREventPurchase to gauge your conversion +/// process. Params: +/// +///
    +///
  • @c kFIRParameterCreativeName (NSString) (optional)
  • +///
  • @c kFIRParameterCreativeSlot (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterLocationID (NSString) (optional)
  • +///
  • @c kFIRParameterPromotionID (NSString) (optional)
  • +///
  • @c kFIRParameterPromotionName (NSString) (optional)
  • +///
+static NSString *const kFIREventViewPromotion NS_SWIFT_NAME(AnalyticsEventViewPromotion) = + @"view_promotion"; + +/// View Search Results event. Log this event when the user has been presented with the results of a +/// search. Params: +/// +///
    +///
  • @c kFIRParameterSearchTerm (NSString)
  • +///
+static NSString *const kFIREventViewSearchResults NS_SWIFT_NAME(AnalyticsEventViewSearchResults) = + @"view_search_results"; diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FIRParameterNames.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FIRParameterNames.h new file mode 100644 index 0000000000..fe3a6c47b4 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FIRParameterNames.h @@ -0,0 +1,776 @@ +/// @file FIRParameterNames.h +/// +/// Predefined event parameter names. +/// +/// Params supply information that contextualize Events. You can associate up to 25 unique Params +/// with each Event type. Some Params are suggested below for certain common Events, but you are +/// not limited to these. You may supply extra Params for suggested Events or custom Params for +/// Custom events. Param names can be up to 40 characters long, may only contain alphanumeric +/// characters and underscores ("_"), and must start with an alphabetic character. Param values can +/// be up to 100 characters long. The "firebase_", "google_", and "ga_" prefixes are reserved and +/// should not be used. + +#import + +/// Game achievement ID (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterAchievementID : @"10_matches_won",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAchievementID NS_SWIFT_NAME(AnalyticsParameterAchievementID) = + @"achievement_id"; + +/// The ad format (e.g. Banner, Interstitial, Rewarded, Native, Rewarded Interstitial, Instream). +/// (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterAdFormat : @"Banner",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAdFormat NS_SWIFT_NAME(AnalyticsParameterAdFormat) = + @"ad_format"; + +/// Ad Network Click ID (NSString). Used for network-specific click IDs which vary in format. +///
+///     NSDictionary *params = @{
+///       kFIRParameterAdNetworkClickID : @"1234567",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAdNetworkClickID + NS_SWIFT_NAME(AnalyticsParameterAdNetworkClickID) = @"aclid"; + +/// The ad platform (e.g. MoPub, IronSource) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterAdPlatform : @"MoPub",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAdPlatform NS_SWIFT_NAME(AnalyticsParameterAdPlatform) = + @"ad_platform"; + +/// The ad source (e.g. AdColony) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterAdSource : @"AdColony",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAdSource NS_SWIFT_NAME(AnalyticsParameterAdSource) = + @"ad_source"; + +/// The ad unit name (e.g. Banner_03) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterAdUnitName : @"Banner_03",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAdUnitName NS_SWIFT_NAME(AnalyticsParameterAdUnitName) = + @"ad_unit_name"; + +/// A product affiliation to designate a supplying company or brick and mortar store location +/// (NSString).
+///     NSDictionary *params = @{
+///       kFIRParameterAffiliation : @"Google Store",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAffiliation NS_SWIFT_NAME(AnalyticsParameterAffiliation) = + @"affiliation"; + +/// Campaign custom parameter (NSString). Used as a method of capturing custom data in a campaign. +/// Use varies by network. +///
+///     NSDictionary *params = @{
+///       kFIRParameterCP1 : @"custom_data",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCP1 NS_SWIFT_NAME(AnalyticsParameterCP1) = @"cp1"; + +/// The individual campaign name, slogan, promo code, etc. Some networks have pre-defined macro to +/// capture campaign information, otherwise can be populated by developer. Highly Recommended +/// (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCampaign : @"winter_promotion",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCampaign NS_SWIFT_NAME(AnalyticsParameterCampaign) = + @"campaign"; + +/// Campaign ID (NSString). Used for keyword analysis to identify a specific product promotion or +/// strategic campaign. This is a required key for GA4 data import. +///
+///     NSDictionary *params = @{
+///       kFIRParameterCampaignID : @"7877652710",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCampaignID NS_SWIFT_NAME(AnalyticsParameterCampaignID) = + @"campaign_id"; + +/// Character used in game (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCharacter : @"beat_boss",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCharacter NS_SWIFT_NAME(AnalyticsParameterCharacter) = + @"character"; + +/// Some option on a step in an ecommerce flow (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCheckoutOption : @"Visa",
+///       // ...
+///     };
+/// 
+/// This constant has been deprecated. +static NSString *const kFIRParameterCheckoutOption + NS_SWIFT_NAME(AnalyticsParameterCheckoutOption) = @"checkout_option"; + +/// The checkout step (1..N) (unsigned 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCheckoutStep : @"1",
+///       // ...
+///     };
+/// 
+/// This constant has been deprecated. +static NSString *const kFIRParameterCheckoutStep NS_SWIFT_NAME(AnalyticsParameterCheckoutStep) = + @"checkout_step"; + +/// Campaign content (NSString). +static NSString *const kFIRParameterContent NS_SWIFT_NAME(AnalyticsParameterContent) = @"content"; + +/// Type of content selected (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterContentType : @"news article",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterContentType NS_SWIFT_NAME(AnalyticsParameterContentType) = + @"content_type"; + +/// Coupon code used for a purchase (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCoupon : @"SUMMER_FUN",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCoupon NS_SWIFT_NAME(AnalyticsParameterCoupon) = @"coupon"; + +/// Creative Format (NSString). Used to identify the high-level classification of the type of ad +/// served by a specific campaign. +///
+///     NSDictionary *params = @{
+///       kFIRParameterCreativeFormat : @"display",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCreativeFormat NS_SWIFT_NAME(AnalyticsParameterCreativeFormat) = + @"creative_format"; + +/// The name of a creative used in a promotional spot (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCreativeName : @"Summer Sale",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCreativeName NS_SWIFT_NAME(AnalyticsParameterCreativeName) = + @"creative_name"; + +/// The name of a creative slot (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCreativeSlot : @"summer_banner2",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCreativeSlot NS_SWIFT_NAME(AnalyticsParameterCreativeSlot) = + @"creative_slot"; + +/// Currency of the purchase or items associated with the event, in 3-letter +/// ISO_4217 format (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCurrency : @"USD",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCurrency NS_SWIFT_NAME(AnalyticsParameterCurrency) = + @"currency"; + +/// Flight or Travel destination (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterDestination : @"Mountain View, CA",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterDestination NS_SWIFT_NAME(AnalyticsParameterDestination) = + @"destination"; + +/// Monetary value of discount associated with a purchase (double as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterDiscount : @(2.0),
+///       kFIRParameterCurrency : @"USD",  // e.g. $2.00 USD
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterDiscount NS_SWIFT_NAME(AnalyticsParameterDiscount) = + @"discount"; + +/// The arrival date, check-out date or rental end date for the item. This should be in +/// YYYY-MM-DD format (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterEndDate : @"2015-09-14",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterEndDate NS_SWIFT_NAME(AnalyticsParameterEndDate) = @"end_date"; + +/// Indicates that the associated event should either extend the current session +/// or start a new session if no session was active when the event was logged. +/// Specify YES to extend the current session or to start a new session; any +/// other value will not extend or start a session. +///
+///     NSDictionary *params = @{
+///       kFIRParameterExtendSession : @YES,
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterExtendSession NS_SWIFT_NAME(AnalyticsParameterExtendSession) = + @"extend_session"; + +/// Flight number for travel events (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterFlightNumber : @"ZZ800",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterFlightNumber NS_SWIFT_NAME(AnalyticsParameterFlightNumber) = + @"flight_number"; + +/// Group/clan/guild ID (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterGroupID : @"g1",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterGroupID NS_SWIFT_NAME(AnalyticsParameterGroupID) = @"group_id"; + +/// The index of the item in a list (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterIndex : @(5),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterIndex NS_SWIFT_NAME(AnalyticsParameterIndex) = @"index"; + +/// Item brand (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemBrand : @"Google",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemBrand NS_SWIFT_NAME(AnalyticsParameterItemBrand) = + @"item_brand"; + +/// Item category (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemCategory : @"pants",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemCategory NS_SWIFT_NAME(AnalyticsParameterItemCategory) = + @"item_category"; + +/// Item Category (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemCategory2 : @"pants",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemCategory2 NS_SWIFT_NAME(AnalyticsParameterItemCategory2) = + @"item_category2"; + +/// Item Category (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemCategory3 : @"pants",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemCategory3 NS_SWIFT_NAME(AnalyticsParameterItemCategory3) = + @"item_category3"; + +/// Item Category (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemCategory4 : @"pants",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemCategory4 NS_SWIFT_NAME(AnalyticsParameterItemCategory4) = + @"item_category4"; + +/// Item Category (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemCategory5 : @"pants",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemCategory5 NS_SWIFT_NAME(AnalyticsParameterItemCategory5) = + @"item_category5"; + +/// Item ID (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemID : @"SKU_12345",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemID NS_SWIFT_NAME(AnalyticsParameterItemID) = @"item_id"; + +/// The list in which the item was presented to the user (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemList : @"Search Results",
+///       // ...
+///     };
+/// 
+/// This constant has been deprecated. Use @c kFIRParameterItemListName constant instead. +static NSString *const kFIRParameterItemList NS_SWIFT_NAME(AnalyticsParameterItemList) = + @"item_list"; + +/// The ID of the list in which the item was presented to the user (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemListID : @"ABC123",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemListID NS_SWIFT_NAME(AnalyticsParameterItemListID) = + @"item_list_id"; + +/// The name of the list in which the item was presented to the user (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemListName : @"Related products",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemListName NS_SWIFT_NAME(AnalyticsParameterItemListName) = + @"item_list_name"; + +/// The Google Place ID (NSString) that +/// corresponds to the associated item. Alternatively, you can supply your own custom Location ID. +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemLocationID : @"ChIJiyj437sx3YAR9kUWC8QkLzQ",
+///       // ...
+///     };
+/// 
+/// This constant has been deprecated. Use @c kFIRParameterLocationID constant instead. +static NSString *const kFIRParameterItemLocationID + NS_SWIFT_NAME(AnalyticsParameterItemLocationID) = @"item_location_id"; + +/// Item Name (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemName : @"jeggings",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemName NS_SWIFT_NAME(AnalyticsParameterItemName) = + @"item_name"; + +/// Item variant (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemVariant : @"Black",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemVariant NS_SWIFT_NAME(AnalyticsParameterItemVariant) = + @"item_variant"; + +/// The list of items involved in the transaction. (NSArray). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItems : @[
+///         @{kFIRParameterItemName : @"jeggings", kFIRParameterItemCategory : @"pants"},
+///         @{kFIRParameterItemName : @"boots", kFIRParameterItemCategory : @"shoes"},
+///       ],
+///     };
+/// 
+static NSString *const kFIRParameterItems NS_SWIFT_NAME(AnalyticsParameterItems) = @"items"; + +/// Level in game (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterLevel : @(42),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterLevel NS_SWIFT_NAME(AnalyticsParameterLevel) = @"level"; + +/// The name of a level in a game (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterLevelName : @"room_1",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterLevelName NS_SWIFT_NAME(AnalyticsParameterLevelName) = + @"level_name"; + +/// Location (NSString). The Google Place ID +/// that corresponds to the associated event. Alternatively, you can supply your own custom +/// Location ID. +///
+///     NSDictionary *params = @{
+///       kFIRParameterLocation : @"ChIJiyj437sx3YAR9kUWC8QkLzQ",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterLocation NS_SWIFT_NAME(AnalyticsParameterLocation) = + @"location"; + +/// The location associated with the event. Preferred to be the Google +/// Place ID that corresponds to the +/// associated item but could be overridden to a custom location ID string.(NSString).
+///     NSDictionary *params = @{
+///       kFIRParameterLocationID : @"ChIJiyj437sx3YAR9kUWC8QkLzQ",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterLocationID NS_SWIFT_NAME(AnalyticsParameterLocationID) = + @"location_id"; + +/// Marketing Tactic (NSString). Used to identify the targeting criteria applied to a specific +/// campaign. +///
+///     NSDictionary *params = @{
+///       kFIRParameterMarketingTactic : @"Remarketing",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterMarketingTactic + NS_SWIFT_NAME(AnalyticsParameterMarketingTactic) = @"marketing_tactic"; + +/// The advertising or marketing medium, for example: cpc, banner, email, push. Highly recommended +/// (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterMedium : @"email",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterMedium NS_SWIFT_NAME(AnalyticsParameterMedium) = @"medium"; + +/// A particular approach used in an operation; for example, "facebook" or "email" in the context +/// of a sign_up or login event. (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterMethod : @"google",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterMethod NS_SWIFT_NAME(AnalyticsParameterMethod) = @"method"; + +/// Number of nights staying at hotel (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterNumberOfNights : @(3),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterNumberOfNights + NS_SWIFT_NAME(AnalyticsParameterNumberOfNights) = @"number_of_nights"; + +/// Number of passengers traveling (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterNumberOfPassengers : @(11),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterNumberOfPassengers + NS_SWIFT_NAME(AnalyticsParameterNumberOfPassengers) = @"number_of_passengers"; + +/// Number of rooms for travel events (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterNumberOfRooms : @(2),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterNumberOfRooms NS_SWIFT_NAME(AnalyticsParameterNumberOfRooms) = + @"number_of_rooms"; + +/// Flight or Travel origin (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterOrigin : @"Mountain View, CA",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterOrigin NS_SWIFT_NAME(AnalyticsParameterOrigin) = @"origin"; + +/// The chosen method of payment (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterPaymentType : @"Visa",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterPaymentType NS_SWIFT_NAME(AnalyticsParameterPaymentType) = + @"payment_type"; + +/// Purchase price (double as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterPrice : @(1.0),
+///       kFIRParameterCurrency : @"USD",  // e.g. $1.00 USD
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterPrice NS_SWIFT_NAME(AnalyticsParameterPrice) = @"price"; + +/// The ID of a product promotion (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterPromotionID : @"ABC123",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterPromotionID NS_SWIFT_NAME(AnalyticsParameterPromotionID) = + @"promotion_id"; + +/// The name of a product promotion (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterPromotionName : @"Summer Sale",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterPromotionName NS_SWIFT_NAME(AnalyticsParameterPromotionName) = + @"promotion_name"; + +/// Purchase quantity (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterQuantity : @(1),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterQuantity NS_SWIFT_NAME(AnalyticsParameterQuantity) = + @"quantity"; + +/// Score in game (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterScore : @(4200),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterScore NS_SWIFT_NAME(AnalyticsParameterScore) = @"score"; + +/// Current screen class, such as the class name of the UIViewController, logged with screen_view +/// event and added to every event (NSString).
+///     NSDictionary *params = @{
+///       kFIRParameterScreenClass : @"LoginViewController",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterScreenClass NS_SWIFT_NAME(AnalyticsParameterScreenClass) = + @"screen_class"; + +/// Current screen name, such as the name of the UIViewController, logged with screen_view event and +/// added to every event (NSString).
+///     NSDictionary *params = @{
+///       kFIRParameterScreenName : @"LoginView",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterScreenName NS_SWIFT_NAME(AnalyticsParameterScreenName) = + @"screen_name"; + +/// The search string/keywords used (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterSearchTerm : @"periodic table",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterSearchTerm NS_SWIFT_NAME(AnalyticsParameterSearchTerm) = + @"search_term"; + +/// Shipping cost associated with a transaction (double as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterShipping : @(5.99),
+///       kFIRParameterCurrency : @"USD",  // e.g. $5.99 USD
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterShipping NS_SWIFT_NAME(AnalyticsParameterShipping) = + @"shipping"; + +/// The shipping tier (e.g. Ground, Air, Next-day) selected for delivery of the purchased item +/// (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterShippingTier : @"Ground",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterShippingTier NS_SWIFT_NAME(AnalyticsParameterShippingTier) = + @"shipping_tier"; + +/// Sign up method (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterSignUpMethod : @"google",
+///       // ...
+///     };
+/// 
+/// +/// This constant has been deprecated. Use Method constant instead. +static NSString *const kFIRParameterSignUpMethod NS_SWIFT_NAME(AnalyticsParameterSignUpMethod) = + @"sign_up_method"; + +/// The origin of your traffic, such as an Ad network (for example, google) or partner (urban +/// airship). Identify the advertiser, site, publication, etc. that is sending traffic to your +/// property. Highly recommended (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterSource : @"InMobi",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterSource NS_SWIFT_NAME(AnalyticsParameterSource) = @"source"; + +/// Source Platform (NSString). Used to identify the platform responsible for directing traffic to a +/// given Analytics property (e.g., a buying platform where budgets, targeting criteria, etc. are +/// set, a platform for managing organic traffic data, etc.). +///
+///     NSDictionary *params = @{
+///       kFIRParameterSourcePlatform : @"sa360",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterSourcePlatform NS_SWIFT_NAME(AnalyticsParameterSourcePlatform) = + @"source_platform"; + +/// The departure date, check-in date or rental start date for the item. This should be in +/// YYYY-MM-DD format (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterStartDate : @"2015-09-14",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterStartDate NS_SWIFT_NAME(AnalyticsParameterStartDate) = + @"start_date"; + +/// The result of an operation. Specify 1 to indicate success and 0 to indicate failure (unsigned +/// integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterSuccess : @(1),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterSuccess NS_SWIFT_NAME(AnalyticsParameterSuccess) = @"success"; + +/// Tax cost associated with a transaction (double as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterTax : @(2.43),
+///       kFIRParameterCurrency : @"USD",  // e.g. $2.43 USD
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterTax NS_SWIFT_NAME(AnalyticsParameterTax) = @"tax"; + +/// If you're manually tagging keyword campaigns, you should use utm_term to specify the keyword +/// (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterTerm : @"game",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterTerm NS_SWIFT_NAME(AnalyticsParameterTerm) = @"term"; + +/// The unique identifier of a transaction (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterTransactionID : @"T12345",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterTransactionID NS_SWIFT_NAME(AnalyticsParameterTransactionID) = + @"transaction_id"; + +/// Travel class (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterTravelClass : @"business",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterTravelClass NS_SWIFT_NAME(AnalyticsParameterTravelClass) = + @"travel_class"; + +/// A context-specific numeric value which is accumulated automatically for each event type. This is +/// a general purpose parameter that is useful for accumulating a key metric that pertains to an +/// event. Examples include revenue, distance, time and points. Value should be specified as signed +/// 64-bit integer or double as NSNumber. Notes: Values for pre-defined currency-related events +/// (such as @c kFIREventAddToCart) should be supplied using double as NSNumber and must be +/// accompanied by a @c kFIRParameterCurrency parameter. The valid range of accumulated values is +/// [-9,223,372,036,854.77, 9,223,372,036,854.77]. Supplying a non-numeric value, omitting the +/// corresponding @c kFIRParameterCurrency parameter, or supplying an invalid +/// currency code for conversion events will cause that +/// conversion to be omitted from reporting. +///
+///     NSDictionary *params = @{
+///       kFIRParameterValue : @(3.99),
+///       kFIRParameterCurrency : @"USD",  // e.g. $3.99 USD
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterValue NS_SWIFT_NAME(AnalyticsParameterValue) = @"value"; + +/// Name of virtual currency type (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterVirtualCurrencyName : @"virtual_currency_name",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterVirtualCurrencyName + NS_SWIFT_NAME(AnalyticsParameterVirtualCurrencyName) = @"virtual_currency_name"; diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h new file mode 100644 index 0000000000..b3510fa93e --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h @@ -0,0 +1,29 @@ +/// @file FIRUserPropertyNames.h +/// +/// Predefined user property names. +/// +/// A UserProperty is an attribute that describes the app-user. By supplying UserProperties, you can +/// later analyze different behaviors of various segments of your userbase. You may supply up to 25 +/// unique UserProperties per app, and you can use the name and value of your choosing for each one. +/// UserProperty names can be up to 24 characters long, may only contain alphanumeric characters and +/// underscores ("_"), and must start with an alphabetic character. UserProperty values can be up to +/// 36 characters long. The "firebase_", "google_", and "ga_" prefixes are reserved and should not +/// be used. + +#import + +/// Indicates whether events logged by Google Analytics can be used to personalize ads for the user. +/// Set to "YES" to enable, or "NO" to disable. Default is enabled. See the +/// documentation for +/// more details and information about related settings. +/// +///
+///     [FIRAnalytics setUserPropertyString:@"NO"
+///                                 forName:kFIRUserPropertyAllowAdPersonalizationSignals];
+/// 
+static NSString *const kFIRUserPropertyAllowAdPersonalizationSignals + NS_SWIFT_NAME(AnalyticsUserPropertyAllowAdPersonalizationSignals) = @"allow_personalized_ads"; + +/// The method used to sign in. For example, "google", "facebook" or "twitter". +static NSString *const kFIRUserPropertySignUpMethod + NS_SWIFT_NAME(AnalyticsUserPropertySignUpMethod) = @"sign_up_method"; diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h new file mode 100644 index 0000000000..368f79c992 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h @@ -0,0 +1,6 @@ +#import "FIRAnalytics+AppDelegate.h" +#import "FIRAnalytics+Consent.h" +#import "FIRAnalytics.h" +#import "FIREventNames.h" +#import "FIRParameterNames.h" +#import "FIRUserPropertyNames.h" diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Info.plist b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Info.plist new file mode 100644 index 0000000000..efd0a1d201 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleExecutable + FirebaseAnalytics + CFBundleIdentifier + com.firebase.Firebase-FirebaseAnalytics + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + FirebaseAnalytics + CFBundlePackageType + FMWK + CFBundleVersion + 8.12.0 + DTSDKName + iphonesimulator11.2 + + diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Modules/module.modulemap b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Modules/module.modulemap new file mode 100644 index 0000000000..aa72782964 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Modules/module.modulemap @@ -0,0 +1,13 @@ +framework module FirebaseAnalytics { +umbrella header "FirebaseAnalytics.h" +export * +module * { export * } + link framework "CoreTelephony" + link framework "Foundation" + link framework "Security" + link framework "SystemConfiguration" + link framework "UIKit" + link "c++" + link "sqlite3" + link "z" +} diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/FirebaseAnalytics b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/FirebaseAnalytics new file mode 100644 index 0000000000..7ca93317d3 Binary files /dev/null and b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/FirebaseAnalytics differ diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h new file mode 100644 index 0000000000..d499af668b --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h @@ -0,0 +1,62 @@ +#import + +#import "FIRAnalytics.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + * Provides App Delegate handlers to be used in your App Delegate. + * + * To save time integrating Firebase Analytics in an application, Firebase Analytics does not + * require delegation implementation from the AppDelegate. Instead this is automatically done by + * Firebase Analytics. Should you choose instead to delegate manually, you can turn off the App + * Delegate Proxy by adding FirebaseAppDelegateProxyEnabled into your app's Info.plist and setting + * it to NO, and adding the methods in this category to corresponding delegation handlers. + * + * To handle Universal Links, you must return YES in + * [UIApplicationDelegate application:didFinishLaunchingWithOptions:]. + */ +@interface FIRAnalytics (AppDelegate) + +/** + * Handles events related to a URL session that are waiting to be processed. + * + * For optimal use of Firebase Analytics, call this method from the + * [UIApplicationDelegate application:handleEventsForBackgroundURLSession:completionHandler] + * method of the app delegate in your app. + * + * @param identifier The identifier of the URL session requiring attention. + * @param completionHandler The completion handler to call when you finish processing the events. + * Calling this completion handler lets the system know that your app's user interface is + * updated and a new snapshot can be taken. + */ ++ (void)handleEventsForBackgroundURLSession:(NSString *)identifier + completionHandler:(nullable void (^)(void))completionHandler; + +/** + * Handles the event when the app is launched by a URL. + * + * Call this method from [UIApplicationDelegate application:openURL:options:] (on iOS 9.0 and + * above), or [UIApplicationDelegate application:openURL:sourceApplication:annotation:] (on + * iOS 8.x and below) in your app. + * + * @param url The URL resource to open. This resource can be a network resource or a file. + */ ++ (void)handleOpenURL:(NSURL *)url; + +/** + * Handles the event when the app receives data associated with user activity that includes a + * Universal Link (on iOS 9.0 and above). + * + * Call this method from [UIApplication continueUserActivity:restorationHandler:] in your app + * delegate (on iOS 9.0 and above). + * + * @param userActivity The activity object containing the data associated with the task the user + * was performing. + */ ++ (void)handleUserActivity:(id)userActivity; + +@end + +NS_ASSUME_NONNULL_END + diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRAnalytics+Consent.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRAnalytics+Consent.h new file mode 100644 index 0000000000..686a386ec6 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRAnalytics+Consent.h @@ -0,0 +1,33 @@ +#import + +#import "FIRAnalytics.h" + +NS_ASSUME_NONNULL_BEGIN + +/// The type of consent to set. Supported consent types are `ConsentType.adStorage` and +/// `ConsentType.analyticsStorage`. Omitting a type retains its previous status. +typedef NSString *FIRConsentType NS_TYPED_ENUM NS_SWIFT_NAME(ConsentType); +extern FIRConsentType const FIRConsentTypeAdStorage; +extern FIRConsentType const FIRConsentTypeAnalyticsStorage; + +/// The status value of the consent type. Supported statuses are `ConsentStatus.granted` and +/// `ConsentStatus.denied`. +typedef NSString *FIRConsentStatus NS_TYPED_ENUM NS_SWIFT_NAME(ConsentStatus); +extern FIRConsentStatus const FIRConsentStatusDenied; +extern FIRConsentStatus const FIRConsentStatusGranted; + +/// Sets the applicable end user consent state. +@interface FIRAnalytics (Consent) + +/// Sets the applicable end user consent state (e.g. for device identifiers) for this app on this +/// device. Use the consent settings to specify individual consent type values. Settings are +/// persisted across app sessions. By default consent types are set to `ConsentStatus.granted`. +/// +/// @param consentSettings An NSDictionary of consent types. Supported consent type keys are +/// `ConsentType.adStorage` and `ConsentType.analyticsStorage`. Valid values are +/// `ConsentStatus.granted` and `ConsentStatus.denied`. ++ (void)setConsent:(NSDictionary *)consentSettings; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRAnalytics.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRAnalytics.h new file mode 100644 index 0000000000..b9de09407d --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRAnalytics.h @@ -0,0 +1,142 @@ +#import + +#import "FIREventNames.h" +#import "FIRParameterNames.h" +#import "FIRUserPropertyNames.h" + +NS_ASSUME_NONNULL_BEGIN + +/// The top level Firebase Analytics singleton that provides methods for logging events and setting +/// user properties. See the developer guides for general +/// information on using Firebase Analytics in your apps. +/// +/// @note The Analytics SDK uses SQLite to persist events and other app-specific data. Calling +/// certain thread-unsafe global SQLite methods like `sqlite3_shutdown()` can result in +/// unexpected crashes at runtime. +NS_SWIFT_NAME(Analytics) +@interface FIRAnalytics : NSObject + +/// Logs an app event. The event can have up to 25 parameters. Events with the same name must have +/// the same parameters. Up to 500 event names are supported. Using predefined events and/or +/// parameters is recommended for optimal reporting. +/// +/// The following event names are reserved and cannot be used: +///
    +///
  • ad_activeview
  • +///
  • ad_click
  • +///
  • ad_exposure
  • +///
  • ad_query
  • +///
  • ad_reward
  • +///
  • adunit_exposure
  • +///
  • app_background
  • +///
  • app_clear_data
  • +///
  • app_exception
  • +///
  • app_remove
  • +///
  • app_store_refund
  • +///
  • app_store_subscription_cancel
  • +///
  • app_store_subscription_convert
  • +///
  • app_store_subscription_renew
  • +///
  • app_update
  • +///
  • app_upgrade
  • +///
  • dynamic_link_app_open
  • +///
  • dynamic_link_app_update
  • +///
  • dynamic_link_first_open
  • +///
  • error
  • +///
  • firebase_campaign
  • +///
  • first_open
  • +///
  • first_visit
  • +///
  • in_app_purchase
  • +///
  • notification_dismiss
  • +///
  • notification_foreground
  • +///
  • notification_open
  • +///
  • notification_receive
  • +///
  • os_update
  • +///
  • session_start
  • +///
  • session_start_with_rollout
  • +///
  • user_engagement
  • +///
+/// +/// @param name The name of the event. Should contain 1 to 40 alphanumeric characters or +/// underscores. The name must start with an alphabetic character. Some event names are +/// reserved. See FIREventNames.h for the list of reserved event names. The "firebase_", +/// "google_", and "ga_" prefixes are reserved and should not be used. Note that event names are +/// case-sensitive and that logging two events whose names differ only in case will result in +/// two distinct events. To manually log screen view events, use the `screen_view` event name. +/// @param parameters The dictionary of event parameters. Passing nil indicates that the event has +/// no parameters. Parameter names can be up to 40 characters long and must start with an +/// alphabetic character and contain only alphanumeric characters and underscores. Only NSString +/// and NSNumber (signed 64-bit integer and 64-bit floating-point number) parameter types are +/// supported. NSString parameter values can be up to 100 characters long. The "firebase_", +/// "google_", and "ga_" prefixes are reserved and should not be used for parameter names. ++ (void)logEventWithName:(NSString *)name + parameters:(nullable NSDictionary *)parameters + NS_SWIFT_NAME(logEvent(_:parameters:)); + +/// Sets a user property to a given value. Up to 25 user property names are supported. Once set, +/// user property values persist throughout the app lifecycle and across sessions. +/// +/// The following user property names are reserved and cannot be used: +///
    +///
  • first_open_time
  • +///
  • last_deep_link_referrer
  • +///
  • user_id
  • +///
+/// +/// @param value The value of the user property. Values can be up to 36 characters long. Setting the +/// value to nil removes the user property. +/// @param name The name of the user property to set. Should contain 1 to 24 alphanumeric characters +/// or underscores and must start with an alphabetic character. The "firebase_", "google_", and +/// "ga_" prefixes are reserved and should not be used for user property names. ++ (void)setUserPropertyString:(nullable NSString *)value forName:(NSString *)name + NS_SWIFT_NAME(setUserProperty(_:forName:)); + +/// Sets the user ID property. This feature must be used in accordance with +/// Google's Privacy Policy +/// +/// @param userID The user ID to ascribe to the user of this app on this device, which must be +/// non-empty and no more than 256 characters long. Setting userID to nil removes the user ID. ++ (void)setUserID:(nullable NSString *)userID; + +/// Sets whether analytics collection is enabled for this app on this device. This setting is +/// persisted across app sessions. By default it is enabled. +/// +/// @param analyticsCollectionEnabled A flag that enables or disables Analytics collection. ++ (void)setAnalyticsCollectionEnabled:(BOOL)analyticsCollectionEnabled; + +/// Sets the interval of inactivity in seconds that terminates the current session. The default +/// value is 1800 seconds (30 minutes). +/// +/// @param sessionTimeoutInterval The custom time of inactivity in seconds before the current +/// session terminates. ++ (void)setSessionTimeoutInterval:(NSTimeInterval)sessionTimeoutInterval; + +/// Returns the unique ID for this instance of the application or nil if +/// `ConsentType.analyticsStorage` has been set to `ConsentStatus.denied`. +/// +/// @see `FIRAnalytics+Consent.h` ++ (nullable NSString *)appInstanceID; + +/// Clears all analytics data for this instance from the device and resets the app instance ID. +/// FIRAnalyticsConfiguration values will be reset to the default values. ++ (void)resetAnalyticsData; + +/// Adds parameters that will be set on every event logged from the SDK, including automatic ones. +/// The values passed in the parameters dictionary will be added to the dictionary of default event +/// parameters. These parameters persist across app runs. They are of lower precedence than event +/// parameters, so if an event parameter and a parameter set using this API have the same name, the +/// value of the event parameter will be used. The same limitations on event parameters apply to +/// default event parameters. +/// +/// @param parameters Parameters to be added to the dictionary of parameters added to every event. +/// They will be added to the dictionary of default event parameters, replacing any existing +/// parameter with the same name. Valid parameters are NSString and NSNumber (signed 64-bit +/// integer and 64-bit floating-point number). Setting a key's value to [NSNull null] will clear +/// that parameter. Passing in a nil dictionary will clear all parameters. ++ (void)setDefaultEventParameters:(nullable NSDictionary *)parameters; + +/// Unavailable. +- (instancetype)init NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIREventNames.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIREventNames.h new file mode 100644 index 0000000000..3f85456342 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIREventNames.h @@ -0,0 +1,499 @@ +/// @file FIREventNames.h +/// +/// Predefined event names. +/// +/// An Event is an important occurrence in your app that you want to measure. You can report up to +/// 500 different types of Events per app and you can associate up to 25 unique parameters with each +/// Event type. Some common events are suggested below, but you may also choose to specify custom +/// Event types that are associated with your specific app. Each event type is identified by a +/// unique name. Event names can be up to 40 characters long, may only contain alphanumeric +/// characters and underscores ("_"), and must start with an alphabetic character. The "firebase_", +/// "google_", and "ga_" prefixes are reserved and should not be used. + +#import + +/// Ad Impression event. This event signifies when a user sees an ad impression. Note: If you supply +/// the @c kFIRParameterValue parameter, you must also supply the @c kFIRParameterCurrency parameter +/// so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterAdPlatform (NSString) (optional)
  • +///
  • @c kFIRParameterAdFormat (NSString) (optional)
  • +///
  • @c kFIRParameterAdSource (NSString) (optional)
  • +///
  • @c kFIRParameterAdUnitName (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventAdImpression NS_SWIFT_NAME(AnalyticsEventAdImpression) = + @"ad_impression"; + +/// Add Payment Info event. This event signifies that a user has submitted their payment +/// information. Note: If you supply the @c kFIRParameterValue parameter, you must also supply the +/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterPaymentType (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventAddPaymentInfo NS_SWIFT_NAME(AnalyticsEventAddPaymentInfo) = + @"add_payment_info"; + +/// Add Shipping Info event. This event signifies that a user has submitted their shipping +/// information. Note: If you supply the @c kFIRParameterValue parameter, you must also supply the +/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterShippingTier (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventAddShippingInfo NS_SWIFT_NAME(AnalyticsEventAddShippingInfo) = + @"add_shipping_info"; + +/// E-Commerce Add To Cart event. This event signifies that an item(s) was added to a cart for +/// purchase. Add this event to a funnel with @c kFIREventPurchase to gauge the effectiveness of +/// your checkout process. Note: If you supply the @c kFIRParameterValue parameter, you must also +/// supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed +/// accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventAddToCart NS_SWIFT_NAME(AnalyticsEventAddToCart) = @"add_to_cart"; + +/// E-Commerce Add To Wishlist event. This event signifies that an item was added to a wishlist. Use +/// this event to identify popular gift items. Note: If you supply the @c kFIRParameterValue +/// parameter, you must also supply the @c kFIRParameterCurrency parameter so that revenue metrics +/// can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventAddToWishlist NS_SWIFT_NAME(AnalyticsEventAddToWishlist) = + @"add_to_wishlist"; + +/// App Open event. By logging this event when an App becomes active, developers can understand how +/// often users leave and return during the course of a Session. Although Sessions are automatically +/// reported, this event can provide further clarification around the continuous engagement of +/// app-users. +static NSString *const kFIREventAppOpen NS_SWIFT_NAME(AnalyticsEventAppOpen) = @"app_open"; + +/// E-Commerce Begin Checkout event. This event signifies that a user has begun the process of +/// checking out. Add this event to a funnel with your @c kFIREventPurchase event to gauge the +/// effectiveness of your checkout process. Note: If you supply the @c kFIRParameterValue parameter, +/// you must also supply the @c kFIRParameterCurrency parameter so that revenue metrics can be +/// computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventBeginCheckout NS_SWIFT_NAME(AnalyticsEventBeginCheckout) = + @"begin_checkout"; + +/// Campaign Detail event. Log this event to supply the referral details of a re-engagement +/// campaign. Note: you must supply at least one of the required parameters kFIRParameterSource, +/// kFIRParameterMedium or kFIRParameterCampaign. Params: +/// +///
    +///
  • @c kFIRParameterSource (NSString)
  • +///
  • @c kFIRParameterMedium (NSString)
  • +///
  • @c kFIRParameterCampaign (NSString)
  • +///
  • @c kFIRParameterTerm (NSString) (optional)
  • +///
  • @c kFIRParameterContent (NSString) (optional)
  • +///
  • @c kFIRParameterAdNetworkClickID (NSString) (optional)
  • +///
  • @c kFIRParameterCP1 (NSString) (optional)
  • +///
  • @c kFIRParameterCampaignID (NSString) (optional)
  • +///
  • @c kFIRParameterCreativeFormat (NSString) (optional)
  • +///
  • @c kFIRParameterMarketingTactic (NSString) (optional)
  • +///
  • @c kFIRParameterSourcePlatform (NSString) (optional)
  • +///
+static NSString *const kFIREventCampaignDetails NS_SWIFT_NAME(AnalyticsEventCampaignDetails) = + @"campaign_details"; + +/// Checkout progress. Params: +/// +///
    +///
  • @c kFIRParameterCheckoutStep (unsigned 64-bit integer as NSNumber)
  • +///
  • @c kFIRParameterCheckoutOption (NSString) (optional)
  • +///
+/// This constant has been deprecated. +static NSString *const kFIREventCheckoutProgress NS_SWIFT_NAME(AnalyticsEventCheckoutProgress) = + @"checkout_progress"; + +/// Earn Virtual Currency event. This event tracks the awarding of virtual currency in your app. Log +/// this along with @c kFIREventSpendVirtualCurrency to better understand your virtual economy. +/// Params: +/// +///
    +///
  • @c kFIRParameterVirtualCurrencyName (NSString)
  • +///
  • @c kFIRParameterValue (signed 64-bit integer or double as NSNumber)
  • +///
+static NSString *const kFIREventEarnVirtualCurrency + NS_SWIFT_NAME(AnalyticsEventEarnVirtualCurrency) = @"earn_virtual_currency"; + +/// E-Commerce Purchase event. This event signifies that an item was purchased by a user. Note: +/// This is different from the in-app purchase event, which is reported automatically for App +/// Store-based apps. Note: If you supply the @c kFIRParameterValue parameter, you must also +/// supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed +/// accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTransactionID (NSString) (optional)
  • +///
  • @c kFIRParameterTax (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterShipping (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterLocation (NSString) (optional)
  • +///
  • @c kFIRParameterStartDate (NSString) (optional)
  • +///
  • @c kFIRParameterEndDate (NSString) (optional)
  • +///
  • @c kFIRParameterNumberOfNights (signed 64-bit integer as NSNumber) (optional) for +/// hotel bookings
  • +///
  • @c kFIRParameterNumberOfRooms (signed 64-bit integer as NSNumber) (optional) for +/// hotel bookings
  • +///
  • @c kFIRParameterNumberOfPassengers (signed 64-bit integer as NSNumber) (optional) +/// for travel bookings
  • +///
  • @c kFIRParameterOrigin (NSString) (optional)
  • +///
  • @c kFIRParameterDestination (NSString) (optional)
  • +///
  • @c kFIRParameterTravelClass (NSString) (optional) for travel bookings
  • +///
+/// This constant has been deprecated. Use @c kFIREventPurchase constant instead. +static NSString *const kFIREventEcommercePurchase NS_SWIFT_NAME(AnalyticsEventEcommercePurchase) = + @"ecommerce_purchase"; + +/// Generate Lead event. Log this event when a lead has been generated in the app to understand the +/// efficacy of your install and re-engagement campaigns. Note: If you supply the +/// @c kFIRParameterValue parameter, you must also supply the @c kFIRParameterCurrency +/// parameter so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventGenerateLead NS_SWIFT_NAME(AnalyticsEventGenerateLead) = + @"generate_lead"; + +/// Join Group event. Log this event when a user joins a group such as a guild, team or family. Use +/// this event to analyze how popular certain groups or social features are in your app. Params: +/// +///
    +///
  • @c kFIRParameterGroupID (NSString)
  • +///
+static NSString *const kFIREventJoinGroup NS_SWIFT_NAME(AnalyticsEventJoinGroup) = @"join_group"; + +/// Level End event. Log this event when the user finishes a level. Params: +/// +///
    +///
  • @c kFIRParameterLevelName (NSString)
  • +///
  • @c kFIRParameterSuccess (NSString)
  • +///
+static NSString *const kFIREventLevelEnd NS_SWIFT_NAME(AnalyticsEventLevelEnd) = @"level_end"; + +/// Level Start event. Log this event when the user starts a new level. Params: +/// +///
    +///
  • @c kFIRParameterLevelName (NSString)
  • +///
+static NSString *const kFIREventLevelStart NS_SWIFT_NAME(AnalyticsEventLevelStart) = @"level_start"; + +/// Level Up event. This event signifies that a player has leveled up in your gaming app. It can +/// help you gauge the level distribution of your userbase and help you identify certain levels that +/// are difficult to pass. Params: +/// +///
    +///
  • @c kFIRParameterLevel (signed 64-bit integer as NSNumber)
  • +///
  • @c kFIRParameterCharacter (NSString) (optional)
  • +///
+static NSString *const kFIREventLevelUp NS_SWIFT_NAME(AnalyticsEventLevelUp) = @"level_up"; + +/// Login event. Apps with a login feature can report this event to signify that a user has logged +/// in. +static NSString *const kFIREventLogin NS_SWIFT_NAME(AnalyticsEventLogin) = @"login"; + +/// Post Score event. Log this event when the user posts a score in your gaming app. This event can +/// help you understand how users are actually performing in your game and it can help you correlate +/// high scores with certain audiences or behaviors. Params: +/// +///
    +///
  • @c kFIRParameterScore (signed 64-bit integer as NSNumber)
  • +///
  • @c kFIRParameterLevel (signed 64-bit integer as NSNumber) (optional)
  • +///
  • @c kFIRParameterCharacter (NSString) (optional)
  • +///
+static NSString *const kFIREventPostScore NS_SWIFT_NAME(AnalyticsEventPostScore) = @"post_score"; + +/// Present Offer event. This event signifies that the app has presented a purchase offer to a user. +/// Add this event to a funnel with the kFIREventAddToCart and kFIREventEcommercePurchase to gauge +/// your conversion process. Note: If you supply the @c kFIRParameterValue parameter, you must +/// also supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed +/// accurately. Params: +/// +///
    +///
  • @c kFIRParameterQuantity (signed 64-bit integer as NSNumber)
  • +///
  • @c kFIRParameterItemID (NSString)
  • +///
  • @c kFIRParameterItemName (NSString)
  • +///
  • @c kFIRParameterItemCategory (NSString)
  • +///
  • @c kFIRParameterItemLocationID (NSString) (optional)
  • +///
  • @c kFIRParameterPrice (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+/// This constant has been deprecated. Use @c kFIREventViewPromotion constant instead. +static NSString *const kFIREventPresentOffer NS_SWIFT_NAME(AnalyticsEventPresentOffer) = + @"present_offer"; + +/// E-Commerce Purchase event. This event signifies that an item(s) was purchased by a user. Note: +/// This is different from the in-app purchase event, which is reported automatically for App +/// Store-based apps. Note: If you supply the @c kFIRParameterValue parameter, you must also supply +/// the @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. +/// Params: +/// +///
    +///
  • @c kFIRParameterAffiliation (NSString) (optional)
  • +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterShipping (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTax (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTransactionID (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventPurchase NS_SWIFT_NAME(AnalyticsEventPurchase) = @"purchase"; + +/// E-Commerce Purchase Refund event. This event signifies that an item purchase was refunded. +/// Note: If you supply the @c kFIRParameterValue parameter, you must also supply the +/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. +/// Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTransactionID (NSString) (optional)
  • +///
+/// This constant has been deprecated. Use @c kFIREventRefund constant instead. +static NSString *const kFIREventPurchaseRefund NS_SWIFT_NAME(AnalyticsEventPurchaseRefund) = + @"purchase_refund"; + +/// E-Commerce Refund event. This event signifies that a refund was issued. Note: If you supply the +/// @c kFIRParameterValue parameter, you must also supply the @c kFIRParameterCurrency parameter so +/// that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterAffiliation (NSString) (optional)
  • +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterShipping (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTax (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTransactionID (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventRefund NS_SWIFT_NAME(AnalyticsEventRefund) = @"refund"; + +/// E-Commerce Remove from Cart event. This event signifies that an item(s) was removed from a cart. +/// Note: If you supply the @c kFIRParameterValue parameter, you must also supply the @c +/// kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventRemoveFromCart NS_SWIFT_NAME(AnalyticsEventRemoveFromCart) = + @"remove_from_cart"; + +/// Screen View event. This event signifies a screen view. Use this when a screen transition occurs. +/// This event can be logged irrespective of whether automatic screen tracking is enabled. Params: +/// +///
    +///
  • @c kFIRParameterScreenClass (NSString) (optional)
  • +///
  • @c kFIRParameterScreenName (NSString) (optional)
  • +///
+static NSString *const kFIREventScreenView NS_SWIFT_NAME(AnalyticsEventScreenView) = @"screen_view"; + +/// Search event. Apps that support search features can use this event to contextualize search +/// operations by supplying the appropriate, corresponding parameters. This event can help you +/// identify the most popular content in your app. Params: +/// +///
    +///
  • @c kFIRParameterSearchTerm (NSString)
  • +///
  • @c kFIRParameterStartDate (NSString) (optional)
  • +///
  • @c kFIRParameterEndDate (NSString) (optional)
  • +///
  • @c kFIRParameterNumberOfNights (signed 64-bit integer as NSNumber) (optional) for +/// hotel bookings
  • +///
  • @c kFIRParameterNumberOfRooms (signed 64-bit integer as NSNumber) (optional) for +/// hotel bookings
  • +///
  • @c kFIRParameterNumberOfPassengers (signed 64-bit integer as NSNumber) (optional) +/// for travel bookings
  • +///
  • @c kFIRParameterOrigin (NSString) (optional)
  • +///
  • @c kFIRParameterDestination (NSString) (optional)
  • +///
  • @c kFIRParameterTravelClass (NSString) (optional) for travel bookings
  • +///
+static NSString *const kFIREventSearch NS_SWIFT_NAME(AnalyticsEventSearch) = @"search"; + +/// Select Content event. This general purpose event signifies that a user has selected some content +/// of a certain type in an app. The content can be any object in your app. This event can help you +/// identify popular content and categories of content in your app. Params: +/// +///
    +///
  • @c kFIRParameterContentType (NSString)
  • +///
  • @c kFIRParameterItemID (NSString)
  • +///
+static NSString *const kFIREventSelectContent NS_SWIFT_NAME(AnalyticsEventSelectContent) = + @"select_content"; + +/// Select Item event. This event signifies that an item was selected by a user from a list. Use the +/// appropriate parameters to contextualize the event. Use this event to discover the most popular +/// items selected. Params: +/// +///
    +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterItemListID (NSString) (optional)
  • +///
  • @c kFIRParameterItemListName (NSString) (optional)
  • +///
+static NSString *const kFIREventSelectItem NS_SWIFT_NAME(AnalyticsEventSelectItem) = @"select_item"; + +/// Select promotion event. This event signifies that a user has selected a promotion offer. Use the +/// appropriate parameters to contextualize the event, such as the item(s) for which the promotion +/// applies. Params: +/// +///
    +///
  • @c kFIRParameterCreativeName (NSString) (optional)
  • +///
  • @c kFIRParameterCreativeSlot (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterLocationID (NSString) (optional)
  • +///
  • @c kFIRParameterPromotionID (NSString) (optional)
  • +///
  • @c kFIRParameterPromotionName (NSString) (optional)
  • +///
+static NSString *const kFIREventSelectPromotion NS_SWIFT_NAME(AnalyticsEventSelectPromotion) = + @"select_promotion"; + +/// Set checkout option. Params: +/// +///
    +///
  • @c kFIRParameterCheckoutStep (unsigned 64-bit integer as NSNumber)
  • +///
  • @c kFIRParameterCheckoutOption (NSString)
  • +///
+/// This constant has been deprecated. +static NSString *const kFIREventSetCheckoutOption NS_SWIFT_NAME(AnalyticsEventSetCheckoutOption) = + @"set_checkout_option"; + +/// Share event. Apps with social features can log the Share event to identify the most viral +/// content. Params: +/// +///
    +///
  • @c kFIRParameterContentType (NSString)
  • +///
  • @c kFIRParameterItemID (NSString)
  • +///
+static NSString *const kFIREventShare NS_SWIFT_NAME(AnalyticsEventShare) = @"share"; + +/// Sign Up event. This event indicates that a user has signed up for an account in your app. The +/// parameter signifies the method by which the user signed up. Use this event to understand the +/// different behaviors between logged in and logged out users. Params: +/// +///
    +///
  • @c kFIRParameterSignUpMethod (NSString)
  • +///
+static NSString *const kFIREventSignUp NS_SWIFT_NAME(AnalyticsEventSignUp) = @"sign_up"; + +/// Spend Virtual Currency event. This event tracks the sale of virtual goods in your app and can +/// help you identify which virtual goods are the most popular objects of purchase. Params: +/// +///
    +///
  • @c kFIRParameterItemName (NSString)
  • +///
  • @c kFIRParameterVirtualCurrencyName (NSString)
  • +///
  • @c kFIRParameterValue (signed 64-bit integer or double as NSNumber)
  • +///
+static NSString *const kFIREventSpendVirtualCurrency + NS_SWIFT_NAME(AnalyticsEventSpendVirtualCurrency) = @"spend_virtual_currency"; + +/// Tutorial Begin event. This event signifies the start of the on-boarding process in your app. Use +/// this in a funnel with kFIREventTutorialComplete to understand how many users complete this +/// process and move on to the full app experience. +static NSString *const kFIREventTutorialBegin NS_SWIFT_NAME(AnalyticsEventTutorialBegin) = + @"tutorial_begin"; + +/// Tutorial End event. Use this event to signify the user's completion of your app's on-boarding +/// process. Add this to a funnel with kFIREventTutorialBegin to gauge the completion rate of your +/// on-boarding process. +static NSString *const kFIREventTutorialComplete NS_SWIFT_NAME(AnalyticsEventTutorialComplete) = + @"tutorial_complete"; + +/// Unlock Achievement event. Log this event when the user has unlocked an achievement in your +/// game. Since achievements generally represent the breadth of a gaming experience, this event can +/// help you understand how many users are experiencing all that your game has to offer. Params: +/// +///
    +///
  • @c kFIRParameterAchievementID (NSString)
  • +///
+static NSString *const kFIREventUnlockAchievement NS_SWIFT_NAME(AnalyticsEventUnlockAchievement) = + @"unlock_achievement"; + +/// E-commerce View Cart event. This event signifies that a user has viewed their cart. Use this to +/// analyze your purchase funnel. Note: If you supply the @c kFIRParameterValue parameter, you must +/// also supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed +/// accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventViewCart NS_SWIFT_NAME(AnalyticsEventViewCart) = @"view_cart"; + +/// View Item event. This event signifies that a user has viewed an item. Use the appropriate +/// parameters to contextualize the event. Use this event to discover the most popular items viewed +/// in your app. Note: If you supply the @c kFIRParameterValue parameter, you must also supply the +/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventViewItem NS_SWIFT_NAME(AnalyticsEventViewItem) = @"view_item"; + +/// View Item List event. Log this event when a user sees a list of items or offerings. Params: +/// +///
    +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterItemListID (NSString) (optional)
  • +///
  • @c kFIRParameterItemListName (NSString) (optional)
  • +///
+static NSString *const kFIREventViewItemList NS_SWIFT_NAME(AnalyticsEventViewItemList) = + @"view_item_list"; + +/// View Promotion event. This event signifies that a promotion was shown to a user. Add this event +/// to a funnel with the @c kFIREventAddToCart and @c kFIREventPurchase to gauge your conversion +/// process. Params: +/// +///
    +///
  • @c kFIRParameterCreativeName (NSString) (optional)
  • +///
  • @c kFIRParameterCreativeSlot (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterLocationID (NSString) (optional)
  • +///
  • @c kFIRParameterPromotionID (NSString) (optional)
  • +///
  • @c kFIRParameterPromotionName (NSString) (optional)
  • +///
+static NSString *const kFIREventViewPromotion NS_SWIFT_NAME(AnalyticsEventViewPromotion) = + @"view_promotion"; + +/// View Search Results event. Log this event when the user has been presented with the results of a +/// search. Params: +/// +///
    +///
  • @c kFIRParameterSearchTerm (NSString)
  • +///
+static NSString *const kFIREventViewSearchResults NS_SWIFT_NAME(AnalyticsEventViewSearchResults) = + @"view_search_results"; diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRParameterNames.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRParameterNames.h new file mode 100644 index 0000000000..fe3a6c47b4 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRParameterNames.h @@ -0,0 +1,776 @@ +/// @file FIRParameterNames.h +/// +/// Predefined event parameter names. +/// +/// Params supply information that contextualize Events. You can associate up to 25 unique Params +/// with each Event type. Some Params are suggested below for certain common Events, but you are +/// not limited to these. You may supply extra Params for suggested Events or custom Params for +/// Custom events. Param names can be up to 40 characters long, may only contain alphanumeric +/// characters and underscores ("_"), and must start with an alphabetic character. Param values can +/// be up to 100 characters long. The "firebase_", "google_", and "ga_" prefixes are reserved and +/// should not be used. + +#import + +/// Game achievement ID (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterAchievementID : @"10_matches_won",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAchievementID NS_SWIFT_NAME(AnalyticsParameterAchievementID) = + @"achievement_id"; + +/// The ad format (e.g. Banner, Interstitial, Rewarded, Native, Rewarded Interstitial, Instream). +/// (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterAdFormat : @"Banner",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAdFormat NS_SWIFT_NAME(AnalyticsParameterAdFormat) = + @"ad_format"; + +/// Ad Network Click ID (NSString). Used for network-specific click IDs which vary in format. +///
+///     NSDictionary *params = @{
+///       kFIRParameterAdNetworkClickID : @"1234567",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAdNetworkClickID + NS_SWIFT_NAME(AnalyticsParameterAdNetworkClickID) = @"aclid"; + +/// The ad platform (e.g. MoPub, IronSource) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterAdPlatform : @"MoPub",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAdPlatform NS_SWIFT_NAME(AnalyticsParameterAdPlatform) = + @"ad_platform"; + +/// The ad source (e.g. AdColony) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterAdSource : @"AdColony",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAdSource NS_SWIFT_NAME(AnalyticsParameterAdSource) = + @"ad_source"; + +/// The ad unit name (e.g. Banner_03) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterAdUnitName : @"Banner_03",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAdUnitName NS_SWIFT_NAME(AnalyticsParameterAdUnitName) = + @"ad_unit_name"; + +/// A product affiliation to designate a supplying company or brick and mortar store location +/// (NSString).
+///     NSDictionary *params = @{
+///       kFIRParameterAffiliation : @"Google Store",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAffiliation NS_SWIFT_NAME(AnalyticsParameterAffiliation) = + @"affiliation"; + +/// Campaign custom parameter (NSString). Used as a method of capturing custom data in a campaign. +/// Use varies by network. +///
+///     NSDictionary *params = @{
+///       kFIRParameterCP1 : @"custom_data",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCP1 NS_SWIFT_NAME(AnalyticsParameterCP1) = @"cp1"; + +/// The individual campaign name, slogan, promo code, etc. Some networks have pre-defined macro to +/// capture campaign information, otherwise can be populated by developer. Highly Recommended +/// (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCampaign : @"winter_promotion",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCampaign NS_SWIFT_NAME(AnalyticsParameterCampaign) = + @"campaign"; + +/// Campaign ID (NSString). Used for keyword analysis to identify a specific product promotion or +/// strategic campaign. This is a required key for GA4 data import. +///
+///     NSDictionary *params = @{
+///       kFIRParameterCampaignID : @"7877652710",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCampaignID NS_SWIFT_NAME(AnalyticsParameterCampaignID) = + @"campaign_id"; + +/// Character used in game (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCharacter : @"beat_boss",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCharacter NS_SWIFT_NAME(AnalyticsParameterCharacter) = + @"character"; + +/// Some option on a step in an ecommerce flow (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCheckoutOption : @"Visa",
+///       // ...
+///     };
+/// 
+/// This constant has been deprecated. +static NSString *const kFIRParameterCheckoutOption + NS_SWIFT_NAME(AnalyticsParameterCheckoutOption) = @"checkout_option"; + +/// The checkout step (1..N) (unsigned 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCheckoutStep : @"1",
+///       // ...
+///     };
+/// 
+/// This constant has been deprecated. +static NSString *const kFIRParameterCheckoutStep NS_SWIFT_NAME(AnalyticsParameterCheckoutStep) = + @"checkout_step"; + +/// Campaign content (NSString). +static NSString *const kFIRParameterContent NS_SWIFT_NAME(AnalyticsParameterContent) = @"content"; + +/// Type of content selected (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterContentType : @"news article",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterContentType NS_SWIFT_NAME(AnalyticsParameterContentType) = + @"content_type"; + +/// Coupon code used for a purchase (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCoupon : @"SUMMER_FUN",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCoupon NS_SWIFT_NAME(AnalyticsParameterCoupon) = @"coupon"; + +/// Creative Format (NSString). Used to identify the high-level classification of the type of ad +/// served by a specific campaign. +///
+///     NSDictionary *params = @{
+///       kFIRParameterCreativeFormat : @"display",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCreativeFormat NS_SWIFT_NAME(AnalyticsParameterCreativeFormat) = + @"creative_format"; + +/// The name of a creative used in a promotional spot (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCreativeName : @"Summer Sale",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCreativeName NS_SWIFT_NAME(AnalyticsParameterCreativeName) = + @"creative_name"; + +/// The name of a creative slot (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCreativeSlot : @"summer_banner2",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCreativeSlot NS_SWIFT_NAME(AnalyticsParameterCreativeSlot) = + @"creative_slot"; + +/// Currency of the purchase or items associated with the event, in 3-letter +/// ISO_4217 format (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCurrency : @"USD",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCurrency NS_SWIFT_NAME(AnalyticsParameterCurrency) = + @"currency"; + +/// Flight or Travel destination (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterDestination : @"Mountain View, CA",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterDestination NS_SWIFT_NAME(AnalyticsParameterDestination) = + @"destination"; + +/// Monetary value of discount associated with a purchase (double as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterDiscount : @(2.0),
+///       kFIRParameterCurrency : @"USD",  // e.g. $2.00 USD
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterDiscount NS_SWIFT_NAME(AnalyticsParameterDiscount) = + @"discount"; + +/// The arrival date, check-out date or rental end date for the item. This should be in +/// YYYY-MM-DD format (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterEndDate : @"2015-09-14",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterEndDate NS_SWIFT_NAME(AnalyticsParameterEndDate) = @"end_date"; + +/// Indicates that the associated event should either extend the current session +/// or start a new session if no session was active when the event was logged. +/// Specify YES to extend the current session or to start a new session; any +/// other value will not extend or start a session. +///
+///     NSDictionary *params = @{
+///       kFIRParameterExtendSession : @YES,
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterExtendSession NS_SWIFT_NAME(AnalyticsParameterExtendSession) = + @"extend_session"; + +/// Flight number for travel events (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterFlightNumber : @"ZZ800",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterFlightNumber NS_SWIFT_NAME(AnalyticsParameterFlightNumber) = + @"flight_number"; + +/// Group/clan/guild ID (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterGroupID : @"g1",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterGroupID NS_SWIFT_NAME(AnalyticsParameterGroupID) = @"group_id"; + +/// The index of the item in a list (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterIndex : @(5),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterIndex NS_SWIFT_NAME(AnalyticsParameterIndex) = @"index"; + +/// Item brand (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemBrand : @"Google",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemBrand NS_SWIFT_NAME(AnalyticsParameterItemBrand) = + @"item_brand"; + +/// Item category (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemCategory : @"pants",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemCategory NS_SWIFT_NAME(AnalyticsParameterItemCategory) = + @"item_category"; + +/// Item Category (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemCategory2 : @"pants",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemCategory2 NS_SWIFT_NAME(AnalyticsParameterItemCategory2) = + @"item_category2"; + +/// Item Category (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemCategory3 : @"pants",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemCategory3 NS_SWIFT_NAME(AnalyticsParameterItemCategory3) = + @"item_category3"; + +/// Item Category (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemCategory4 : @"pants",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemCategory4 NS_SWIFT_NAME(AnalyticsParameterItemCategory4) = + @"item_category4"; + +/// Item Category (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemCategory5 : @"pants",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemCategory5 NS_SWIFT_NAME(AnalyticsParameterItemCategory5) = + @"item_category5"; + +/// Item ID (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemID : @"SKU_12345",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemID NS_SWIFT_NAME(AnalyticsParameterItemID) = @"item_id"; + +/// The list in which the item was presented to the user (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemList : @"Search Results",
+///       // ...
+///     };
+/// 
+/// This constant has been deprecated. Use @c kFIRParameterItemListName constant instead. +static NSString *const kFIRParameterItemList NS_SWIFT_NAME(AnalyticsParameterItemList) = + @"item_list"; + +/// The ID of the list in which the item was presented to the user (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemListID : @"ABC123",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemListID NS_SWIFT_NAME(AnalyticsParameterItemListID) = + @"item_list_id"; + +/// The name of the list in which the item was presented to the user (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemListName : @"Related products",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemListName NS_SWIFT_NAME(AnalyticsParameterItemListName) = + @"item_list_name"; + +/// The Google Place ID (NSString) that +/// corresponds to the associated item. Alternatively, you can supply your own custom Location ID. +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemLocationID : @"ChIJiyj437sx3YAR9kUWC8QkLzQ",
+///       // ...
+///     };
+/// 
+/// This constant has been deprecated. Use @c kFIRParameterLocationID constant instead. +static NSString *const kFIRParameterItemLocationID + NS_SWIFT_NAME(AnalyticsParameterItemLocationID) = @"item_location_id"; + +/// Item Name (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemName : @"jeggings",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemName NS_SWIFT_NAME(AnalyticsParameterItemName) = + @"item_name"; + +/// Item variant (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemVariant : @"Black",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemVariant NS_SWIFT_NAME(AnalyticsParameterItemVariant) = + @"item_variant"; + +/// The list of items involved in the transaction. (NSArray). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItems : @[
+///         @{kFIRParameterItemName : @"jeggings", kFIRParameterItemCategory : @"pants"},
+///         @{kFIRParameterItemName : @"boots", kFIRParameterItemCategory : @"shoes"},
+///       ],
+///     };
+/// 
+static NSString *const kFIRParameterItems NS_SWIFT_NAME(AnalyticsParameterItems) = @"items"; + +/// Level in game (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterLevel : @(42),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterLevel NS_SWIFT_NAME(AnalyticsParameterLevel) = @"level"; + +/// The name of a level in a game (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterLevelName : @"room_1",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterLevelName NS_SWIFT_NAME(AnalyticsParameterLevelName) = + @"level_name"; + +/// Location (NSString). The Google Place ID +/// that corresponds to the associated event. Alternatively, you can supply your own custom +/// Location ID. +///
+///     NSDictionary *params = @{
+///       kFIRParameterLocation : @"ChIJiyj437sx3YAR9kUWC8QkLzQ",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterLocation NS_SWIFT_NAME(AnalyticsParameterLocation) = + @"location"; + +/// The location associated with the event. Preferred to be the Google +/// Place ID that corresponds to the +/// associated item but could be overridden to a custom location ID string.(NSString).
+///     NSDictionary *params = @{
+///       kFIRParameterLocationID : @"ChIJiyj437sx3YAR9kUWC8QkLzQ",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterLocationID NS_SWIFT_NAME(AnalyticsParameterLocationID) = + @"location_id"; + +/// Marketing Tactic (NSString). Used to identify the targeting criteria applied to a specific +/// campaign. +///
+///     NSDictionary *params = @{
+///       kFIRParameterMarketingTactic : @"Remarketing",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterMarketingTactic + NS_SWIFT_NAME(AnalyticsParameterMarketingTactic) = @"marketing_tactic"; + +/// The advertising or marketing medium, for example: cpc, banner, email, push. Highly recommended +/// (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterMedium : @"email",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterMedium NS_SWIFT_NAME(AnalyticsParameterMedium) = @"medium"; + +/// A particular approach used in an operation; for example, "facebook" or "email" in the context +/// of a sign_up or login event. (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterMethod : @"google",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterMethod NS_SWIFT_NAME(AnalyticsParameterMethod) = @"method"; + +/// Number of nights staying at hotel (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterNumberOfNights : @(3),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterNumberOfNights + NS_SWIFT_NAME(AnalyticsParameterNumberOfNights) = @"number_of_nights"; + +/// Number of passengers traveling (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterNumberOfPassengers : @(11),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterNumberOfPassengers + NS_SWIFT_NAME(AnalyticsParameterNumberOfPassengers) = @"number_of_passengers"; + +/// Number of rooms for travel events (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterNumberOfRooms : @(2),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterNumberOfRooms NS_SWIFT_NAME(AnalyticsParameterNumberOfRooms) = + @"number_of_rooms"; + +/// Flight or Travel origin (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterOrigin : @"Mountain View, CA",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterOrigin NS_SWIFT_NAME(AnalyticsParameterOrigin) = @"origin"; + +/// The chosen method of payment (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterPaymentType : @"Visa",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterPaymentType NS_SWIFT_NAME(AnalyticsParameterPaymentType) = + @"payment_type"; + +/// Purchase price (double as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterPrice : @(1.0),
+///       kFIRParameterCurrency : @"USD",  // e.g. $1.00 USD
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterPrice NS_SWIFT_NAME(AnalyticsParameterPrice) = @"price"; + +/// The ID of a product promotion (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterPromotionID : @"ABC123",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterPromotionID NS_SWIFT_NAME(AnalyticsParameterPromotionID) = + @"promotion_id"; + +/// The name of a product promotion (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterPromotionName : @"Summer Sale",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterPromotionName NS_SWIFT_NAME(AnalyticsParameterPromotionName) = + @"promotion_name"; + +/// Purchase quantity (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterQuantity : @(1),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterQuantity NS_SWIFT_NAME(AnalyticsParameterQuantity) = + @"quantity"; + +/// Score in game (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterScore : @(4200),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterScore NS_SWIFT_NAME(AnalyticsParameterScore) = @"score"; + +/// Current screen class, such as the class name of the UIViewController, logged with screen_view +/// event and added to every event (NSString).
+///     NSDictionary *params = @{
+///       kFIRParameterScreenClass : @"LoginViewController",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterScreenClass NS_SWIFT_NAME(AnalyticsParameterScreenClass) = + @"screen_class"; + +/// Current screen name, such as the name of the UIViewController, logged with screen_view event and +/// added to every event (NSString).
+///     NSDictionary *params = @{
+///       kFIRParameterScreenName : @"LoginView",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterScreenName NS_SWIFT_NAME(AnalyticsParameterScreenName) = + @"screen_name"; + +/// The search string/keywords used (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterSearchTerm : @"periodic table",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterSearchTerm NS_SWIFT_NAME(AnalyticsParameterSearchTerm) = + @"search_term"; + +/// Shipping cost associated with a transaction (double as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterShipping : @(5.99),
+///       kFIRParameterCurrency : @"USD",  // e.g. $5.99 USD
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterShipping NS_SWIFT_NAME(AnalyticsParameterShipping) = + @"shipping"; + +/// The shipping tier (e.g. Ground, Air, Next-day) selected for delivery of the purchased item +/// (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterShippingTier : @"Ground",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterShippingTier NS_SWIFT_NAME(AnalyticsParameterShippingTier) = + @"shipping_tier"; + +/// Sign up method (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterSignUpMethod : @"google",
+///       // ...
+///     };
+/// 
+/// +/// This constant has been deprecated. Use Method constant instead. +static NSString *const kFIRParameterSignUpMethod NS_SWIFT_NAME(AnalyticsParameterSignUpMethod) = + @"sign_up_method"; + +/// The origin of your traffic, such as an Ad network (for example, google) or partner (urban +/// airship). Identify the advertiser, site, publication, etc. that is sending traffic to your +/// property. Highly recommended (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterSource : @"InMobi",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterSource NS_SWIFT_NAME(AnalyticsParameterSource) = @"source"; + +/// Source Platform (NSString). Used to identify the platform responsible for directing traffic to a +/// given Analytics property (e.g., a buying platform where budgets, targeting criteria, etc. are +/// set, a platform for managing organic traffic data, etc.). +///
+///     NSDictionary *params = @{
+///       kFIRParameterSourcePlatform : @"sa360",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterSourcePlatform NS_SWIFT_NAME(AnalyticsParameterSourcePlatform) = + @"source_platform"; + +/// The departure date, check-in date or rental start date for the item. This should be in +/// YYYY-MM-DD format (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterStartDate : @"2015-09-14",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterStartDate NS_SWIFT_NAME(AnalyticsParameterStartDate) = + @"start_date"; + +/// The result of an operation. Specify 1 to indicate success and 0 to indicate failure (unsigned +/// integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterSuccess : @(1),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterSuccess NS_SWIFT_NAME(AnalyticsParameterSuccess) = @"success"; + +/// Tax cost associated with a transaction (double as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterTax : @(2.43),
+///       kFIRParameterCurrency : @"USD",  // e.g. $2.43 USD
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterTax NS_SWIFT_NAME(AnalyticsParameterTax) = @"tax"; + +/// If you're manually tagging keyword campaigns, you should use utm_term to specify the keyword +/// (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterTerm : @"game",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterTerm NS_SWIFT_NAME(AnalyticsParameterTerm) = @"term"; + +/// The unique identifier of a transaction (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterTransactionID : @"T12345",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterTransactionID NS_SWIFT_NAME(AnalyticsParameterTransactionID) = + @"transaction_id"; + +/// Travel class (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterTravelClass : @"business",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterTravelClass NS_SWIFT_NAME(AnalyticsParameterTravelClass) = + @"travel_class"; + +/// A context-specific numeric value which is accumulated automatically for each event type. This is +/// a general purpose parameter that is useful for accumulating a key metric that pertains to an +/// event. Examples include revenue, distance, time and points. Value should be specified as signed +/// 64-bit integer or double as NSNumber. Notes: Values for pre-defined currency-related events +/// (such as @c kFIREventAddToCart) should be supplied using double as NSNumber and must be +/// accompanied by a @c kFIRParameterCurrency parameter. The valid range of accumulated values is +/// [-9,223,372,036,854.77, 9,223,372,036,854.77]. Supplying a non-numeric value, omitting the +/// corresponding @c kFIRParameterCurrency parameter, or supplying an invalid +/// currency code for conversion events will cause that +/// conversion to be omitted from reporting. +///
+///     NSDictionary *params = @{
+///       kFIRParameterValue : @(3.99),
+///       kFIRParameterCurrency : @"USD",  // e.g. $3.99 USD
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterValue NS_SWIFT_NAME(AnalyticsParameterValue) = @"value"; + +/// Name of virtual currency type (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterVirtualCurrencyName : @"virtual_currency_name",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterVirtualCurrencyName + NS_SWIFT_NAME(AnalyticsParameterVirtualCurrencyName) = @"virtual_currency_name"; diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h new file mode 100644 index 0000000000..b3510fa93e --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h @@ -0,0 +1,29 @@ +/// @file FIRUserPropertyNames.h +/// +/// Predefined user property names. +/// +/// A UserProperty is an attribute that describes the app-user. By supplying UserProperties, you can +/// later analyze different behaviors of various segments of your userbase. You may supply up to 25 +/// unique UserProperties per app, and you can use the name and value of your choosing for each one. +/// UserProperty names can be up to 24 characters long, may only contain alphanumeric characters and +/// underscores ("_"), and must start with an alphabetic character. UserProperty values can be up to +/// 36 characters long. The "firebase_", "google_", and "ga_" prefixes are reserved and should not +/// be used. + +#import + +/// Indicates whether events logged by Google Analytics can be used to personalize ads for the user. +/// Set to "YES" to enable, or "NO" to disable. Default is enabled. See the +/// documentation for +/// more details and information about related settings. +/// +///
+///     [FIRAnalytics setUserPropertyString:@"NO"
+///                                 forName:kFIRUserPropertyAllowAdPersonalizationSignals];
+/// 
+static NSString *const kFIRUserPropertyAllowAdPersonalizationSignals + NS_SWIFT_NAME(AnalyticsUserPropertyAllowAdPersonalizationSignals) = @"allow_personalized_ads"; + +/// The method used to sign in. For example, "google", "facebook" or "twitter". +static NSString *const kFIRUserPropertySignUpMethod + NS_SWIFT_NAME(AnalyticsUserPropertySignUpMethod) = @"sign_up_method"; diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h new file mode 100644 index 0000000000..368f79c992 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h @@ -0,0 +1,6 @@ +#import "FIRAnalytics+AppDelegate.h" +#import "FIRAnalytics+Consent.h" +#import "FIRAnalytics.h" +#import "FIREventNames.h" +#import "FIRParameterNames.h" +#import "FIRUserPropertyNames.h" diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Info.plist b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Info.plist new file mode 100644 index 0000000000..efd0a1d201 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleExecutable + FirebaseAnalytics + CFBundleIdentifier + com.firebase.Firebase-FirebaseAnalytics + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + FirebaseAnalytics + CFBundlePackageType + FMWK + CFBundleVersion + 8.12.0 + DTSDKName + iphonesimulator11.2 + + diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Modules/module.modulemap b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Modules/module.modulemap new file mode 100644 index 0000000000..aa72782964 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Modules/module.modulemap @@ -0,0 +1,13 @@ +framework module FirebaseAnalytics { +umbrella header "FirebaseAnalytics.h" +export * +module * { export * } + link framework "CoreTelephony" + link framework "Foundation" + link framework "Security" + link framework "SystemConfiguration" + link framework "UIKit" + link "c++" + link "sqlite3" + link "z" +} diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/FirebaseAnalytics b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/FirebaseAnalytics new file mode 100644 index 0000000000..e4b0c735a8 Binary files /dev/null and b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/FirebaseAnalytics differ diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h new file mode 100644 index 0000000000..d499af668b --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h @@ -0,0 +1,62 @@ +#import + +#import "FIRAnalytics.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + * Provides App Delegate handlers to be used in your App Delegate. + * + * To save time integrating Firebase Analytics in an application, Firebase Analytics does not + * require delegation implementation from the AppDelegate. Instead this is automatically done by + * Firebase Analytics. Should you choose instead to delegate manually, you can turn off the App + * Delegate Proxy by adding FirebaseAppDelegateProxyEnabled into your app's Info.plist and setting + * it to NO, and adding the methods in this category to corresponding delegation handlers. + * + * To handle Universal Links, you must return YES in + * [UIApplicationDelegate application:didFinishLaunchingWithOptions:]. + */ +@interface FIRAnalytics (AppDelegate) + +/** + * Handles events related to a URL session that are waiting to be processed. + * + * For optimal use of Firebase Analytics, call this method from the + * [UIApplicationDelegate application:handleEventsForBackgroundURLSession:completionHandler] + * method of the app delegate in your app. + * + * @param identifier The identifier of the URL session requiring attention. + * @param completionHandler The completion handler to call when you finish processing the events. + * Calling this completion handler lets the system know that your app's user interface is + * updated and a new snapshot can be taken. + */ ++ (void)handleEventsForBackgroundURLSession:(NSString *)identifier + completionHandler:(nullable void (^)(void))completionHandler; + +/** + * Handles the event when the app is launched by a URL. + * + * Call this method from [UIApplicationDelegate application:openURL:options:] (on iOS 9.0 and + * above), or [UIApplicationDelegate application:openURL:sourceApplication:annotation:] (on + * iOS 8.x and below) in your app. + * + * @param url The URL resource to open. This resource can be a network resource or a file. + */ ++ (void)handleOpenURL:(NSURL *)url; + +/** + * Handles the event when the app receives data associated with user activity that includes a + * Universal Link (on iOS 9.0 and above). + * + * Call this method from [UIApplication continueUserActivity:restorationHandler:] in your app + * delegate (on iOS 9.0 and above). + * + * @param userActivity The activity object containing the data associated with the task the user + * was performing. + */ ++ (void)handleUserActivity:(id)userActivity; + +@end + +NS_ASSUME_NONNULL_END + diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FIRAnalytics+Consent.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FIRAnalytics+Consent.h new file mode 100644 index 0000000000..686a386ec6 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FIRAnalytics+Consent.h @@ -0,0 +1,33 @@ +#import + +#import "FIRAnalytics.h" + +NS_ASSUME_NONNULL_BEGIN + +/// The type of consent to set. Supported consent types are `ConsentType.adStorage` and +/// `ConsentType.analyticsStorage`. Omitting a type retains its previous status. +typedef NSString *FIRConsentType NS_TYPED_ENUM NS_SWIFT_NAME(ConsentType); +extern FIRConsentType const FIRConsentTypeAdStorage; +extern FIRConsentType const FIRConsentTypeAnalyticsStorage; + +/// The status value of the consent type. Supported statuses are `ConsentStatus.granted` and +/// `ConsentStatus.denied`. +typedef NSString *FIRConsentStatus NS_TYPED_ENUM NS_SWIFT_NAME(ConsentStatus); +extern FIRConsentStatus const FIRConsentStatusDenied; +extern FIRConsentStatus const FIRConsentStatusGranted; + +/// Sets the applicable end user consent state. +@interface FIRAnalytics (Consent) + +/// Sets the applicable end user consent state (e.g. for device identifiers) for this app on this +/// device. Use the consent settings to specify individual consent type values. Settings are +/// persisted across app sessions. By default consent types are set to `ConsentStatus.granted`. +/// +/// @param consentSettings An NSDictionary of consent types. Supported consent type keys are +/// `ConsentType.adStorage` and `ConsentType.analyticsStorage`. Valid values are +/// `ConsentStatus.granted` and `ConsentStatus.denied`. ++ (void)setConsent:(NSDictionary *)consentSettings; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FIRAnalytics.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FIRAnalytics.h new file mode 100644 index 0000000000..b9de09407d --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FIRAnalytics.h @@ -0,0 +1,142 @@ +#import + +#import "FIREventNames.h" +#import "FIRParameterNames.h" +#import "FIRUserPropertyNames.h" + +NS_ASSUME_NONNULL_BEGIN + +/// The top level Firebase Analytics singleton that provides methods for logging events and setting +/// user properties. See the developer guides for general +/// information on using Firebase Analytics in your apps. +/// +/// @note The Analytics SDK uses SQLite to persist events and other app-specific data. Calling +/// certain thread-unsafe global SQLite methods like `sqlite3_shutdown()` can result in +/// unexpected crashes at runtime. +NS_SWIFT_NAME(Analytics) +@interface FIRAnalytics : NSObject + +/// Logs an app event. The event can have up to 25 parameters. Events with the same name must have +/// the same parameters. Up to 500 event names are supported. Using predefined events and/or +/// parameters is recommended for optimal reporting. +/// +/// The following event names are reserved and cannot be used: +///
    +///
  • ad_activeview
  • +///
  • ad_click
  • +///
  • ad_exposure
  • +///
  • ad_query
  • +///
  • ad_reward
  • +///
  • adunit_exposure
  • +///
  • app_background
  • +///
  • app_clear_data
  • +///
  • app_exception
  • +///
  • app_remove
  • +///
  • app_store_refund
  • +///
  • app_store_subscription_cancel
  • +///
  • app_store_subscription_convert
  • +///
  • app_store_subscription_renew
  • +///
  • app_update
  • +///
  • app_upgrade
  • +///
  • dynamic_link_app_open
  • +///
  • dynamic_link_app_update
  • +///
  • dynamic_link_first_open
  • +///
  • error
  • +///
  • firebase_campaign
  • +///
  • first_open
  • +///
  • first_visit
  • +///
  • in_app_purchase
  • +///
  • notification_dismiss
  • +///
  • notification_foreground
  • +///
  • notification_open
  • +///
  • notification_receive
  • +///
  • os_update
  • +///
  • session_start
  • +///
  • session_start_with_rollout
  • +///
  • user_engagement
  • +///
+/// +/// @param name The name of the event. Should contain 1 to 40 alphanumeric characters or +/// underscores. The name must start with an alphabetic character. Some event names are +/// reserved. See FIREventNames.h for the list of reserved event names. The "firebase_", +/// "google_", and "ga_" prefixes are reserved and should not be used. Note that event names are +/// case-sensitive and that logging two events whose names differ only in case will result in +/// two distinct events. To manually log screen view events, use the `screen_view` event name. +/// @param parameters The dictionary of event parameters. Passing nil indicates that the event has +/// no parameters. Parameter names can be up to 40 characters long and must start with an +/// alphabetic character and contain only alphanumeric characters and underscores. Only NSString +/// and NSNumber (signed 64-bit integer and 64-bit floating-point number) parameter types are +/// supported. NSString parameter values can be up to 100 characters long. The "firebase_", +/// "google_", and "ga_" prefixes are reserved and should not be used for parameter names. ++ (void)logEventWithName:(NSString *)name + parameters:(nullable NSDictionary *)parameters + NS_SWIFT_NAME(logEvent(_:parameters:)); + +/// Sets a user property to a given value. Up to 25 user property names are supported. Once set, +/// user property values persist throughout the app lifecycle and across sessions. +/// +/// The following user property names are reserved and cannot be used: +///
    +///
  • first_open_time
  • +///
  • last_deep_link_referrer
  • +///
  • user_id
  • +///
+/// +/// @param value The value of the user property. Values can be up to 36 characters long. Setting the +/// value to nil removes the user property. +/// @param name The name of the user property to set. Should contain 1 to 24 alphanumeric characters +/// or underscores and must start with an alphabetic character. The "firebase_", "google_", and +/// "ga_" prefixes are reserved and should not be used for user property names. ++ (void)setUserPropertyString:(nullable NSString *)value forName:(NSString *)name + NS_SWIFT_NAME(setUserProperty(_:forName:)); + +/// Sets the user ID property. This feature must be used in accordance with +/// Google's Privacy Policy +/// +/// @param userID The user ID to ascribe to the user of this app on this device, which must be +/// non-empty and no more than 256 characters long. Setting userID to nil removes the user ID. ++ (void)setUserID:(nullable NSString *)userID; + +/// Sets whether analytics collection is enabled for this app on this device. This setting is +/// persisted across app sessions. By default it is enabled. +/// +/// @param analyticsCollectionEnabled A flag that enables or disables Analytics collection. ++ (void)setAnalyticsCollectionEnabled:(BOOL)analyticsCollectionEnabled; + +/// Sets the interval of inactivity in seconds that terminates the current session. The default +/// value is 1800 seconds (30 minutes). +/// +/// @param sessionTimeoutInterval The custom time of inactivity in seconds before the current +/// session terminates. ++ (void)setSessionTimeoutInterval:(NSTimeInterval)sessionTimeoutInterval; + +/// Returns the unique ID for this instance of the application or nil if +/// `ConsentType.analyticsStorage` has been set to `ConsentStatus.denied`. +/// +/// @see `FIRAnalytics+Consent.h` ++ (nullable NSString *)appInstanceID; + +/// Clears all analytics data for this instance from the device and resets the app instance ID. +/// FIRAnalyticsConfiguration values will be reset to the default values. ++ (void)resetAnalyticsData; + +/// Adds parameters that will be set on every event logged from the SDK, including automatic ones. +/// The values passed in the parameters dictionary will be added to the dictionary of default event +/// parameters. These parameters persist across app runs. They are of lower precedence than event +/// parameters, so if an event parameter and a parameter set using this API have the same name, the +/// value of the event parameter will be used. The same limitations on event parameters apply to +/// default event parameters. +/// +/// @param parameters Parameters to be added to the dictionary of parameters added to every event. +/// They will be added to the dictionary of default event parameters, replacing any existing +/// parameter with the same name. Valid parameters are NSString and NSNumber (signed 64-bit +/// integer and 64-bit floating-point number). Setting a key's value to [NSNull null] will clear +/// that parameter. Passing in a nil dictionary will clear all parameters. ++ (void)setDefaultEventParameters:(nullable NSDictionary *)parameters; + +/// Unavailable. +- (instancetype)init NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FIREventNames.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FIREventNames.h new file mode 100644 index 0000000000..3f85456342 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FIREventNames.h @@ -0,0 +1,499 @@ +/// @file FIREventNames.h +/// +/// Predefined event names. +/// +/// An Event is an important occurrence in your app that you want to measure. You can report up to +/// 500 different types of Events per app and you can associate up to 25 unique parameters with each +/// Event type. Some common events are suggested below, but you may also choose to specify custom +/// Event types that are associated with your specific app. Each event type is identified by a +/// unique name. Event names can be up to 40 characters long, may only contain alphanumeric +/// characters and underscores ("_"), and must start with an alphabetic character. The "firebase_", +/// "google_", and "ga_" prefixes are reserved and should not be used. + +#import + +/// Ad Impression event. This event signifies when a user sees an ad impression. Note: If you supply +/// the @c kFIRParameterValue parameter, you must also supply the @c kFIRParameterCurrency parameter +/// so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterAdPlatform (NSString) (optional)
  • +///
  • @c kFIRParameterAdFormat (NSString) (optional)
  • +///
  • @c kFIRParameterAdSource (NSString) (optional)
  • +///
  • @c kFIRParameterAdUnitName (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventAdImpression NS_SWIFT_NAME(AnalyticsEventAdImpression) = + @"ad_impression"; + +/// Add Payment Info event. This event signifies that a user has submitted their payment +/// information. Note: If you supply the @c kFIRParameterValue parameter, you must also supply the +/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterPaymentType (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventAddPaymentInfo NS_SWIFT_NAME(AnalyticsEventAddPaymentInfo) = + @"add_payment_info"; + +/// Add Shipping Info event. This event signifies that a user has submitted their shipping +/// information. Note: If you supply the @c kFIRParameterValue parameter, you must also supply the +/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterShippingTier (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventAddShippingInfo NS_SWIFT_NAME(AnalyticsEventAddShippingInfo) = + @"add_shipping_info"; + +/// E-Commerce Add To Cart event. This event signifies that an item(s) was added to a cart for +/// purchase. Add this event to a funnel with @c kFIREventPurchase to gauge the effectiveness of +/// your checkout process. Note: If you supply the @c kFIRParameterValue parameter, you must also +/// supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed +/// accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventAddToCart NS_SWIFT_NAME(AnalyticsEventAddToCart) = @"add_to_cart"; + +/// E-Commerce Add To Wishlist event. This event signifies that an item was added to a wishlist. Use +/// this event to identify popular gift items. Note: If you supply the @c kFIRParameterValue +/// parameter, you must also supply the @c kFIRParameterCurrency parameter so that revenue metrics +/// can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventAddToWishlist NS_SWIFT_NAME(AnalyticsEventAddToWishlist) = + @"add_to_wishlist"; + +/// App Open event. By logging this event when an App becomes active, developers can understand how +/// often users leave and return during the course of a Session. Although Sessions are automatically +/// reported, this event can provide further clarification around the continuous engagement of +/// app-users. +static NSString *const kFIREventAppOpen NS_SWIFT_NAME(AnalyticsEventAppOpen) = @"app_open"; + +/// E-Commerce Begin Checkout event. This event signifies that a user has begun the process of +/// checking out. Add this event to a funnel with your @c kFIREventPurchase event to gauge the +/// effectiveness of your checkout process. Note: If you supply the @c kFIRParameterValue parameter, +/// you must also supply the @c kFIRParameterCurrency parameter so that revenue metrics can be +/// computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventBeginCheckout NS_SWIFT_NAME(AnalyticsEventBeginCheckout) = + @"begin_checkout"; + +/// Campaign Detail event. Log this event to supply the referral details of a re-engagement +/// campaign. Note: you must supply at least one of the required parameters kFIRParameterSource, +/// kFIRParameterMedium or kFIRParameterCampaign. Params: +/// +///
    +///
  • @c kFIRParameterSource (NSString)
  • +///
  • @c kFIRParameterMedium (NSString)
  • +///
  • @c kFIRParameterCampaign (NSString)
  • +///
  • @c kFIRParameterTerm (NSString) (optional)
  • +///
  • @c kFIRParameterContent (NSString) (optional)
  • +///
  • @c kFIRParameterAdNetworkClickID (NSString) (optional)
  • +///
  • @c kFIRParameterCP1 (NSString) (optional)
  • +///
  • @c kFIRParameterCampaignID (NSString) (optional)
  • +///
  • @c kFIRParameterCreativeFormat (NSString) (optional)
  • +///
  • @c kFIRParameterMarketingTactic (NSString) (optional)
  • +///
  • @c kFIRParameterSourcePlatform (NSString) (optional)
  • +///
+static NSString *const kFIREventCampaignDetails NS_SWIFT_NAME(AnalyticsEventCampaignDetails) = + @"campaign_details"; + +/// Checkout progress. Params: +/// +///
    +///
  • @c kFIRParameterCheckoutStep (unsigned 64-bit integer as NSNumber)
  • +///
  • @c kFIRParameterCheckoutOption (NSString) (optional)
  • +///
+/// This constant has been deprecated. +static NSString *const kFIREventCheckoutProgress NS_SWIFT_NAME(AnalyticsEventCheckoutProgress) = + @"checkout_progress"; + +/// Earn Virtual Currency event. This event tracks the awarding of virtual currency in your app. Log +/// this along with @c kFIREventSpendVirtualCurrency to better understand your virtual economy. +/// Params: +/// +///
    +///
  • @c kFIRParameterVirtualCurrencyName (NSString)
  • +///
  • @c kFIRParameterValue (signed 64-bit integer or double as NSNumber)
  • +///
+static NSString *const kFIREventEarnVirtualCurrency + NS_SWIFT_NAME(AnalyticsEventEarnVirtualCurrency) = @"earn_virtual_currency"; + +/// E-Commerce Purchase event. This event signifies that an item was purchased by a user. Note: +/// This is different from the in-app purchase event, which is reported automatically for App +/// Store-based apps. Note: If you supply the @c kFIRParameterValue parameter, you must also +/// supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed +/// accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTransactionID (NSString) (optional)
  • +///
  • @c kFIRParameterTax (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterShipping (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterLocation (NSString) (optional)
  • +///
  • @c kFIRParameterStartDate (NSString) (optional)
  • +///
  • @c kFIRParameterEndDate (NSString) (optional)
  • +///
  • @c kFIRParameterNumberOfNights (signed 64-bit integer as NSNumber) (optional) for +/// hotel bookings
  • +///
  • @c kFIRParameterNumberOfRooms (signed 64-bit integer as NSNumber) (optional) for +/// hotel bookings
  • +///
  • @c kFIRParameterNumberOfPassengers (signed 64-bit integer as NSNumber) (optional) +/// for travel bookings
  • +///
  • @c kFIRParameterOrigin (NSString) (optional)
  • +///
  • @c kFIRParameterDestination (NSString) (optional)
  • +///
  • @c kFIRParameterTravelClass (NSString) (optional) for travel bookings
  • +///
+/// This constant has been deprecated. Use @c kFIREventPurchase constant instead. +static NSString *const kFIREventEcommercePurchase NS_SWIFT_NAME(AnalyticsEventEcommercePurchase) = + @"ecommerce_purchase"; + +/// Generate Lead event. Log this event when a lead has been generated in the app to understand the +/// efficacy of your install and re-engagement campaigns. Note: If you supply the +/// @c kFIRParameterValue parameter, you must also supply the @c kFIRParameterCurrency +/// parameter so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventGenerateLead NS_SWIFT_NAME(AnalyticsEventGenerateLead) = + @"generate_lead"; + +/// Join Group event. Log this event when a user joins a group such as a guild, team or family. Use +/// this event to analyze how popular certain groups or social features are in your app. Params: +/// +///
    +///
  • @c kFIRParameterGroupID (NSString)
  • +///
+static NSString *const kFIREventJoinGroup NS_SWIFT_NAME(AnalyticsEventJoinGroup) = @"join_group"; + +/// Level End event. Log this event when the user finishes a level. Params: +/// +///
    +///
  • @c kFIRParameterLevelName (NSString)
  • +///
  • @c kFIRParameterSuccess (NSString)
  • +///
+static NSString *const kFIREventLevelEnd NS_SWIFT_NAME(AnalyticsEventLevelEnd) = @"level_end"; + +/// Level Start event. Log this event when the user starts a new level. Params: +/// +///
    +///
  • @c kFIRParameterLevelName (NSString)
  • +///
+static NSString *const kFIREventLevelStart NS_SWIFT_NAME(AnalyticsEventLevelStart) = @"level_start"; + +/// Level Up event. This event signifies that a player has leveled up in your gaming app. It can +/// help you gauge the level distribution of your userbase and help you identify certain levels that +/// are difficult to pass. Params: +/// +///
    +///
  • @c kFIRParameterLevel (signed 64-bit integer as NSNumber)
  • +///
  • @c kFIRParameterCharacter (NSString) (optional)
  • +///
+static NSString *const kFIREventLevelUp NS_SWIFT_NAME(AnalyticsEventLevelUp) = @"level_up"; + +/// Login event. Apps with a login feature can report this event to signify that a user has logged +/// in. +static NSString *const kFIREventLogin NS_SWIFT_NAME(AnalyticsEventLogin) = @"login"; + +/// Post Score event. Log this event when the user posts a score in your gaming app. This event can +/// help you understand how users are actually performing in your game and it can help you correlate +/// high scores with certain audiences or behaviors. Params: +/// +///
    +///
  • @c kFIRParameterScore (signed 64-bit integer as NSNumber)
  • +///
  • @c kFIRParameterLevel (signed 64-bit integer as NSNumber) (optional)
  • +///
  • @c kFIRParameterCharacter (NSString) (optional)
  • +///
+static NSString *const kFIREventPostScore NS_SWIFT_NAME(AnalyticsEventPostScore) = @"post_score"; + +/// Present Offer event. This event signifies that the app has presented a purchase offer to a user. +/// Add this event to a funnel with the kFIREventAddToCart and kFIREventEcommercePurchase to gauge +/// your conversion process. Note: If you supply the @c kFIRParameterValue parameter, you must +/// also supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed +/// accurately. Params: +/// +///
    +///
  • @c kFIRParameterQuantity (signed 64-bit integer as NSNumber)
  • +///
  • @c kFIRParameterItemID (NSString)
  • +///
  • @c kFIRParameterItemName (NSString)
  • +///
  • @c kFIRParameterItemCategory (NSString)
  • +///
  • @c kFIRParameterItemLocationID (NSString) (optional)
  • +///
  • @c kFIRParameterPrice (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+/// This constant has been deprecated. Use @c kFIREventViewPromotion constant instead. +static NSString *const kFIREventPresentOffer NS_SWIFT_NAME(AnalyticsEventPresentOffer) = + @"present_offer"; + +/// E-Commerce Purchase event. This event signifies that an item(s) was purchased by a user. Note: +/// This is different from the in-app purchase event, which is reported automatically for App +/// Store-based apps. Note: If you supply the @c kFIRParameterValue parameter, you must also supply +/// the @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. +/// Params: +/// +///
    +///
  • @c kFIRParameterAffiliation (NSString) (optional)
  • +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterShipping (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTax (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTransactionID (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventPurchase NS_SWIFT_NAME(AnalyticsEventPurchase) = @"purchase"; + +/// E-Commerce Purchase Refund event. This event signifies that an item purchase was refunded. +/// Note: If you supply the @c kFIRParameterValue parameter, you must also supply the +/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. +/// Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTransactionID (NSString) (optional)
  • +///
+/// This constant has been deprecated. Use @c kFIREventRefund constant instead. +static NSString *const kFIREventPurchaseRefund NS_SWIFT_NAME(AnalyticsEventPurchaseRefund) = + @"purchase_refund"; + +/// E-Commerce Refund event. This event signifies that a refund was issued. Note: If you supply the +/// @c kFIRParameterValue parameter, you must also supply the @c kFIRParameterCurrency parameter so +/// that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterAffiliation (NSString) (optional)
  • +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterShipping (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTax (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTransactionID (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventRefund NS_SWIFT_NAME(AnalyticsEventRefund) = @"refund"; + +/// E-Commerce Remove from Cart event. This event signifies that an item(s) was removed from a cart. +/// Note: If you supply the @c kFIRParameterValue parameter, you must also supply the @c +/// kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventRemoveFromCart NS_SWIFT_NAME(AnalyticsEventRemoveFromCart) = + @"remove_from_cart"; + +/// Screen View event. This event signifies a screen view. Use this when a screen transition occurs. +/// This event can be logged irrespective of whether automatic screen tracking is enabled. Params: +/// +///
    +///
  • @c kFIRParameterScreenClass (NSString) (optional)
  • +///
  • @c kFIRParameterScreenName (NSString) (optional)
  • +///
+static NSString *const kFIREventScreenView NS_SWIFT_NAME(AnalyticsEventScreenView) = @"screen_view"; + +/// Search event. Apps that support search features can use this event to contextualize search +/// operations by supplying the appropriate, corresponding parameters. This event can help you +/// identify the most popular content in your app. Params: +/// +///
    +///
  • @c kFIRParameterSearchTerm (NSString)
  • +///
  • @c kFIRParameterStartDate (NSString) (optional)
  • +///
  • @c kFIRParameterEndDate (NSString) (optional)
  • +///
  • @c kFIRParameterNumberOfNights (signed 64-bit integer as NSNumber) (optional) for +/// hotel bookings
  • +///
  • @c kFIRParameterNumberOfRooms (signed 64-bit integer as NSNumber) (optional) for +/// hotel bookings
  • +///
  • @c kFIRParameterNumberOfPassengers (signed 64-bit integer as NSNumber) (optional) +/// for travel bookings
  • +///
  • @c kFIRParameterOrigin (NSString) (optional)
  • +///
  • @c kFIRParameterDestination (NSString) (optional)
  • +///
  • @c kFIRParameterTravelClass (NSString) (optional) for travel bookings
  • +///
+static NSString *const kFIREventSearch NS_SWIFT_NAME(AnalyticsEventSearch) = @"search"; + +/// Select Content event. This general purpose event signifies that a user has selected some content +/// of a certain type in an app. The content can be any object in your app. This event can help you +/// identify popular content and categories of content in your app. Params: +/// +///
    +///
  • @c kFIRParameterContentType (NSString)
  • +///
  • @c kFIRParameterItemID (NSString)
  • +///
+static NSString *const kFIREventSelectContent NS_SWIFT_NAME(AnalyticsEventSelectContent) = + @"select_content"; + +/// Select Item event. This event signifies that an item was selected by a user from a list. Use the +/// appropriate parameters to contextualize the event. Use this event to discover the most popular +/// items selected. Params: +/// +///
    +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterItemListID (NSString) (optional)
  • +///
  • @c kFIRParameterItemListName (NSString) (optional)
  • +///
+static NSString *const kFIREventSelectItem NS_SWIFT_NAME(AnalyticsEventSelectItem) = @"select_item"; + +/// Select promotion event. This event signifies that a user has selected a promotion offer. Use the +/// appropriate parameters to contextualize the event, such as the item(s) for which the promotion +/// applies. Params: +/// +///
    +///
  • @c kFIRParameterCreativeName (NSString) (optional)
  • +///
  • @c kFIRParameterCreativeSlot (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterLocationID (NSString) (optional)
  • +///
  • @c kFIRParameterPromotionID (NSString) (optional)
  • +///
  • @c kFIRParameterPromotionName (NSString) (optional)
  • +///
+static NSString *const kFIREventSelectPromotion NS_SWIFT_NAME(AnalyticsEventSelectPromotion) = + @"select_promotion"; + +/// Set checkout option. Params: +/// +///
    +///
  • @c kFIRParameterCheckoutStep (unsigned 64-bit integer as NSNumber)
  • +///
  • @c kFIRParameterCheckoutOption (NSString)
  • +///
+/// This constant has been deprecated. +static NSString *const kFIREventSetCheckoutOption NS_SWIFT_NAME(AnalyticsEventSetCheckoutOption) = + @"set_checkout_option"; + +/// Share event. Apps with social features can log the Share event to identify the most viral +/// content. Params: +/// +///
    +///
  • @c kFIRParameterContentType (NSString)
  • +///
  • @c kFIRParameterItemID (NSString)
  • +///
+static NSString *const kFIREventShare NS_SWIFT_NAME(AnalyticsEventShare) = @"share"; + +/// Sign Up event. This event indicates that a user has signed up for an account in your app. The +/// parameter signifies the method by which the user signed up. Use this event to understand the +/// different behaviors between logged in and logged out users. Params: +/// +///
    +///
  • @c kFIRParameterSignUpMethod (NSString)
  • +///
+static NSString *const kFIREventSignUp NS_SWIFT_NAME(AnalyticsEventSignUp) = @"sign_up"; + +/// Spend Virtual Currency event. This event tracks the sale of virtual goods in your app and can +/// help you identify which virtual goods are the most popular objects of purchase. Params: +/// +///
    +///
  • @c kFIRParameterItemName (NSString)
  • +///
  • @c kFIRParameterVirtualCurrencyName (NSString)
  • +///
  • @c kFIRParameterValue (signed 64-bit integer or double as NSNumber)
  • +///
+static NSString *const kFIREventSpendVirtualCurrency + NS_SWIFT_NAME(AnalyticsEventSpendVirtualCurrency) = @"spend_virtual_currency"; + +/// Tutorial Begin event. This event signifies the start of the on-boarding process in your app. Use +/// this in a funnel with kFIREventTutorialComplete to understand how many users complete this +/// process and move on to the full app experience. +static NSString *const kFIREventTutorialBegin NS_SWIFT_NAME(AnalyticsEventTutorialBegin) = + @"tutorial_begin"; + +/// Tutorial End event. Use this event to signify the user's completion of your app's on-boarding +/// process. Add this to a funnel with kFIREventTutorialBegin to gauge the completion rate of your +/// on-boarding process. +static NSString *const kFIREventTutorialComplete NS_SWIFT_NAME(AnalyticsEventTutorialComplete) = + @"tutorial_complete"; + +/// Unlock Achievement event. Log this event when the user has unlocked an achievement in your +/// game. Since achievements generally represent the breadth of a gaming experience, this event can +/// help you understand how many users are experiencing all that your game has to offer. Params: +/// +///
    +///
  • @c kFIRParameterAchievementID (NSString)
  • +///
+static NSString *const kFIREventUnlockAchievement NS_SWIFT_NAME(AnalyticsEventUnlockAchievement) = + @"unlock_achievement"; + +/// E-commerce View Cart event. This event signifies that a user has viewed their cart. Use this to +/// analyze your purchase funnel. Note: If you supply the @c kFIRParameterValue parameter, you must +/// also supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed +/// accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventViewCart NS_SWIFT_NAME(AnalyticsEventViewCart) = @"view_cart"; + +/// View Item event. This event signifies that a user has viewed an item. Use the appropriate +/// parameters to contextualize the event. Use this event to discover the most popular items viewed +/// in your app. Note: If you supply the @c kFIRParameterValue parameter, you must also supply the +/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventViewItem NS_SWIFT_NAME(AnalyticsEventViewItem) = @"view_item"; + +/// View Item List event. Log this event when a user sees a list of items or offerings. Params: +/// +///
    +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterItemListID (NSString) (optional)
  • +///
  • @c kFIRParameterItemListName (NSString) (optional)
  • +///
+static NSString *const kFIREventViewItemList NS_SWIFT_NAME(AnalyticsEventViewItemList) = + @"view_item_list"; + +/// View Promotion event. This event signifies that a promotion was shown to a user. Add this event +/// to a funnel with the @c kFIREventAddToCart and @c kFIREventPurchase to gauge your conversion +/// process. Params: +/// +///
    +///
  • @c kFIRParameterCreativeName (NSString) (optional)
  • +///
  • @c kFIRParameterCreativeSlot (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterLocationID (NSString) (optional)
  • +///
  • @c kFIRParameterPromotionID (NSString) (optional)
  • +///
  • @c kFIRParameterPromotionName (NSString) (optional)
  • +///
+static NSString *const kFIREventViewPromotion NS_SWIFT_NAME(AnalyticsEventViewPromotion) = + @"view_promotion"; + +/// View Search Results event. Log this event when the user has been presented with the results of a +/// search. Params: +/// +///
    +///
  • @c kFIRParameterSearchTerm (NSString)
  • +///
+static NSString *const kFIREventViewSearchResults NS_SWIFT_NAME(AnalyticsEventViewSearchResults) = + @"view_search_results"; diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FIRParameterNames.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FIRParameterNames.h new file mode 100644 index 0000000000..fe3a6c47b4 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FIRParameterNames.h @@ -0,0 +1,776 @@ +/// @file FIRParameterNames.h +/// +/// Predefined event parameter names. +/// +/// Params supply information that contextualize Events. You can associate up to 25 unique Params +/// with each Event type. Some Params are suggested below for certain common Events, but you are +/// not limited to these. You may supply extra Params for suggested Events or custom Params for +/// Custom events. Param names can be up to 40 characters long, may only contain alphanumeric +/// characters and underscores ("_"), and must start with an alphabetic character. Param values can +/// be up to 100 characters long. The "firebase_", "google_", and "ga_" prefixes are reserved and +/// should not be used. + +#import + +/// Game achievement ID (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterAchievementID : @"10_matches_won",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAchievementID NS_SWIFT_NAME(AnalyticsParameterAchievementID) = + @"achievement_id"; + +/// The ad format (e.g. Banner, Interstitial, Rewarded, Native, Rewarded Interstitial, Instream). +/// (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterAdFormat : @"Banner",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAdFormat NS_SWIFT_NAME(AnalyticsParameterAdFormat) = + @"ad_format"; + +/// Ad Network Click ID (NSString). Used for network-specific click IDs which vary in format. +///
+///     NSDictionary *params = @{
+///       kFIRParameterAdNetworkClickID : @"1234567",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAdNetworkClickID + NS_SWIFT_NAME(AnalyticsParameterAdNetworkClickID) = @"aclid"; + +/// The ad platform (e.g. MoPub, IronSource) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterAdPlatform : @"MoPub",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAdPlatform NS_SWIFT_NAME(AnalyticsParameterAdPlatform) = + @"ad_platform"; + +/// The ad source (e.g. AdColony) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterAdSource : @"AdColony",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAdSource NS_SWIFT_NAME(AnalyticsParameterAdSource) = + @"ad_source"; + +/// The ad unit name (e.g. Banner_03) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterAdUnitName : @"Banner_03",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAdUnitName NS_SWIFT_NAME(AnalyticsParameterAdUnitName) = + @"ad_unit_name"; + +/// A product affiliation to designate a supplying company or brick and mortar store location +/// (NSString).
+///     NSDictionary *params = @{
+///       kFIRParameterAffiliation : @"Google Store",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAffiliation NS_SWIFT_NAME(AnalyticsParameterAffiliation) = + @"affiliation"; + +/// Campaign custom parameter (NSString). Used as a method of capturing custom data in a campaign. +/// Use varies by network. +///
+///     NSDictionary *params = @{
+///       kFIRParameterCP1 : @"custom_data",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCP1 NS_SWIFT_NAME(AnalyticsParameterCP1) = @"cp1"; + +/// The individual campaign name, slogan, promo code, etc. Some networks have pre-defined macro to +/// capture campaign information, otherwise can be populated by developer. Highly Recommended +/// (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCampaign : @"winter_promotion",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCampaign NS_SWIFT_NAME(AnalyticsParameterCampaign) = + @"campaign"; + +/// Campaign ID (NSString). Used for keyword analysis to identify a specific product promotion or +/// strategic campaign. This is a required key for GA4 data import. +///
+///     NSDictionary *params = @{
+///       kFIRParameterCampaignID : @"7877652710",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCampaignID NS_SWIFT_NAME(AnalyticsParameterCampaignID) = + @"campaign_id"; + +/// Character used in game (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCharacter : @"beat_boss",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCharacter NS_SWIFT_NAME(AnalyticsParameterCharacter) = + @"character"; + +/// Some option on a step in an ecommerce flow (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCheckoutOption : @"Visa",
+///       // ...
+///     };
+/// 
+/// This constant has been deprecated. +static NSString *const kFIRParameterCheckoutOption + NS_SWIFT_NAME(AnalyticsParameterCheckoutOption) = @"checkout_option"; + +/// The checkout step (1..N) (unsigned 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCheckoutStep : @"1",
+///       // ...
+///     };
+/// 
+/// This constant has been deprecated. +static NSString *const kFIRParameterCheckoutStep NS_SWIFT_NAME(AnalyticsParameterCheckoutStep) = + @"checkout_step"; + +/// Campaign content (NSString). +static NSString *const kFIRParameterContent NS_SWIFT_NAME(AnalyticsParameterContent) = @"content"; + +/// Type of content selected (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterContentType : @"news article",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterContentType NS_SWIFT_NAME(AnalyticsParameterContentType) = + @"content_type"; + +/// Coupon code used for a purchase (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCoupon : @"SUMMER_FUN",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCoupon NS_SWIFT_NAME(AnalyticsParameterCoupon) = @"coupon"; + +/// Creative Format (NSString). Used to identify the high-level classification of the type of ad +/// served by a specific campaign. +///
+///     NSDictionary *params = @{
+///       kFIRParameterCreativeFormat : @"display",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCreativeFormat NS_SWIFT_NAME(AnalyticsParameterCreativeFormat) = + @"creative_format"; + +/// The name of a creative used in a promotional spot (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCreativeName : @"Summer Sale",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCreativeName NS_SWIFT_NAME(AnalyticsParameterCreativeName) = + @"creative_name"; + +/// The name of a creative slot (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCreativeSlot : @"summer_banner2",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCreativeSlot NS_SWIFT_NAME(AnalyticsParameterCreativeSlot) = + @"creative_slot"; + +/// Currency of the purchase or items associated with the event, in 3-letter +/// ISO_4217 format (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCurrency : @"USD",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCurrency NS_SWIFT_NAME(AnalyticsParameterCurrency) = + @"currency"; + +/// Flight or Travel destination (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterDestination : @"Mountain View, CA",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterDestination NS_SWIFT_NAME(AnalyticsParameterDestination) = + @"destination"; + +/// Monetary value of discount associated with a purchase (double as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterDiscount : @(2.0),
+///       kFIRParameterCurrency : @"USD",  // e.g. $2.00 USD
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterDiscount NS_SWIFT_NAME(AnalyticsParameterDiscount) = + @"discount"; + +/// The arrival date, check-out date or rental end date for the item. This should be in +/// YYYY-MM-DD format (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterEndDate : @"2015-09-14",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterEndDate NS_SWIFT_NAME(AnalyticsParameterEndDate) = @"end_date"; + +/// Indicates that the associated event should either extend the current session +/// or start a new session if no session was active when the event was logged. +/// Specify YES to extend the current session or to start a new session; any +/// other value will not extend or start a session. +///
+///     NSDictionary *params = @{
+///       kFIRParameterExtendSession : @YES,
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterExtendSession NS_SWIFT_NAME(AnalyticsParameterExtendSession) = + @"extend_session"; + +/// Flight number for travel events (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterFlightNumber : @"ZZ800",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterFlightNumber NS_SWIFT_NAME(AnalyticsParameterFlightNumber) = + @"flight_number"; + +/// Group/clan/guild ID (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterGroupID : @"g1",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterGroupID NS_SWIFT_NAME(AnalyticsParameterGroupID) = @"group_id"; + +/// The index of the item in a list (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterIndex : @(5),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterIndex NS_SWIFT_NAME(AnalyticsParameterIndex) = @"index"; + +/// Item brand (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemBrand : @"Google",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemBrand NS_SWIFT_NAME(AnalyticsParameterItemBrand) = + @"item_brand"; + +/// Item category (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemCategory : @"pants",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemCategory NS_SWIFT_NAME(AnalyticsParameterItemCategory) = + @"item_category"; + +/// Item Category (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemCategory2 : @"pants",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemCategory2 NS_SWIFT_NAME(AnalyticsParameterItemCategory2) = + @"item_category2"; + +/// Item Category (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemCategory3 : @"pants",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemCategory3 NS_SWIFT_NAME(AnalyticsParameterItemCategory3) = + @"item_category3"; + +/// Item Category (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemCategory4 : @"pants",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemCategory4 NS_SWIFT_NAME(AnalyticsParameterItemCategory4) = + @"item_category4"; + +/// Item Category (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemCategory5 : @"pants",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemCategory5 NS_SWIFT_NAME(AnalyticsParameterItemCategory5) = + @"item_category5"; + +/// Item ID (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemID : @"SKU_12345",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemID NS_SWIFT_NAME(AnalyticsParameterItemID) = @"item_id"; + +/// The list in which the item was presented to the user (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemList : @"Search Results",
+///       // ...
+///     };
+/// 
+/// This constant has been deprecated. Use @c kFIRParameterItemListName constant instead. +static NSString *const kFIRParameterItemList NS_SWIFT_NAME(AnalyticsParameterItemList) = + @"item_list"; + +/// The ID of the list in which the item was presented to the user (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemListID : @"ABC123",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemListID NS_SWIFT_NAME(AnalyticsParameterItemListID) = + @"item_list_id"; + +/// The name of the list in which the item was presented to the user (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemListName : @"Related products",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemListName NS_SWIFT_NAME(AnalyticsParameterItemListName) = + @"item_list_name"; + +/// The Google Place ID (NSString) that +/// corresponds to the associated item. Alternatively, you can supply your own custom Location ID. +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemLocationID : @"ChIJiyj437sx3YAR9kUWC8QkLzQ",
+///       // ...
+///     };
+/// 
+/// This constant has been deprecated. Use @c kFIRParameterLocationID constant instead. +static NSString *const kFIRParameterItemLocationID + NS_SWIFT_NAME(AnalyticsParameterItemLocationID) = @"item_location_id"; + +/// Item Name (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemName : @"jeggings",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemName NS_SWIFT_NAME(AnalyticsParameterItemName) = + @"item_name"; + +/// Item variant (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemVariant : @"Black",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemVariant NS_SWIFT_NAME(AnalyticsParameterItemVariant) = + @"item_variant"; + +/// The list of items involved in the transaction. (NSArray). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItems : @[
+///         @{kFIRParameterItemName : @"jeggings", kFIRParameterItemCategory : @"pants"},
+///         @{kFIRParameterItemName : @"boots", kFIRParameterItemCategory : @"shoes"},
+///       ],
+///     };
+/// 
+static NSString *const kFIRParameterItems NS_SWIFT_NAME(AnalyticsParameterItems) = @"items"; + +/// Level in game (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterLevel : @(42),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterLevel NS_SWIFT_NAME(AnalyticsParameterLevel) = @"level"; + +/// The name of a level in a game (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterLevelName : @"room_1",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterLevelName NS_SWIFT_NAME(AnalyticsParameterLevelName) = + @"level_name"; + +/// Location (NSString). The Google Place ID +/// that corresponds to the associated event. Alternatively, you can supply your own custom +/// Location ID. +///
+///     NSDictionary *params = @{
+///       kFIRParameterLocation : @"ChIJiyj437sx3YAR9kUWC8QkLzQ",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterLocation NS_SWIFT_NAME(AnalyticsParameterLocation) = + @"location"; + +/// The location associated with the event. Preferred to be the Google +/// Place ID that corresponds to the +/// associated item but could be overridden to a custom location ID string.(NSString).
+///     NSDictionary *params = @{
+///       kFIRParameterLocationID : @"ChIJiyj437sx3YAR9kUWC8QkLzQ",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterLocationID NS_SWIFT_NAME(AnalyticsParameterLocationID) = + @"location_id"; + +/// Marketing Tactic (NSString). Used to identify the targeting criteria applied to a specific +/// campaign. +///
+///     NSDictionary *params = @{
+///       kFIRParameterMarketingTactic : @"Remarketing",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterMarketingTactic + NS_SWIFT_NAME(AnalyticsParameterMarketingTactic) = @"marketing_tactic"; + +/// The advertising or marketing medium, for example: cpc, banner, email, push. Highly recommended +/// (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterMedium : @"email",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterMedium NS_SWIFT_NAME(AnalyticsParameterMedium) = @"medium"; + +/// A particular approach used in an operation; for example, "facebook" or "email" in the context +/// of a sign_up or login event. (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterMethod : @"google",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterMethod NS_SWIFT_NAME(AnalyticsParameterMethod) = @"method"; + +/// Number of nights staying at hotel (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterNumberOfNights : @(3),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterNumberOfNights + NS_SWIFT_NAME(AnalyticsParameterNumberOfNights) = @"number_of_nights"; + +/// Number of passengers traveling (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterNumberOfPassengers : @(11),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterNumberOfPassengers + NS_SWIFT_NAME(AnalyticsParameterNumberOfPassengers) = @"number_of_passengers"; + +/// Number of rooms for travel events (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterNumberOfRooms : @(2),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterNumberOfRooms NS_SWIFT_NAME(AnalyticsParameterNumberOfRooms) = + @"number_of_rooms"; + +/// Flight or Travel origin (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterOrigin : @"Mountain View, CA",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterOrigin NS_SWIFT_NAME(AnalyticsParameterOrigin) = @"origin"; + +/// The chosen method of payment (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterPaymentType : @"Visa",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterPaymentType NS_SWIFT_NAME(AnalyticsParameterPaymentType) = + @"payment_type"; + +/// Purchase price (double as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterPrice : @(1.0),
+///       kFIRParameterCurrency : @"USD",  // e.g. $1.00 USD
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterPrice NS_SWIFT_NAME(AnalyticsParameterPrice) = @"price"; + +/// The ID of a product promotion (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterPromotionID : @"ABC123",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterPromotionID NS_SWIFT_NAME(AnalyticsParameterPromotionID) = + @"promotion_id"; + +/// The name of a product promotion (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterPromotionName : @"Summer Sale",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterPromotionName NS_SWIFT_NAME(AnalyticsParameterPromotionName) = + @"promotion_name"; + +/// Purchase quantity (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterQuantity : @(1),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterQuantity NS_SWIFT_NAME(AnalyticsParameterQuantity) = + @"quantity"; + +/// Score in game (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterScore : @(4200),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterScore NS_SWIFT_NAME(AnalyticsParameterScore) = @"score"; + +/// Current screen class, such as the class name of the UIViewController, logged with screen_view +/// event and added to every event (NSString).
+///     NSDictionary *params = @{
+///       kFIRParameterScreenClass : @"LoginViewController",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterScreenClass NS_SWIFT_NAME(AnalyticsParameterScreenClass) = + @"screen_class"; + +/// Current screen name, such as the name of the UIViewController, logged with screen_view event and +/// added to every event (NSString).
+///     NSDictionary *params = @{
+///       kFIRParameterScreenName : @"LoginView",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterScreenName NS_SWIFT_NAME(AnalyticsParameterScreenName) = + @"screen_name"; + +/// The search string/keywords used (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterSearchTerm : @"periodic table",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterSearchTerm NS_SWIFT_NAME(AnalyticsParameterSearchTerm) = + @"search_term"; + +/// Shipping cost associated with a transaction (double as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterShipping : @(5.99),
+///       kFIRParameterCurrency : @"USD",  // e.g. $5.99 USD
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterShipping NS_SWIFT_NAME(AnalyticsParameterShipping) = + @"shipping"; + +/// The shipping tier (e.g. Ground, Air, Next-day) selected for delivery of the purchased item +/// (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterShippingTier : @"Ground",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterShippingTier NS_SWIFT_NAME(AnalyticsParameterShippingTier) = + @"shipping_tier"; + +/// Sign up method (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterSignUpMethod : @"google",
+///       // ...
+///     };
+/// 
+/// +/// This constant has been deprecated. Use Method constant instead. +static NSString *const kFIRParameterSignUpMethod NS_SWIFT_NAME(AnalyticsParameterSignUpMethod) = + @"sign_up_method"; + +/// The origin of your traffic, such as an Ad network (for example, google) or partner (urban +/// airship). Identify the advertiser, site, publication, etc. that is sending traffic to your +/// property. Highly recommended (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterSource : @"InMobi",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterSource NS_SWIFT_NAME(AnalyticsParameterSource) = @"source"; + +/// Source Platform (NSString). Used to identify the platform responsible for directing traffic to a +/// given Analytics property (e.g., a buying platform where budgets, targeting criteria, etc. are +/// set, a platform for managing organic traffic data, etc.). +///
+///     NSDictionary *params = @{
+///       kFIRParameterSourcePlatform : @"sa360",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterSourcePlatform NS_SWIFT_NAME(AnalyticsParameterSourcePlatform) = + @"source_platform"; + +/// The departure date, check-in date or rental start date for the item. This should be in +/// YYYY-MM-DD format (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterStartDate : @"2015-09-14",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterStartDate NS_SWIFT_NAME(AnalyticsParameterStartDate) = + @"start_date"; + +/// The result of an operation. Specify 1 to indicate success and 0 to indicate failure (unsigned +/// integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterSuccess : @(1),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterSuccess NS_SWIFT_NAME(AnalyticsParameterSuccess) = @"success"; + +/// Tax cost associated with a transaction (double as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterTax : @(2.43),
+///       kFIRParameterCurrency : @"USD",  // e.g. $2.43 USD
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterTax NS_SWIFT_NAME(AnalyticsParameterTax) = @"tax"; + +/// If you're manually tagging keyword campaigns, you should use utm_term to specify the keyword +/// (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterTerm : @"game",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterTerm NS_SWIFT_NAME(AnalyticsParameterTerm) = @"term"; + +/// The unique identifier of a transaction (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterTransactionID : @"T12345",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterTransactionID NS_SWIFT_NAME(AnalyticsParameterTransactionID) = + @"transaction_id"; + +/// Travel class (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterTravelClass : @"business",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterTravelClass NS_SWIFT_NAME(AnalyticsParameterTravelClass) = + @"travel_class"; + +/// A context-specific numeric value which is accumulated automatically for each event type. This is +/// a general purpose parameter that is useful for accumulating a key metric that pertains to an +/// event. Examples include revenue, distance, time and points. Value should be specified as signed +/// 64-bit integer or double as NSNumber. Notes: Values for pre-defined currency-related events +/// (such as @c kFIREventAddToCart) should be supplied using double as NSNumber and must be +/// accompanied by a @c kFIRParameterCurrency parameter. The valid range of accumulated values is +/// [-9,223,372,036,854.77, 9,223,372,036,854.77]. Supplying a non-numeric value, omitting the +/// corresponding @c kFIRParameterCurrency parameter, or supplying an invalid +/// currency code for conversion events will cause that +/// conversion to be omitted from reporting. +///
+///     NSDictionary *params = @{
+///       kFIRParameterValue : @(3.99),
+///       kFIRParameterCurrency : @"USD",  // e.g. $3.99 USD
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterValue NS_SWIFT_NAME(AnalyticsParameterValue) = @"value"; + +/// Name of virtual currency type (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterVirtualCurrencyName : @"virtual_currency_name",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterVirtualCurrencyName + NS_SWIFT_NAME(AnalyticsParameterVirtualCurrencyName) = @"virtual_currency_name"; diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h new file mode 100644 index 0000000000..b3510fa93e --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h @@ -0,0 +1,29 @@ +/// @file FIRUserPropertyNames.h +/// +/// Predefined user property names. +/// +/// A UserProperty is an attribute that describes the app-user. By supplying UserProperties, you can +/// later analyze different behaviors of various segments of your userbase. You may supply up to 25 +/// unique UserProperties per app, and you can use the name and value of your choosing for each one. +/// UserProperty names can be up to 24 characters long, may only contain alphanumeric characters and +/// underscores ("_"), and must start with an alphabetic character. UserProperty values can be up to +/// 36 characters long. The "firebase_", "google_", and "ga_" prefixes are reserved and should not +/// be used. + +#import + +/// Indicates whether events logged by Google Analytics can be used to personalize ads for the user. +/// Set to "YES" to enable, or "NO" to disable. Default is enabled. See the +/// documentation for +/// more details and information about related settings. +/// +///
+///     [FIRAnalytics setUserPropertyString:@"NO"
+///                                 forName:kFIRUserPropertyAllowAdPersonalizationSignals];
+/// 
+static NSString *const kFIRUserPropertyAllowAdPersonalizationSignals + NS_SWIFT_NAME(AnalyticsUserPropertyAllowAdPersonalizationSignals) = @"allow_personalized_ads"; + +/// The method used to sign in. For example, "google", "facebook" or "twitter". +static NSString *const kFIRUserPropertySignUpMethod + NS_SWIFT_NAME(AnalyticsUserPropertySignUpMethod) = @"sign_up_method"; diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h new file mode 100644 index 0000000000..368f79c992 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h @@ -0,0 +1,6 @@ +#import "FIRAnalytics+AppDelegate.h" +#import "FIRAnalytics+Consent.h" +#import "FIRAnalytics.h" +#import "FIREventNames.h" +#import "FIRParameterNames.h" +#import "FIRUserPropertyNames.h" diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Info.plist b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Info.plist new file mode 100644 index 0000000000..efd0a1d201 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleExecutable + FirebaseAnalytics + CFBundleIdentifier + com.firebase.Firebase-FirebaseAnalytics + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + FirebaseAnalytics + CFBundlePackageType + FMWK + CFBundleVersion + 8.12.0 + DTSDKName + iphonesimulator11.2 + + diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Modules/module.modulemap b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Modules/module.modulemap new file mode 100644 index 0000000000..aa72782964 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Modules/module.modulemap @@ -0,0 +1,13 @@ +framework module FirebaseAnalytics { +umbrella header "FirebaseAnalytics.h" +export * +module * { export * } + link framework "CoreTelephony" + link framework "Foundation" + link framework "Security" + link framework "SystemConfiguration" + link framework "UIKit" + link "c++" + link "sqlite3" + link "z" +} diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/FirebaseAnalytics b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/FirebaseAnalytics new file mode 100644 index 0000000000..a58ffe4d91 Binary files /dev/null and b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/FirebaseAnalytics differ diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h new file mode 100644 index 0000000000..d499af668b --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h @@ -0,0 +1,62 @@ +#import + +#import "FIRAnalytics.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + * Provides App Delegate handlers to be used in your App Delegate. + * + * To save time integrating Firebase Analytics in an application, Firebase Analytics does not + * require delegation implementation from the AppDelegate. Instead this is automatically done by + * Firebase Analytics. Should you choose instead to delegate manually, you can turn off the App + * Delegate Proxy by adding FirebaseAppDelegateProxyEnabled into your app's Info.plist and setting + * it to NO, and adding the methods in this category to corresponding delegation handlers. + * + * To handle Universal Links, you must return YES in + * [UIApplicationDelegate application:didFinishLaunchingWithOptions:]. + */ +@interface FIRAnalytics (AppDelegate) + +/** + * Handles events related to a URL session that are waiting to be processed. + * + * For optimal use of Firebase Analytics, call this method from the + * [UIApplicationDelegate application:handleEventsForBackgroundURLSession:completionHandler] + * method of the app delegate in your app. + * + * @param identifier The identifier of the URL session requiring attention. + * @param completionHandler The completion handler to call when you finish processing the events. + * Calling this completion handler lets the system know that your app's user interface is + * updated and a new snapshot can be taken. + */ ++ (void)handleEventsForBackgroundURLSession:(NSString *)identifier + completionHandler:(nullable void (^)(void))completionHandler; + +/** + * Handles the event when the app is launched by a URL. + * + * Call this method from [UIApplicationDelegate application:openURL:options:] (on iOS 9.0 and + * above), or [UIApplicationDelegate application:openURL:sourceApplication:annotation:] (on + * iOS 8.x and below) in your app. + * + * @param url The URL resource to open. This resource can be a network resource or a file. + */ ++ (void)handleOpenURL:(NSURL *)url; + +/** + * Handles the event when the app receives data associated with user activity that includes a + * Universal Link (on iOS 9.0 and above). + * + * Call this method from [UIApplication continueUserActivity:restorationHandler:] in your app + * delegate (on iOS 9.0 and above). + * + * @param userActivity The activity object containing the data associated with the task the user + * was performing. + */ ++ (void)handleUserActivity:(id)userActivity; + +@end + +NS_ASSUME_NONNULL_END + diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FIRAnalytics+Consent.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FIRAnalytics+Consent.h new file mode 100644 index 0000000000..686a386ec6 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FIRAnalytics+Consent.h @@ -0,0 +1,33 @@ +#import + +#import "FIRAnalytics.h" + +NS_ASSUME_NONNULL_BEGIN + +/// The type of consent to set. Supported consent types are `ConsentType.adStorage` and +/// `ConsentType.analyticsStorage`. Omitting a type retains its previous status. +typedef NSString *FIRConsentType NS_TYPED_ENUM NS_SWIFT_NAME(ConsentType); +extern FIRConsentType const FIRConsentTypeAdStorage; +extern FIRConsentType const FIRConsentTypeAnalyticsStorage; + +/// The status value of the consent type. Supported statuses are `ConsentStatus.granted` and +/// `ConsentStatus.denied`. +typedef NSString *FIRConsentStatus NS_TYPED_ENUM NS_SWIFT_NAME(ConsentStatus); +extern FIRConsentStatus const FIRConsentStatusDenied; +extern FIRConsentStatus const FIRConsentStatusGranted; + +/// Sets the applicable end user consent state. +@interface FIRAnalytics (Consent) + +/// Sets the applicable end user consent state (e.g. for device identifiers) for this app on this +/// device. Use the consent settings to specify individual consent type values. Settings are +/// persisted across app sessions. By default consent types are set to `ConsentStatus.granted`. +/// +/// @param consentSettings An NSDictionary of consent types. Supported consent type keys are +/// `ConsentType.adStorage` and `ConsentType.analyticsStorage`. Valid values are +/// `ConsentStatus.granted` and `ConsentStatus.denied`. ++ (void)setConsent:(NSDictionary *)consentSettings; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FIRAnalytics.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FIRAnalytics.h new file mode 100644 index 0000000000..b9de09407d --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FIRAnalytics.h @@ -0,0 +1,142 @@ +#import + +#import "FIREventNames.h" +#import "FIRParameterNames.h" +#import "FIRUserPropertyNames.h" + +NS_ASSUME_NONNULL_BEGIN + +/// The top level Firebase Analytics singleton that provides methods for logging events and setting +/// user properties. See the developer guides for general +/// information on using Firebase Analytics in your apps. +/// +/// @note The Analytics SDK uses SQLite to persist events and other app-specific data. Calling +/// certain thread-unsafe global SQLite methods like `sqlite3_shutdown()` can result in +/// unexpected crashes at runtime. +NS_SWIFT_NAME(Analytics) +@interface FIRAnalytics : NSObject + +/// Logs an app event. The event can have up to 25 parameters. Events with the same name must have +/// the same parameters. Up to 500 event names are supported. Using predefined events and/or +/// parameters is recommended for optimal reporting. +/// +/// The following event names are reserved and cannot be used: +///
    +///
  • ad_activeview
  • +///
  • ad_click
  • +///
  • ad_exposure
  • +///
  • ad_query
  • +///
  • ad_reward
  • +///
  • adunit_exposure
  • +///
  • app_background
  • +///
  • app_clear_data
  • +///
  • app_exception
  • +///
  • app_remove
  • +///
  • app_store_refund
  • +///
  • app_store_subscription_cancel
  • +///
  • app_store_subscription_convert
  • +///
  • app_store_subscription_renew
  • +///
  • app_update
  • +///
  • app_upgrade
  • +///
  • dynamic_link_app_open
  • +///
  • dynamic_link_app_update
  • +///
  • dynamic_link_first_open
  • +///
  • error
  • +///
  • firebase_campaign
  • +///
  • first_open
  • +///
  • first_visit
  • +///
  • in_app_purchase
  • +///
  • notification_dismiss
  • +///
  • notification_foreground
  • +///
  • notification_open
  • +///
  • notification_receive
  • +///
  • os_update
  • +///
  • session_start
  • +///
  • session_start_with_rollout
  • +///
  • user_engagement
  • +///
+/// +/// @param name The name of the event. Should contain 1 to 40 alphanumeric characters or +/// underscores. The name must start with an alphabetic character. Some event names are +/// reserved. See FIREventNames.h for the list of reserved event names. The "firebase_", +/// "google_", and "ga_" prefixes are reserved and should not be used. Note that event names are +/// case-sensitive and that logging two events whose names differ only in case will result in +/// two distinct events. To manually log screen view events, use the `screen_view` event name. +/// @param parameters The dictionary of event parameters. Passing nil indicates that the event has +/// no parameters. Parameter names can be up to 40 characters long and must start with an +/// alphabetic character and contain only alphanumeric characters and underscores. Only NSString +/// and NSNumber (signed 64-bit integer and 64-bit floating-point number) parameter types are +/// supported. NSString parameter values can be up to 100 characters long. The "firebase_", +/// "google_", and "ga_" prefixes are reserved and should not be used for parameter names. ++ (void)logEventWithName:(NSString *)name + parameters:(nullable NSDictionary *)parameters + NS_SWIFT_NAME(logEvent(_:parameters:)); + +/// Sets a user property to a given value. Up to 25 user property names are supported. Once set, +/// user property values persist throughout the app lifecycle and across sessions. +/// +/// The following user property names are reserved and cannot be used: +///
    +///
  • first_open_time
  • +///
  • last_deep_link_referrer
  • +///
  • user_id
  • +///
+/// +/// @param value The value of the user property. Values can be up to 36 characters long. Setting the +/// value to nil removes the user property. +/// @param name The name of the user property to set. Should contain 1 to 24 alphanumeric characters +/// or underscores and must start with an alphabetic character. The "firebase_", "google_", and +/// "ga_" prefixes are reserved and should not be used for user property names. ++ (void)setUserPropertyString:(nullable NSString *)value forName:(NSString *)name + NS_SWIFT_NAME(setUserProperty(_:forName:)); + +/// Sets the user ID property. This feature must be used in accordance with +/// Google's Privacy Policy +/// +/// @param userID The user ID to ascribe to the user of this app on this device, which must be +/// non-empty and no more than 256 characters long. Setting userID to nil removes the user ID. ++ (void)setUserID:(nullable NSString *)userID; + +/// Sets whether analytics collection is enabled for this app on this device. This setting is +/// persisted across app sessions. By default it is enabled. +/// +/// @param analyticsCollectionEnabled A flag that enables or disables Analytics collection. ++ (void)setAnalyticsCollectionEnabled:(BOOL)analyticsCollectionEnabled; + +/// Sets the interval of inactivity in seconds that terminates the current session. The default +/// value is 1800 seconds (30 minutes). +/// +/// @param sessionTimeoutInterval The custom time of inactivity in seconds before the current +/// session terminates. ++ (void)setSessionTimeoutInterval:(NSTimeInterval)sessionTimeoutInterval; + +/// Returns the unique ID for this instance of the application or nil if +/// `ConsentType.analyticsStorage` has been set to `ConsentStatus.denied`. +/// +/// @see `FIRAnalytics+Consent.h` ++ (nullable NSString *)appInstanceID; + +/// Clears all analytics data for this instance from the device and resets the app instance ID. +/// FIRAnalyticsConfiguration values will be reset to the default values. ++ (void)resetAnalyticsData; + +/// Adds parameters that will be set on every event logged from the SDK, including automatic ones. +/// The values passed in the parameters dictionary will be added to the dictionary of default event +/// parameters. These parameters persist across app runs. They are of lower precedence than event +/// parameters, so if an event parameter and a parameter set using this API have the same name, the +/// value of the event parameter will be used. The same limitations on event parameters apply to +/// default event parameters. +/// +/// @param parameters Parameters to be added to the dictionary of parameters added to every event. +/// They will be added to the dictionary of default event parameters, replacing any existing +/// parameter with the same name. Valid parameters are NSString and NSNumber (signed 64-bit +/// integer and 64-bit floating-point number). Setting a key's value to [NSNull null] will clear +/// that parameter. Passing in a nil dictionary will clear all parameters. ++ (void)setDefaultEventParameters:(nullable NSDictionary *)parameters; + +/// Unavailable. +- (instancetype)init NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FIREventNames.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FIREventNames.h new file mode 100644 index 0000000000..3f85456342 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FIREventNames.h @@ -0,0 +1,499 @@ +/// @file FIREventNames.h +/// +/// Predefined event names. +/// +/// An Event is an important occurrence in your app that you want to measure. You can report up to +/// 500 different types of Events per app and you can associate up to 25 unique parameters with each +/// Event type. Some common events are suggested below, but you may also choose to specify custom +/// Event types that are associated with your specific app. Each event type is identified by a +/// unique name. Event names can be up to 40 characters long, may only contain alphanumeric +/// characters and underscores ("_"), and must start with an alphabetic character. The "firebase_", +/// "google_", and "ga_" prefixes are reserved and should not be used. + +#import + +/// Ad Impression event. This event signifies when a user sees an ad impression. Note: If you supply +/// the @c kFIRParameterValue parameter, you must also supply the @c kFIRParameterCurrency parameter +/// so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterAdPlatform (NSString) (optional)
  • +///
  • @c kFIRParameterAdFormat (NSString) (optional)
  • +///
  • @c kFIRParameterAdSource (NSString) (optional)
  • +///
  • @c kFIRParameterAdUnitName (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventAdImpression NS_SWIFT_NAME(AnalyticsEventAdImpression) = + @"ad_impression"; + +/// Add Payment Info event. This event signifies that a user has submitted their payment +/// information. Note: If you supply the @c kFIRParameterValue parameter, you must also supply the +/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterPaymentType (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventAddPaymentInfo NS_SWIFT_NAME(AnalyticsEventAddPaymentInfo) = + @"add_payment_info"; + +/// Add Shipping Info event. This event signifies that a user has submitted their shipping +/// information. Note: If you supply the @c kFIRParameterValue parameter, you must also supply the +/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterShippingTier (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventAddShippingInfo NS_SWIFT_NAME(AnalyticsEventAddShippingInfo) = + @"add_shipping_info"; + +/// E-Commerce Add To Cart event. This event signifies that an item(s) was added to a cart for +/// purchase. Add this event to a funnel with @c kFIREventPurchase to gauge the effectiveness of +/// your checkout process. Note: If you supply the @c kFIRParameterValue parameter, you must also +/// supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed +/// accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventAddToCart NS_SWIFT_NAME(AnalyticsEventAddToCart) = @"add_to_cart"; + +/// E-Commerce Add To Wishlist event. This event signifies that an item was added to a wishlist. Use +/// this event to identify popular gift items. Note: If you supply the @c kFIRParameterValue +/// parameter, you must also supply the @c kFIRParameterCurrency parameter so that revenue metrics +/// can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventAddToWishlist NS_SWIFT_NAME(AnalyticsEventAddToWishlist) = + @"add_to_wishlist"; + +/// App Open event. By logging this event when an App becomes active, developers can understand how +/// often users leave and return during the course of a Session. Although Sessions are automatically +/// reported, this event can provide further clarification around the continuous engagement of +/// app-users. +static NSString *const kFIREventAppOpen NS_SWIFT_NAME(AnalyticsEventAppOpen) = @"app_open"; + +/// E-Commerce Begin Checkout event. This event signifies that a user has begun the process of +/// checking out. Add this event to a funnel with your @c kFIREventPurchase event to gauge the +/// effectiveness of your checkout process. Note: If you supply the @c kFIRParameterValue parameter, +/// you must also supply the @c kFIRParameterCurrency parameter so that revenue metrics can be +/// computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventBeginCheckout NS_SWIFT_NAME(AnalyticsEventBeginCheckout) = + @"begin_checkout"; + +/// Campaign Detail event. Log this event to supply the referral details of a re-engagement +/// campaign. Note: you must supply at least one of the required parameters kFIRParameterSource, +/// kFIRParameterMedium or kFIRParameterCampaign. Params: +/// +///
    +///
  • @c kFIRParameterSource (NSString)
  • +///
  • @c kFIRParameterMedium (NSString)
  • +///
  • @c kFIRParameterCampaign (NSString)
  • +///
  • @c kFIRParameterTerm (NSString) (optional)
  • +///
  • @c kFIRParameterContent (NSString) (optional)
  • +///
  • @c kFIRParameterAdNetworkClickID (NSString) (optional)
  • +///
  • @c kFIRParameterCP1 (NSString) (optional)
  • +///
  • @c kFIRParameterCampaignID (NSString) (optional)
  • +///
  • @c kFIRParameterCreativeFormat (NSString) (optional)
  • +///
  • @c kFIRParameterMarketingTactic (NSString) (optional)
  • +///
  • @c kFIRParameterSourcePlatform (NSString) (optional)
  • +///
+static NSString *const kFIREventCampaignDetails NS_SWIFT_NAME(AnalyticsEventCampaignDetails) = + @"campaign_details"; + +/// Checkout progress. Params: +/// +///
    +///
  • @c kFIRParameterCheckoutStep (unsigned 64-bit integer as NSNumber)
  • +///
  • @c kFIRParameterCheckoutOption (NSString) (optional)
  • +///
+/// This constant has been deprecated. +static NSString *const kFIREventCheckoutProgress NS_SWIFT_NAME(AnalyticsEventCheckoutProgress) = + @"checkout_progress"; + +/// Earn Virtual Currency event. This event tracks the awarding of virtual currency in your app. Log +/// this along with @c kFIREventSpendVirtualCurrency to better understand your virtual economy. +/// Params: +/// +///
    +///
  • @c kFIRParameterVirtualCurrencyName (NSString)
  • +///
  • @c kFIRParameterValue (signed 64-bit integer or double as NSNumber)
  • +///
+static NSString *const kFIREventEarnVirtualCurrency + NS_SWIFT_NAME(AnalyticsEventEarnVirtualCurrency) = @"earn_virtual_currency"; + +/// E-Commerce Purchase event. This event signifies that an item was purchased by a user. Note: +/// This is different from the in-app purchase event, which is reported automatically for App +/// Store-based apps. Note: If you supply the @c kFIRParameterValue parameter, you must also +/// supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed +/// accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTransactionID (NSString) (optional)
  • +///
  • @c kFIRParameterTax (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterShipping (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterLocation (NSString) (optional)
  • +///
  • @c kFIRParameterStartDate (NSString) (optional)
  • +///
  • @c kFIRParameterEndDate (NSString) (optional)
  • +///
  • @c kFIRParameterNumberOfNights (signed 64-bit integer as NSNumber) (optional) for +/// hotel bookings
  • +///
  • @c kFIRParameterNumberOfRooms (signed 64-bit integer as NSNumber) (optional) for +/// hotel bookings
  • +///
  • @c kFIRParameterNumberOfPassengers (signed 64-bit integer as NSNumber) (optional) +/// for travel bookings
  • +///
  • @c kFIRParameterOrigin (NSString) (optional)
  • +///
  • @c kFIRParameterDestination (NSString) (optional)
  • +///
  • @c kFIRParameterTravelClass (NSString) (optional) for travel bookings
  • +///
+/// This constant has been deprecated. Use @c kFIREventPurchase constant instead. +static NSString *const kFIREventEcommercePurchase NS_SWIFT_NAME(AnalyticsEventEcommercePurchase) = + @"ecommerce_purchase"; + +/// Generate Lead event. Log this event when a lead has been generated in the app to understand the +/// efficacy of your install and re-engagement campaigns. Note: If you supply the +/// @c kFIRParameterValue parameter, you must also supply the @c kFIRParameterCurrency +/// parameter so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventGenerateLead NS_SWIFT_NAME(AnalyticsEventGenerateLead) = + @"generate_lead"; + +/// Join Group event. Log this event when a user joins a group such as a guild, team or family. Use +/// this event to analyze how popular certain groups or social features are in your app. Params: +/// +///
    +///
  • @c kFIRParameterGroupID (NSString)
  • +///
+static NSString *const kFIREventJoinGroup NS_SWIFT_NAME(AnalyticsEventJoinGroup) = @"join_group"; + +/// Level End event. Log this event when the user finishes a level. Params: +/// +///
    +///
  • @c kFIRParameterLevelName (NSString)
  • +///
  • @c kFIRParameterSuccess (NSString)
  • +///
+static NSString *const kFIREventLevelEnd NS_SWIFT_NAME(AnalyticsEventLevelEnd) = @"level_end"; + +/// Level Start event. Log this event when the user starts a new level. Params: +/// +///
    +///
  • @c kFIRParameterLevelName (NSString)
  • +///
+static NSString *const kFIREventLevelStart NS_SWIFT_NAME(AnalyticsEventLevelStart) = @"level_start"; + +/// Level Up event. This event signifies that a player has leveled up in your gaming app. It can +/// help you gauge the level distribution of your userbase and help you identify certain levels that +/// are difficult to pass. Params: +/// +///
    +///
  • @c kFIRParameterLevel (signed 64-bit integer as NSNumber)
  • +///
  • @c kFIRParameterCharacter (NSString) (optional)
  • +///
+static NSString *const kFIREventLevelUp NS_SWIFT_NAME(AnalyticsEventLevelUp) = @"level_up"; + +/// Login event. Apps with a login feature can report this event to signify that a user has logged +/// in. +static NSString *const kFIREventLogin NS_SWIFT_NAME(AnalyticsEventLogin) = @"login"; + +/// Post Score event. Log this event when the user posts a score in your gaming app. This event can +/// help you understand how users are actually performing in your game and it can help you correlate +/// high scores with certain audiences or behaviors. Params: +/// +///
    +///
  • @c kFIRParameterScore (signed 64-bit integer as NSNumber)
  • +///
  • @c kFIRParameterLevel (signed 64-bit integer as NSNumber) (optional)
  • +///
  • @c kFIRParameterCharacter (NSString) (optional)
  • +///
+static NSString *const kFIREventPostScore NS_SWIFT_NAME(AnalyticsEventPostScore) = @"post_score"; + +/// Present Offer event. This event signifies that the app has presented a purchase offer to a user. +/// Add this event to a funnel with the kFIREventAddToCart and kFIREventEcommercePurchase to gauge +/// your conversion process. Note: If you supply the @c kFIRParameterValue parameter, you must +/// also supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed +/// accurately. Params: +/// +///
    +///
  • @c kFIRParameterQuantity (signed 64-bit integer as NSNumber)
  • +///
  • @c kFIRParameterItemID (NSString)
  • +///
  • @c kFIRParameterItemName (NSString)
  • +///
  • @c kFIRParameterItemCategory (NSString)
  • +///
  • @c kFIRParameterItemLocationID (NSString) (optional)
  • +///
  • @c kFIRParameterPrice (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+/// This constant has been deprecated. Use @c kFIREventViewPromotion constant instead. +static NSString *const kFIREventPresentOffer NS_SWIFT_NAME(AnalyticsEventPresentOffer) = + @"present_offer"; + +/// E-Commerce Purchase event. This event signifies that an item(s) was purchased by a user. Note: +/// This is different from the in-app purchase event, which is reported automatically for App +/// Store-based apps. Note: If you supply the @c kFIRParameterValue parameter, you must also supply +/// the @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. +/// Params: +/// +///
    +///
  • @c kFIRParameterAffiliation (NSString) (optional)
  • +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterShipping (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTax (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTransactionID (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventPurchase NS_SWIFT_NAME(AnalyticsEventPurchase) = @"purchase"; + +/// E-Commerce Purchase Refund event. This event signifies that an item purchase was refunded. +/// Note: If you supply the @c kFIRParameterValue parameter, you must also supply the +/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. +/// Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTransactionID (NSString) (optional)
  • +///
+/// This constant has been deprecated. Use @c kFIREventRefund constant instead. +static NSString *const kFIREventPurchaseRefund NS_SWIFT_NAME(AnalyticsEventPurchaseRefund) = + @"purchase_refund"; + +/// E-Commerce Refund event. This event signifies that a refund was issued. Note: If you supply the +/// @c kFIRParameterValue parameter, you must also supply the @c kFIRParameterCurrency parameter so +/// that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterAffiliation (NSString) (optional)
  • +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterShipping (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTax (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTransactionID (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventRefund NS_SWIFT_NAME(AnalyticsEventRefund) = @"refund"; + +/// E-Commerce Remove from Cart event. This event signifies that an item(s) was removed from a cart. +/// Note: If you supply the @c kFIRParameterValue parameter, you must also supply the @c +/// kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventRemoveFromCart NS_SWIFT_NAME(AnalyticsEventRemoveFromCart) = + @"remove_from_cart"; + +/// Screen View event. This event signifies a screen view. Use this when a screen transition occurs. +/// This event can be logged irrespective of whether automatic screen tracking is enabled. Params: +/// +///
    +///
  • @c kFIRParameterScreenClass (NSString) (optional)
  • +///
  • @c kFIRParameterScreenName (NSString) (optional)
  • +///
+static NSString *const kFIREventScreenView NS_SWIFT_NAME(AnalyticsEventScreenView) = @"screen_view"; + +/// Search event. Apps that support search features can use this event to contextualize search +/// operations by supplying the appropriate, corresponding parameters. This event can help you +/// identify the most popular content in your app. Params: +/// +///
    +///
  • @c kFIRParameterSearchTerm (NSString)
  • +///
  • @c kFIRParameterStartDate (NSString) (optional)
  • +///
  • @c kFIRParameterEndDate (NSString) (optional)
  • +///
  • @c kFIRParameterNumberOfNights (signed 64-bit integer as NSNumber) (optional) for +/// hotel bookings
  • +///
  • @c kFIRParameterNumberOfRooms (signed 64-bit integer as NSNumber) (optional) for +/// hotel bookings
  • +///
  • @c kFIRParameterNumberOfPassengers (signed 64-bit integer as NSNumber) (optional) +/// for travel bookings
  • +///
  • @c kFIRParameterOrigin (NSString) (optional)
  • +///
  • @c kFIRParameterDestination (NSString) (optional)
  • +///
  • @c kFIRParameterTravelClass (NSString) (optional) for travel bookings
  • +///
+static NSString *const kFIREventSearch NS_SWIFT_NAME(AnalyticsEventSearch) = @"search"; + +/// Select Content event. This general purpose event signifies that a user has selected some content +/// of a certain type in an app. The content can be any object in your app. This event can help you +/// identify popular content and categories of content in your app. Params: +/// +///
    +///
  • @c kFIRParameterContentType (NSString)
  • +///
  • @c kFIRParameterItemID (NSString)
  • +///
+static NSString *const kFIREventSelectContent NS_SWIFT_NAME(AnalyticsEventSelectContent) = + @"select_content"; + +/// Select Item event. This event signifies that an item was selected by a user from a list. Use the +/// appropriate parameters to contextualize the event. Use this event to discover the most popular +/// items selected. Params: +/// +///
    +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterItemListID (NSString) (optional)
  • +///
  • @c kFIRParameterItemListName (NSString) (optional)
  • +///
+static NSString *const kFIREventSelectItem NS_SWIFT_NAME(AnalyticsEventSelectItem) = @"select_item"; + +/// Select promotion event. This event signifies that a user has selected a promotion offer. Use the +/// appropriate parameters to contextualize the event, such as the item(s) for which the promotion +/// applies. Params: +/// +///
    +///
  • @c kFIRParameterCreativeName (NSString) (optional)
  • +///
  • @c kFIRParameterCreativeSlot (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterLocationID (NSString) (optional)
  • +///
  • @c kFIRParameterPromotionID (NSString) (optional)
  • +///
  • @c kFIRParameterPromotionName (NSString) (optional)
  • +///
+static NSString *const kFIREventSelectPromotion NS_SWIFT_NAME(AnalyticsEventSelectPromotion) = + @"select_promotion"; + +/// Set checkout option. Params: +/// +///
    +///
  • @c kFIRParameterCheckoutStep (unsigned 64-bit integer as NSNumber)
  • +///
  • @c kFIRParameterCheckoutOption (NSString)
  • +///
+/// This constant has been deprecated. +static NSString *const kFIREventSetCheckoutOption NS_SWIFT_NAME(AnalyticsEventSetCheckoutOption) = + @"set_checkout_option"; + +/// Share event. Apps with social features can log the Share event to identify the most viral +/// content. Params: +/// +///
    +///
  • @c kFIRParameterContentType (NSString)
  • +///
  • @c kFIRParameterItemID (NSString)
  • +///
+static NSString *const kFIREventShare NS_SWIFT_NAME(AnalyticsEventShare) = @"share"; + +/// Sign Up event. This event indicates that a user has signed up for an account in your app. The +/// parameter signifies the method by which the user signed up. Use this event to understand the +/// different behaviors between logged in and logged out users. Params: +/// +///
    +///
  • @c kFIRParameterSignUpMethod (NSString)
  • +///
+static NSString *const kFIREventSignUp NS_SWIFT_NAME(AnalyticsEventSignUp) = @"sign_up"; + +/// Spend Virtual Currency event. This event tracks the sale of virtual goods in your app and can +/// help you identify which virtual goods are the most popular objects of purchase. Params: +/// +///
    +///
  • @c kFIRParameterItemName (NSString)
  • +///
  • @c kFIRParameterVirtualCurrencyName (NSString)
  • +///
  • @c kFIRParameterValue (signed 64-bit integer or double as NSNumber)
  • +///
+static NSString *const kFIREventSpendVirtualCurrency + NS_SWIFT_NAME(AnalyticsEventSpendVirtualCurrency) = @"spend_virtual_currency"; + +/// Tutorial Begin event. This event signifies the start of the on-boarding process in your app. Use +/// this in a funnel with kFIREventTutorialComplete to understand how many users complete this +/// process and move on to the full app experience. +static NSString *const kFIREventTutorialBegin NS_SWIFT_NAME(AnalyticsEventTutorialBegin) = + @"tutorial_begin"; + +/// Tutorial End event. Use this event to signify the user's completion of your app's on-boarding +/// process. Add this to a funnel with kFIREventTutorialBegin to gauge the completion rate of your +/// on-boarding process. +static NSString *const kFIREventTutorialComplete NS_SWIFT_NAME(AnalyticsEventTutorialComplete) = + @"tutorial_complete"; + +/// Unlock Achievement event. Log this event when the user has unlocked an achievement in your +/// game. Since achievements generally represent the breadth of a gaming experience, this event can +/// help you understand how many users are experiencing all that your game has to offer. Params: +/// +///
    +///
  • @c kFIRParameterAchievementID (NSString)
  • +///
+static NSString *const kFIREventUnlockAchievement NS_SWIFT_NAME(AnalyticsEventUnlockAchievement) = + @"unlock_achievement"; + +/// E-commerce View Cart event. This event signifies that a user has viewed their cart. Use this to +/// analyze your purchase funnel. Note: If you supply the @c kFIRParameterValue parameter, you must +/// also supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed +/// accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventViewCart NS_SWIFT_NAME(AnalyticsEventViewCart) = @"view_cart"; + +/// View Item event. This event signifies that a user has viewed an item. Use the appropriate +/// parameters to contextualize the event. Use this event to discover the most popular items viewed +/// in your app. Note: If you supply the @c kFIRParameterValue parameter, you must also supply the +/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventViewItem NS_SWIFT_NAME(AnalyticsEventViewItem) = @"view_item"; + +/// View Item List event. Log this event when a user sees a list of items or offerings. Params: +/// +///
    +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterItemListID (NSString) (optional)
  • +///
  • @c kFIRParameterItemListName (NSString) (optional)
  • +///
+static NSString *const kFIREventViewItemList NS_SWIFT_NAME(AnalyticsEventViewItemList) = + @"view_item_list"; + +/// View Promotion event. This event signifies that a promotion was shown to a user. Add this event +/// to a funnel with the @c kFIREventAddToCart and @c kFIREventPurchase to gauge your conversion +/// process. Params: +/// +///
    +///
  • @c kFIRParameterCreativeName (NSString) (optional)
  • +///
  • @c kFIRParameterCreativeSlot (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterLocationID (NSString) (optional)
  • +///
  • @c kFIRParameterPromotionID (NSString) (optional)
  • +///
  • @c kFIRParameterPromotionName (NSString) (optional)
  • +///
+static NSString *const kFIREventViewPromotion NS_SWIFT_NAME(AnalyticsEventViewPromotion) = + @"view_promotion"; + +/// View Search Results event. Log this event when the user has been presented with the results of a +/// search. Params: +/// +///
    +///
  • @c kFIRParameterSearchTerm (NSString)
  • +///
+static NSString *const kFIREventViewSearchResults NS_SWIFT_NAME(AnalyticsEventViewSearchResults) = + @"view_search_results"; diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FIRParameterNames.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FIRParameterNames.h new file mode 100644 index 0000000000..fe3a6c47b4 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FIRParameterNames.h @@ -0,0 +1,776 @@ +/// @file FIRParameterNames.h +/// +/// Predefined event parameter names. +/// +/// Params supply information that contextualize Events. You can associate up to 25 unique Params +/// with each Event type. Some Params are suggested below for certain common Events, but you are +/// not limited to these. You may supply extra Params for suggested Events or custom Params for +/// Custom events. Param names can be up to 40 characters long, may only contain alphanumeric +/// characters and underscores ("_"), and must start with an alphabetic character. Param values can +/// be up to 100 characters long. The "firebase_", "google_", and "ga_" prefixes are reserved and +/// should not be used. + +#import + +/// Game achievement ID (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterAchievementID : @"10_matches_won",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAchievementID NS_SWIFT_NAME(AnalyticsParameterAchievementID) = + @"achievement_id"; + +/// The ad format (e.g. Banner, Interstitial, Rewarded, Native, Rewarded Interstitial, Instream). +/// (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterAdFormat : @"Banner",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAdFormat NS_SWIFT_NAME(AnalyticsParameterAdFormat) = + @"ad_format"; + +/// Ad Network Click ID (NSString). Used for network-specific click IDs which vary in format. +///
+///     NSDictionary *params = @{
+///       kFIRParameterAdNetworkClickID : @"1234567",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAdNetworkClickID + NS_SWIFT_NAME(AnalyticsParameterAdNetworkClickID) = @"aclid"; + +/// The ad platform (e.g. MoPub, IronSource) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterAdPlatform : @"MoPub",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAdPlatform NS_SWIFT_NAME(AnalyticsParameterAdPlatform) = + @"ad_platform"; + +/// The ad source (e.g. AdColony) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterAdSource : @"AdColony",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAdSource NS_SWIFT_NAME(AnalyticsParameterAdSource) = + @"ad_source"; + +/// The ad unit name (e.g. Banner_03) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterAdUnitName : @"Banner_03",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAdUnitName NS_SWIFT_NAME(AnalyticsParameterAdUnitName) = + @"ad_unit_name"; + +/// A product affiliation to designate a supplying company or brick and mortar store location +/// (NSString).
+///     NSDictionary *params = @{
+///       kFIRParameterAffiliation : @"Google Store",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAffiliation NS_SWIFT_NAME(AnalyticsParameterAffiliation) = + @"affiliation"; + +/// Campaign custom parameter (NSString). Used as a method of capturing custom data in a campaign. +/// Use varies by network. +///
+///     NSDictionary *params = @{
+///       kFIRParameterCP1 : @"custom_data",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCP1 NS_SWIFT_NAME(AnalyticsParameterCP1) = @"cp1"; + +/// The individual campaign name, slogan, promo code, etc. Some networks have pre-defined macro to +/// capture campaign information, otherwise can be populated by developer. Highly Recommended +/// (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCampaign : @"winter_promotion",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCampaign NS_SWIFT_NAME(AnalyticsParameterCampaign) = + @"campaign"; + +/// Campaign ID (NSString). Used for keyword analysis to identify a specific product promotion or +/// strategic campaign. This is a required key for GA4 data import. +///
+///     NSDictionary *params = @{
+///       kFIRParameterCampaignID : @"7877652710",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCampaignID NS_SWIFT_NAME(AnalyticsParameterCampaignID) = + @"campaign_id"; + +/// Character used in game (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCharacter : @"beat_boss",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCharacter NS_SWIFT_NAME(AnalyticsParameterCharacter) = + @"character"; + +/// Some option on a step in an ecommerce flow (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCheckoutOption : @"Visa",
+///       // ...
+///     };
+/// 
+/// This constant has been deprecated. +static NSString *const kFIRParameterCheckoutOption + NS_SWIFT_NAME(AnalyticsParameterCheckoutOption) = @"checkout_option"; + +/// The checkout step (1..N) (unsigned 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCheckoutStep : @"1",
+///       // ...
+///     };
+/// 
+/// This constant has been deprecated. +static NSString *const kFIRParameterCheckoutStep NS_SWIFT_NAME(AnalyticsParameterCheckoutStep) = + @"checkout_step"; + +/// Campaign content (NSString). +static NSString *const kFIRParameterContent NS_SWIFT_NAME(AnalyticsParameterContent) = @"content"; + +/// Type of content selected (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterContentType : @"news article",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterContentType NS_SWIFT_NAME(AnalyticsParameterContentType) = + @"content_type"; + +/// Coupon code used for a purchase (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCoupon : @"SUMMER_FUN",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCoupon NS_SWIFT_NAME(AnalyticsParameterCoupon) = @"coupon"; + +/// Creative Format (NSString). Used to identify the high-level classification of the type of ad +/// served by a specific campaign. +///
+///     NSDictionary *params = @{
+///       kFIRParameterCreativeFormat : @"display",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCreativeFormat NS_SWIFT_NAME(AnalyticsParameterCreativeFormat) = + @"creative_format"; + +/// The name of a creative used in a promotional spot (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCreativeName : @"Summer Sale",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCreativeName NS_SWIFT_NAME(AnalyticsParameterCreativeName) = + @"creative_name"; + +/// The name of a creative slot (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCreativeSlot : @"summer_banner2",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCreativeSlot NS_SWIFT_NAME(AnalyticsParameterCreativeSlot) = + @"creative_slot"; + +/// Currency of the purchase or items associated with the event, in 3-letter +/// ISO_4217 format (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCurrency : @"USD",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCurrency NS_SWIFT_NAME(AnalyticsParameterCurrency) = + @"currency"; + +/// Flight or Travel destination (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterDestination : @"Mountain View, CA",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterDestination NS_SWIFT_NAME(AnalyticsParameterDestination) = + @"destination"; + +/// Monetary value of discount associated with a purchase (double as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterDiscount : @(2.0),
+///       kFIRParameterCurrency : @"USD",  // e.g. $2.00 USD
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterDiscount NS_SWIFT_NAME(AnalyticsParameterDiscount) = + @"discount"; + +/// The arrival date, check-out date or rental end date for the item. This should be in +/// YYYY-MM-DD format (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterEndDate : @"2015-09-14",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterEndDate NS_SWIFT_NAME(AnalyticsParameterEndDate) = @"end_date"; + +/// Indicates that the associated event should either extend the current session +/// or start a new session if no session was active when the event was logged. +/// Specify YES to extend the current session or to start a new session; any +/// other value will not extend or start a session. +///
+///     NSDictionary *params = @{
+///       kFIRParameterExtendSession : @YES,
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterExtendSession NS_SWIFT_NAME(AnalyticsParameterExtendSession) = + @"extend_session"; + +/// Flight number for travel events (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterFlightNumber : @"ZZ800",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterFlightNumber NS_SWIFT_NAME(AnalyticsParameterFlightNumber) = + @"flight_number"; + +/// Group/clan/guild ID (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterGroupID : @"g1",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterGroupID NS_SWIFT_NAME(AnalyticsParameterGroupID) = @"group_id"; + +/// The index of the item in a list (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterIndex : @(5),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterIndex NS_SWIFT_NAME(AnalyticsParameterIndex) = @"index"; + +/// Item brand (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemBrand : @"Google",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemBrand NS_SWIFT_NAME(AnalyticsParameterItemBrand) = + @"item_brand"; + +/// Item category (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemCategory : @"pants",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemCategory NS_SWIFT_NAME(AnalyticsParameterItemCategory) = + @"item_category"; + +/// Item Category (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemCategory2 : @"pants",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemCategory2 NS_SWIFT_NAME(AnalyticsParameterItemCategory2) = + @"item_category2"; + +/// Item Category (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemCategory3 : @"pants",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemCategory3 NS_SWIFT_NAME(AnalyticsParameterItemCategory3) = + @"item_category3"; + +/// Item Category (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemCategory4 : @"pants",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemCategory4 NS_SWIFT_NAME(AnalyticsParameterItemCategory4) = + @"item_category4"; + +/// Item Category (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemCategory5 : @"pants",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemCategory5 NS_SWIFT_NAME(AnalyticsParameterItemCategory5) = + @"item_category5"; + +/// Item ID (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemID : @"SKU_12345",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemID NS_SWIFT_NAME(AnalyticsParameterItemID) = @"item_id"; + +/// The list in which the item was presented to the user (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemList : @"Search Results",
+///       // ...
+///     };
+/// 
+/// This constant has been deprecated. Use @c kFIRParameterItemListName constant instead. +static NSString *const kFIRParameterItemList NS_SWIFT_NAME(AnalyticsParameterItemList) = + @"item_list"; + +/// The ID of the list in which the item was presented to the user (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemListID : @"ABC123",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemListID NS_SWIFT_NAME(AnalyticsParameterItemListID) = + @"item_list_id"; + +/// The name of the list in which the item was presented to the user (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemListName : @"Related products",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemListName NS_SWIFT_NAME(AnalyticsParameterItemListName) = + @"item_list_name"; + +/// The Google Place ID (NSString) that +/// corresponds to the associated item. Alternatively, you can supply your own custom Location ID. +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemLocationID : @"ChIJiyj437sx3YAR9kUWC8QkLzQ",
+///       // ...
+///     };
+/// 
+/// This constant has been deprecated. Use @c kFIRParameterLocationID constant instead. +static NSString *const kFIRParameterItemLocationID + NS_SWIFT_NAME(AnalyticsParameterItemLocationID) = @"item_location_id"; + +/// Item Name (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemName : @"jeggings",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemName NS_SWIFT_NAME(AnalyticsParameterItemName) = + @"item_name"; + +/// Item variant (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemVariant : @"Black",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemVariant NS_SWIFT_NAME(AnalyticsParameterItemVariant) = + @"item_variant"; + +/// The list of items involved in the transaction. (NSArray). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItems : @[
+///         @{kFIRParameterItemName : @"jeggings", kFIRParameterItemCategory : @"pants"},
+///         @{kFIRParameterItemName : @"boots", kFIRParameterItemCategory : @"shoes"},
+///       ],
+///     };
+/// 
+static NSString *const kFIRParameterItems NS_SWIFT_NAME(AnalyticsParameterItems) = @"items"; + +/// Level in game (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterLevel : @(42),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterLevel NS_SWIFT_NAME(AnalyticsParameterLevel) = @"level"; + +/// The name of a level in a game (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterLevelName : @"room_1",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterLevelName NS_SWIFT_NAME(AnalyticsParameterLevelName) = + @"level_name"; + +/// Location (NSString). The Google Place ID +/// that corresponds to the associated event. Alternatively, you can supply your own custom +/// Location ID. +///
+///     NSDictionary *params = @{
+///       kFIRParameterLocation : @"ChIJiyj437sx3YAR9kUWC8QkLzQ",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterLocation NS_SWIFT_NAME(AnalyticsParameterLocation) = + @"location"; + +/// The location associated with the event. Preferred to be the Google +/// Place ID that corresponds to the +/// associated item but could be overridden to a custom location ID string.(NSString).
+///     NSDictionary *params = @{
+///       kFIRParameterLocationID : @"ChIJiyj437sx3YAR9kUWC8QkLzQ",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterLocationID NS_SWIFT_NAME(AnalyticsParameterLocationID) = + @"location_id"; + +/// Marketing Tactic (NSString). Used to identify the targeting criteria applied to a specific +/// campaign. +///
+///     NSDictionary *params = @{
+///       kFIRParameterMarketingTactic : @"Remarketing",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterMarketingTactic + NS_SWIFT_NAME(AnalyticsParameterMarketingTactic) = @"marketing_tactic"; + +/// The advertising or marketing medium, for example: cpc, banner, email, push. Highly recommended +/// (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterMedium : @"email",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterMedium NS_SWIFT_NAME(AnalyticsParameterMedium) = @"medium"; + +/// A particular approach used in an operation; for example, "facebook" or "email" in the context +/// of a sign_up or login event. (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterMethod : @"google",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterMethod NS_SWIFT_NAME(AnalyticsParameterMethod) = @"method"; + +/// Number of nights staying at hotel (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterNumberOfNights : @(3),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterNumberOfNights + NS_SWIFT_NAME(AnalyticsParameterNumberOfNights) = @"number_of_nights"; + +/// Number of passengers traveling (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterNumberOfPassengers : @(11),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterNumberOfPassengers + NS_SWIFT_NAME(AnalyticsParameterNumberOfPassengers) = @"number_of_passengers"; + +/// Number of rooms for travel events (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterNumberOfRooms : @(2),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterNumberOfRooms NS_SWIFT_NAME(AnalyticsParameterNumberOfRooms) = + @"number_of_rooms"; + +/// Flight or Travel origin (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterOrigin : @"Mountain View, CA",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterOrigin NS_SWIFT_NAME(AnalyticsParameterOrigin) = @"origin"; + +/// The chosen method of payment (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterPaymentType : @"Visa",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterPaymentType NS_SWIFT_NAME(AnalyticsParameterPaymentType) = + @"payment_type"; + +/// Purchase price (double as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterPrice : @(1.0),
+///       kFIRParameterCurrency : @"USD",  // e.g. $1.00 USD
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterPrice NS_SWIFT_NAME(AnalyticsParameterPrice) = @"price"; + +/// The ID of a product promotion (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterPromotionID : @"ABC123",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterPromotionID NS_SWIFT_NAME(AnalyticsParameterPromotionID) = + @"promotion_id"; + +/// The name of a product promotion (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterPromotionName : @"Summer Sale",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterPromotionName NS_SWIFT_NAME(AnalyticsParameterPromotionName) = + @"promotion_name"; + +/// Purchase quantity (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterQuantity : @(1),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterQuantity NS_SWIFT_NAME(AnalyticsParameterQuantity) = + @"quantity"; + +/// Score in game (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterScore : @(4200),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterScore NS_SWIFT_NAME(AnalyticsParameterScore) = @"score"; + +/// Current screen class, such as the class name of the UIViewController, logged with screen_view +/// event and added to every event (NSString).
+///     NSDictionary *params = @{
+///       kFIRParameterScreenClass : @"LoginViewController",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterScreenClass NS_SWIFT_NAME(AnalyticsParameterScreenClass) = + @"screen_class"; + +/// Current screen name, such as the name of the UIViewController, logged with screen_view event and +/// added to every event (NSString).
+///     NSDictionary *params = @{
+///       kFIRParameterScreenName : @"LoginView",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterScreenName NS_SWIFT_NAME(AnalyticsParameterScreenName) = + @"screen_name"; + +/// The search string/keywords used (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterSearchTerm : @"periodic table",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterSearchTerm NS_SWIFT_NAME(AnalyticsParameterSearchTerm) = + @"search_term"; + +/// Shipping cost associated with a transaction (double as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterShipping : @(5.99),
+///       kFIRParameterCurrency : @"USD",  // e.g. $5.99 USD
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterShipping NS_SWIFT_NAME(AnalyticsParameterShipping) = + @"shipping"; + +/// The shipping tier (e.g. Ground, Air, Next-day) selected for delivery of the purchased item +/// (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterShippingTier : @"Ground",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterShippingTier NS_SWIFT_NAME(AnalyticsParameterShippingTier) = + @"shipping_tier"; + +/// Sign up method (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterSignUpMethod : @"google",
+///       // ...
+///     };
+/// 
+/// +/// This constant has been deprecated. Use Method constant instead. +static NSString *const kFIRParameterSignUpMethod NS_SWIFT_NAME(AnalyticsParameterSignUpMethod) = + @"sign_up_method"; + +/// The origin of your traffic, such as an Ad network (for example, google) or partner (urban +/// airship). Identify the advertiser, site, publication, etc. that is sending traffic to your +/// property. Highly recommended (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterSource : @"InMobi",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterSource NS_SWIFT_NAME(AnalyticsParameterSource) = @"source"; + +/// Source Platform (NSString). Used to identify the platform responsible for directing traffic to a +/// given Analytics property (e.g., a buying platform where budgets, targeting criteria, etc. are +/// set, a platform for managing organic traffic data, etc.). +///
+///     NSDictionary *params = @{
+///       kFIRParameterSourcePlatform : @"sa360",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterSourcePlatform NS_SWIFT_NAME(AnalyticsParameterSourcePlatform) = + @"source_platform"; + +/// The departure date, check-in date or rental start date for the item. This should be in +/// YYYY-MM-DD format (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterStartDate : @"2015-09-14",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterStartDate NS_SWIFT_NAME(AnalyticsParameterStartDate) = + @"start_date"; + +/// The result of an operation. Specify 1 to indicate success and 0 to indicate failure (unsigned +/// integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterSuccess : @(1),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterSuccess NS_SWIFT_NAME(AnalyticsParameterSuccess) = @"success"; + +/// Tax cost associated with a transaction (double as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterTax : @(2.43),
+///       kFIRParameterCurrency : @"USD",  // e.g. $2.43 USD
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterTax NS_SWIFT_NAME(AnalyticsParameterTax) = @"tax"; + +/// If you're manually tagging keyword campaigns, you should use utm_term to specify the keyword +/// (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterTerm : @"game",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterTerm NS_SWIFT_NAME(AnalyticsParameterTerm) = @"term"; + +/// The unique identifier of a transaction (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterTransactionID : @"T12345",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterTransactionID NS_SWIFT_NAME(AnalyticsParameterTransactionID) = + @"transaction_id"; + +/// Travel class (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterTravelClass : @"business",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterTravelClass NS_SWIFT_NAME(AnalyticsParameterTravelClass) = + @"travel_class"; + +/// A context-specific numeric value which is accumulated automatically for each event type. This is +/// a general purpose parameter that is useful for accumulating a key metric that pertains to an +/// event. Examples include revenue, distance, time and points. Value should be specified as signed +/// 64-bit integer or double as NSNumber. Notes: Values for pre-defined currency-related events +/// (such as @c kFIREventAddToCart) should be supplied using double as NSNumber and must be +/// accompanied by a @c kFIRParameterCurrency parameter. The valid range of accumulated values is +/// [-9,223,372,036,854.77, 9,223,372,036,854.77]. Supplying a non-numeric value, omitting the +/// corresponding @c kFIRParameterCurrency parameter, or supplying an invalid +/// currency code for conversion events will cause that +/// conversion to be omitted from reporting. +///
+///     NSDictionary *params = @{
+///       kFIRParameterValue : @(3.99),
+///       kFIRParameterCurrency : @"USD",  // e.g. $3.99 USD
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterValue NS_SWIFT_NAME(AnalyticsParameterValue) = @"value"; + +/// Name of virtual currency type (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterVirtualCurrencyName : @"virtual_currency_name",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterVirtualCurrencyName + NS_SWIFT_NAME(AnalyticsParameterVirtualCurrencyName) = @"virtual_currency_name"; diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h new file mode 100644 index 0000000000..b3510fa93e --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h @@ -0,0 +1,29 @@ +/// @file FIRUserPropertyNames.h +/// +/// Predefined user property names. +/// +/// A UserProperty is an attribute that describes the app-user. By supplying UserProperties, you can +/// later analyze different behaviors of various segments of your userbase. You may supply up to 25 +/// unique UserProperties per app, and you can use the name and value of your choosing for each one. +/// UserProperty names can be up to 24 characters long, may only contain alphanumeric characters and +/// underscores ("_"), and must start with an alphabetic character. UserProperty values can be up to +/// 36 characters long. The "firebase_", "google_", and "ga_" prefixes are reserved and should not +/// be used. + +#import + +/// Indicates whether events logged by Google Analytics can be used to personalize ads for the user. +/// Set to "YES" to enable, or "NO" to disable. Default is enabled. See the +/// documentation for +/// more details and information about related settings. +/// +///
+///     [FIRAnalytics setUserPropertyString:@"NO"
+///                                 forName:kFIRUserPropertyAllowAdPersonalizationSignals];
+/// 
+static NSString *const kFIRUserPropertyAllowAdPersonalizationSignals + NS_SWIFT_NAME(AnalyticsUserPropertyAllowAdPersonalizationSignals) = @"allow_personalized_ads"; + +/// The method used to sign in. For example, "google", "facebook" or "twitter". +static NSString *const kFIRUserPropertySignUpMethod + NS_SWIFT_NAME(AnalyticsUserPropertySignUpMethod) = @"sign_up_method"; diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h new file mode 100644 index 0000000000..368f79c992 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h @@ -0,0 +1,6 @@ +#import "FIRAnalytics+AppDelegate.h" +#import "FIRAnalytics+Consent.h" +#import "FIRAnalytics.h" +#import "FIREventNames.h" +#import "FIRParameterNames.h" +#import "FIRUserPropertyNames.h" diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Info.plist b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Info.plist new file mode 100644 index 0000000000..efd0a1d201 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleExecutable + FirebaseAnalytics + CFBundleIdentifier + com.firebase.Firebase-FirebaseAnalytics + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + FirebaseAnalytics + CFBundlePackageType + FMWK + CFBundleVersion + 8.12.0 + DTSDKName + iphonesimulator11.2 + + diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Modules/module.modulemap b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Modules/module.modulemap new file mode 100644 index 0000000000..9a4af52d5e --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Modules/module.modulemap @@ -0,0 +1,13 @@ +framework module FirebaseAnalytics { +umbrella header "FirebaseAnalytics.h" +export * +module * { export * } + link framework "AppKit" + link framework "CoreTelephony" + link framework "Foundation" + link framework "Security" + link framework "SystemConfiguration" + link "c++" + link "sqlite3" + link "z" +} diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/FirebaseAnalytics b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/FirebaseAnalytics new file mode 100644 index 0000000000..2d4d5e2b63 Binary files /dev/null and b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/FirebaseAnalytics differ diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h new file mode 100644 index 0000000000..d499af668b --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h @@ -0,0 +1,62 @@ +#import + +#import "FIRAnalytics.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + * Provides App Delegate handlers to be used in your App Delegate. + * + * To save time integrating Firebase Analytics in an application, Firebase Analytics does not + * require delegation implementation from the AppDelegate. Instead this is automatically done by + * Firebase Analytics. Should you choose instead to delegate manually, you can turn off the App + * Delegate Proxy by adding FirebaseAppDelegateProxyEnabled into your app's Info.plist and setting + * it to NO, and adding the methods in this category to corresponding delegation handlers. + * + * To handle Universal Links, you must return YES in + * [UIApplicationDelegate application:didFinishLaunchingWithOptions:]. + */ +@interface FIRAnalytics (AppDelegate) + +/** + * Handles events related to a URL session that are waiting to be processed. + * + * For optimal use of Firebase Analytics, call this method from the + * [UIApplicationDelegate application:handleEventsForBackgroundURLSession:completionHandler] + * method of the app delegate in your app. + * + * @param identifier The identifier of the URL session requiring attention. + * @param completionHandler The completion handler to call when you finish processing the events. + * Calling this completion handler lets the system know that your app's user interface is + * updated and a new snapshot can be taken. + */ ++ (void)handleEventsForBackgroundURLSession:(NSString *)identifier + completionHandler:(nullable void (^)(void))completionHandler; + +/** + * Handles the event when the app is launched by a URL. + * + * Call this method from [UIApplicationDelegate application:openURL:options:] (on iOS 9.0 and + * above), or [UIApplicationDelegate application:openURL:sourceApplication:annotation:] (on + * iOS 8.x and below) in your app. + * + * @param url The URL resource to open. This resource can be a network resource or a file. + */ ++ (void)handleOpenURL:(NSURL *)url; + +/** + * Handles the event when the app receives data associated with user activity that includes a + * Universal Link (on iOS 9.0 and above). + * + * Call this method from [UIApplication continueUserActivity:restorationHandler:] in your app + * delegate (on iOS 9.0 and above). + * + * @param userActivity The activity object containing the data associated with the task the user + * was performing. + */ ++ (void)handleUserActivity:(id)userActivity; + +@end + +NS_ASSUME_NONNULL_END + diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FIRAnalytics+Consent.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FIRAnalytics+Consent.h new file mode 100644 index 0000000000..686a386ec6 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FIRAnalytics+Consent.h @@ -0,0 +1,33 @@ +#import + +#import "FIRAnalytics.h" + +NS_ASSUME_NONNULL_BEGIN + +/// The type of consent to set. Supported consent types are `ConsentType.adStorage` and +/// `ConsentType.analyticsStorage`. Omitting a type retains its previous status. +typedef NSString *FIRConsentType NS_TYPED_ENUM NS_SWIFT_NAME(ConsentType); +extern FIRConsentType const FIRConsentTypeAdStorage; +extern FIRConsentType const FIRConsentTypeAnalyticsStorage; + +/// The status value of the consent type. Supported statuses are `ConsentStatus.granted` and +/// `ConsentStatus.denied`. +typedef NSString *FIRConsentStatus NS_TYPED_ENUM NS_SWIFT_NAME(ConsentStatus); +extern FIRConsentStatus const FIRConsentStatusDenied; +extern FIRConsentStatus const FIRConsentStatusGranted; + +/// Sets the applicable end user consent state. +@interface FIRAnalytics (Consent) + +/// Sets the applicable end user consent state (e.g. for device identifiers) for this app on this +/// device. Use the consent settings to specify individual consent type values. Settings are +/// persisted across app sessions. By default consent types are set to `ConsentStatus.granted`. +/// +/// @param consentSettings An NSDictionary of consent types. Supported consent type keys are +/// `ConsentType.adStorage` and `ConsentType.analyticsStorage`. Valid values are +/// `ConsentStatus.granted` and `ConsentStatus.denied`. ++ (void)setConsent:(NSDictionary *)consentSettings; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FIRAnalytics.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FIRAnalytics.h new file mode 100644 index 0000000000..b9de09407d --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FIRAnalytics.h @@ -0,0 +1,142 @@ +#import + +#import "FIREventNames.h" +#import "FIRParameterNames.h" +#import "FIRUserPropertyNames.h" + +NS_ASSUME_NONNULL_BEGIN + +/// The top level Firebase Analytics singleton that provides methods for logging events and setting +/// user properties. See the developer guides for general +/// information on using Firebase Analytics in your apps. +/// +/// @note The Analytics SDK uses SQLite to persist events and other app-specific data. Calling +/// certain thread-unsafe global SQLite methods like `sqlite3_shutdown()` can result in +/// unexpected crashes at runtime. +NS_SWIFT_NAME(Analytics) +@interface FIRAnalytics : NSObject + +/// Logs an app event. The event can have up to 25 parameters. Events with the same name must have +/// the same parameters. Up to 500 event names are supported. Using predefined events and/or +/// parameters is recommended for optimal reporting. +/// +/// The following event names are reserved and cannot be used: +///
    +///
  • ad_activeview
  • +///
  • ad_click
  • +///
  • ad_exposure
  • +///
  • ad_query
  • +///
  • ad_reward
  • +///
  • adunit_exposure
  • +///
  • app_background
  • +///
  • app_clear_data
  • +///
  • app_exception
  • +///
  • app_remove
  • +///
  • app_store_refund
  • +///
  • app_store_subscription_cancel
  • +///
  • app_store_subscription_convert
  • +///
  • app_store_subscription_renew
  • +///
  • app_update
  • +///
  • app_upgrade
  • +///
  • dynamic_link_app_open
  • +///
  • dynamic_link_app_update
  • +///
  • dynamic_link_first_open
  • +///
  • error
  • +///
  • firebase_campaign
  • +///
  • first_open
  • +///
  • first_visit
  • +///
  • in_app_purchase
  • +///
  • notification_dismiss
  • +///
  • notification_foreground
  • +///
  • notification_open
  • +///
  • notification_receive
  • +///
  • os_update
  • +///
  • session_start
  • +///
  • session_start_with_rollout
  • +///
  • user_engagement
  • +///
+/// +/// @param name The name of the event. Should contain 1 to 40 alphanumeric characters or +/// underscores. The name must start with an alphabetic character. Some event names are +/// reserved. See FIREventNames.h for the list of reserved event names. The "firebase_", +/// "google_", and "ga_" prefixes are reserved and should not be used. Note that event names are +/// case-sensitive and that logging two events whose names differ only in case will result in +/// two distinct events. To manually log screen view events, use the `screen_view` event name. +/// @param parameters The dictionary of event parameters. Passing nil indicates that the event has +/// no parameters. Parameter names can be up to 40 characters long and must start with an +/// alphabetic character and contain only alphanumeric characters and underscores. Only NSString +/// and NSNumber (signed 64-bit integer and 64-bit floating-point number) parameter types are +/// supported. NSString parameter values can be up to 100 characters long. The "firebase_", +/// "google_", and "ga_" prefixes are reserved and should not be used for parameter names. ++ (void)logEventWithName:(NSString *)name + parameters:(nullable NSDictionary *)parameters + NS_SWIFT_NAME(logEvent(_:parameters:)); + +/// Sets a user property to a given value. Up to 25 user property names are supported. Once set, +/// user property values persist throughout the app lifecycle and across sessions. +/// +/// The following user property names are reserved and cannot be used: +///
    +///
  • first_open_time
  • +///
  • last_deep_link_referrer
  • +///
  • user_id
  • +///
+/// +/// @param value The value of the user property. Values can be up to 36 characters long. Setting the +/// value to nil removes the user property. +/// @param name The name of the user property to set. Should contain 1 to 24 alphanumeric characters +/// or underscores and must start with an alphabetic character. The "firebase_", "google_", and +/// "ga_" prefixes are reserved and should not be used for user property names. ++ (void)setUserPropertyString:(nullable NSString *)value forName:(NSString *)name + NS_SWIFT_NAME(setUserProperty(_:forName:)); + +/// Sets the user ID property. This feature must be used in accordance with +/// Google's Privacy Policy +/// +/// @param userID The user ID to ascribe to the user of this app on this device, which must be +/// non-empty and no more than 256 characters long. Setting userID to nil removes the user ID. ++ (void)setUserID:(nullable NSString *)userID; + +/// Sets whether analytics collection is enabled for this app on this device. This setting is +/// persisted across app sessions. By default it is enabled. +/// +/// @param analyticsCollectionEnabled A flag that enables or disables Analytics collection. ++ (void)setAnalyticsCollectionEnabled:(BOOL)analyticsCollectionEnabled; + +/// Sets the interval of inactivity in seconds that terminates the current session. The default +/// value is 1800 seconds (30 minutes). +/// +/// @param sessionTimeoutInterval The custom time of inactivity in seconds before the current +/// session terminates. ++ (void)setSessionTimeoutInterval:(NSTimeInterval)sessionTimeoutInterval; + +/// Returns the unique ID for this instance of the application or nil if +/// `ConsentType.analyticsStorage` has been set to `ConsentStatus.denied`. +/// +/// @see `FIRAnalytics+Consent.h` ++ (nullable NSString *)appInstanceID; + +/// Clears all analytics data for this instance from the device and resets the app instance ID. +/// FIRAnalyticsConfiguration values will be reset to the default values. ++ (void)resetAnalyticsData; + +/// Adds parameters that will be set on every event logged from the SDK, including automatic ones. +/// The values passed in the parameters dictionary will be added to the dictionary of default event +/// parameters. These parameters persist across app runs. They are of lower precedence than event +/// parameters, so if an event parameter and a parameter set using this API have the same name, the +/// value of the event parameter will be used. The same limitations on event parameters apply to +/// default event parameters. +/// +/// @param parameters Parameters to be added to the dictionary of parameters added to every event. +/// They will be added to the dictionary of default event parameters, replacing any existing +/// parameter with the same name. Valid parameters are NSString and NSNumber (signed 64-bit +/// integer and 64-bit floating-point number). Setting a key's value to [NSNull null] will clear +/// that parameter. Passing in a nil dictionary will clear all parameters. ++ (void)setDefaultEventParameters:(nullable NSDictionary *)parameters; + +/// Unavailable. +- (instancetype)init NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FIREventNames.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FIREventNames.h new file mode 100644 index 0000000000..3f85456342 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FIREventNames.h @@ -0,0 +1,499 @@ +/// @file FIREventNames.h +/// +/// Predefined event names. +/// +/// An Event is an important occurrence in your app that you want to measure. You can report up to +/// 500 different types of Events per app and you can associate up to 25 unique parameters with each +/// Event type. Some common events are suggested below, but you may also choose to specify custom +/// Event types that are associated with your specific app. Each event type is identified by a +/// unique name. Event names can be up to 40 characters long, may only contain alphanumeric +/// characters and underscores ("_"), and must start with an alphabetic character. The "firebase_", +/// "google_", and "ga_" prefixes are reserved and should not be used. + +#import + +/// Ad Impression event. This event signifies when a user sees an ad impression. Note: If you supply +/// the @c kFIRParameterValue parameter, you must also supply the @c kFIRParameterCurrency parameter +/// so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterAdPlatform (NSString) (optional)
  • +///
  • @c kFIRParameterAdFormat (NSString) (optional)
  • +///
  • @c kFIRParameterAdSource (NSString) (optional)
  • +///
  • @c kFIRParameterAdUnitName (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventAdImpression NS_SWIFT_NAME(AnalyticsEventAdImpression) = + @"ad_impression"; + +/// Add Payment Info event. This event signifies that a user has submitted their payment +/// information. Note: If you supply the @c kFIRParameterValue parameter, you must also supply the +/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterPaymentType (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventAddPaymentInfo NS_SWIFT_NAME(AnalyticsEventAddPaymentInfo) = + @"add_payment_info"; + +/// Add Shipping Info event. This event signifies that a user has submitted their shipping +/// information. Note: If you supply the @c kFIRParameterValue parameter, you must also supply the +/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterShippingTier (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventAddShippingInfo NS_SWIFT_NAME(AnalyticsEventAddShippingInfo) = + @"add_shipping_info"; + +/// E-Commerce Add To Cart event. This event signifies that an item(s) was added to a cart for +/// purchase. Add this event to a funnel with @c kFIREventPurchase to gauge the effectiveness of +/// your checkout process. Note: If you supply the @c kFIRParameterValue parameter, you must also +/// supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed +/// accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventAddToCart NS_SWIFT_NAME(AnalyticsEventAddToCart) = @"add_to_cart"; + +/// E-Commerce Add To Wishlist event. This event signifies that an item was added to a wishlist. Use +/// this event to identify popular gift items. Note: If you supply the @c kFIRParameterValue +/// parameter, you must also supply the @c kFIRParameterCurrency parameter so that revenue metrics +/// can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventAddToWishlist NS_SWIFT_NAME(AnalyticsEventAddToWishlist) = + @"add_to_wishlist"; + +/// App Open event. By logging this event when an App becomes active, developers can understand how +/// often users leave and return during the course of a Session. Although Sessions are automatically +/// reported, this event can provide further clarification around the continuous engagement of +/// app-users. +static NSString *const kFIREventAppOpen NS_SWIFT_NAME(AnalyticsEventAppOpen) = @"app_open"; + +/// E-Commerce Begin Checkout event. This event signifies that a user has begun the process of +/// checking out. Add this event to a funnel with your @c kFIREventPurchase event to gauge the +/// effectiveness of your checkout process. Note: If you supply the @c kFIRParameterValue parameter, +/// you must also supply the @c kFIRParameterCurrency parameter so that revenue metrics can be +/// computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventBeginCheckout NS_SWIFT_NAME(AnalyticsEventBeginCheckout) = + @"begin_checkout"; + +/// Campaign Detail event. Log this event to supply the referral details of a re-engagement +/// campaign. Note: you must supply at least one of the required parameters kFIRParameterSource, +/// kFIRParameterMedium or kFIRParameterCampaign. Params: +/// +///
    +///
  • @c kFIRParameterSource (NSString)
  • +///
  • @c kFIRParameterMedium (NSString)
  • +///
  • @c kFIRParameterCampaign (NSString)
  • +///
  • @c kFIRParameterTerm (NSString) (optional)
  • +///
  • @c kFIRParameterContent (NSString) (optional)
  • +///
  • @c kFIRParameterAdNetworkClickID (NSString) (optional)
  • +///
  • @c kFIRParameterCP1 (NSString) (optional)
  • +///
  • @c kFIRParameterCampaignID (NSString) (optional)
  • +///
  • @c kFIRParameterCreativeFormat (NSString) (optional)
  • +///
  • @c kFIRParameterMarketingTactic (NSString) (optional)
  • +///
  • @c kFIRParameterSourcePlatform (NSString) (optional)
  • +///
+static NSString *const kFIREventCampaignDetails NS_SWIFT_NAME(AnalyticsEventCampaignDetails) = + @"campaign_details"; + +/// Checkout progress. Params: +/// +///
    +///
  • @c kFIRParameterCheckoutStep (unsigned 64-bit integer as NSNumber)
  • +///
  • @c kFIRParameterCheckoutOption (NSString) (optional)
  • +///
+/// This constant has been deprecated. +static NSString *const kFIREventCheckoutProgress NS_SWIFT_NAME(AnalyticsEventCheckoutProgress) = + @"checkout_progress"; + +/// Earn Virtual Currency event. This event tracks the awarding of virtual currency in your app. Log +/// this along with @c kFIREventSpendVirtualCurrency to better understand your virtual economy. +/// Params: +/// +///
    +///
  • @c kFIRParameterVirtualCurrencyName (NSString)
  • +///
  • @c kFIRParameterValue (signed 64-bit integer or double as NSNumber)
  • +///
+static NSString *const kFIREventEarnVirtualCurrency + NS_SWIFT_NAME(AnalyticsEventEarnVirtualCurrency) = @"earn_virtual_currency"; + +/// E-Commerce Purchase event. This event signifies that an item was purchased by a user. Note: +/// This is different from the in-app purchase event, which is reported automatically for App +/// Store-based apps. Note: If you supply the @c kFIRParameterValue parameter, you must also +/// supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed +/// accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTransactionID (NSString) (optional)
  • +///
  • @c kFIRParameterTax (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterShipping (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterLocation (NSString) (optional)
  • +///
  • @c kFIRParameterStartDate (NSString) (optional)
  • +///
  • @c kFIRParameterEndDate (NSString) (optional)
  • +///
  • @c kFIRParameterNumberOfNights (signed 64-bit integer as NSNumber) (optional) for +/// hotel bookings
  • +///
  • @c kFIRParameterNumberOfRooms (signed 64-bit integer as NSNumber) (optional) for +/// hotel bookings
  • +///
  • @c kFIRParameterNumberOfPassengers (signed 64-bit integer as NSNumber) (optional) +/// for travel bookings
  • +///
  • @c kFIRParameterOrigin (NSString) (optional)
  • +///
  • @c kFIRParameterDestination (NSString) (optional)
  • +///
  • @c kFIRParameterTravelClass (NSString) (optional) for travel bookings
  • +///
+/// This constant has been deprecated. Use @c kFIREventPurchase constant instead. +static NSString *const kFIREventEcommercePurchase NS_SWIFT_NAME(AnalyticsEventEcommercePurchase) = + @"ecommerce_purchase"; + +/// Generate Lead event. Log this event when a lead has been generated in the app to understand the +/// efficacy of your install and re-engagement campaigns. Note: If you supply the +/// @c kFIRParameterValue parameter, you must also supply the @c kFIRParameterCurrency +/// parameter so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventGenerateLead NS_SWIFT_NAME(AnalyticsEventGenerateLead) = + @"generate_lead"; + +/// Join Group event. Log this event when a user joins a group such as a guild, team or family. Use +/// this event to analyze how popular certain groups or social features are in your app. Params: +/// +///
    +///
  • @c kFIRParameterGroupID (NSString)
  • +///
+static NSString *const kFIREventJoinGroup NS_SWIFT_NAME(AnalyticsEventJoinGroup) = @"join_group"; + +/// Level End event. Log this event when the user finishes a level. Params: +/// +///
    +///
  • @c kFIRParameterLevelName (NSString)
  • +///
  • @c kFIRParameterSuccess (NSString)
  • +///
+static NSString *const kFIREventLevelEnd NS_SWIFT_NAME(AnalyticsEventLevelEnd) = @"level_end"; + +/// Level Start event. Log this event when the user starts a new level. Params: +/// +///
    +///
  • @c kFIRParameterLevelName (NSString)
  • +///
+static NSString *const kFIREventLevelStart NS_SWIFT_NAME(AnalyticsEventLevelStart) = @"level_start"; + +/// Level Up event. This event signifies that a player has leveled up in your gaming app. It can +/// help you gauge the level distribution of your userbase and help you identify certain levels that +/// are difficult to pass. Params: +/// +///
    +///
  • @c kFIRParameterLevel (signed 64-bit integer as NSNumber)
  • +///
  • @c kFIRParameterCharacter (NSString) (optional)
  • +///
+static NSString *const kFIREventLevelUp NS_SWIFT_NAME(AnalyticsEventLevelUp) = @"level_up"; + +/// Login event. Apps with a login feature can report this event to signify that a user has logged +/// in. +static NSString *const kFIREventLogin NS_SWIFT_NAME(AnalyticsEventLogin) = @"login"; + +/// Post Score event. Log this event when the user posts a score in your gaming app. This event can +/// help you understand how users are actually performing in your game and it can help you correlate +/// high scores with certain audiences or behaviors. Params: +/// +///
    +///
  • @c kFIRParameterScore (signed 64-bit integer as NSNumber)
  • +///
  • @c kFIRParameterLevel (signed 64-bit integer as NSNumber) (optional)
  • +///
  • @c kFIRParameterCharacter (NSString) (optional)
  • +///
+static NSString *const kFIREventPostScore NS_SWIFT_NAME(AnalyticsEventPostScore) = @"post_score"; + +/// Present Offer event. This event signifies that the app has presented a purchase offer to a user. +/// Add this event to a funnel with the kFIREventAddToCart and kFIREventEcommercePurchase to gauge +/// your conversion process. Note: If you supply the @c kFIRParameterValue parameter, you must +/// also supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed +/// accurately. Params: +/// +///
    +///
  • @c kFIRParameterQuantity (signed 64-bit integer as NSNumber)
  • +///
  • @c kFIRParameterItemID (NSString)
  • +///
  • @c kFIRParameterItemName (NSString)
  • +///
  • @c kFIRParameterItemCategory (NSString)
  • +///
  • @c kFIRParameterItemLocationID (NSString) (optional)
  • +///
  • @c kFIRParameterPrice (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+/// This constant has been deprecated. Use @c kFIREventViewPromotion constant instead. +static NSString *const kFIREventPresentOffer NS_SWIFT_NAME(AnalyticsEventPresentOffer) = + @"present_offer"; + +/// E-Commerce Purchase event. This event signifies that an item(s) was purchased by a user. Note: +/// This is different from the in-app purchase event, which is reported automatically for App +/// Store-based apps. Note: If you supply the @c kFIRParameterValue parameter, you must also supply +/// the @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. +/// Params: +/// +///
    +///
  • @c kFIRParameterAffiliation (NSString) (optional)
  • +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterShipping (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTax (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTransactionID (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventPurchase NS_SWIFT_NAME(AnalyticsEventPurchase) = @"purchase"; + +/// E-Commerce Purchase Refund event. This event signifies that an item purchase was refunded. +/// Note: If you supply the @c kFIRParameterValue parameter, you must also supply the +/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. +/// Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTransactionID (NSString) (optional)
  • +///
+/// This constant has been deprecated. Use @c kFIREventRefund constant instead. +static NSString *const kFIREventPurchaseRefund NS_SWIFT_NAME(AnalyticsEventPurchaseRefund) = + @"purchase_refund"; + +/// E-Commerce Refund event. This event signifies that a refund was issued. Note: If you supply the +/// @c kFIRParameterValue parameter, you must also supply the @c kFIRParameterCurrency parameter so +/// that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterAffiliation (NSString) (optional)
  • +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterShipping (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTax (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTransactionID (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventRefund NS_SWIFT_NAME(AnalyticsEventRefund) = @"refund"; + +/// E-Commerce Remove from Cart event. This event signifies that an item(s) was removed from a cart. +/// Note: If you supply the @c kFIRParameterValue parameter, you must also supply the @c +/// kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventRemoveFromCart NS_SWIFT_NAME(AnalyticsEventRemoveFromCart) = + @"remove_from_cart"; + +/// Screen View event. This event signifies a screen view. Use this when a screen transition occurs. +/// This event can be logged irrespective of whether automatic screen tracking is enabled. Params: +/// +///
    +///
  • @c kFIRParameterScreenClass (NSString) (optional)
  • +///
  • @c kFIRParameterScreenName (NSString) (optional)
  • +///
+static NSString *const kFIREventScreenView NS_SWIFT_NAME(AnalyticsEventScreenView) = @"screen_view"; + +/// Search event. Apps that support search features can use this event to contextualize search +/// operations by supplying the appropriate, corresponding parameters. This event can help you +/// identify the most popular content in your app. Params: +/// +///
    +///
  • @c kFIRParameterSearchTerm (NSString)
  • +///
  • @c kFIRParameterStartDate (NSString) (optional)
  • +///
  • @c kFIRParameterEndDate (NSString) (optional)
  • +///
  • @c kFIRParameterNumberOfNights (signed 64-bit integer as NSNumber) (optional) for +/// hotel bookings
  • +///
  • @c kFIRParameterNumberOfRooms (signed 64-bit integer as NSNumber) (optional) for +/// hotel bookings
  • +///
  • @c kFIRParameterNumberOfPassengers (signed 64-bit integer as NSNumber) (optional) +/// for travel bookings
  • +///
  • @c kFIRParameterOrigin (NSString) (optional)
  • +///
  • @c kFIRParameterDestination (NSString) (optional)
  • +///
  • @c kFIRParameterTravelClass (NSString) (optional) for travel bookings
  • +///
+static NSString *const kFIREventSearch NS_SWIFT_NAME(AnalyticsEventSearch) = @"search"; + +/// Select Content event. This general purpose event signifies that a user has selected some content +/// of a certain type in an app. The content can be any object in your app. This event can help you +/// identify popular content and categories of content in your app. Params: +/// +///
    +///
  • @c kFIRParameterContentType (NSString)
  • +///
  • @c kFIRParameterItemID (NSString)
  • +///
+static NSString *const kFIREventSelectContent NS_SWIFT_NAME(AnalyticsEventSelectContent) = + @"select_content"; + +/// Select Item event. This event signifies that an item was selected by a user from a list. Use the +/// appropriate parameters to contextualize the event. Use this event to discover the most popular +/// items selected. Params: +/// +///
    +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterItemListID (NSString) (optional)
  • +///
  • @c kFIRParameterItemListName (NSString) (optional)
  • +///
+static NSString *const kFIREventSelectItem NS_SWIFT_NAME(AnalyticsEventSelectItem) = @"select_item"; + +/// Select promotion event. This event signifies that a user has selected a promotion offer. Use the +/// appropriate parameters to contextualize the event, such as the item(s) for which the promotion +/// applies. Params: +/// +///
    +///
  • @c kFIRParameterCreativeName (NSString) (optional)
  • +///
  • @c kFIRParameterCreativeSlot (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterLocationID (NSString) (optional)
  • +///
  • @c kFIRParameterPromotionID (NSString) (optional)
  • +///
  • @c kFIRParameterPromotionName (NSString) (optional)
  • +///
+static NSString *const kFIREventSelectPromotion NS_SWIFT_NAME(AnalyticsEventSelectPromotion) = + @"select_promotion"; + +/// Set checkout option. Params: +/// +///
    +///
  • @c kFIRParameterCheckoutStep (unsigned 64-bit integer as NSNumber)
  • +///
  • @c kFIRParameterCheckoutOption (NSString)
  • +///
+/// This constant has been deprecated. +static NSString *const kFIREventSetCheckoutOption NS_SWIFT_NAME(AnalyticsEventSetCheckoutOption) = + @"set_checkout_option"; + +/// Share event. Apps with social features can log the Share event to identify the most viral +/// content. Params: +/// +///
    +///
  • @c kFIRParameterContentType (NSString)
  • +///
  • @c kFIRParameterItemID (NSString)
  • +///
+static NSString *const kFIREventShare NS_SWIFT_NAME(AnalyticsEventShare) = @"share"; + +/// Sign Up event. This event indicates that a user has signed up for an account in your app. The +/// parameter signifies the method by which the user signed up. Use this event to understand the +/// different behaviors between logged in and logged out users. Params: +/// +///
    +///
  • @c kFIRParameterSignUpMethod (NSString)
  • +///
+static NSString *const kFIREventSignUp NS_SWIFT_NAME(AnalyticsEventSignUp) = @"sign_up"; + +/// Spend Virtual Currency event. This event tracks the sale of virtual goods in your app and can +/// help you identify which virtual goods are the most popular objects of purchase. Params: +/// +///
    +///
  • @c kFIRParameterItemName (NSString)
  • +///
  • @c kFIRParameterVirtualCurrencyName (NSString)
  • +///
  • @c kFIRParameterValue (signed 64-bit integer or double as NSNumber)
  • +///
+static NSString *const kFIREventSpendVirtualCurrency + NS_SWIFT_NAME(AnalyticsEventSpendVirtualCurrency) = @"spend_virtual_currency"; + +/// Tutorial Begin event. This event signifies the start of the on-boarding process in your app. Use +/// this in a funnel with kFIREventTutorialComplete to understand how many users complete this +/// process and move on to the full app experience. +static NSString *const kFIREventTutorialBegin NS_SWIFT_NAME(AnalyticsEventTutorialBegin) = + @"tutorial_begin"; + +/// Tutorial End event. Use this event to signify the user's completion of your app's on-boarding +/// process. Add this to a funnel with kFIREventTutorialBegin to gauge the completion rate of your +/// on-boarding process. +static NSString *const kFIREventTutorialComplete NS_SWIFT_NAME(AnalyticsEventTutorialComplete) = + @"tutorial_complete"; + +/// Unlock Achievement event. Log this event when the user has unlocked an achievement in your +/// game. Since achievements generally represent the breadth of a gaming experience, this event can +/// help you understand how many users are experiencing all that your game has to offer. Params: +/// +///
    +///
  • @c kFIRParameterAchievementID (NSString)
  • +///
+static NSString *const kFIREventUnlockAchievement NS_SWIFT_NAME(AnalyticsEventUnlockAchievement) = + @"unlock_achievement"; + +/// E-commerce View Cart event. This event signifies that a user has viewed their cart. Use this to +/// analyze your purchase funnel. Note: If you supply the @c kFIRParameterValue parameter, you must +/// also supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed +/// accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventViewCart NS_SWIFT_NAME(AnalyticsEventViewCart) = @"view_cart"; + +/// View Item event. This event signifies that a user has viewed an item. Use the appropriate +/// parameters to contextualize the event. Use this event to discover the most popular items viewed +/// in your app. Note: If you supply the @c kFIRParameterValue parameter, you must also supply the +/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventViewItem NS_SWIFT_NAME(AnalyticsEventViewItem) = @"view_item"; + +/// View Item List event. Log this event when a user sees a list of items or offerings. Params: +/// +///
    +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterItemListID (NSString) (optional)
  • +///
  • @c kFIRParameterItemListName (NSString) (optional)
  • +///
+static NSString *const kFIREventViewItemList NS_SWIFT_NAME(AnalyticsEventViewItemList) = + @"view_item_list"; + +/// View Promotion event. This event signifies that a promotion was shown to a user. Add this event +/// to a funnel with the @c kFIREventAddToCart and @c kFIREventPurchase to gauge your conversion +/// process. Params: +/// +///
    +///
  • @c kFIRParameterCreativeName (NSString) (optional)
  • +///
  • @c kFIRParameterCreativeSlot (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterLocationID (NSString) (optional)
  • +///
  • @c kFIRParameterPromotionID (NSString) (optional)
  • +///
  • @c kFIRParameterPromotionName (NSString) (optional)
  • +///
+static NSString *const kFIREventViewPromotion NS_SWIFT_NAME(AnalyticsEventViewPromotion) = + @"view_promotion"; + +/// View Search Results event. Log this event when the user has been presented with the results of a +/// search. Params: +/// +///
    +///
  • @c kFIRParameterSearchTerm (NSString)
  • +///
+static NSString *const kFIREventViewSearchResults NS_SWIFT_NAME(AnalyticsEventViewSearchResults) = + @"view_search_results"; diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FIRParameterNames.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FIRParameterNames.h new file mode 100644 index 0000000000..fe3a6c47b4 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FIRParameterNames.h @@ -0,0 +1,776 @@ +/// @file FIRParameterNames.h +/// +/// Predefined event parameter names. +/// +/// Params supply information that contextualize Events. You can associate up to 25 unique Params +/// with each Event type. Some Params are suggested below for certain common Events, but you are +/// not limited to these. You may supply extra Params for suggested Events or custom Params for +/// Custom events. Param names can be up to 40 characters long, may only contain alphanumeric +/// characters and underscores ("_"), and must start with an alphabetic character. Param values can +/// be up to 100 characters long. The "firebase_", "google_", and "ga_" prefixes are reserved and +/// should not be used. + +#import + +/// Game achievement ID (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterAchievementID : @"10_matches_won",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAchievementID NS_SWIFT_NAME(AnalyticsParameterAchievementID) = + @"achievement_id"; + +/// The ad format (e.g. Banner, Interstitial, Rewarded, Native, Rewarded Interstitial, Instream). +/// (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterAdFormat : @"Banner",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAdFormat NS_SWIFT_NAME(AnalyticsParameterAdFormat) = + @"ad_format"; + +/// Ad Network Click ID (NSString). Used for network-specific click IDs which vary in format. +///
+///     NSDictionary *params = @{
+///       kFIRParameterAdNetworkClickID : @"1234567",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAdNetworkClickID + NS_SWIFT_NAME(AnalyticsParameterAdNetworkClickID) = @"aclid"; + +/// The ad platform (e.g. MoPub, IronSource) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterAdPlatform : @"MoPub",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAdPlatform NS_SWIFT_NAME(AnalyticsParameterAdPlatform) = + @"ad_platform"; + +/// The ad source (e.g. AdColony) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterAdSource : @"AdColony",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAdSource NS_SWIFT_NAME(AnalyticsParameterAdSource) = + @"ad_source"; + +/// The ad unit name (e.g. Banner_03) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterAdUnitName : @"Banner_03",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAdUnitName NS_SWIFT_NAME(AnalyticsParameterAdUnitName) = + @"ad_unit_name"; + +/// A product affiliation to designate a supplying company or brick and mortar store location +/// (NSString).
+///     NSDictionary *params = @{
+///       kFIRParameterAffiliation : @"Google Store",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAffiliation NS_SWIFT_NAME(AnalyticsParameterAffiliation) = + @"affiliation"; + +/// Campaign custom parameter (NSString). Used as a method of capturing custom data in a campaign. +/// Use varies by network. +///
+///     NSDictionary *params = @{
+///       kFIRParameterCP1 : @"custom_data",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCP1 NS_SWIFT_NAME(AnalyticsParameterCP1) = @"cp1"; + +/// The individual campaign name, slogan, promo code, etc. Some networks have pre-defined macro to +/// capture campaign information, otherwise can be populated by developer. Highly Recommended +/// (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCampaign : @"winter_promotion",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCampaign NS_SWIFT_NAME(AnalyticsParameterCampaign) = + @"campaign"; + +/// Campaign ID (NSString). Used for keyword analysis to identify a specific product promotion or +/// strategic campaign. This is a required key for GA4 data import. +///
+///     NSDictionary *params = @{
+///       kFIRParameterCampaignID : @"7877652710",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCampaignID NS_SWIFT_NAME(AnalyticsParameterCampaignID) = + @"campaign_id"; + +/// Character used in game (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCharacter : @"beat_boss",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCharacter NS_SWIFT_NAME(AnalyticsParameterCharacter) = + @"character"; + +/// Some option on a step in an ecommerce flow (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCheckoutOption : @"Visa",
+///       // ...
+///     };
+/// 
+/// This constant has been deprecated. +static NSString *const kFIRParameterCheckoutOption + NS_SWIFT_NAME(AnalyticsParameterCheckoutOption) = @"checkout_option"; + +/// The checkout step (1..N) (unsigned 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCheckoutStep : @"1",
+///       // ...
+///     };
+/// 
+/// This constant has been deprecated. +static NSString *const kFIRParameterCheckoutStep NS_SWIFT_NAME(AnalyticsParameterCheckoutStep) = + @"checkout_step"; + +/// Campaign content (NSString). +static NSString *const kFIRParameterContent NS_SWIFT_NAME(AnalyticsParameterContent) = @"content"; + +/// Type of content selected (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterContentType : @"news article",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterContentType NS_SWIFT_NAME(AnalyticsParameterContentType) = + @"content_type"; + +/// Coupon code used for a purchase (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCoupon : @"SUMMER_FUN",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCoupon NS_SWIFT_NAME(AnalyticsParameterCoupon) = @"coupon"; + +/// Creative Format (NSString). Used to identify the high-level classification of the type of ad +/// served by a specific campaign. +///
+///     NSDictionary *params = @{
+///       kFIRParameterCreativeFormat : @"display",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCreativeFormat NS_SWIFT_NAME(AnalyticsParameterCreativeFormat) = + @"creative_format"; + +/// The name of a creative used in a promotional spot (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCreativeName : @"Summer Sale",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCreativeName NS_SWIFT_NAME(AnalyticsParameterCreativeName) = + @"creative_name"; + +/// The name of a creative slot (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCreativeSlot : @"summer_banner2",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCreativeSlot NS_SWIFT_NAME(AnalyticsParameterCreativeSlot) = + @"creative_slot"; + +/// Currency of the purchase or items associated with the event, in 3-letter +/// ISO_4217 format (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCurrency : @"USD",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCurrency NS_SWIFT_NAME(AnalyticsParameterCurrency) = + @"currency"; + +/// Flight or Travel destination (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterDestination : @"Mountain View, CA",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterDestination NS_SWIFT_NAME(AnalyticsParameterDestination) = + @"destination"; + +/// Monetary value of discount associated with a purchase (double as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterDiscount : @(2.0),
+///       kFIRParameterCurrency : @"USD",  // e.g. $2.00 USD
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterDiscount NS_SWIFT_NAME(AnalyticsParameterDiscount) = + @"discount"; + +/// The arrival date, check-out date or rental end date for the item. This should be in +/// YYYY-MM-DD format (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterEndDate : @"2015-09-14",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterEndDate NS_SWIFT_NAME(AnalyticsParameterEndDate) = @"end_date"; + +/// Indicates that the associated event should either extend the current session +/// or start a new session if no session was active when the event was logged. +/// Specify YES to extend the current session or to start a new session; any +/// other value will not extend or start a session. +///
+///     NSDictionary *params = @{
+///       kFIRParameterExtendSession : @YES,
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterExtendSession NS_SWIFT_NAME(AnalyticsParameterExtendSession) = + @"extend_session"; + +/// Flight number for travel events (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterFlightNumber : @"ZZ800",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterFlightNumber NS_SWIFT_NAME(AnalyticsParameterFlightNumber) = + @"flight_number"; + +/// Group/clan/guild ID (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterGroupID : @"g1",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterGroupID NS_SWIFT_NAME(AnalyticsParameterGroupID) = @"group_id"; + +/// The index of the item in a list (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterIndex : @(5),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterIndex NS_SWIFT_NAME(AnalyticsParameterIndex) = @"index"; + +/// Item brand (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemBrand : @"Google",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemBrand NS_SWIFT_NAME(AnalyticsParameterItemBrand) = + @"item_brand"; + +/// Item category (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemCategory : @"pants",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemCategory NS_SWIFT_NAME(AnalyticsParameterItemCategory) = + @"item_category"; + +/// Item Category (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemCategory2 : @"pants",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemCategory2 NS_SWIFT_NAME(AnalyticsParameterItemCategory2) = + @"item_category2"; + +/// Item Category (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemCategory3 : @"pants",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemCategory3 NS_SWIFT_NAME(AnalyticsParameterItemCategory3) = + @"item_category3"; + +/// Item Category (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemCategory4 : @"pants",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemCategory4 NS_SWIFT_NAME(AnalyticsParameterItemCategory4) = + @"item_category4"; + +/// Item Category (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemCategory5 : @"pants",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemCategory5 NS_SWIFT_NAME(AnalyticsParameterItemCategory5) = + @"item_category5"; + +/// Item ID (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemID : @"SKU_12345",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemID NS_SWIFT_NAME(AnalyticsParameterItemID) = @"item_id"; + +/// The list in which the item was presented to the user (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemList : @"Search Results",
+///       // ...
+///     };
+/// 
+/// This constant has been deprecated. Use @c kFIRParameterItemListName constant instead. +static NSString *const kFIRParameterItemList NS_SWIFT_NAME(AnalyticsParameterItemList) = + @"item_list"; + +/// The ID of the list in which the item was presented to the user (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemListID : @"ABC123",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemListID NS_SWIFT_NAME(AnalyticsParameterItemListID) = + @"item_list_id"; + +/// The name of the list in which the item was presented to the user (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemListName : @"Related products",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemListName NS_SWIFT_NAME(AnalyticsParameterItemListName) = + @"item_list_name"; + +/// The Google Place ID (NSString) that +/// corresponds to the associated item. Alternatively, you can supply your own custom Location ID. +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemLocationID : @"ChIJiyj437sx3YAR9kUWC8QkLzQ",
+///       // ...
+///     };
+/// 
+/// This constant has been deprecated. Use @c kFIRParameterLocationID constant instead. +static NSString *const kFIRParameterItemLocationID + NS_SWIFT_NAME(AnalyticsParameterItemLocationID) = @"item_location_id"; + +/// Item Name (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemName : @"jeggings",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemName NS_SWIFT_NAME(AnalyticsParameterItemName) = + @"item_name"; + +/// Item variant (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemVariant : @"Black",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemVariant NS_SWIFT_NAME(AnalyticsParameterItemVariant) = + @"item_variant"; + +/// The list of items involved in the transaction. (NSArray). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItems : @[
+///         @{kFIRParameterItemName : @"jeggings", kFIRParameterItemCategory : @"pants"},
+///         @{kFIRParameterItemName : @"boots", kFIRParameterItemCategory : @"shoes"},
+///       ],
+///     };
+/// 
+static NSString *const kFIRParameterItems NS_SWIFT_NAME(AnalyticsParameterItems) = @"items"; + +/// Level in game (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterLevel : @(42),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterLevel NS_SWIFT_NAME(AnalyticsParameterLevel) = @"level"; + +/// The name of a level in a game (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterLevelName : @"room_1",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterLevelName NS_SWIFT_NAME(AnalyticsParameterLevelName) = + @"level_name"; + +/// Location (NSString). The Google Place ID +/// that corresponds to the associated event. Alternatively, you can supply your own custom +/// Location ID. +///
+///     NSDictionary *params = @{
+///       kFIRParameterLocation : @"ChIJiyj437sx3YAR9kUWC8QkLzQ",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterLocation NS_SWIFT_NAME(AnalyticsParameterLocation) = + @"location"; + +/// The location associated with the event. Preferred to be the Google +/// Place ID that corresponds to the +/// associated item but could be overridden to a custom location ID string.(NSString).
+///     NSDictionary *params = @{
+///       kFIRParameterLocationID : @"ChIJiyj437sx3YAR9kUWC8QkLzQ",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterLocationID NS_SWIFT_NAME(AnalyticsParameterLocationID) = + @"location_id"; + +/// Marketing Tactic (NSString). Used to identify the targeting criteria applied to a specific +/// campaign. +///
+///     NSDictionary *params = @{
+///       kFIRParameterMarketingTactic : @"Remarketing",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterMarketingTactic + NS_SWIFT_NAME(AnalyticsParameterMarketingTactic) = @"marketing_tactic"; + +/// The advertising or marketing medium, for example: cpc, banner, email, push. Highly recommended +/// (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterMedium : @"email",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterMedium NS_SWIFT_NAME(AnalyticsParameterMedium) = @"medium"; + +/// A particular approach used in an operation; for example, "facebook" or "email" in the context +/// of a sign_up or login event. (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterMethod : @"google",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterMethod NS_SWIFT_NAME(AnalyticsParameterMethod) = @"method"; + +/// Number of nights staying at hotel (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterNumberOfNights : @(3),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterNumberOfNights + NS_SWIFT_NAME(AnalyticsParameterNumberOfNights) = @"number_of_nights"; + +/// Number of passengers traveling (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterNumberOfPassengers : @(11),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterNumberOfPassengers + NS_SWIFT_NAME(AnalyticsParameterNumberOfPassengers) = @"number_of_passengers"; + +/// Number of rooms for travel events (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterNumberOfRooms : @(2),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterNumberOfRooms NS_SWIFT_NAME(AnalyticsParameterNumberOfRooms) = + @"number_of_rooms"; + +/// Flight or Travel origin (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterOrigin : @"Mountain View, CA",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterOrigin NS_SWIFT_NAME(AnalyticsParameterOrigin) = @"origin"; + +/// The chosen method of payment (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterPaymentType : @"Visa",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterPaymentType NS_SWIFT_NAME(AnalyticsParameterPaymentType) = + @"payment_type"; + +/// Purchase price (double as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterPrice : @(1.0),
+///       kFIRParameterCurrency : @"USD",  // e.g. $1.00 USD
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterPrice NS_SWIFT_NAME(AnalyticsParameterPrice) = @"price"; + +/// The ID of a product promotion (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterPromotionID : @"ABC123",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterPromotionID NS_SWIFT_NAME(AnalyticsParameterPromotionID) = + @"promotion_id"; + +/// The name of a product promotion (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterPromotionName : @"Summer Sale",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterPromotionName NS_SWIFT_NAME(AnalyticsParameterPromotionName) = + @"promotion_name"; + +/// Purchase quantity (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterQuantity : @(1),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterQuantity NS_SWIFT_NAME(AnalyticsParameterQuantity) = + @"quantity"; + +/// Score in game (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterScore : @(4200),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterScore NS_SWIFT_NAME(AnalyticsParameterScore) = @"score"; + +/// Current screen class, such as the class name of the UIViewController, logged with screen_view +/// event and added to every event (NSString).
+///     NSDictionary *params = @{
+///       kFIRParameterScreenClass : @"LoginViewController",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterScreenClass NS_SWIFT_NAME(AnalyticsParameterScreenClass) = + @"screen_class"; + +/// Current screen name, such as the name of the UIViewController, logged with screen_view event and +/// added to every event (NSString).
+///     NSDictionary *params = @{
+///       kFIRParameterScreenName : @"LoginView",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterScreenName NS_SWIFT_NAME(AnalyticsParameterScreenName) = + @"screen_name"; + +/// The search string/keywords used (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterSearchTerm : @"periodic table",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterSearchTerm NS_SWIFT_NAME(AnalyticsParameterSearchTerm) = + @"search_term"; + +/// Shipping cost associated with a transaction (double as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterShipping : @(5.99),
+///       kFIRParameterCurrency : @"USD",  // e.g. $5.99 USD
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterShipping NS_SWIFT_NAME(AnalyticsParameterShipping) = + @"shipping"; + +/// The shipping tier (e.g. Ground, Air, Next-day) selected for delivery of the purchased item +/// (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterShippingTier : @"Ground",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterShippingTier NS_SWIFT_NAME(AnalyticsParameterShippingTier) = + @"shipping_tier"; + +/// Sign up method (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterSignUpMethod : @"google",
+///       // ...
+///     };
+/// 
+/// +/// This constant has been deprecated. Use Method constant instead. +static NSString *const kFIRParameterSignUpMethod NS_SWIFT_NAME(AnalyticsParameterSignUpMethod) = + @"sign_up_method"; + +/// The origin of your traffic, such as an Ad network (for example, google) or partner (urban +/// airship). Identify the advertiser, site, publication, etc. that is sending traffic to your +/// property. Highly recommended (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterSource : @"InMobi",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterSource NS_SWIFT_NAME(AnalyticsParameterSource) = @"source"; + +/// Source Platform (NSString). Used to identify the platform responsible for directing traffic to a +/// given Analytics property (e.g., a buying platform where budgets, targeting criteria, etc. are +/// set, a platform for managing organic traffic data, etc.). +///
+///     NSDictionary *params = @{
+///       kFIRParameterSourcePlatform : @"sa360",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterSourcePlatform NS_SWIFT_NAME(AnalyticsParameterSourcePlatform) = + @"source_platform"; + +/// The departure date, check-in date or rental start date for the item. This should be in +/// YYYY-MM-DD format (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterStartDate : @"2015-09-14",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterStartDate NS_SWIFT_NAME(AnalyticsParameterStartDate) = + @"start_date"; + +/// The result of an operation. Specify 1 to indicate success and 0 to indicate failure (unsigned +/// integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterSuccess : @(1),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterSuccess NS_SWIFT_NAME(AnalyticsParameterSuccess) = @"success"; + +/// Tax cost associated with a transaction (double as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterTax : @(2.43),
+///       kFIRParameterCurrency : @"USD",  // e.g. $2.43 USD
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterTax NS_SWIFT_NAME(AnalyticsParameterTax) = @"tax"; + +/// If you're manually tagging keyword campaigns, you should use utm_term to specify the keyword +/// (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterTerm : @"game",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterTerm NS_SWIFT_NAME(AnalyticsParameterTerm) = @"term"; + +/// The unique identifier of a transaction (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterTransactionID : @"T12345",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterTransactionID NS_SWIFT_NAME(AnalyticsParameterTransactionID) = + @"transaction_id"; + +/// Travel class (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterTravelClass : @"business",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterTravelClass NS_SWIFT_NAME(AnalyticsParameterTravelClass) = + @"travel_class"; + +/// A context-specific numeric value which is accumulated automatically for each event type. This is +/// a general purpose parameter that is useful for accumulating a key metric that pertains to an +/// event. Examples include revenue, distance, time and points. Value should be specified as signed +/// 64-bit integer or double as NSNumber. Notes: Values for pre-defined currency-related events +/// (such as @c kFIREventAddToCart) should be supplied using double as NSNumber and must be +/// accompanied by a @c kFIRParameterCurrency parameter. The valid range of accumulated values is +/// [-9,223,372,036,854.77, 9,223,372,036,854.77]. Supplying a non-numeric value, omitting the +/// corresponding @c kFIRParameterCurrency parameter, or supplying an invalid +/// currency code for conversion events will cause that +/// conversion to be omitted from reporting. +///
+///     NSDictionary *params = @{
+///       kFIRParameterValue : @(3.99),
+///       kFIRParameterCurrency : @"USD",  // e.g. $3.99 USD
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterValue NS_SWIFT_NAME(AnalyticsParameterValue) = @"value"; + +/// Name of virtual currency type (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterVirtualCurrencyName : @"virtual_currency_name",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterVirtualCurrencyName + NS_SWIFT_NAME(AnalyticsParameterVirtualCurrencyName) = @"virtual_currency_name"; diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h new file mode 100644 index 0000000000..b3510fa93e --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h @@ -0,0 +1,29 @@ +/// @file FIRUserPropertyNames.h +/// +/// Predefined user property names. +/// +/// A UserProperty is an attribute that describes the app-user. By supplying UserProperties, you can +/// later analyze different behaviors of various segments of your userbase. You may supply up to 25 +/// unique UserProperties per app, and you can use the name and value of your choosing for each one. +/// UserProperty names can be up to 24 characters long, may only contain alphanumeric characters and +/// underscores ("_"), and must start with an alphabetic character. UserProperty values can be up to +/// 36 characters long. The "firebase_", "google_", and "ga_" prefixes are reserved and should not +/// be used. + +#import + +/// Indicates whether events logged by Google Analytics can be used to personalize ads for the user. +/// Set to "YES" to enable, or "NO" to disable. Default is enabled. See the +/// documentation for +/// more details and information about related settings. +/// +///
+///     [FIRAnalytics setUserPropertyString:@"NO"
+///                                 forName:kFIRUserPropertyAllowAdPersonalizationSignals];
+/// 
+static NSString *const kFIRUserPropertyAllowAdPersonalizationSignals + NS_SWIFT_NAME(AnalyticsUserPropertyAllowAdPersonalizationSignals) = @"allow_personalized_ads"; + +/// The method used to sign in. For example, "google", "facebook" or "twitter". +static NSString *const kFIRUserPropertySignUpMethod + NS_SWIFT_NAME(AnalyticsUserPropertySignUpMethod) = @"sign_up_method"; diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h new file mode 100644 index 0000000000..368f79c992 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h @@ -0,0 +1,6 @@ +#import "FIRAnalytics+AppDelegate.h" +#import "FIRAnalytics+Consent.h" +#import "FIRAnalytics.h" +#import "FIREventNames.h" +#import "FIRParameterNames.h" +#import "FIRUserPropertyNames.h" diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Info.plist b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Info.plist new file mode 100644 index 0000000000..efd0a1d201 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleExecutable + FirebaseAnalytics + CFBundleIdentifier + com.firebase.Firebase-FirebaseAnalytics + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + FirebaseAnalytics + CFBundlePackageType + FMWK + CFBundleVersion + 8.12.0 + DTSDKName + iphonesimulator11.2 + + diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Modules/module.modulemap b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Modules/module.modulemap new file mode 100644 index 0000000000..b4b1bb6bb5 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Modules/module.modulemap @@ -0,0 +1,12 @@ +framework module FirebaseAnalytics { +umbrella header "FirebaseAnalytics.h" +export * +module * { export * } + link framework "Foundation" + link framework "Security" + link framework "SystemConfiguration" + link framework "UIKit" + link "c++" + link "sqlite3" + link "z" +} diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/FirebaseAnalytics b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/FirebaseAnalytics new file mode 100644 index 0000000000..3b6dd96129 Binary files /dev/null and b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/FirebaseAnalytics differ diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h new file mode 100644 index 0000000000..d499af668b --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h @@ -0,0 +1,62 @@ +#import + +#import "FIRAnalytics.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + * Provides App Delegate handlers to be used in your App Delegate. + * + * To save time integrating Firebase Analytics in an application, Firebase Analytics does not + * require delegation implementation from the AppDelegate. Instead this is automatically done by + * Firebase Analytics. Should you choose instead to delegate manually, you can turn off the App + * Delegate Proxy by adding FirebaseAppDelegateProxyEnabled into your app's Info.plist and setting + * it to NO, and adding the methods in this category to corresponding delegation handlers. + * + * To handle Universal Links, you must return YES in + * [UIApplicationDelegate application:didFinishLaunchingWithOptions:]. + */ +@interface FIRAnalytics (AppDelegate) + +/** + * Handles events related to a URL session that are waiting to be processed. + * + * For optimal use of Firebase Analytics, call this method from the + * [UIApplicationDelegate application:handleEventsForBackgroundURLSession:completionHandler] + * method of the app delegate in your app. + * + * @param identifier The identifier of the URL session requiring attention. + * @param completionHandler The completion handler to call when you finish processing the events. + * Calling this completion handler lets the system know that your app's user interface is + * updated and a new snapshot can be taken. + */ ++ (void)handleEventsForBackgroundURLSession:(NSString *)identifier + completionHandler:(nullable void (^)(void))completionHandler; + +/** + * Handles the event when the app is launched by a URL. + * + * Call this method from [UIApplicationDelegate application:openURL:options:] (on iOS 9.0 and + * above), or [UIApplicationDelegate application:openURL:sourceApplication:annotation:] (on + * iOS 8.x and below) in your app. + * + * @param url The URL resource to open. This resource can be a network resource or a file. + */ ++ (void)handleOpenURL:(NSURL *)url; + +/** + * Handles the event when the app receives data associated with user activity that includes a + * Universal Link (on iOS 9.0 and above). + * + * Call this method from [UIApplication continueUserActivity:restorationHandler:] in your app + * delegate (on iOS 9.0 and above). + * + * @param userActivity The activity object containing the data associated with the task the user + * was performing. + */ ++ (void)handleUserActivity:(id)userActivity; + +@end + +NS_ASSUME_NONNULL_END + diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRAnalytics+Consent.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRAnalytics+Consent.h new file mode 100644 index 0000000000..686a386ec6 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRAnalytics+Consent.h @@ -0,0 +1,33 @@ +#import + +#import "FIRAnalytics.h" + +NS_ASSUME_NONNULL_BEGIN + +/// The type of consent to set. Supported consent types are `ConsentType.adStorage` and +/// `ConsentType.analyticsStorage`. Omitting a type retains its previous status. +typedef NSString *FIRConsentType NS_TYPED_ENUM NS_SWIFT_NAME(ConsentType); +extern FIRConsentType const FIRConsentTypeAdStorage; +extern FIRConsentType const FIRConsentTypeAnalyticsStorage; + +/// The status value of the consent type. Supported statuses are `ConsentStatus.granted` and +/// `ConsentStatus.denied`. +typedef NSString *FIRConsentStatus NS_TYPED_ENUM NS_SWIFT_NAME(ConsentStatus); +extern FIRConsentStatus const FIRConsentStatusDenied; +extern FIRConsentStatus const FIRConsentStatusGranted; + +/// Sets the applicable end user consent state. +@interface FIRAnalytics (Consent) + +/// Sets the applicable end user consent state (e.g. for device identifiers) for this app on this +/// device. Use the consent settings to specify individual consent type values. Settings are +/// persisted across app sessions. By default consent types are set to `ConsentStatus.granted`. +/// +/// @param consentSettings An NSDictionary of consent types. Supported consent type keys are +/// `ConsentType.adStorage` and `ConsentType.analyticsStorage`. Valid values are +/// `ConsentStatus.granted` and `ConsentStatus.denied`. ++ (void)setConsent:(NSDictionary *)consentSettings; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRAnalytics.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRAnalytics.h new file mode 100644 index 0000000000..b9de09407d --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRAnalytics.h @@ -0,0 +1,142 @@ +#import + +#import "FIREventNames.h" +#import "FIRParameterNames.h" +#import "FIRUserPropertyNames.h" + +NS_ASSUME_NONNULL_BEGIN + +/// The top level Firebase Analytics singleton that provides methods for logging events and setting +/// user properties. See the developer guides for general +/// information on using Firebase Analytics in your apps. +/// +/// @note The Analytics SDK uses SQLite to persist events and other app-specific data. Calling +/// certain thread-unsafe global SQLite methods like `sqlite3_shutdown()` can result in +/// unexpected crashes at runtime. +NS_SWIFT_NAME(Analytics) +@interface FIRAnalytics : NSObject + +/// Logs an app event. The event can have up to 25 parameters. Events with the same name must have +/// the same parameters. Up to 500 event names are supported. Using predefined events and/or +/// parameters is recommended for optimal reporting. +/// +/// The following event names are reserved and cannot be used: +///
    +///
  • ad_activeview
  • +///
  • ad_click
  • +///
  • ad_exposure
  • +///
  • ad_query
  • +///
  • ad_reward
  • +///
  • adunit_exposure
  • +///
  • app_background
  • +///
  • app_clear_data
  • +///
  • app_exception
  • +///
  • app_remove
  • +///
  • app_store_refund
  • +///
  • app_store_subscription_cancel
  • +///
  • app_store_subscription_convert
  • +///
  • app_store_subscription_renew
  • +///
  • app_update
  • +///
  • app_upgrade
  • +///
  • dynamic_link_app_open
  • +///
  • dynamic_link_app_update
  • +///
  • dynamic_link_first_open
  • +///
  • error
  • +///
  • firebase_campaign
  • +///
  • first_open
  • +///
  • first_visit
  • +///
  • in_app_purchase
  • +///
  • notification_dismiss
  • +///
  • notification_foreground
  • +///
  • notification_open
  • +///
  • notification_receive
  • +///
  • os_update
  • +///
  • session_start
  • +///
  • session_start_with_rollout
  • +///
  • user_engagement
  • +///
+/// +/// @param name The name of the event. Should contain 1 to 40 alphanumeric characters or +/// underscores. The name must start with an alphabetic character. Some event names are +/// reserved. See FIREventNames.h for the list of reserved event names. The "firebase_", +/// "google_", and "ga_" prefixes are reserved and should not be used. Note that event names are +/// case-sensitive and that logging two events whose names differ only in case will result in +/// two distinct events. To manually log screen view events, use the `screen_view` event name. +/// @param parameters The dictionary of event parameters. Passing nil indicates that the event has +/// no parameters. Parameter names can be up to 40 characters long and must start with an +/// alphabetic character and contain only alphanumeric characters and underscores. Only NSString +/// and NSNumber (signed 64-bit integer and 64-bit floating-point number) parameter types are +/// supported. NSString parameter values can be up to 100 characters long. The "firebase_", +/// "google_", and "ga_" prefixes are reserved and should not be used for parameter names. ++ (void)logEventWithName:(NSString *)name + parameters:(nullable NSDictionary *)parameters + NS_SWIFT_NAME(logEvent(_:parameters:)); + +/// Sets a user property to a given value. Up to 25 user property names are supported. Once set, +/// user property values persist throughout the app lifecycle and across sessions. +/// +/// The following user property names are reserved and cannot be used: +///
    +///
  • first_open_time
  • +///
  • last_deep_link_referrer
  • +///
  • user_id
  • +///
+/// +/// @param value The value of the user property. Values can be up to 36 characters long. Setting the +/// value to nil removes the user property. +/// @param name The name of the user property to set. Should contain 1 to 24 alphanumeric characters +/// or underscores and must start with an alphabetic character. The "firebase_", "google_", and +/// "ga_" prefixes are reserved and should not be used for user property names. ++ (void)setUserPropertyString:(nullable NSString *)value forName:(NSString *)name + NS_SWIFT_NAME(setUserProperty(_:forName:)); + +/// Sets the user ID property. This feature must be used in accordance with +/// Google's Privacy Policy +/// +/// @param userID The user ID to ascribe to the user of this app on this device, which must be +/// non-empty and no more than 256 characters long. Setting userID to nil removes the user ID. ++ (void)setUserID:(nullable NSString *)userID; + +/// Sets whether analytics collection is enabled for this app on this device. This setting is +/// persisted across app sessions. By default it is enabled. +/// +/// @param analyticsCollectionEnabled A flag that enables or disables Analytics collection. ++ (void)setAnalyticsCollectionEnabled:(BOOL)analyticsCollectionEnabled; + +/// Sets the interval of inactivity in seconds that terminates the current session. The default +/// value is 1800 seconds (30 minutes). +/// +/// @param sessionTimeoutInterval The custom time of inactivity in seconds before the current +/// session terminates. ++ (void)setSessionTimeoutInterval:(NSTimeInterval)sessionTimeoutInterval; + +/// Returns the unique ID for this instance of the application or nil if +/// `ConsentType.analyticsStorage` has been set to `ConsentStatus.denied`. +/// +/// @see `FIRAnalytics+Consent.h` ++ (nullable NSString *)appInstanceID; + +/// Clears all analytics data for this instance from the device and resets the app instance ID. +/// FIRAnalyticsConfiguration values will be reset to the default values. ++ (void)resetAnalyticsData; + +/// Adds parameters that will be set on every event logged from the SDK, including automatic ones. +/// The values passed in the parameters dictionary will be added to the dictionary of default event +/// parameters. These parameters persist across app runs. They are of lower precedence than event +/// parameters, so if an event parameter and a parameter set using this API have the same name, the +/// value of the event parameter will be used. The same limitations on event parameters apply to +/// default event parameters. +/// +/// @param parameters Parameters to be added to the dictionary of parameters added to every event. +/// They will be added to the dictionary of default event parameters, replacing any existing +/// parameter with the same name. Valid parameters are NSString and NSNumber (signed 64-bit +/// integer and 64-bit floating-point number). Setting a key's value to [NSNull null] will clear +/// that parameter. Passing in a nil dictionary will clear all parameters. ++ (void)setDefaultEventParameters:(nullable NSDictionary *)parameters; + +/// Unavailable. +- (instancetype)init NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIREventNames.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIREventNames.h new file mode 100644 index 0000000000..3f85456342 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIREventNames.h @@ -0,0 +1,499 @@ +/// @file FIREventNames.h +/// +/// Predefined event names. +/// +/// An Event is an important occurrence in your app that you want to measure. You can report up to +/// 500 different types of Events per app and you can associate up to 25 unique parameters with each +/// Event type. Some common events are suggested below, but you may also choose to specify custom +/// Event types that are associated with your specific app. Each event type is identified by a +/// unique name. Event names can be up to 40 characters long, may only contain alphanumeric +/// characters and underscores ("_"), and must start with an alphabetic character. The "firebase_", +/// "google_", and "ga_" prefixes are reserved and should not be used. + +#import + +/// Ad Impression event. This event signifies when a user sees an ad impression. Note: If you supply +/// the @c kFIRParameterValue parameter, you must also supply the @c kFIRParameterCurrency parameter +/// so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterAdPlatform (NSString) (optional)
  • +///
  • @c kFIRParameterAdFormat (NSString) (optional)
  • +///
  • @c kFIRParameterAdSource (NSString) (optional)
  • +///
  • @c kFIRParameterAdUnitName (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventAdImpression NS_SWIFT_NAME(AnalyticsEventAdImpression) = + @"ad_impression"; + +/// Add Payment Info event. This event signifies that a user has submitted their payment +/// information. Note: If you supply the @c kFIRParameterValue parameter, you must also supply the +/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterPaymentType (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventAddPaymentInfo NS_SWIFT_NAME(AnalyticsEventAddPaymentInfo) = + @"add_payment_info"; + +/// Add Shipping Info event. This event signifies that a user has submitted their shipping +/// information. Note: If you supply the @c kFIRParameterValue parameter, you must also supply the +/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterShippingTier (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventAddShippingInfo NS_SWIFT_NAME(AnalyticsEventAddShippingInfo) = + @"add_shipping_info"; + +/// E-Commerce Add To Cart event. This event signifies that an item(s) was added to a cart for +/// purchase. Add this event to a funnel with @c kFIREventPurchase to gauge the effectiveness of +/// your checkout process. Note: If you supply the @c kFIRParameterValue parameter, you must also +/// supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed +/// accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventAddToCart NS_SWIFT_NAME(AnalyticsEventAddToCart) = @"add_to_cart"; + +/// E-Commerce Add To Wishlist event. This event signifies that an item was added to a wishlist. Use +/// this event to identify popular gift items. Note: If you supply the @c kFIRParameterValue +/// parameter, you must also supply the @c kFIRParameterCurrency parameter so that revenue metrics +/// can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventAddToWishlist NS_SWIFT_NAME(AnalyticsEventAddToWishlist) = + @"add_to_wishlist"; + +/// App Open event. By logging this event when an App becomes active, developers can understand how +/// often users leave and return during the course of a Session. Although Sessions are automatically +/// reported, this event can provide further clarification around the continuous engagement of +/// app-users. +static NSString *const kFIREventAppOpen NS_SWIFT_NAME(AnalyticsEventAppOpen) = @"app_open"; + +/// E-Commerce Begin Checkout event. This event signifies that a user has begun the process of +/// checking out. Add this event to a funnel with your @c kFIREventPurchase event to gauge the +/// effectiveness of your checkout process. Note: If you supply the @c kFIRParameterValue parameter, +/// you must also supply the @c kFIRParameterCurrency parameter so that revenue metrics can be +/// computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventBeginCheckout NS_SWIFT_NAME(AnalyticsEventBeginCheckout) = + @"begin_checkout"; + +/// Campaign Detail event. Log this event to supply the referral details of a re-engagement +/// campaign. Note: you must supply at least one of the required parameters kFIRParameterSource, +/// kFIRParameterMedium or kFIRParameterCampaign. Params: +/// +///
    +///
  • @c kFIRParameterSource (NSString)
  • +///
  • @c kFIRParameterMedium (NSString)
  • +///
  • @c kFIRParameterCampaign (NSString)
  • +///
  • @c kFIRParameterTerm (NSString) (optional)
  • +///
  • @c kFIRParameterContent (NSString) (optional)
  • +///
  • @c kFIRParameterAdNetworkClickID (NSString) (optional)
  • +///
  • @c kFIRParameterCP1 (NSString) (optional)
  • +///
  • @c kFIRParameterCampaignID (NSString) (optional)
  • +///
  • @c kFIRParameterCreativeFormat (NSString) (optional)
  • +///
  • @c kFIRParameterMarketingTactic (NSString) (optional)
  • +///
  • @c kFIRParameterSourcePlatform (NSString) (optional)
  • +///
+static NSString *const kFIREventCampaignDetails NS_SWIFT_NAME(AnalyticsEventCampaignDetails) = + @"campaign_details"; + +/// Checkout progress. Params: +/// +///
    +///
  • @c kFIRParameterCheckoutStep (unsigned 64-bit integer as NSNumber)
  • +///
  • @c kFIRParameterCheckoutOption (NSString) (optional)
  • +///
+/// This constant has been deprecated. +static NSString *const kFIREventCheckoutProgress NS_SWIFT_NAME(AnalyticsEventCheckoutProgress) = + @"checkout_progress"; + +/// Earn Virtual Currency event. This event tracks the awarding of virtual currency in your app. Log +/// this along with @c kFIREventSpendVirtualCurrency to better understand your virtual economy. +/// Params: +/// +///
    +///
  • @c kFIRParameterVirtualCurrencyName (NSString)
  • +///
  • @c kFIRParameterValue (signed 64-bit integer or double as NSNumber)
  • +///
+static NSString *const kFIREventEarnVirtualCurrency + NS_SWIFT_NAME(AnalyticsEventEarnVirtualCurrency) = @"earn_virtual_currency"; + +/// E-Commerce Purchase event. This event signifies that an item was purchased by a user. Note: +/// This is different from the in-app purchase event, which is reported automatically for App +/// Store-based apps. Note: If you supply the @c kFIRParameterValue parameter, you must also +/// supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed +/// accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTransactionID (NSString) (optional)
  • +///
  • @c kFIRParameterTax (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterShipping (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterLocation (NSString) (optional)
  • +///
  • @c kFIRParameterStartDate (NSString) (optional)
  • +///
  • @c kFIRParameterEndDate (NSString) (optional)
  • +///
  • @c kFIRParameterNumberOfNights (signed 64-bit integer as NSNumber) (optional) for +/// hotel bookings
  • +///
  • @c kFIRParameterNumberOfRooms (signed 64-bit integer as NSNumber) (optional) for +/// hotel bookings
  • +///
  • @c kFIRParameterNumberOfPassengers (signed 64-bit integer as NSNumber) (optional) +/// for travel bookings
  • +///
  • @c kFIRParameterOrigin (NSString) (optional)
  • +///
  • @c kFIRParameterDestination (NSString) (optional)
  • +///
  • @c kFIRParameterTravelClass (NSString) (optional) for travel bookings
  • +///
+/// This constant has been deprecated. Use @c kFIREventPurchase constant instead. +static NSString *const kFIREventEcommercePurchase NS_SWIFT_NAME(AnalyticsEventEcommercePurchase) = + @"ecommerce_purchase"; + +/// Generate Lead event. Log this event when a lead has been generated in the app to understand the +/// efficacy of your install and re-engagement campaigns. Note: If you supply the +/// @c kFIRParameterValue parameter, you must also supply the @c kFIRParameterCurrency +/// parameter so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventGenerateLead NS_SWIFT_NAME(AnalyticsEventGenerateLead) = + @"generate_lead"; + +/// Join Group event. Log this event when a user joins a group such as a guild, team or family. Use +/// this event to analyze how popular certain groups or social features are in your app. Params: +/// +///
    +///
  • @c kFIRParameterGroupID (NSString)
  • +///
+static NSString *const kFIREventJoinGroup NS_SWIFT_NAME(AnalyticsEventJoinGroup) = @"join_group"; + +/// Level End event. Log this event when the user finishes a level. Params: +/// +///
    +///
  • @c kFIRParameterLevelName (NSString)
  • +///
  • @c kFIRParameterSuccess (NSString)
  • +///
+static NSString *const kFIREventLevelEnd NS_SWIFT_NAME(AnalyticsEventLevelEnd) = @"level_end"; + +/// Level Start event. Log this event when the user starts a new level. Params: +/// +///
    +///
  • @c kFIRParameterLevelName (NSString)
  • +///
+static NSString *const kFIREventLevelStart NS_SWIFT_NAME(AnalyticsEventLevelStart) = @"level_start"; + +/// Level Up event. This event signifies that a player has leveled up in your gaming app. It can +/// help you gauge the level distribution of your userbase and help you identify certain levels that +/// are difficult to pass. Params: +/// +///
    +///
  • @c kFIRParameterLevel (signed 64-bit integer as NSNumber)
  • +///
  • @c kFIRParameterCharacter (NSString) (optional)
  • +///
+static NSString *const kFIREventLevelUp NS_SWIFT_NAME(AnalyticsEventLevelUp) = @"level_up"; + +/// Login event. Apps with a login feature can report this event to signify that a user has logged +/// in. +static NSString *const kFIREventLogin NS_SWIFT_NAME(AnalyticsEventLogin) = @"login"; + +/// Post Score event. Log this event when the user posts a score in your gaming app. This event can +/// help you understand how users are actually performing in your game and it can help you correlate +/// high scores with certain audiences or behaviors. Params: +/// +///
    +///
  • @c kFIRParameterScore (signed 64-bit integer as NSNumber)
  • +///
  • @c kFIRParameterLevel (signed 64-bit integer as NSNumber) (optional)
  • +///
  • @c kFIRParameterCharacter (NSString) (optional)
  • +///
+static NSString *const kFIREventPostScore NS_SWIFT_NAME(AnalyticsEventPostScore) = @"post_score"; + +/// Present Offer event. This event signifies that the app has presented a purchase offer to a user. +/// Add this event to a funnel with the kFIREventAddToCart and kFIREventEcommercePurchase to gauge +/// your conversion process. Note: If you supply the @c kFIRParameterValue parameter, you must +/// also supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed +/// accurately. Params: +/// +///
    +///
  • @c kFIRParameterQuantity (signed 64-bit integer as NSNumber)
  • +///
  • @c kFIRParameterItemID (NSString)
  • +///
  • @c kFIRParameterItemName (NSString)
  • +///
  • @c kFIRParameterItemCategory (NSString)
  • +///
  • @c kFIRParameterItemLocationID (NSString) (optional)
  • +///
  • @c kFIRParameterPrice (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+/// This constant has been deprecated. Use @c kFIREventViewPromotion constant instead. +static NSString *const kFIREventPresentOffer NS_SWIFT_NAME(AnalyticsEventPresentOffer) = + @"present_offer"; + +/// E-Commerce Purchase event. This event signifies that an item(s) was purchased by a user. Note: +/// This is different from the in-app purchase event, which is reported automatically for App +/// Store-based apps. Note: If you supply the @c kFIRParameterValue parameter, you must also supply +/// the @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. +/// Params: +/// +///
    +///
  • @c kFIRParameterAffiliation (NSString) (optional)
  • +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterShipping (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTax (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTransactionID (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventPurchase NS_SWIFT_NAME(AnalyticsEventPurchase) = @"purchase"; + +/// E-Commerce Purchase Refund event. This event signifies that an item purchase was refunded. +/// Note: If you supply the @c kFIRParameterValue parameter, you must also supply the +/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. +/// Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTransactionID (NSString) (optional)
  • +///
+/// This constant has been deprecated. Use @c kFIREventRefund constant instead. +static NSString *const kFIREventPurchaseRefund NS_SWIFT_NAME(AnalyticsEventPurchaseRefund) = + @"purchase_refund"; + +/// E-Commerce Refund event. This event signifies that a refund was issued. Note: If you supply the +/// @c kFIRParameterValue parameter, you must also supply the @c kFIRParameterCurrency parameter so +/// that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterAffiliation (NSString) (optional)
  • +///
  • @c kFIRParameterCoupon (NSString) (optional)
  • +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterShipping (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTax (double as NSNumber) (optional)
  • +///
  • @c kFIRParameterTransactionID (NSString) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventRefund NS_SWIFT_NAME(AnalyticsEventRefund) = @"refund"; + +/// E-Commerce Remove from Cart event. This event signifies that an item(s) was removed from a cart. +/// Note: If you supply the @c kFIRParameterValue parameter, you must also supply the @c +/// kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventRemoveFromCart NS_SWIFT_NAME(AnalyticsEventRemoveFromCart) = + @"remove_from_cart"; + +/// Screen View event. This event signifies a screen view. Use this when a screen transition occurs. +/// This event can be logged irrespective of whether automatic screen tracking is enabled. Params: +/// +///
    +///
  • @c kFIRParameterScreenClass (NSString) (optional)
  • +///
  • @c kFIRParameterScreenName (NSString) (optional)
  • +///
+static NSString *const kFIREventScreenView NS_SWIFT_NAME(AnalyticsEventScreenView) = @"screen_view"; + +/// Search event. Apps that support search features can use this event to contextualize search +/// operations by supplying the appropriate, corresponding parameters. This event can help you +/// identify the most popular content in your app. Params: +/// +///
    +///
  • @c kFIRParameterSearchTerm (NSString)
  • +///
  • @c kFIRParameterStartDate (NSString) (optional)
  • +///
  • @c kFIRParameterEndDate (NSString) (optional)
  • +///
  • @c kFIRParameterNumberOfNights (signed 64-bit integer as NSNumber) (optional) for +/// hotel bookings
  • +///
  • @c kFIRParameterNumberOfRooms (signed 64-bit integer as NSNumber) (optional) for +/// hotel bookings
  • +///
  • @c kFIRParameterNumberOfPassengers (signed 64-bit integer as NSNumber) (optional) +/// for travel bookings
  • +///
  • @c kFIRParameterOrigin (NSString) (optional)
  • +///
  • @c kFIRParameterDestination (NSString) (optional)
  • +///
  • @c kFIRParameterTravelClass (NSString) (optional) for travel bookings
  • +///
+static NSString *const kFIREventSearch NS_SWIFT_NAME(AnalyticsEventSearch) = @"search"; + +/// Select Content event. This general purpose event signifies that a user has selected some content +/// of a certain type in an app. The content can be any object in your app. This event can help you +/// identify popular content and categories of content in your app. Params: +/// +///
    +///
  • @c kFIRParameterContentType (NSString)
  • +///
  • @c kFIRParameterItemID (NSString)
  • +///
+static NSString *const kFIREventSelectContent NS_SWIFT_NAME(AnalyticsEventSelectContent) = + @"select_content"; + +/// Select Item event. This event signifies that an item was selected by a user from a list. Use the +/// appropriate parameters to contextualize the event. Use this event to discover the most popular +/// items selected. Params: +/// +///
    +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterItemListID (NSString) (optional)
  • +///
  • @c kFIRParameterItemListName (NSString) (optional)
  • +///
+static NSString *const kFIREventSelectItem NS_SWIFT_NAME(AnalyticsEventSelectItem) = @"select_item"; + +/// Select promotion event. This event signifies that a user has selected a promotion offer. Use the +/// appropriate parameters to contextualize the event, such as the item(s) for which the promotion +/// applies. Params: +/// +///
    +///
  • @c kFIRParameterCreativeName (NSString) (optional)
  • +///
  • @c kFIRParameterCreativeSlot (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterLocationID (NSString) (optional)
  • +///
  • @c kFIRParameterPromotionID (NSString) (optional)
  • +///
  • @c kFIRParameterPromotionName (NSString) (optional)
  • +///
+static NSString *const kFIREventSelectPromotion NS_SWIFT_NAME(AnalyticsEventSelectPromotion) = + @"select_promotion"; + +/// Set checkout option. Params: +/// +///
    +///
  • @c kFIRParameterCheckoutStep (unsigned 64-bit integer as NSNumber)
  • +///
  • @c kFIRParameterCheckoutOption (NSString)
  • +///
+/// This constant has been deprecated. +static NSString *const kFIREventSetCheckoutOption NS_SWIFT_NAME(AnalyticsEventSetCheckoutOption) = + @"set_checkout_option"; + +/// Share event. Apps with social features can log the Share event to identify the most viral +/// content. Params: +/// +///
    +///
  • @c kFIRParameterContentType (NSString)
  • +///
  • @c kFIRParameterItemID (NSString)
  • +///
+static NSString *const kFIREventShare NS_SWIFT_NAME(AnalyticsEventShare) = @"share"; + +/// Sign Up event. This event indicates that a user has signed up for an account in your app. The +/// parameter signifies the method by which the user signed up. Use this event to understand the +/// different behaviors between logged in and logged out users. Params: +/// +///
    +///
  • @c kFIRParameterSignUpMethod (NSString)
  • +///
+static NSString *const kFIREventSignUp NS_SWIFT_NAME(AnalyticsEventSignUp) = @"sign_up"; + +/// Spend Virtual Currency event. This event tracks the sale of virtual goods in your app and can +/// help you identify which virtual goods are the most popular objects of purchase. Params: +/// +///
    +///
  • @c kFIRParameterItemName (NSString)
  • +///
  • @c kFIRParameterVirtualCurrencyName (NSString)
  • +///
  • @c kFIRParameterValue (signed 64-bit integer or double as NSNumber)
  • +///
+static NSString *const kFIREventSpendVirtualCurrency + NS_SWIFT_NAME(AnalyticsEventSpendVirtualCurrency) = @"spend_virtual_currency"; + +/// Tutorial Begin event. This event signifies the start of the on-boarding process in your app. Use +/// this in a funnel with kFIREventTutorialComplete to understand how many users complete this +/// process and move on to the full app experience. +static NSString *const kFIREventTutorialBegin NS_SWIFT_NAME(AnalyticsEventTutorialBegin) = + @"tutorial_begin"; + +/// Tutorial End event. Use this event to signify the user's completion of your app's on-boarding +/// process. Add this to a funnel with kFIREventTutorialBegin to gauge the completion rate of your +/// on-boarding process. +static NSString *const kFIREventTutorialComplete NS_SWIFT_NAME(AnalyticsEventTutorialComplete) = + @"tutorial_complete"; + +/// Unlock Achievement event. Log this event when the user has unlocked an achievement in your +/// game. Since achievements generally represent the breadth of a gaming experience, this event can +/// help you understand how many users are experiencing all that your game has to offer. Params: +/// +///
    +///
  • @c kFIRParameterAchievementID (NSString)
  • +///
+static NSString *const kFIREventUnlockAchievement NS_SWIFT_NAME(AnalyticsEventUnlockAchievement) = + @"unlock_achievement"; + +/// E-commerce View Cart event. This event signifies that a user has viewed their cart. Use this to +/// analyze your purchase funnel. Note: If you supply the @c kFIRParameterValue parameter, you must +/// also supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed +/// accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventViewCart NS_SWIFT_NAME(AnalyticsEventViewCart) = @"view_cart"; + +/// View Item event. This event signifies that a user has viewed an item. Use the appropriate +/// parameters to contextualize the event. Use this event to discover the most popular items viewed +/// in your app. Note: If you supply the @c kFIRParameterValue parameter, you must also supply the +/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. Params: +/// +///
    +///
  • @c kFIRParameterCurrency (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • +///
+static NSString *const kFIREventViewItem NS_SWIFT_NAME(AnalyticsEventViewItem) = @"view_item"; + +/// View Item List event. Log this event when a user sees a list of items or offerings. Params: +/// +///
    +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterItemListID (NSString) (optional)
  • +///
  • @c kFIRParameterItemListName (NSString) (optional)
  • +///
+static NSString *const kFIREventViewItemList NS_SWIFT_NAME(AnalyticsEventViewItemList) = + @"view_item_list"; + +/// View Promotion event. This event signifies that a promotion was shown to a user. Add this event +/// to a funnel with the @c kFIREventAddToCart and @c kFIREventPurchase to gauge your conversion +/// process. Params: +/// +///
    +///
  • @c kFIRParameterCreativeName (NSString) (optional)
  • +///
  • @c kFIRParameterCreativeSlot (NSString) (optional)
  • +///
  • @c kFIRParameterItems (NSArray) (optional)
  • +///
  • @c kFIRParameterLocationID (NSString) (optional)
  • +///
  • @c kFIRParameterPromotionID (NSString) (optional)
  • +///
  • @c kFIRParameterPromotionName (NSString) (optional)
  • +///
+static NSString *const kFIREventViewPromotion NS_SWIFT_NAME(AnalyticsEventViewPromotion) = + @"view_promotion"; + +/// View Search Results event. Log this event when the user has been presented with the results of a +/// search. Params: +/// +///
    +///
  • @c kFIRParameterSearchTerm (NSString)
  • +///
+static NSString *const kFIREventViewSearchResults NS_SWIFT_NAME(AnalyticsEventViewSearchResults) = + @"view_search_results"; diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRParameterNames.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRParameterNames.h new file mode 100644 index 0000000000..fe3a6c47b4 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRParameterNames.h @@ -0,0 +1,776 @@ +/// @file FIRParameterNames.h +/// +/// Predefined event parameter names. +/// +/// Params supply information that contextualize Events. You can associate up to 25 unique Params +/// with each Event type. Some Params are suggested below for certain common Events, but you are +/// not limited to these. You may supply extra Params for suggested Events or custom Params for +/// Custom events. Param names can be up to 40 characters long, may only contain alphanumeric +/// characters and underscores ("_"), and must start with an alphabetic character. Param values can +/// be up to 100 characters long. The "firebase_", "google_", and "ga_" prefixes are reserved and +/// should not be used. + +#import + +/// Game achievement ID (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterAchievementID : @"10_matches_won",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAchievementID NS_SWIFT_NAME(AnalyticsParameterAchievementID) = + @"achievement_id"; + +/// The ad format (e.g. Banner, Interstitial, Rewarded, Native, Rewarded Interstitial, Instream). +/// (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterAdFormat : @"Banner",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAdFormat NS_SWIFT_NAME(AnalyticsParameterAdFormat) = + @"ad_format"; + +/// Ad Network Click ID (NSString). Used for network-specific click IDs which vary in format. +///
+///     NSDictionary *params = @{
+///       kFIRParameterAdNetworkClickID : @"1234567",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAdNetworkClickID + NS_SWIFT_NAME(AnalyticsParameterAdNetworkClickID) = @"aclid"; + +/// The ad platform (e.g. MoPub, IronSource) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterAdPlatform : @"MoPub",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAdPlatform NS_SWIFT_NAME(AnalyticsParameterAdPlatform) = + @"ad_platform"; + +/// The ad source (e.g. AdColony) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterAdSource : @"AdColony",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAdSource NS_SWIFT_NAME(AnalyticsParameterAdSource) = + @"ad_source"; + +/// The ad unit name (e.g. Banner_03) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterAdUnitName : @"Banner_03",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAdUnitName NS_SWIFT_NAME(AnalyticsParameterAdUnitName) = + @"ad_unit_name"; + +/// A product affiliation to designate a supplying company or brick and mortar store location +/// (NSString).
+///     NSDictionary *params = @{
+///       kFIRParameterAffiliation : @"Google Store",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterAffiliation NS_SWIFT_NAME(AnalyticsParameterAffiliation) = + @"affiliation"; + +/// Campaign custom parameter (NSString). Used as a method of capturing custom data in a campaign. +/// Use varies by network. +///
+///     NSDictionary *params = @{
+///       kFIRParameterCP1 : @"custom_data",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCP1 NS_SWIFT_NAME(AnalyticsParameterCP1) = @"cp1"; + +/// The individual campaign name, slogan, promo code, etc. Some networks have pre-defined macro to +/// capture campaign information, otherwise can be populated by developer. Highly Recommended +/// (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCampaign : @"winter_promotion",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCampaign NS_SWIFT_NAME(AnalyticsParameterCampaign) = + @"campaign"; + +/// Campaign ID (NSString). Used for keyword analysis to identify a specific product promotion or +/// strategic campaign. This is a required key for GA4 data import. +///
+///     NSDictionary *params = @{
+///       kFIRParameterCampaignID : @"7877652710",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCampaignID NS_SWIFT_NAME(AnalyticsParameterCampaignID) = + @"campaign_id"; + +/// Character used in game (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCharacter : @"beat_boss",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCharacter NS_SWIFT_NAME(AnalyticsParameterCharacter) = + @"character"; + +/// Some option on a step in an ecommerce flow (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCheckoutOption : @"Visa",
+///       // ...
+///     };
+/// 
+/// This constant has been deprecated. +static NSString *const kFIRParameterCheckoutOption + NS_SWIFT_NAME(AnalyticsParameterCheckoutOption) = @"checkout_option"; + +/// The checkout step (1..N) (unsigned 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCheckoutStep : @"1",
+///       // ...
+///     };
+/// 
+/// This constant has been deprecated. +static NSString *const kFIRParameterCheckoutStep NS_SWIFT_NAME(AnalyticsParameterCheckoutStep) = + @"checkout_step"; + +/// Campaign content (NSString). +static NSString *const kFIRParameterContent NS_SWIFT_NAME(AnalyticsParameterContent) = @"content"; + +/// Type of content selected (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterContentType : @"news article",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterContentType NS_SWIFT_NAME(AnalyticsParameterContentType) = + @"content_type"; + +/// Coupon code used for a purchase (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCoupon : @"SUMMER_FUN",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCoupon NS_SWIFT_NAME(AnalyticsParameterCoupon) = @"coupon"; + +/// Creative Format (NSString). Used to identify the high-level classification of the type of ad +/// served by a specific campaign. +///
+///     NSDictionary *params = @{
+///       kFIRParameterCreativeFormat : @"display",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCreativeFormat NS_SWIFT_NAME(AnalyticsParameterCreativeFormat) = + @"creative_format"; + +/// The name of a creative used in a promotional spot (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCreativeName : @"Summer Sale",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCreativeName NS_SWIFT_NAME(AnalyticsParameterCreativeName) = + @"creative_name"; + +/// The name of a creative slot (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCreativeSlot : @"summer_banner2",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCreativeSlot NS_SWIFT_NAME(AnalyticsParameterCreativeSlot) = + @"creative_slot"; + +/// Currency of the purchase or items associated with the event, in 3-letter +/// ISO_4217 format (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterCurrency : @"USD",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterCurrency NS_SWIFT_NAME(AnalyticsParameterCurrency) = + @"currency"; + +/// Flight or Travel destination (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterDestination : @"Mountain View, CA",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterDestination NS_SWIFT_NAME(AnalyticsParameterDestination) = + @"destination"; + +/// Monetary value of discount associated with a purchase (double as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterDiscount : @(2.0),
+///       kFIRParameterCurrency : @"USD",  // e.g. $2.00 USD
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterDiscount NS_SWIFT_NAME(AnalyticsParameterDiscount) = + @"discount"; + +/// The arrival date, check-out date or rental end date for the item. This should be in +/// YYYY-MM-DD format (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterEndDate : @"2015-09-14",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterEndDate NS_SWIFT_NAME(AnalyticsParameterEndDate) = @"end_date"; + +/// Indicates that the associated event should either extend the current session +/// or start a new session if no session was active when the event was logged. +/// Specify YES to extend the current session or to start a new session; any +/// other value will not extend or start a session. +///
+///     NSDictionary *params = @{
+///       kFIRParameterExtendSession : @YES,
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterExtendSession NS_SWIFT_NAME(AnalyticsParameterExtendSession) = + @"extend_session"; + +/// Flight number for travel events (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterFlightNumber : @"ZZ800",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterFlightNumber NS_SWIFT_NAME(AnalyticsParameterFlightNumber) = + @"flight_number"; + +/// Group/clan/guild ID (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterGroupID : @"g1",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterGroupID NS_SWIFT_NAME(AnalyticsParameterGroupID) = @"group_id"; + +/// The index of the item in a list (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterIndex : @(5),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterIndex NS_SWIFT_NAME(AnalyticsParameterIndex) = @"index"; + +/// Item brand (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemBrand : @"Google",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemBrand NS_SWIFT_NAME(AnalyticsParameterItemBrand) = + @"item_brand"; + +/// Item category (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemCategory : @"pants",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemCategory NS_SWIFT_NAME(AnalyticsParameterItemCategory) = + @"item_category"; + +/// Item Category (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemCategory2 : @"pants",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemCategory2 NS_SWIFT_NAME(AnalyticsParameterItemCategory2) = + @"item_category2"; + +/// Item Category (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemCategory3 : @"pants",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemCategory3 NS_SWIFT_NAME(AnalyticsParameterItemCategory3) = + @"item_category3"; + +/// Item Category (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemCategory4 : @"pants",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemCategory4 NS_SWIFT_NAME(AnalyticsParameterItemCategory4) = + @"item_category4"; + +/// Item Category (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemCategory5 : @"pants",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemCategory5 NS_SWIFT_NAME(AnalyticsParameterItemCategory5) = + @"item_category5"; + +/// Item ID (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemID : @"SKU_12345",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemID NS_SWIFT_NAME(AnalyticsParameterItemID) = @"item_id"; + +/// The list in which the item was presented to the user (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemList : @"Search Results",
+///       // ...
+///     };
+/// 
+/// This constant has been deprecated. Use @c kFIRParameterItemListName constant instead. +static NSString *const kFIRParameterItemList NS_SWIFT_NAME(AnalyticsParameterItemList) = + @"item_list"; + +/// The ID of the list in which the item was presented to the user (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemListID : @"ABC123",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemListID NS_SWIFT_NAME(AnalyticsParameterItemListID) = + @"item_list_id"; + +/// The name of the list in which the item was presented to the user (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemListName : @"Related products",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemListName NS_SWIFT_NAME(AnalyticsParameterItemListName) = + @"item_list_name"; + +/// The Google Place ID (NSString) that +/// corresponds to the associated item. Alternatively, you can supply your own custom Location ID. +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemLocationID : @"ChIJiyj437sx3YAR9kUWC8QkLzQ",
+///       // ...
+///     };
+/// 
+/// This constant has been deprecated. Use @c kFIRParameterLocationID constant instead. +static NSString *const kFIRParameterItemLocationID + NS_SWIFT_NAME(AnalyticsParameterItemLocationID) = @"item_location_id"; + +/// Item Name (context-specific) (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemName : @"jeggings",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemName NS_SWIFT_NAME(AnalyticsParameterItemName) = + @"item_name"; + +/// Item variant (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItemVariant : @"Black",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterItemVariant NS_SWIFT_NAME(AnalyticsParameterItemVariant) = + @"item_variant"; + +/// The list of items involved in the transaction. (NSArray). +///
+///     NSDictionary *params = @{
+///       kFIRParameterItems : @[
+///         @{kFIRParameterItemName : @"jeggings", kFIRParameterItemCategory : @"pants"},
+///         @{kFIRParameterItemName : @"boots", kFIRParameterItemCategory : @"shoes"},
+///       ],
+///     };
+/// 
+static NSString *const kFIRParameterItems NS_SWIFT_NAME(AnalyticsParameterItems) = @"items"; + +/// Level in game (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterLevel : @(42),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterLevel NS_SWIFT_NAME(AnalyticsParameterLevel) = @"level"; + +/// The name of a level in a game (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterLevelName : @"room_1",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterLevelName NS_SWIFT_NAME(AnalyticsParameterLevelName) = + @"level_name"; + +/// Location (NSString). The Google Place ID +/// that corresponds to the associated event. Alternatively, you can supply your own custom +/// Location ID. +///
+///     NSDictionary *params = @{
+///       kFIRParameterLocation : @"ChIJiyj437sx3YAR9kUWC8QkLzQ",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterLocation NS_SWIFT_NAME(AnalyticsParameterLocation) = + @"location"; + +/// The location associated with the event. Preferred to be the Google +/// Place ID that corresponds to the +/// associated item but could be overridden to a custom location ID string.(NSString).
+///     NSDictionary *params = @{
+///       kFIRParameterLocationID : @"ChIJiyj437sx3YAR9kUWC8QkLzQ",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterLocationID NS_SWIFT_NAME(AnalyticsParameterLocationID) = + @"location_id"; + +/// Marketing Tactic (NSString). Used to identify the targeting criteria applied to a specific +/// campaign. +///
+///     NSDictionary *params = @{
+///       kFIRParameterMarketingTactic : @"Remarketing",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterMarketingTactic + NS_SWIFT_NAME(AnalyticsParameterMarketingTactic) = @"marketing_tactic"; + +/// The advertising or marketing medium, for example: cpc, banner, email, push. Highly recommended +/// (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterMedium : @"email",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterMedium NS_SWIFT_NAME(AnalyticsParameterMedium) = @"medium"; + +/// A particular approach used in an operation; for example, "facebook" or "email" in the context +/// of a sign_up or login event. (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterMethod : @"google",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterMethod NS_SWIFT_NAME(AnalyticsParameterMethod) = @"method"; + +/// Number of nights staying at hotel (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterNumberOfNights : @(3),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterNumberOfNights + NS_SWIFT_NAME(AnalyticsParameterNumberOfNights) = @"number_of_nights"; + +/// Number of passengers traveling (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterNumberOfPassengers : @(11),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterNumberOfPassengers + NS_SWIFT_NAME(AnalyticsParameterNumberOfPassengers) = @"number_of_passengers"; + +/// Number of rooms for travel events (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterNumberOfRooms : @(2),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterNumberOfRooms NS_SWIFT_NAME(AnalyticsParameterNumberOfRooms) = + @"number_of_rooms"; + +/// Flight or Travel origin (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterOrigin : @"Mountain View, CA",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterOrigin NS_SWIFT_NAME(AnalyticsParameterOrigin) = @"origin"; + +/// The chosen method of payment (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterPaymentType : @"Visa",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterPaymentType NS_SWIFT_NAME(AnalyticsParameterPaymentType) = + @"payment_type"; + +/// Purchase price (double as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterPrice : @(1.0),
+///       kFIRParameterCurrency : @"USD",  // e.g. $1.00 USD
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterPrice NS_SWIFT_NAME(AnalyticsParameterPrice) = @"price"; + +/// The ID of a product promotion (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterPromotionID : @"ABC123",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterPromotionID NS_SWIFT_NAME(AnalyticsParameterPromotionID) = + @"promotion_id"; + +/// The name of a product promotion (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterPromotionName : @"Summer Sale",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterPromotionName NS_SWIFT_NAME(AnalyticsParameterPromotionName) = + @"promotion_name"; + +/// Purchase quantity (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterQuantity : @(1),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterQuantity NS_SWIFT_NAME(AnalyticsParameterQuantity) = + @"quantity"; + +/// Score in game (signed 64-bit integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterScore : @(4200),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterScore NS_SWIFT_NAME(AnalyticsParameterScore) = @"score"; + +/// Current screen class, such as the class name of the UIViewController, logged with screen_view +/// event and added to every event (NSString).
+///     NSDictionary *params = @{
+///       kFIRParameterScreenClass : @"LoginViewController",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterScreenClass NS_SWIFT_NAME(AnalyticsParameterScreenClass) = + @"screen_class"; + +/// Current screen name, such as the name of the UIViewController, logged with screen_view event and +/// added to every event (NSString).
+///     NSDictionary *params = @{
+///       kFIRParameterScreenName : @"LoginView",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterScreenName NS_SWIFT_NAME(AnalyticsParameterScreenName) = + @"screen_name"; + +/// The search string/keywords used (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterSearchTerm : @"periodic table",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterSearchTerm NS_SWIFT_NAME(AnalyticsParameterSearchTerm) = + @"search_term"; + +/// Shipping cost associated with a transaction (double as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterShipping : @(5.99),
+///       kFIRParameterCurrency : @"USD",  // e.g. $5.99 USD
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterShipping NS_SWIFT_NAME(AnalyticsParameterShipping) = + @"shipping"; + +/// The shipping tier (e.g. Ground, Air, Next-day) selected for delivery of the purchased item +/// (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterShippingTier : @"Ground",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterShippingTier NS_SWIFT_NAME(AnalyticsParameterShippingTier) = + @"shipping_tier"; + +/// Sign up method (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterSignUpMethod : @"google",
+///       // ...
+///     };
+/// 
+/// +/// This constant has been deprecated. Use Method constant instead. +static NSString *const kFIRParameterSignUpMethod NS_SWIFT_NAME(AnalyticsParameterSignUpMethod) = + @"sign_up_method"; + +/// The origin of your traffic, such as an Ad network (for example, google) or partner (urban +/// airship). Identify the advertiser, site, publication, etc. that is sending traffic to your +/// property. Highly recommended (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterSource : @"InMobi",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterSource NS_SWIFT_NAME(AnalyticsParameterSource) = @"source"; + +/// Source Platform (NSString). Used to identify the platform responsible for directing traffic to a +/// given Analytics property (e.g., a buying platform where budgets, targeting criteria, etc. are +/// set, a platform for managing organic traffic data, etc.). +///
+///     NSDictionary *params = @{
+///       kFIRParameterSourcePlatform : @"sa360",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterSourcePlatform NS_SWIFT_NAME(AnalyticsParameterSourcePlatform) = + @"source_platform"; + +/// The departure date, check-in date or rental start date for the item. This should be in +/// YYYY-MM-DD format (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterStartDate : @"2015-09-14",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterStartDate NS_SWIFT_NAME(AnalyticsParameterStartDate) = + @"start_date"; + +/// The result of an operation. Specify 1 to indicate success and 0 to indicate failure (unsigned +/// integer as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterSuccess : @(1),
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterSuccess NS_SWIFT_NAME(AnalyticsParameterSuccess) = @"success"; + +/// Tax cost associated with a transaction (double as NSNumber). +///
+///     NSDictionary *params = @{
+///       kFIRParameterTax : @(2.43),
+///       kFIRParameterCurrency : @"USD",  // e.g. $2.43 USD
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterTax NS_SWIFT_NAME(AnalyticsParameterTax) = @"tax"; + +/// If you're manually tagging keyword campaigns, you should use utm_term to specify the keyword +/// (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterTerm : @"game",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterTerm NS_SWIFT_NAME(AnalyticsParameterTerm) = @"term"; + +/// The unique identifier of a transaction (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterTransactionID : @"T12345",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterTransactionID NS_SWIFT_NAME(AnalyticsParameterTransactionID) = + @"transaction_id"; + +/// Travel class (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterTravelClass : @"business",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterTravelClass NS_SWIFT_NAME(AnalyticsParameterTravelClass) = + @"travel_class"; + +/// A context-specific numeric value which is accumulated automatically for each event type. This is +/// a general purpose parameter that is useful for accumulating a key metric that pertains to an +/// event. Examples include revenue, distance, time and points. Value should be specified as signed +/// 64-bit integer or double as NSNumber. Notes: Values for pre-defined currency-related events +/// (such as @c kFIREventAddToCart) should be supplied using double as NSNumber and must be +/// accompanied by a @c kFIRParameterCurrency parameter. The valid range of accumulated values is +/// [-9,223,372,036,854.77, 9,223,372,036,854.77]. Supplying a non-numeric value, omitting the +/// corresponding @c kFIRParameterCurrency parameter, or supplying an invalid +/// currency code for conversion events will cause that +/// conversion to be omitted from reporting. +///
+///     NSDictionary *params = @{
+///       kFIRParameterValue : @(3.99),
+///       kFIRParameterCurrency : @"USD",  // e.g. $3.99 USD
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterValue NS_SWIFT_NAME(AnalyticsParameterValue) = @"value"; + +/// Name of virtual currency type (NSString). +///
+///     NSDictionary *params = @{
+///       kFIRParameterVirtualCurrencyName : @"virtual_currency_name",
+///       // ...
+///     };
+/// 
+static NSString *const kFIRParameterVirtualCurrencyName + NS_SWIFT_NAME(AnalyticsParameterVirtualCurrencyName) = @"virtual_currency_name"; diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h new file mode 100644 index 0000000000..b3510fa93e --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h @@ -0,0 +1,29 @@ +/// @file FIRUserPropertyNames.h +/// +/// Predefined user property names. +/// +/// A UserProperty is an attribute that describes the app-user. By supplying UserProperties, you can +/// later analyze different behaviors of various segments of your userbase. You may supply up to 25 +/// unique UserProperties per app, and you can use the name and value of your choosing for each one. +/// UserProperty names can be up to 24 characters long, may only contain alphanumeric characters and +/// underscores ("_"), and must start with an alphabetic character. UserProperty values can be up to +/// 36 characters long. The "firebase_", "google_", and "ga_" prefixes are reserved and should not +/// be used. + +#import + +/// Indicates whether events logged by Google Analytics can be used to personalize ads for the user. +/// Set to "YES" to enable, or "NO" to disable. Default is enabled. See the +/// documentation for +/// more details and information about related settings. +/// +///
+///     [FIRAnalytics setUserPropertyString:@"NO"
+///                                 forName:kFIRUserPropertyAllowAdPersonalizationSignals];
+/// 
+static NSString *const kFIRUserPropertyAllowAdPersonalizationSignals + NS_SWIFT_NAME(AnalyticsUserPropertyAllowAdPersonalizationSignals) = @"allow_personalized_ads"; + +/// The method used to sign in. For example, "google", "facebook" or "twitter". +static NSString *const kFIRUserPropertySignUpMethod + NS_SWIFT_NAME(AnalyticsUserPropertySignUpMethod) = @"sign_up_method"; diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h new file mode 100644 index 0000000000..368f79c992 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h @@ -0,0 +1,6 @@ +#import "FIRAnalytics+AppDelegate.h" +#import "FIRAnalytics+Consent.h" +#import "FIRAnalytics.h" +#import "FIREventNames.h" +#import "FIRParameterNames.h" +#import "FIRUserPropertyNames.h" diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Info.plist b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Info.plist new file mode 100644 index 0000000000..efd0a1d201 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleExecutable + FirebaseAnalytics + CFBundleIdentifier + com.firebase.Firebase-FirebaseAnalytics + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + FirebaseAnalytics + CFBundlePackageType + FMWK + CFBundleVersion + 8.12.0 + DTSDKName + iphonesimulator11.2 + + diff --git a/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Modules/module.modulemap b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Modules/module.modulemap new file mode 100644 index 0000000000..b4b1bb6bb5 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Modules/module.modulemap @@ -0,0 +1,12 @@ +framework module FirebaseAnalytics { +umbrella header "FirebaseAnalytics.h" +export * +module * { export * } + link framework "Foundation" + link framework "Security" + link framework "SystemConfiguration" + link framework "UIKit" + link "c++" + link "sqlite3" + link "z" +} diff --git a/iOS/MyStudies/Pods/FirebaseCore/FirebaseCore/Sources/FIRApp.m b/iOS/MyStudies/Pods/FirebaseCore/FirebaseCore/Sources/FIRApp.m index 318c3e302e..05660ac6f0 100644 --- a/iOS/MyStudies/Pods/FirebaseCore/FirebaseCore/Sources/FIRApp.m +++ b/iOS/MyStudies/Pods/FirebaseCore/FirebaseCore/Sources/FIRApp.m @@ -135,12 +135,6 @@ + (void)configure { kPlistURL]; } [FIRApp configureWithOptions:options]; -#if TARGET_OS_OSX || TARGET_OS_TV - FIRLogNotice(kFIRLoggerCore, @"I-COR000028", - @"tvOS and macOS SDK support is not part of the official Firebase product. " - @"Instead they are community supported. Details at " - @"https://github.com/firebase/firebase-ios-sdk/blob/master/README.md."); -#endif } + (void)configureWithOptions:(FIROptions *)options { diff --git a/iOS/MyStudies/Pods/FirebaseCore/FirebaseCore/Sources/Public/FirebaseCore/FIROptions.h b/iOS/MyStudies/Pods/FirebaseCore/FirebaseCore/Sources/Public/FirebaseCore/FIROptions.h index afabbf101c..2498f1d391 100644 --- a/iOS/MyStudies/Pods/FirebaseCore/FirebaseCore/Sources/Public/FirebaseCore/FIROptions.h +++ b/iOS/MyStudies/Pods/FirebaseCore/FirebaseCore/Sources/Public/FirebaseCore/FIROptions.h @@ -32,7 +32,8 @@ NS_SWIFT_NAME(FirebaseOptions) /** * An iOS API key used for authenticating requests from your app, e.g. - * @"AIzaSyDdVgKwhZl0sTTTLZ7iTmt1r3N2cJLnaDk", used to identify your app to Google servers. + * The key must begin with "A" and contain exactly 39 alphanumeric characters, used to identify your + * app to Google servers. */ @property(nonatomic, copy, nullable) NSString *APIKey NS_SWIFT_NAME(apiKey); @@ -98,25 +99,30 @@ NS_SWIFT_NAME(FirebaseOptions) @property(nonatomic, copy, nullable) NSString *appGroupID; /** - * Initializes a customized instance of FIROptions from the file at the given plist file path. This - * will read the file synchronously from disk. - * For example, - * NSString *filePath = - * [[NSBundle mainBundle] pathForResource:@"GoogleService-Info" ofType:@"plist"]; - * FIROptions *options = [[FIROptions alloc] initWithContentsOfFile:filePath]; + * Initializes a customized instance of FirebaseOptions from the file at the given plist file path. + * This will read the file synchronously from disk. + * For example: + * ```swift + * if let path = Bundle.main.path(forResource:"GoogleServices-Info", ofType:"plist") { + * let options = FirebaseOptions(contentsOfFile: path) + * } + * ``` + * Note that it is not possible to customize FirebaseOptions for Firebase Analytics which expects a + * static file named `GoogleServices-Info.plist` - + * https://github.com/firebase/firebase-ios-sdk/issues/230. * Returns nil if the plist file does not exist or is invalid. */ - (nullable instancetype)initWithContentsOfFile:(NSString *)plistPath NS_DESIGNATED_INITIALIZER; /** - * Initializes a customized instance of FIROptions with required fields. Use the mutable properties - * to modify fields for configuring specific services. + * Initializes a customized instance of FirebaseOptions with required fields. Use the mutable + * properties to modify fields for configuring specific services. Note that it is not possible to + * customize FirebaseOptions for Firebase Analytics which expects a static file named + * `GoogleServices-Info.plist` - https://github.com/firebase/firebase-ios-sdk/issues/230. */ -// clang-format off - (instancetype)initWithGoogleAppID:(NSString *)googleAppID GCMSenderID:(NSString *)GCMSenderID - NS_SWIFT_NAME(init(googleAppID:gcmSenderID:)) NS_DESIGNATED_INITIALIZER; -// clang-format on + NS_SWIFT_NAME(init(googleAppID:gcmSenderID:))NS_DESIGNATED_INITIALIZER; /** Unavailable. Please use `init(contentsOfFile:)` or `init(googleAppID:gcmSenderID:)` instead. */ - (instancetype)init NS_UNAVAILABLE; diff --git a/iOS/MyStudies/Pods/FirebaseCore/README.md b/iOS/MyStudies/Pods/FirebaseCore/README.md index 938e264b18..ce3a998b3c 100644 --- a/iOS/MyStudies/Pods/FirebaseCore/README.md +++ b/iOS/MyStudies/Pods/FirebaseCore/README.md @@ -27,7 +27,6 @@ [![Actions Status][gh-storage-badge]][gh-actions] [![Actions Status][gh-symbolcollision-badge]][gh-actions] [![Actions Status][gh-zip-badge]][gh-actions] -[![Travis](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk) # Firebase Apple Open Source Development @@ -35,21 +34,16 @@ This repository contains all Apple platform Firebase SDK source except FirebaseA and FirebaseML. Firebase is an app development platform with tools to help you build, grow and -monetize your app. More information about Firebase can be found at -[https://firebase.google.com](https://firebase.google.com). - -The repository also includes GoogleUtilities and GoogleDataTransport source -which are utilities used by Firebase and other Google products. - -**Note** _FirebaseCombineSwift_ contains support for Apple's Combine framework. This module is currently under development, and not yet supported for use in production environments. Fore more details, please refer to the [docs](FirebaseCombineSwift/README.md). +monetize your app. More information about Firebase can be found on the +[official Firebase website](https://firebase.google.com). ## Installation See the subsections below for details about the different installation methods. -1. [Standard pod install](README.md#standard-pod-install) -1. [Swift Package Manager](SwiftPackageManager.md) -1. [Installing from the GitHub repo](README.md#installing-from-github) -1. [Experimental Carthage](README.md#carthage-ios-only) +1. [Standard pod install](#standard-pod-install) +1. [Swift Package Manager](#swift-package-manager) +1. [Installing from the GitHub repo](#installing-from-github) +1. [Experimental Carthage](#carthage-ios-only) ### Standard pod install @@ -59,7 +53,7 @@ Go to ### Swift Package Manager Instructions for [Swift Package Manager](https://swift.org/package-manager/) support can be -found at [SwiftPackageManager.md](SwiftPackageManager.md). +found at [SwiftPackageManager](SwiftPackageManager.md) Markdown file. ### Installing from GitHub @@ -93,8 +87,7 @@ pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk' ### Carthage (iOS only) Instructions for the experimental Carthage distribution are at -[Carthage](Carthage.md). If you have a new Mac with an Apple silicon chip, please see -[these instructions](AppleSilicon.md). +[Carthage](Carthage.md). ### Using Firebase from a Framework or a library @@ -130,7 +123,7 @@ those platforms. Since 10.2, Xcode does not properly handle multi-platform CocoaPods workspaces. Firestore has a self contained Xcode project. See -[Firestore/README.md](Firestore/README.md). +[Firestore/README](Firestore/README.md) Markdown file. #### Development for Catalyst * `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios` @@ -156,11 +149,11 @@ Alternatively disable signing in each target: ### Adding a New Firebase Pod -See [AddNewPod.md](AddNewPod.md). +See [AddNewPod](AddNewPod.md) Markdown file. ### Managing Headers and Imports -See [HeadersImports.md](HeadersImports.md). +See [HeadersImports](HeadersImports.md) Markdown file. ### Code Formatting @@ -172,7 +165,7 @@ GitHub Actions will verify that any code changes are done in a style compliant way. Install `clang-format` and `mint`: ```console -brew install clang-format@12 +brew install clang-format@13 brew install mint ``` @@ -194,7 +187,7 @@ identifier (e.g. `com.google.Database-Example`) ### Coverage Report Generation -See [scripts/code_coverage_report/README.md](scripts/code_coverage_report/README.md). +See [scripts/code_coverage_report/README](scripts/code_coverage_report/README.md) Markdown file. ## Specific Component Instructions See the sections below for any special instructions for those components. @@ -250,61 +243,49 @@ physical device. ## Building with Firebase on Apple platforms -At this time, not all of Firebase's products are available across all Apple platforms. However, -Firebase is constantly evolving and community supported efforts have helped expand Firebase's support. -To keep up with the latest info regarding Firebase's support across Apple platforms, refer to +Firebase 8.9.0 introduces official beta support for macOS, Catalyst, and tvOS. watchOS continues +to be community supported. Thanks to community contributions for many of the multi-platform PRs. + +At this time, most of Firebase's products are available across Apple platforms. There are still +a few gaps, especially on watchOS. For details about the current support matrix, see [this chart](https://firebase.google.com/docs/ios/learn-more#firebase_library_support_by_platform) in Firebase's documentation. -### Community Supported Efforts - -We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are -very grateful! We'd like to empower as many developers as we can to be able to use Firebase and -participate in the Firebase community. - -#### tvOS, macOS, watchOS and Catalyst +### watchOS Thanks to contributions from the community, many of Firebase SDKs now compile, run unit tests, and -work on tvOS, macOS, watchOS and Catalyst. +work on watchOS. See the [Independent Watch App Sample](Example/watchOSSample). -For tvOS, see the [Sample](Example/tvOSSample). -For watchOS, currently only Messaging, Storage and Crashlytics (and their dependencies) have limited -support. See the [Independent Watch App Sample](Example/watchOSSample). - -Keep in mind that macOS, tvOS, watchOS and Catalyst are not officially supported by Firebase, and -this repository is actively developed primarily for iOS. While we can catch basic unit test issues -with GitHub Actions, there may be some changes where the SDK no longer works as expected on macOS, -tvOS or watchOS. If you encounter this, please +Keep in mind that watchOS is not officially supported by Firebase. While we can catch basic unit +test issues with GitHub Actions, there may be some changes where the SDK no longer works as expected +on watchOS. If you encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues). During app setup in the console, you may get to a step that mentions something like "Checking if the -app has communicated with our servers". This relies on Analytics and will not work on -macOS/tvOS/watchOS/Catalyst. +app has communicated with our servers". This relies on Analytics and will not work on watchOS. **It's safe to ignore the message and continue**, the rest of the SDKs will work as expected. -#### Additional MacOS and Catalyst Notes - -* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability` -to Build Settings. -* For Catalyst, FirebaseFirestore requires signing the -[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681). - #### Additional Crashlytics Notes * watchOS has limited support. Due to watchOS restrictions, mach exceptions and signal crashes are not recorded. (Crashes in SwiftUI are generated as mach exceptions, so will not be recorded) +## Combine +Thanks to contributions from the community, _FirebaseCombineSwift_ contains support for Apple's Combine +framework. This module is currently under development, and not yet supported for use in production +environments. Fore more details, please refer to the [docs](FirebaseCombineSwift/README.md). + ## Roadmap -See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source +See [Roadmap](ROADMAP.md) for more about the Firebase Apple SDK Open Source plans and directions. ## Contributing See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase -iOS SDK. +Apple SDK. ## License -The contents of this repository is licensed under the +The contents of this repository are licensed under the [Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0). Your use of Firebase is governed by the diff --git a/iOS/MyStudies/Pods/FirebaseCoreDiagnostics/README.md b/iOS/MyStudies/Pods/FirebaseCoreDiagnostics/README.md index 938e264b18..ce3a998b3c 100644 --- a/iOS/MyStudies/Pods/FirebaseCoreDiagnostics/README.md +++ b/iOS/MyStudies/Pods/FirebaseCoreDiagnostics/README.md @@ -27,7 +27,6 @@ [![Actions Status][gh-storage-badge]][gh-actions] [![Actions Status][gh-symbolcollision-badge]][gh-actions] [![Actions Status][gh-zip-badge]][gh-actions] -[![Travis](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk) # Firebase Apple Open Source Development @@ -35,21 +34,16 @@ This repository contains all Apple platform Firebase SDK source except FirebaseA and FirebaseML. Firebase is an app development platform with tools to help you build, grow and -monetize your app. More information about Firebase can be found at -[https://firebase.google.com](https://firebase.google.com). - -The repository also includes GoogleUtilities and GoogleDataTransport source -which are utilities used by Firebase and other Google products. - -**Note** _FirebaseCombineSwift_ contains support for Apple's Combine framework. This module is currently under development, and not yet supported for use in production environments. Fore more details, please refer to the [docs](FirebaseCombineSwift/README.md). +monetize your app. More information about Firebase can be found on the +[official Firebase website](https://firebase.google.com). ## Installation See the subsections below for details about the different installation methods. -1. [Standard pod install](README.md#standard-pod-install) -1. [Swift Package Manager](SwiftPackageManager.md) -1. [Installing from the GitHub repo](README.md#installing-from-github) -1. [Experimental Carthage](README.md#carthage-ios-only) +1. [Standard pod install](#standard-pod-install) +1. [Swift Package Manager](#swift-package-manager) +1. [Installing from the GitHub repo](#installing-from-github) +1. [Experimental Carthage](#carthage-ios-only) ### Standard pod install @@ -59,7 +53,7 @@ Go to ### Swift Package Manager Instructions for [Swift Package Manager](https://swift.org/package-manager/) support can be -found at [SwiftPackageManager.md](SwiftPackageManager.md). +found at [SwiftPackageManager](SwiftPackageManager.md) Markdown file. ### Installing from GitHub @@ -93,8 +87,7 @@ pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk' ### Carthage (iOS only) Instructions for the experimental Carthage distribution are at -[Carthage](Carthage.md). If you have a new Mac with an Apple silicon chip, please see -[these instructions](AppleSilicon.md). +[Carthage](Carthage.md). ### Using Firebase from a Framework or a library @@ -130,7 +123,7 @@ those platforms. Since 10.2, Xcode does not properly handle multi-platform CocoaPods workspaces. Firestore has a self contained Xcode project. See -[Firestore/README.md](Firestore/README.md). +[Firestore/README](Firestore/README.md) Markdown file. #### Development for Catalyst * `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios` @@ -156,11 +149,11 @@ Alternatively disable signing in each target: ### Adding a New Firebase Pod -See [AddNewPod.md](AddNewPod.md). +See [AddNewPod](AddNewPod.md) Markdown file. ### Managing Headers and Imports -See [HeadersImports.md](HeadersImports.md). +See [HeadersImports](HeadersImports.md) Markdown file. ### Code Formatting @@ -172,7 +165,7 @@ GitHub Actions will verify that any code changes are done in a style compliant way. Install `clang-format` and `mint`: ```console -brew install clang-format@12 +brew install clang-format@13 brew install mint ``` @@ -194,7 +187,7 @@ identifier (e.g. `com.google.Database-Example`) ### Coverage Report Generation -See [scripts/code_coverage_report/README.md](scripts/code_coverage_report/README.md). +See [scripts/code_coverage_report/README](scripts/code_coverage_report/README.md) Markdown file. ## Specific Component Instructions See the sections below for any special instructions for those components. @@ -250,61 +243,49 @@ physical device. ## Building with Firebase on Apple platforms -At this time, not all of Firebase's products are available across all Apple platforms. However, -Firebase is constantly evolving and community supported efforts have helped expand Firebase's support. -To keep up with the latest info regarding Firebase's support across Apple platforms, refer to +Firebase 8.9.0 introduces official beta support for macOS, Catalyst, and tvOS. watchOS continues +to be community supported. Thanks to community contributions for many of the multi-platform PRs. + +At this time, most of Firebase's products are available across Apple platforms. There are still +a few gaps, especially on watchOS. For details about the current support matrix, see [this chart](https://firebase.google.com/docs/ios/learn-more#firebase_library_support_by_platform) in Firebase's documentation. -### Community Supported Efforts - -We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are -very grateful! We'd like to empower as many developers as we can to be able to use Firebase and -participate in the Firebase community. - -#### tvOS, macOS, watchOS and Catalyst +### watchOS Thanks to contributions from the community, many of Firebase SDKs now compile, run unit tests, and -work on tvOS, macOS, watchOS and Catalyst. +work on watchOS. See the [Independent Watch App Sample](Example/watchOSSample). -For tvOS, see the [Sample](Example/tvOSSample). -For watchOS, currently only Messaging, Storage and Crashlytics (and their dependencies) have limited -support. See the [Independent Watch App Sample](Example/watchOSSample). - -Keep in mind that macOS, tvOS, watchOS and Catalyst are not officially supported by Firebase, and -this repository is actively developed primarily for iOS. While we can catch basic unit test issues -with GitHub Actions, there may be some changes where the SDK no longer works as expected on macOS, -tvOS or watchOS. If you encounter this, please +Keep in mind that watchOS is not officially supported by Firebase. While we can catch basic unit +test issues with GitHub Actions, there may be some changes where the SDK no longer works as expected +on watchOS. If you encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues). During app setup in the console, you may get to a step that mentions something like "Checking if the -app has communicated with our servers". This relies on Analytics and will not work on -macOS/tvOS/watchOS/Catalyst. +app has communicated with our servers". This relies on Analytics and will not work on watchOS. **It's safe to ignore the message and continue**, the rest of the SDKs will work as expected. -#### Additional MacOS and Catalyst Notes - -* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability` -to Build Settings. -* For Catalyst, FirebaseFirestore requires signing the -[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681). - #### Additional Crashlytics Notes * watchOS has limited support. Due to watchOS restrictions, mach exceptions and signal crashes are not recorded. (Crashes in SwiftUI are generated as mach exceptions, so will not be recorded) +## Combine +Thanks to contributions from the community, _FirebaseCombineSwift_ contains support for Apple's Combine +framework. This module is currently under development, and not yet supported for use in production +environments. Fore more details, please refer to the [docs](FirebaseCombineSwift/README.md). + ## Roadmap -See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source +See [Roadmap](ROADMAP.md) for more about the Firebase Apple SDK Open Source plans and directions. ## Contributing See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase -iOS SDK. +Apple SDK. ## License -The contents of this repository is licensed under the +The contents of this repository are licensed under the [Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0). Your use of Firebase is governed by the diff --git a/iOS/MyStudies/Pods/FirebaseInstallations/README.md b/iOS/MyStudies/Pods/FirebaseInstallations/README.md index 938e264b18..ce3a998b3c 100644 --- a/iOS/MyStudies/Pods/FirebaseInstallations/README.md +++ b/iOS/MyStudies/Pods/FirebaseInstallations/README.md @@ -27,7 +27,6 @@ [![Actions Status][gh-storage-badge]][gh-actions] [![Actions Status][gh-symbolcollision-badge]][gh-actions] [![Actions Status][gh-zip-badge]][gh-actions] -[![Travis](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk) # Firebase Apple Open Source Development @@ -35,21 +34,16 @@ This repository contains all Apple platform Firebase SDK source except FirebaseA and FirebaseML. Firebase is an app development platform with tools to help you build, grow and -monetize your app. More information about Firebase can be found at -[https://firebase.google.com](https://firebase.google.com). - -The repository also includes GoogleUtilities and GoogleDataTransport source -which are utilities used by Firebase and other Google products. - -**Note** _FirebaseCombineSwift_ contains support for Apple's Combine framework. This module is currently under development, and not yet supported for use in production environments. Fore more details, please refer to the [docs](FirebaseCombineSwift/README.md). +monetize your app. More information about Firebase can be found on the +[official Firebase website](https://firebase.google.com). ## Installation See the subsections below for details about the different installation methods. -1. [Standard pod install](README.md#standard-pod-install) -1. [Swift Package Manager](SwiftPackageManager.md) -1. [Installing from the GitHub repo](README.md#installing-from-github) -1. [Experimental Carthage](README.md#carthage-ios-only) +1. [Standard pod install](#standard-pod-install) +1. [Swift Package Manager](#swift-package-manager) +1. [Installing from the GitHub repo](#installing-from-github) +1. [Experimental Carthage](#carthage-ios-only) ### Standard pod install @@ -59,7 +53,7 @@ Go to ### Swift Package Manager Instructions for [Swift Package Manager](https://swift.org/package-manager/) support can be -found at [SwiftPackageManager.md](SwiftPackageManager.md). +found at [SwiftPackageManager](SwiftPackageManager.md) Markdown file. ### Installing from GitHub @@ -93,8 +87,7 @@ pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk' ### Carthage (iOS only) Instructions for the experimental Carthage distribution are at -[Carthage](Carthage.md). If you have a new Mac with an Apple silicon chip, please see -[these instructions](AppleSilicon.md). +[Carthage](Carthage.md). ### Using Firebase from a Framework or a library @@ -130,7 +123,7 @@ those platforms. Since 10.2, Xcode does not properly handle multi-platform CocoaPods workspaces. Firestore has a self contained Xcode project. See -[Firestore/README.md](Firestore/README.md). +[Firestore/README](Firestore/README.md) Markdown file. #### Development for Catalyst * `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios` @@ -156,11 +149,11 @@ Alternatively disable signing in each target: ### Adding a New Firebase Pod -See [AddNewPod.md](AddNewPod.md). +See [AddNewPod](AddNewPod.md) Markdown file. ### Managing Headers and Imports -See [HeadersImports.md](HeadersImports.md). +See [HeadersImports](HeadersImports.md) Markdown file. ### Code Formatting @@ -172,7 +165,7 @@ GitHub Actions will verify that any code changes are done in a style compliant way. Install `clang-format` and `mint`: ```console -brew install clang-format@12 +brew install clang-format@13 brew install mint ``` @@ -194,7 +187,7 @@ identifier (e.g. `com.google.Database-Example`) ### Coverage Report Generation -See [scripts/code_coverage_report/README.md](scripts/code_coverage_report/README.md). +See [scripts/code_coverage_report/README](scripts/code_coverage_report/README.md) Markdown file. ## Specific Component Instructions See the sections below for any special instructions for those components. @@ -250,61 +243,49 @@ physical device. ## Building with Firebase on Apple platforms -At this time, not all of Firebase's products are available across all Apple platforms. However, -Firebase is constantly evolving and community supported efforts have helped expand Firebase's support. -To keep up with the latest info regarding Firebase's support across Apple platforms, refer to +Firebase 8.9.0 introduces official beta support for macOS, Catalyst, and tvOS. watchOS continues +to be community supported. Thanks to community contributions for many of the multi-platform PRs. + +At this time, most of Firebase's products are available across Apple platforms. There are still +a few gaps, especially on watchOS. For details about the current support matrix, see [this chart](https://firebase.google.com/docs/ios/learn-more#firebase_library_support_by_platform) in Firebase's documentation. -### Community Supported Efforts - -We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are -very grateful! We'd like to empower as many developers as we can to be able to use Firebase and -participate in the Firebase community. - -#### tvOS, macOS, watchOS and Catalyst +### watchOS Thanks to contributions from the community, many of Firebase SDKs now compile, run unit tests, and -work on tvOS, macOS, watchOS and Catalyst. +work on watchOS. See the [Independent Watch App Sample](Example/watchOSSample). -For tvOS, see the [Sample](Example/tvOSSample). -For watchOS, currently only Messaging, Storage and Crashlytics (and their dependencies) have limited -support. See the [Independent Watch App Sample](Example/watchOSSample). - -Keep in mind that macOS, tvOS, watchOS and Catalyst are not officially supported by Firebase, and -this repository is actively developed primarily for iOS. While we can catch basic unit test issues -with GitHub Actions, there may be some changes where the SDK no longer works as expected on macOS, -tvOS or watchOS. If you encounter this, please +Keep in mind that watchOS is not officially supported by Firebase. While we can catch basic unit +test issues with GitHub Actions, there may be some changes where the SDK no longer works as expected +on watchOS. If you encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues). During app setup in the console, you may get to a step that mentions something like "Checking if the -app has communicated with our servers". This relies on Analytics and will not work on -macOS/tvOS/watchOS/Catalyst. +app has communicated with our servers". This relies on Analytics and will not work on watchOS. **It's safe to ignore the message and continue**, the rest of the SDKs will work as expected. -#### Additional MacOS and Catalyst Notes - -* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability` -to Build Settings. -* For Catalyst, FirebaseFirestore requires signing the -[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681). - #### Additional Crashlytics Notes * watchOS has limited support. Due to watchOS restrictions, mach exceptions and signal crashes are not recorded. (Crashes in SwiftUI are generated as mach exceptions, so will not be recorded) +## Combine +Thanks to contributions from the community, _FirebaseCombineSwift_ contains support for Apple's Combine +framework. This module is currently under development, and not yet supported for use in production +environments. Fore more details, please refer to the [docs](FirebaseCombineSwift/README.md). + ## Roadmap -See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source +See [Roadmap](ROADMAP.md) for more about the Firebase Apple SDK Open Source plans and directions. ## Contributing See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase -iOS SDK. +Apple SDK. ## License -The contents of this repository is licensed under the +The contents of this repository are licensed under the [Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0). Your use of Firebase is governed by the diff --git a/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/FIRMessaging.m b/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/FIRMessaging.m index 70ff7435fb..d969e03111 100644 --- a/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/FIRMessaging.m +++ b/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/FIRMessaging.m @@ -48,7 +48,6 @@ static NSString *const kFIRMessagingMessageViaAPNSRootKey = @"aps"; static NSString *const kFIRMessagingReachabilityHostname = @"www.google.com"; -static NSString *const kFIRMessagingFCMTokenFetchAPNSOption = @"apns_token"; #if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 const NSNotificationName FIRMessagingRegistrationTokenRefreshedNotification = @@ -568,7 +567,7 @@ - (void)retrieveFCMTokenForSenderID:(nonnull NSString *)senderID } NSDictionary *options = nil; if (self.APNSToken) { - options = @{kFIRMessagingFCMTokenFetchAPNSOption : self.APNSToken}; + options = @{kFIRMessagingTokenOptionsAPNSKey : self.APNSToken}; } else { FIRMessagingLoggerWarn(kFIRMessagingMessageCodeAPNSTokenNotAvailableDuringTokenFetch, @"APNS device token not set before retrieving FCM Token for Sender ID " diff --git a/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/FIRMessagingAnalytics.m b/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/FIRMessagingAnalytics.m index af10b662cd..d377be514e 100644 --- a/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/FIRMessagingAnalytics.m +++ b/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/FIRMessagingAnalytics.m @@ -21,6 +21,7 @@ #import "Interop/Analytics/Public/FIRInteropEventNames.h" #import "Interop/Analytics/Public/FIRInteropParameterNames.h" +#import "FirebaseMessaging/Sources/FIRMessagingConstants.h" #import "FirebaseMessaging/Sources/FIRMessagingLogger.h" static NSString *const kLogTag = @"FIRMessagingAnalytics"; @@ -35,29 +36,16 @@ // Data Key static NSString *const kDataKey = @"data"; -// Messaging From Key -static NSString *const kFIRMessagingFromKey = @"from"; - static NSString *const kFIRParameterLabel = @"label"; static NSString *const kReengagementSource = @"Firebase"; static NSString *const kReengagementMedium = @"notification"; // Analytics -static NSString *const kAnalyticsEnabled = @"google.c.a." - @"e"; -static NSString *const kAnalyticsComposerIdentifier = @"google.c.a." - @"c_id"; -static NSString *const kAnalyticsComposerLabel = @"google.c.a." - @"c_l"; -static NSString *const kAnalyticsMessageLabel = @"google.c.a." - @"m_l"; -static NSString *const kAnalyticsMessageTimestamp = @"google.c.a." - @"ts"; -static NSString *const kAnalyticsMessageUseDeviceTime = @"google.c.a." - @"udt"; -static NSString *const kAnalyticsTrackConversions = @"google.c.a." - @"tc"; +static NSString *const kAnalyticsEnabled = @"google.c.a.e"; +static NSString *const kAnalyticsMessageTimestamp = @"google.c.a.ts"; +static NSString *const kAnalyticsMessageUseDeviceTime = @"google.c.a.udt"; +static NSString *const kAnalyticsTrackConversions = @"google.c.a.tc"; @implementation FIRMessagingAnalytics @@ -119,17 +107,17 @@ + (NSMutableDictionary *)paramsForEvent:(NSString *)event } NSMutableDictionary *params = [NSMutableDictionary dictionary]; - NSString *composerIdentifier = analyticsDataMap[kAnalyticsComposerIdentifier]; + NSString *composerIdentifier = analyticsDataMap[kFIRMessagingAnalyticsComposerIdentifier]; if ([composerIdentifier isKindOfClass:[NSString class]] && composerIdentifier.length) { params[kFIRIParameterMessageIdentifier] = [composerIdentifier copy]; } - NSString *composerLabel = analyticsDataMap[kAnalyticsComposerLabel]; + NSString *composerLabel = analyticsDataMap[kFIRMessagingAnalyticsComposerLabel]; if ([composerLabel isKindOfClass:[NSString class]] && composerLabel.length) { params[kFIRIParameterMessageName] = [composerLabel copy]; } - NSString *messageLabel = analyticsDataMap[kAnalyticsMessageLabel]; + NSString *messageLabel = analyticsDataMap[kFIRMessagingAnalyticsMessageLabel]; if ([messageLabel isKindOfClass:[NSString class]] && messageLabel.length) { params[kFIRParameterLabel] = [messageLabel copy]; } @@ -161,7 +149,7 @@ + (void)logUserPropertyForConversionTracking:(NSDictionary *)notification return; } - NSString *composerIdentifier = notification[kAnalyticsComposerIdentifier]; + NSString *composerIdentifier = notification[kFIRMessagingAnalyticsComposerIdentifier]; if ([composerIdentifier isKindOfClass:[NSString class]] && composerIdentifier.length) { // Set user property for event. [analytics setUserPropertyWithOrigin:@"fcm" diff --git a/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/FIRMessagingCode.h b/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/FIRMessagingCode.h index 3f0cdb5c70..af0613034a 100644 --- a/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/FIRMessagingCode.h +++ b/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/FIRMessagingCode.h @@ -136,6 +136,10 @@ typedef NS_ENUM(NSInteger, FIRMessagingMessageCode) { kFIRMessagingServiceExtensionImageNotDownloaded = 20001, kFIRMessagingServiceExtensionLocalFileNotCreated = 20002, kFIRMessagingServiceExtensionImageNotAttached = 20003, + kFIRMessagingServiceExtensionTransportBytesError = 20004, + kFIRMessagingServiceExtensionInvalidProjectID = 2005, + kFIRMessagingServiceExtensionInvalidMessageID = 2006, + kFIRMessagingServiceExtensionInvalidInstanceID = 2007, kFIRMessagingMessageCodeFIRApp002 = 22002, kFIRMessagingMessageCodeInternal001 = 22001, diff --git a/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/FIRMessagingConstants.h b/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/FIRMessagingConstants.h index de694e4abe..78294e2795 100644 --- a/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/FIRMessagingConstants.h +++ b/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/FIRMessagingConstants.h @@ -28,6 +28,12 @@ FOUNDATION_EXPORT NSString *const kFIRMessagingMessageIDKey; FOUNDATION_EXPORT NSString *const kFIRMessagingMessageAPNSContentAvailableKey; FOUNDATION_EXPORT NSString *const kFIRMessagingMessageSyncMessageTTLKey; FOUNDATION_EXPORT NSString *const kFIRMessagingMessageLinkKey; +FOUNDATION_EXPORT NSString *const kFIRMessagingSenderID; +FOUNDATION_EXPORT NSString *const kFIRMessagingFID; +FOUNDATION_EXPORT NSString *const kFIRMessagingAnalyticsComposerIdentifier; +FOUNDATION_EXPORT NSString *const kFIRMessagingAnalyticsMessageLabel; +FOUNDATION_EXPORT NSString *const kFIRMessagingAnalyticsComposerLabel; + FOUNDATION_EXPORT NSString *const kFIRMessagingRemoteNotificationsProxyEnabledInfoPlistKey; FOUNDATION_EXPORT NSString *const kFIRMessagingSubDirectoryName; diff --git a/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/FIRMessagingConstants.m b/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/FIRMessagingConstants.m index 736dd45f9d..a641997cf2 100644 --- a/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/FIRMessagingConstants.m +++ b/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/FIRMessagingConstants.m @@ -18,13 +18,31 @@ NSString *const kFIRMessagingFromKey = @"from"; -NSString *const kFIRMessagingMessageIDKey = @"gcm." - @"message_id"; +NSString *const kFIRMessagingSendTo = @"google." + @"to"; +NSString *const kFIRMessagingSendTTL = @"google." + @"ttl"; +NSString *const kFIRMessagingSendDelay = @"google." + @"delay"; +NSString *const kFIRMessagingSendMessageID = @"google." + @"msg_id"; +NSString *const KFIRMessagingSendMessageAppData = @"google." + @"data"; + +NSString *const kFIRMessagingMessageInternalReservedKeyword = @"gcm."; +NSString *const kFIRMessagingMessagePersistentIDKey = @"persistent_id"; + +NSString *const kFIRMessagingMessageIDKey = @"gcm.message_id"; NSString *const kFIRMessagingMessageAPNSContentAvailableKey = @"content-available"; NSString *const kFIRMessagingMessageSyncMessageTTLKey = @"gcm." @"ttl"; NSString *const kFIRMessagingMessageLinkKey = @"gcm." @"app_link"; +NSString *const kFIRMessagingSenderID = @"google.c.sender.id"; +NSString *const kFIRMessagingFID = @"google.c.fid"; +NSString *const kFIRMessagingAnalyticsComposerIdentifier = @"google.c.a.c_id"; +NSString *const kFIRMessagingAnalyticsMessageLabel = @"google.c.a.m_l"; +NSString *const kFIRMessagingAnalyticsComposerLabel = @"google.c.a.c_l"; NSString *const kFIRMessagingRemoteNotificationsProxyEnabledInfoPlistKey = @"FirebaseAppDelegateProxyEnabled"; diff --git a/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/FIRMessagingContextManagerService.m b/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/FIRMessagingContextManagerService.m index 64db08a698..87f05eadce 100644 --- a/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/FIRMessagingContextManagerService.m +++ b/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/FIRMessagingContextManagerService.m @@ -69,8 +69,9 @@ @implementation FIRMessagingContextManagerService + (BOOL)isContextManagerMessage:(NSDictionary *)message { // For now we only support local time in ContextManager. if (![message[kFIRMessagingContextManagerLocalTimeStart] length]) { - FIRMessagingLoggerDebug(kFIRMessagingMessageCodeContextManagerService000, - @"Received message missing local start time, dropped."); + FIRMessagingLoggerDebug( + kFIRMessagingMessageCodeContextManagerService000, + @"Received message missing local start time, not a contextual message."); return NO; } diff --git a/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/FIRMessagingExtensionHelper.m b/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/FIRMessagingExtensionHelper.m index 756566d2d8..30c150baef 100644 --- a/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/FIRMessagingExtensionHelper.m +++ b/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/FIRMessagingExtensionHelper.m @@ -14,16 +14,89 @@ * limitations under the License. */ -#import "FirebaseMessaging/Sources/Public/FirebaseMessaging/FIRMessagingExtensionHelper.h" +#import +#import +#import +#import +#import #import "FirebaseMessaging/Sources/FIRMessagingCode.h" +#import "FirebaseMessaging/Sources/FIRMessagingConstants.h" #import "FirebaseMessaging/Sources/FIRMessagingLogger.h" +#import "FirebaseMessaging/Sources/Protogen/nanopb/me.nanopb.h" +#import "FirebaseMessaging/Sources/Public/FirebaseMessaging/FIRMessagingExtensionHelper.h" static NSString *const kPayloadOptionsName = @"fcm_options"; static NSString *const kPayloadOptionsImageURLName = @"image"; static NSString *const kNoExtension = @""; static NSString *const kImagePathPrefix = @"image/"; +#pragma mark - nanopb helper functions + +/** Callocs a pb_bytes_array and copies the given NSData bytes into the bytes array. + * + * @note Memory needs to be free manually, through pb_free or pb_release. + * @param data The data to copy into the new bytes array. + */ +pb_bytes_array_t *FIRMessagingEncodeData(NSData *data) { + pb_bytes_array_t *pbBytesArray = calloc(1, PB_BYTES_ARRAY_T_ALLOCSIZE(data.length)); + if (pbBytesArray != NULL) { + [data getBytes:pbBytesArray->bytes length:data.length]; + pbBytesArray->size = (pb_size_t)data.length; + } + return pbBytesArray; +} +/** Callocs a pb_bytes_array and copies the given NSString's bytes into the bytes array. + * + * @note Memory needs to be free manually, through pb_free or pb_release. + * @param string The string to encode as pb_bytes. + */ +pb_bytes_array_t *FIRMessagingEncodeString(NSString *string) { + NSData *stringBytes = [string dataUsingEncoding:NSUTF8StringEncoding]; + return FIRMessagingEncodeData(stringBytes); +} + +@interface FIRMessagingMetricsLog : NSObject + +@property(nonatomic) fm_MessagingClientEventExtension eventExtension; + +@end + +@implementation FIRMessagingMetricsLog + +- (instancetype)initWithEventExtension:(fm_MessagingClientEventExtension)eventExtension { + self = [super init]; + if (self) { + _eventExtension = eventExtension; + } + return self; +} + +- (NSData *)transportBytes { + pb_ostream_t sizestream = PB_OSTREAM_SIZING; + + // Encode 1 time to determine the size. + if (!pb_encode(&sizestream, fm_MessagingClientEventExtension_fields, &_eventExtension)) { + FIRMessagingLoggerError(kFIRMessagingServiceExtensionTransportBytesError, + @"Error in nanopb encoding for size: %s", PB_GET_ERROR(&sizestream)); + } + + // Encode a 2nd time to actually get the bytes from it. + size_t bufferSize = sizestream.bytes_written; + CFMutableDataRef dataRef = CFDataCreateMutable(CFAllocatorGetDefault(), bufferSize); + CFDataSetLength(dataRef, bufferSize); + pb_ostream_t ostream = pb_ostream_from_buffer((void *)CFDataGetBytePtr(dataRef), bufferSize); + if (!pb_encode(&ostream, fm_MessagingClientEventExtension_fields, &_eventExtension)) { + FIRMessagingLoggerError(kFIRMessagingServiceExtensionTransportBytesError, + @"Error in nanopb encoding for bytes: %s", PB_GET_ERROR(&ostream)); + } + CFDataSetLength(dataRef, ostream.bytes_written); + + return CFBridgingRelease(dataRef); +} + +@end + @interface FIRMessagingExtensionHelper () @property(nonatomic, strong) void (^contentHandler)(UNNotificationContent *contentToDeliver); @property(nonatomic, strong) UNMutableNotificationContent *bestAttemptContent; @@ -129,4 +202,86 @@ - (void)deliverNotification { } } +- (void)exportDeliveryMetricsToBigQueryWithMessageInfo:(NSDictionary *)info { + GDTCORTransport *transport = [[GDTCORTransport alloc] initWithMappingID:@"1249" + transformers:nil + target:kGDTCORTargetFLL]; + + fm_MessagingClientEventExtension eventExtension = fm_MessagingClientEventExtension_init_default; + + fm_MessagingClientEvent clientEvent = fm_MessagingClientEvent_init_default; + if (!info[kFIRMessagingSenderID]) { + FIRMessagingLoggerError(kFIRMessagingServiceExtensionInvalidProjectID, + @"Delivery logging failed: Invalid project ID"); + return; + } + clientEvent.project_number = (int64_t)[info[kFIRMessagingSenderID] longLongValue]; + + if (!info[kFIRMessagingMessageIDKey] || + ![info[kFIRMessagingMessageIDKey] isKindOfClass:NSString.class]) { + FIRMessagingLoggerWarn(kFIRMessagingServiceExtensionInvalidMessageID, + @"Delivery logging failed: Invalid Message ID"); + return; + } + clientEvent.message_id = FIRMessagingEncodeString(info[kFIRMessagingMessageIDKey]); + + if (!info[kFIRMessagingFID] || ![info[kFIRMessagingFID] isKindOfClass:NSString.class]) { + FIRMessagingLoggerWarn(kFIRMessagingServiceExtensionInvalidInstanceID, + @"Delivery logging failed: Invalid Instance ID"); + return; + } + clientEvent.instance_id = FIRMessagingEncodeString(info[kFIRMessagingFID]); + + if ([info[@"aps"][kFIRMessagingMessageAPNSContentAvailableKey] intValue] == 1 && + ![GULAppEnvironmentUtil isAppExtension]) { + clientEvent.message_type = fm_MessagingClientEvent_MessageType_DATA_MESSAGE; + } else { + clientEvent.message_type = fm_MessagingClientEvent_MessageType_DISPLAY_NOTIFICATION; + } + clientEvent.sdk_platform = fm_MessagingClientEvent_SDKPlatform_IOS; + + NSString *bundleID = [NSBundle mainBundle].bundleIdentifier; + if ([GULAppEnvironmentUtil isAppExtension]) { + bundleID = [[self class] bundleIdentifierByRemovingLastPartFrom:bundleID]; + } + if (bundleID) { + clientEvent.package_name = FIRMessagingEncodeString(bundleID); + } + clientEvent.event = fm_MessagingClientEvent_Event_MESSAGE_DELIVERED; + + if (info[kFIRMessagingAnalyticsMessageLabel]) { + clientEvent.analytics_label = + FIRMessagingEncodeString(info[kFIRMessagingAnalyticsMessageLabel]); + } + if (info[kFIRMessagingAnalyticsComposerIdentifier]) { + clientEvent.campaign_id = + (int64_t)[info[kFIRMessagingAnalyticsComposerIdentifier] longLongValue]; + } + if (info[kFIRMessagingAnalyticsComposerLabel]) { + clientEvent.composer_label = + FIRMessagingEncodeString(info[kFIRMessagingAnalyticsComposerLabel]); + } + + eventExtension.messaging_client_event = &clientEvent; + FIRMessagingMetricsLog *log = + [[FIRMessagingMetricsLog alloc] initWithEventExtension:eventExtension]; + + GDTCOREvent *event = [transport eventForTransport]; + event.dataObject = log; + event.qosTier = GDTCOREventQoSFast; + + // Use this API for SDK service data events. + [transport sendDataEvent:event]; +} + ++ (NSString *)bundleIdentifierByRemovingLastPartFrom:(NSString *)bundleIdentifier { + NSString *bundleIDComponentsSeparator = @"."; + + NSMutableArray *bundleIDComponents = + [[bundleIdentifier componentsSeparatedByString:bundleIDComponentsSeparator] mutableCopy]; + [bundleIDComponents removeLastObject]; + + return [bundleIDComponents componentsJoinedByString:bundleIDComponentsSeparator]; +} + @end diff --git a/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/FIRMessagingRmqManager.m b/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/FIRMessagingRmqManager.m index 8723d18b6c..ad66dcea2c 100644 --- a/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/FIRMessagingRmqManager.m +++ b/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/FIRMessagingRmqManager.m @@ -443,14 +443,21 @@ + (NSString *)pathForDatabaseWithName:(NSString *)databaseName { - (void)createTableWithName:(NSString *)tableName command:(NSString *)command { FIRMessaging_MUST_NOT_BE_MAIN_THREAD(); - char *error; + char *error = NULL; NSString *createDatabase = [NSString stringWithFormat:command, kTablePrefix, tableName]; if (sqlite3_exec(self->_database, [createDatabase UTF8String], NULL, NULL, &error) != SQLITE_OK) { // remove db before failing [self removeDatabase]; - NSString *errorMessage = [NSString - stringWithFormat:@"Couldn't create table: %@ %@", kCreateTableOutgoingRmqMessages, - [NSString stringWithCString:error encoding:NSUTF8StringEncoding]]; + NSString *sqlError; + if (error != NULL) { + sqlError = [NSString stringWithCString:error encoding:NSUTF8StringEncoding]; + sqlite3_free(error); + } else { + sqlError = @"(null)"; + } + NSString *errorMessage = + [NSString stringWithFormat:@"Couldn't create table: %@ with command: %@ error: %@", + kCreateTableOutgoingRmqMessages, createDatabase, sqlError]; FIRMessagingLoggerError(kFIRMessagingMessageCodeRmq2PersistentStoreErrorCreatingTable, @"%@", errorMessage); NSAssert(NO, errorMessage); diff --git a/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/Protogen/nanopb/me.nanopb.c b/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/Protogen/nanopb/me.nanopb.c new file mode 100644 index 0000000000..b1a819ef9d --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/Protogen/nanopb/me.nanopb.c @@ -0,0 +1,52 @@ +/* + * Copyright 2021 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. + */ + +/* Automatically generated nanopb constant definitions */ +/* Generated by nanopb-0.3.9.8 */ + +#include "FirebaseMessaging/Sources/Protogen/nanopb/me.nanopb.h" + +/* @@protoc_insertion_point(includes) */ +#if PB_PROTO_HEADER_VERSION != 30 +#error Regenerate this file with the current version of nanopb generator. +#endif + + + +const pb_field_t fm_MessagingClientEvent_fields[11] = { + PB_FIELD( 1, INT64 , SINGULAR, STATIC , FIRST, fm_MessagingClientEvent, project_number, project_number, 0), + PB_FIELD( 2, BYTES , SINGULAR, POINTER , OTHER, fm_MessagingClientEvent, message_id, project_number, 0), + PB_FIELD( 3, BYTES , SINGULAR, POINTER , OTHER, fm_MessagingClientEvent, instance_id, message_id, 0), + PB_FIELD( 4, UENUM , SINGULAR, STATIC , OTHER, fm_MessagingClientEvent, message_type, instance_id, 0), + PB_FIELD( 5, UENUM , SINGULAR, STATIC , OTHER, fm_MessagingClientEvent, sdk_platform, message_type, 0), + PB_FIELD( 6, BYTES , SINGULAR, POINTER , OTHER, fm_MessagingClientEvent, package_name, sdk_platform, 0), + PB_FIELD( 12, UENUM , SINGULAR, STATIC , OTHER, fm_MessagingClientEvent, event, package_name, 0), + PB_FIELD( 13, BYTES , SINGULAR, POINTER , OTHER, fm_MessagingClientEvent, analytics_label, event, 0), + PB_FIELD( 14, INT64 , SINGULAR, STATIC , OTHER, fm_MessagingClientEvent, campaign_id, analytics_label, 0), + PB_FIELD( 15, BYTES , SINGULAR, POINTER , OTHER, fm_MessagingClientEvent, composer_label, campaign_id, 0), + PB_LAST_FIELD +}; + +const pb_field_t fm_MessagingClientEventExtension_fields[2] = { + PB_FIELD( 1, MESSAGE , SINGULAR, POINTER , FIRST, fm_MessagingClientEventExtension, messaging_client_event, messaging_client_event, &fm_MessagingClientEvent_fields), + PB_LAST_FIELD +}; + + + + + +/* @@protoc_insertion_point(eof) */ diff --git a/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/Protogen/nanopb/me.nanopb.h b/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/Protogen/nanopb/me.nanopb.h new file mode 100644 index 0000000000..e32a999561 --- /dev/null +++ b/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/Protogen/nanopb/me.nanopb.h @@ -0,0 +1,119 @@ +/* + * Copyright 2021 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. + */ + +/* Automatically generated nanopb header */ +/* Generated by nanopb-0.3.9.8 */ + +#ifndef PB_FM_ME_NANOPB_H_INCLUDED +#define PB_FM_ME_NANOPB_H_INCLUDED +#include + +/* @@protoc_insertion_point(includes) */ +#if PB_PROTO_HEADER_VERSION != 30 +#error Regenerate this file with the current version of nanopb generator. +#endif + + +/* Enum definitions */ +typedef enum _fm_MessagingClientEvent_MessageType { + fm_MessagingClientEvent_MessageType_UNKNOWN = 0, + fm_MessagingClientEvent_MessageType_DATA_MESSAGE = 1, + fm_MessagingClientEvent_MessageType_TOPIC = 2, + fm_MessagingClientEvent_MessageType_DISPLAY_NOTIFICATION = 3 +} fm_MessagingClientEvent_MessageType; +#define _fm_MessagingClientEvent_MessageType_MIN fm_MessagingClientEvent_MessageType_UNKNOWN +#define _fm_MessagingClientEvent_MessageType_MAX fm_MessagingClientEvent_MessageType_DISPLAY_NOTIFICATION +#define _fm_MessagingClientEvent_MessageType_ARRAYSIZE ((fm_MessagingClientEvent_MessageType)(fm_MessagingClientEvent_MessageType_DISPLAY_NOTIFICATION+1)) + +typedef enum _fm_MessagingClientEvent_SDKPlatform { + fm_MessagingClientEvent_SDKPlatform_UNKNOWN_OS = 0, + fm_MessagingClientEvent_SDKPlatform_ANDROID = 1, + fm_MessagingClientEvent_SDKPlatform_IOS = 2, + fm_MessagingClientEvent_SDKPlatform_WEB = 3 +} fm_MessagingClientEvent_SDKPlatform; +#define _fm_MessagingClientEvent_SDKPlatform_MIN fm_MessagingClientEvent_SDKPlatform_UNKNOWN_OS +#define _fm_MessagingClientEvent_SDKPlatform_MAX fm_MessagingClientEvent_SDKPlatform_WEB +#define _fm_MessagingClientEvent_SDKPlatform_ARRAYSIZE ((fm_MessagingClientEvent_SDKPlatform)(fm_MessagingClientEvent_SDKPlatform_WEB+1)) + +typedef enum _fm_MessagingClientEvent_Event { + fm_MessagingClientEvent_Event_UNKNOWN_EVENT = 0, + fm_MessagingClientEvent_Event_MESSAGE_DELIVERED = 1, + fm_MessagingClientEvent_Event_MESSAGE_OPEN = 2 +} fm_MessagingClientEvent_Event; +#define _fm_MessagingClientEvent_Event_MIN fm_MessagingClientEvent_Event_UNKNOWN_EVENT +#define _fm_MessagingClientEvent_Event_MAX fm_MessagingClientEvent_Event_MESSAGE_OPEN +#define _fm_MessagingClientEvent_Event_ARRAYSIZE ((fm_MessagingClientEvent_Event)(fm_MessagingClientEvent_Event_MESSAGE_OPEN+1)) + +/* Struct definitions */ +typedef struct _fm_MessagingClientEventExtension { + struct _fm_MessagingClientEvent *messaging_client_event; +/* @@protoc_insertion_point(struct:fm_MessagingClientEventExtension) */ +} fm_MessagingClientEventExtension; + +typedef struct _fm_MessagingClientEvent { + int64_t project_number; + pb_bytes_array_t *message_id; + pb_bytes_array_t *instance_id; + fm_MessagingClientEvent_MessageType message_type; + fm_MessagingClientEvent_SDKPlatform sdk_platform; + pb_bytes_array_t *package_name; + fm_MessagingClientEvent_Event event; + pb_bytes_array_t *analytics_label; + int64_t campaign_id; + pb_bytes_array_t *composer_label; +/* @@protoc_insertion_point(struct:fm_MessagingClientEvent) */ +} fm_MessagingClientEvent; + +/* Default values for struct fields */ + +/* Initializer values for message structs */ +#define fm_MessagingClientEvent_init_default {0, NULL, NULL, _fm_MessagingClientEvent_MessageType_MIN, _fm_MessagingClientEvent_SDKPlatform_MIN, NULL, _fm_MessagingClientEvent_Event_MIN, NULL, 0, NULL} +#define fm_MessagingClientEventExtension_init_default {NULL} +#define fm_MessagingClientEvent_init_zero {0, NULL, NULL, _fm_MessagingClientEvent_MessageType_MIN, _fm_MessagingClientEvent_SDKPlatform_MIN, NULL, _fm_MessagingClientEvent_Event_MIN, NULL, 0, NULL} +#define fm_MessagingClientEventExtension_init_zero {NULL} + +/* Field tags (for use in manual encoding/decoding) */ +#define fm_MessagingClientEventExtension_messaging_client_event_tag 1 +#define fm_MessagingClientEvent_project_number_tag 1 +#define fm_MessagingClientEvent_message_id_tag 2 +#define fm_MessagingClientEvent_instance_id_tag 3 +#define fm_MessagingClientEvent_message_type_tag 4 +#define fm_MessagingClientEvent_sdk_platform_tag 5 +#define fm_MessagingClientEvent_package_name_tag 6 +#define fm_MessagingClientEvent_event_tag 12 +#define fm_MessagingClientEvent_analytics_label_tag 13 +#define fm_MessagingClientEvent_campaign_id_tag 14 +#define fm_MessagingClientEvent_composer_label_tag 15 + +/* Struct field encoding specification for nanopb */ +extern const pb_field_t fm_MessagingClientEvent_fields[11]; +extern const pb_field_t fm_MessagingClientEventExtension_fields[2]; + +/* Maximum encoded size of messages (where known) */ +/* fm_MessagingClientEvent_size depends on runtime parameters */ +/* fm_MessagingClientEventExtension_size depends on runtime parameters */ + +/* Message IDs (where set with "msgid" option) */ +#ifdef PB_MSGID + +#define ME_MESSAGES \ + + +#endif + +/* @@protoc_insertion_point(eof) */ + +#endif diff --git a/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/Public/FirebaseMessaging/FIRMessagingExtensionHelper.h b/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/Public/FirebaseMessaging/FIRMessagingExtensionHelper.h index f4bd7cad24..c383d55da3 100644 --- a/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/Public/FirebaseMessaging/FIRMessagingExtensionHelper.h +++ b/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/Public/FirebaseMessaging/FIRMessagingExtensionHelper.h @@ -14,8 +14,11 @@ * limitations under the License. */ -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 || \ - __MAC_OS_X_VERSION_MAX_ALLOWED >= __MAC_10_14 +#import + +@class UNMutableNotificationContent, UNNotificationContent; + +#if __has_include() #import #endif @@ -34,6 +37,14 @@ __OSX_AVAILABLE(10.14) @interface FIRMessagingExtensionHelper : NSObject - (void)populateNotificationContent:(UNMutableNotificationContent *)content withContentHandler:(void (^)(UNNotificationContent *_Nonnull))contentHandler; +/// Exports delivery metrics to BigQuery. Call this API to enable logging delivery of alert +/// notification or background notification and export to BigQuery. +/// If you log alert notifications, enable Notification Service Extension and calls this API +/// under `UNNotificationServiceExtension didReceiveNotificationRequest: withContentHandler:`. +/// If you log background notifications, call the API under `UIApplicationDelegate +/// application:didReceiveRemoteNotification:fetchCompletionHandler:`. +- (void)exportDeliveryMetricsToBigQueryWithMessageInfo:(NSDictionary *)info; + @end NS_ASSUME_NONNULL_END diff --git a/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/Token/FIRMessagingAuthService.h b/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/Token/FIRMessagingAuthService.h index 0451099937..27fa19191a 100644 --- a/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/Token/FIRMessagingAuthService.h +++ b/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/Token/FIRMessagingAuthService.h @@ -20,7 +20,6 @@ NS_ASSUME_NONNULL_BEGIN @class FIRMessagingCheckinPreferences; -@class FIRMessagingCheckinStore; /** * @related FIRInstanceIDCheckinService * @@ -42,14 +41,10 @@ typedef void (^FIRMessagingDeviceCheckinCompletion)( */ @interface FIRMessagingAuthService : NSObject -/** - * Initializes the auth service given a store (which provides the local caching of checkin info). - * This initializer will create its own instance of FIRMessagingCheckinService. - */ -- (instancetype)initWithCheckinStore:(FIRMessagingCheckinStore *)store; - #pragma mark - Checkin Service +- (BOOL)hasCheckinPlist; + /** * Checks if the current deviceID and secret are valid or not. * diff --git a/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/Token/FIRMessagingAuthService.m b/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/Token/FIRMessagingAuthService.m index f5e5ff5299..d5b364b4e2 100644 --- a/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/Token/FIRMessagingAuthService.m +++ b/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/Token/FIRMessagingAuthService.m @@ -53,10 +53,10 @@ @interface FIRMessagingAuthService () @implementation FIRMessagingAuthService -- (instancetype)initWithCheckinStore:(FIRMessagingCheckinStore *)checkinStore { +- (instancetype)init { self = [super init]; if (self) { - _checkinStore = checkinStore; + _checkinStore = [[FIRMessagingCheckinStore alloc] init]; _checkinPreferences = [_checkinStore cachedCheckinPreferences]; _checkinService = [[FIRMessagingCheckinService alloc] init]; _checkinHandlers = [[NSMutableArray alloc] init]; @@ -70,6 +70,10 @@ - (void)dealloc { #pragma mark - Schedule Checkin +- (BOOL)hasCheckinPlist { + return [_checkinStore hasCheckinPlist]; +} + - (void)scheduleCheckin:(BOOL)immediately { // Checkin is still valid, so a remote checkin is not required. if ([self.checkinPreferences hasValidCheckinInfo]) { diff --git a/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/Token/FIRMessagingTokenManager.m b/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/Token/FIRMessagingTokenManager.m index 427c2d7a8f..3f29ea4f30 100644 --- a/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/Token/FIRMessagingTokenManager.m +++ b/iOS/MyStudies/Pods/FirebaseMessaging/FirebaseMessaging/Sources/Token/FIRMessagingTokenManager.m @@ -51,8 +51,7 @@ - (instancetype)init { self = [super init]; if (self) { _tokenStore = [[FIRMessagingTokenStore alloc] init]; - _checkinStore = [[FIRMessagingCheckinStore alloc] init]; - _authService = [[FIRMessagingAuthService alloc] initWithCheckinStore:_checkinStore]; + _authService = [[FIRMessagingAuthService alloc] init]; [self resetCredentialsIfNeeded]; [self configureTokenOperations]; _installations = [FIRInstallations installations]; @@ -233,17 +232,15 @@ - (void)tokenWithAuthorizedEntity:(NSString *)authorizedEntity } else { FIRMessagingTokenInfo *cachedTokenInfo = [self cachedTokenInfoWithAuthorizedEntity:authorizedEntity scope:scope]; - if (cachedTokenInfo) { - FIRMessagingAPNSInfo *optionsAPNSInfo = - [[FIRMessagingAPNSInfo alloc] initWithTokenOptionsDictionary:tokenOptions]; - // Check if APNS Info is changed - if ((!cachedTokenInfo.APNSInfo && !optionsAPNSInfo) || - [cachedTokenInfo.APNSInfo isEqualToAPNSInfo:optionsAPNSInfo]) { - // check if token is fresh - if ([cachedTokenInfo isFreshWithIID:identifier]) { - newHandler(cachedTokenInfo.token, nil); - return; - } + FIRMessagingAPNSInfo *optionsAPNSInfo = + [[FIRMessagingAPNSInfo alloc] initWithTokenOptionsDictionary:tokenOptions]; + // Check if APNS Info is changed + if ((!cachedTokenInfo.APNSInfo && !optionsAPNSInfo) || + [cachedTokenInfo.APNSInfo isEqualToAPNSInfo:optionsAPNSInfo]) { + // check if token is fresh + if ([cachedTokenInfo isFreshWithIID:identifier]) { + newHandler(cachedTokenInfo.token, nil); + return; } } [self fetchNewTokenWithAuthorizedEntity:[authorizedEntity copy] @@ -458,41 +455,40 @@ - (void)deleteWithHandler:(void (^)(NSError *))handler { * since the Keychain items are marked with `*BackupThisDeviceOnly`. */ - (void)resetCredentialsIfNeeded { - BOOL checkinPlistExists = [_checkinStore hasCheckinPlist]; + BOOL checkinPlistExists = [_authService hasCheckinPlist]; // Checkin info existed in backup excluded plist. Should not be a fresh install. if (checkinPlistExists) { return; } - - // Resets checkin in keychain if a fresh install. // Keychain can still exist even if app is uninstalled. - FIRMessagingCheckinPreferences *oldCheckinPreferences = [_checkinStore cachedCheckinPreferences]; - - if (oldCheckinPreferences) { - [_checkinStore removeCheckinPreferencesWithHandler:^(NSError *error) { - if (!error) { - FIRMessagingLoggerDebug( - kFIRMessagingMessageCodeStore002, - @"Removed cached checkin preferences from Keychain because this is a fresh install."); - } else { - FIRMessagingLoggerError( - kFIRMessagingMessageCodeStore003, - @"Couldn't remove cached checkin preferences for a fresh install. Error: %@", error); - } - if (oldCheckinPreferences.deviceID.length && oldCheckinPreferences.secretToken.length) { - FIRMessagingLoggerDebug(kFIRMessagingMessageCodeStore006, - @"App reset detected. Will delete server registrations."); - // We don't really need to delete old FCM tokens created via IID auth tokens since - // those tokens are already hashed by APNS token as the has so creating a new - // token should automatically delete the old-token. - [self didDeleteFCMScopedTokensForCheckin:oldCheckinPreferences]; - } else { - FIRMessagingLoggerDebug(kFIRMessagingMessageCodeStore009, - @"App reset detected but no valid checkin auth preferences found." - @" Will not delete server registrations."); - } - }]; + FIRMessagingCheckinPreferences *oldCheckinPreferences = _authService.checkinPreferences; + + if (!oldCheckinPreferences) { + FIRMessagingLoggerDebug(kFIRMessagingMessageCodeStore009, + @"App reset detected but no valid checkin auth preferences found." + @" Will not delete server token registrations."); + return; } + [_authService resetCheckinWithHandler:^(NSError *_Nonnull error) { + if (!error) { + FIRMessagingLoggerDebug( + kFIRMessagingMessageCodeStore002, + @"Removed cached checkin preferences from Keychain because this is a fresh install."); + } else { + FIRMessagingLoggerError( + kFIRMessagingMessageCodeStore003, + @"Couldn't remove cached checkin preferences for a fresh install. Error: %@", error); + } + + if (oldCheckinPreferences.deviceID.length && oldCheckinPreferences.secretToken.length) { + FIRMessagingLoggerDebug(kFIRMessagingMessageCodeStore006, + @"Resetting old checkin and deleting server token registrations."); + // We don't really need to delete old FCM tokens created via IID auth tokens since + // those tokens are already hashed by APNS token as the has so creating a new + // token should automatically delete the old-token. + [self didDeleteFCMScopedTokensForCheckin:oldCheckinPreferences]; + } + }]; } - (void)didDeleteFCMScopedTokensForCheckin:(FIRMessagingCheckinPreferences *)checkin { @@ -656,43 +652,53 @@ - (void)setAPNSToken:(NSData *)APNSToken withUserInfo:(NSDictionary *)userInfo { isSandbox:isSandboxApp]; // Re-fetch any invalidated tokens automatically, this time with the current APNs token, so that - // they are up-to-date. - if (invalidatedTokens.count > 0) { + // they are up-to-date. Or this is a fresh install and no apns token stored yet. + if (invalidatedTokens.count > 0 || [_tokenStore cachedTokenInfos].count == 0) { FIRMessaging_WEAKIFY(self); - [self.installations - installationIDWithCompletion:^(NSString *_Nullable identifier, NSError *_Nullable error) { - FIRMessaging_STRONGIFY(self); - if (self == nil) { - FIRMessagingLoggerError(kFIRMessagingMessageCodeInstanceID017, - @"Instance ID shut down during token reset. Aborting"); - return; - } - if (self.currentAPNSInfo == nil) { - FIRMessagingLoggerError(kFIRMessagingMessageCodeInstanceID018, - @"apnsTokenData was set to nil during token reset. Aborting"); - return; - } - - NSMutableDictionary *tokenOptions = [@{ - kFIRMessagingTokenOptionsAPNSKey : self.currentAPNSInfo.deviceToken, - kFIRMessagingTokenOptionsAPNSIsSandboxKey : @(isSandboxApp) - } mutableCopy]; - if (self.firebaseAppID) { - tokenOptions[kFIRMessagingTokenOptionsFirebaseAppIDKey] = self.firebaseAppID; - } + [self.installations installationIDWithCompletion:^(NSString *_Nullable identifier, + NSError *_Nullable error) { + FIRMessaging_STRONGIFY(self); + if (self == nil) { + FIRMessagingLoggerError(kFIRMessagingMessageCodeInstanceID017, + @"Instance ID shut down during token reset. Aborting"); + return; + } + if (self.currentAPNSInfo == nil) { + FIRMessagingLoggerError(kFIRMessagingMessageCodeInstanceID018, + @"apnsTokenData was set to nil during token reset. Aborting"); + return; + } - for (FIRMessagingTokenInfo *tokenInfo in invalidatedTokens) { - [self fetchNewTokenWithAuthorizedEntity:tokenInfo.authorizedEntity - scope:tokenInfo.scope - instanceID:identifier - options:tokenOptions - handler:^(NSString *_Nullable token, - NSError *_Nullable error){ + NSMutableDictionary *tokenOptions = [@{ + kFIRMessagingTokenOptionsAPNSKey : self.currentAPNSInfo.deviceToken, + kFIRMessagingTokenOptionsAPNSIsSandboxKey : @(isSandboxApp) + } mutableCopy]; + if (self.firebaseAppID) { + tokenOptions[kFIRMessagingTokenOptionsFirebaseAppIDKey] = self.firebaseAppID; + } - }]; - } - }]; + for (FIRMessagingTokenInfo *tokenInfo in invalidatedTokens) { + [self fetchNewTokenWithAuthorizedEntity:tokenInfo.authorizedEntity + scope:tokenInfo.scope + instanceID:identifier + options:tokenOptions + handler:^(NSString *_Nullable token, + NSError *_Nullable error){ + // Do nothing as callback is not needed and the + // sub-funciton already handle errors. + }]; + } + if ([self->_tokenStore cachedTokenInfos].count == 0) { + [self tokenWithAuthorizedEntity:self.fcmSenderID + scope:kFIRMessagingDefaultTokenScope + options:tokenOptions + handler:^(NSString *_Nullable FCMToken, NSError *_Nullable error){ + // Do nothing as callback is not needed and the sub-funciton + // already handle errors. + }]; + } + }]; } } diff --git a/iOS/MyStudies/Pods/FirebaseMessaging/README.md b/iOS/MyStudies/Pods/FirebaseMessaging/README.md index 938e264b18..ce3a998b3c 100644 --- a/iOS/MyStudies/Pods/FirebaseMessaging/README.md +++ b/iOS/MyStudies/Pods/FirebaseMessaging/README.md @@ -27,7 +27,6 @@ [![Actions Status][gh-storage-badge]][gh-actions] [![Actions Status][gh-symbolcollision-badge]][gh-actions] [![Actions Status][gh-zip-badge]][gh-actions] -[![Travis](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk) # Firebase Apple Open Source Development @@ -35,21 +34,16 @@ This repository contains all Apple platform Firebase SDK source except FirebaseA and FirebaseML. Firebase is an app development platform with tools to help you build, grow and -monetize your app. More information about Firebase can be found at -[https://firebase.google.com](https://firebase.google.com). - -The repository also includes GoogleUtilities and GoogleDataTransport source -which are utilities used by Firebase and other Google products. - -**Note** _FirebaseCombineSwift_ contains support for Apple's Combine framework. This module is currently under development, and not yet supported for use in production environments. Fore more details, please refer to the [docs](FirebaseCombineSwift/README.md). +monetize your app. More information about Firebase can be found on the +[official Firebase website](https://firebase.google.com). ## Installation See the subsections below for details about the different installation methods. -1. [Standard pod install](README.md#standard-pod-install) -1. [Swift Package Manager](SwiftPackageManager.md) -1. [Installing from the GitHub repo](README.md#installing-from-github) -1. [Experimental Carthage](README.md#carthage-ios-only) +1. [Standard pod install](#standard-pod-install) +1. [Swift Package Manager](#swift-package-manager) +1. [Installing from the GitHub repo](#installing-from-github) +1. [Experimental Carthage](#carthage-ios-only) ### Standard pod install @@ -59,7 +53,7 @@ Go to ### Swift Package Manager Instructions for [Swift Package Manager](https://swift.org/package-manager/) support can be -found at [SwiftPackageManager.md](SwiftPackageManager.md). +found at [SwiftPackageManager](SwiftPackageManager.md) Markdown file. ### Installing from GitHub @@ -93,8 +87,7 @@ pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk' ### Carthage (iOS only) Instructions for the experimental Carthage distribution are at -[Carthage](Carthage.md). If you have a new Mac with an Apple silicon chip, please see -[these instructions](AppleSilicon.md). +[Carthage](Carthage.md). ### Using Firebase from a Framework or a library @@ -130,7 +123,7 @@ those platforms. Since 10.2, Xcode does not properly handle multi-platform CocoaPods workspaces. Firestore has a self contained Xcode project. See -[Firestore/README.md](Firestore/README.md). +[Firestore/README](Firestore/README.md) Markdown file. #### Development for Catalyst * `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios` @@ -156,11 +149,11 @@ Alternatively disable signing in each target: ### Adding a New Firebase Pod -See [AddNewPod.md](AddNewPod.md). +See [AddNewPod](AddNewPod.md) Markdown file. ### Managing Headers and Imports -See [HeadersImports.md](HeadersImports.md). +See [HeadersImports](HeadersImports.md) Markdown file. ### Code Formatting @@ -172,7 +165,7 @@ GitHub Actions will verify that any code changes are done in a style compliant way. Install `clang-format` and `mint`: ```console -brew install clang-format@12 +brew install clang-format@13 brew install mint ``` @@ -194,7 +187,7 @@ identifier (e.g. `com.google.Database-Example`) ### Coverage Report Generation -See [scripts/code_coverage_report/README.md](scripts/code_coverage_report/README.md). +See [scripts/code_coverage_report/README](scripts/code_coverage_report/README.md) Markdown file. ## Specific Component Instructions See the sections below for any special instructions for those components. @@ -250,61 +243,49 @@ physical device. ## Building with Firebase on Apple platforms -At this time, not all of Firebase's products are available across all Apple platforms. However, -Firebase is constantly evolving and community supported efforts have helped expand Firebase's support. -To keep up with the latest info regarding Firebase's support across Apple platforms, refer to +Firebase 8.9.0 introduces official beta support for macOS, Catalyst, and tvOS. watchOS continues +to be community supported. Thanks to community contributions for many of the multi-platform PRs. + +At this time, most of Firebase's products are available across Apple platforms. There are still +a few gaps, especially on watchOS. For details about the current support matrix, see [this chart](https://firebase.google.com/docs/ios/learn-more#firebase_library_support_by_platform) in Firebase's documentation. -### Community Supported Efforts - -We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are -very grateful! We'd like to empower as many developers as we can to be able to use Firebase and -participate in the Firebase community. - -#### tvOS, macOS, watchOS and Catalyst +### watchOS Thanks to contributions from the community, many of Firebase SDKs now compile, run unit tests, and -work on tvOS, macOS, watchOS and Catalyst. +work on watchOS. See the [Independent Watch App Sample](Example/watchOSSample). -For tvOS, see the [Sample](Example/tvOSSample). -For watchOS, currently only Messaging, Storage and Crashlytics (and their dependencies) have limited -support. See the [Independent Watch App Sample](Example/watchOSSample). - -Keep in mind that macOS, tvOS, watchOS and Catalyst are not officially supported by Firebase, and -this repository is actively developed primarily for iOS. While we can catch basic unit test issues -with GitHub Actions, there may be some changes where the SDK no longer works as expected on macOS, -tvOS or watchOS. If you encounter this, please +Keep in mind that watchOS is not officially supported by Firebase. While we can catch basic unit +test issues with GitHub Actions, there may be some changes where the SDK no longer works as expected +on watchOS. If you encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues). During app setup in the console, you may get to a step that mentions something like "Checking if the -app has communicated with our servers". This relies on Analytics and will not work on -macOS/tvOS/watchOS/Catalyst. +app has communicated with our servers". This relies on Analytics and will not work on watchOS. **It's safe to ignore the message and continue**, the rest of the SDKs will work as expected. -#### Additional MacOS and Catalyst Notes - -* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability` -to Build Settings. -* For Catalyst, FirebaseFirestore requires signing the -[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681). - #### Additional Crashlytics Notes * watchOS has limited support. Due to watchOS restrictions, mach exceptions and signal crashes are not recorded. (Crashes in SwiftUI are generated as mach exceptions, so will not be recorded) +## Combine +Thanks to contributions from the community, _FirebaseCombineSwift_ contains support for Apple's Combine +framework. This module is currently under development, and not yet supported for use in production +environments. Fore more details, please refer to the [docs](FirebaseCombineSwift/README.md). + ## Roadmap -See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source +See [Roadmap](ROADMAP.md) for more about the Firebase Apple SDK Open Source plans and directions. ## Contributing See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase -iOS SDK. +Apple SDK. ## License -The contents of this repository is licensed under the +The contents of this repository are licensed under the [Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0). Your use of Firebase is governed by the diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/Info.plist b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/Info.plist new file mode 100644 index 0000000000..46438e97a0 --- /dev/null +++ b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/Info.plist @@ -0,0 +1,97 @@ + + + + + AvailableLibraries + + + LibraryIdentifier + ios-arm64_x86_64-maccatalyst + LibraryPath + GoogleAppMeasurement.framework + SupportedArchitectures + + arm64 + x86_64 + + SupportedPlatform + ios + SupportedPlatformVariant + maccatalyst + + + LibraryIdentifier + ios-arm64_i386_x86_64-simulator + LibraryPath + GoogleAppMeasurement.framework + SupportedArchitectures + + arm64 + i386 + x86_64 + + SupportedPlatform + ios + SupportedPlatformVariant + simulator + + + LibraryIdentifier + tvos-arm64_x86_64-simulator + LibraryPath + GoogleAppMeasurement.framework + SupportedArchitectures + + arm64 + x86_64 + + SupportedPlatform + tvos + SupportedPlatformVariant + simulator + + + LibraryIdentifier + macos-arm64_x86_64 + LibraryPath + GoogleAppMeasurement.framework + SupportedArchitectures + + arm64 + x86_64 + + SupportedPlatform + macos + + + LibraryIdentifier + tvos-arm64 + LibraryPath + GoogleAppMeasurement.framework + SupportedArchitectures + + arm64 + + SupportedPlatform + tvos + + + LibraryIdentifier + ios-arm64_armv7 + LibraryPath + GoogleAppMeasurement.framework + SupportedArchitectures + + arm64 + armv7 + + SupportedPlatform + ios + + + CFBundlePackageType + XFWK + XCFrameworkFormatVersion + 1.0 + + diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_armv7/GoogleAppMeasurement.framework/GoogleAppMeasurement b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_armv7/GoogleAppMeasurement.framework/GoogleAppMeasurement new file mode 100644 index 0000000000..a1da029242 Binary files /dev/null and b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_armv7/GoogleAppMeasurement.framework/GoogleAppMeasurement differ diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_armv7/GoogleAppMeasurement.framework/Info.plist b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_armv7/GoogleAppMeasurement.framework/Info.plist new file mode 100644 index 0000000000..d38c8d1e36 --- /dev/null +++ b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_armv7/GoogleAppMeasurement.framework/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleExecutable + GoogleAppMeasurement + CFBundleIdentifier + com.firebase.Firebase-GoogleAppMeasurement + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + GoogleAppMeasurement + CFBundlePackageType + FMWK + CFBundleVersion + 8.12.0 + DTSDKName + iphonesimulator11.2 + + diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_armv7/GoogleAppMeasurement.framework/Modules/module.modulemap b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_armv7/GoogleAppMeasurement.framework/Modules/module.modulemap new file mode 100644 index 0000000000..d3499f09cc --- /dev/null +++ b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_armv7/GoogleAppMeasurement.framework/Modules/module.modulemap @@ -0,0 +1,10 @@ +framework module GoogleAppMeasurement { +umbrella header "GoogleAppMeasurement-umbrella.h" +export * +module * { export * } + link framework "Security" + link framework "SystemConfiguration" + link "c++" + link "sqlite3" + link "z" +} diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAppMeasurement.framework/GoogleAppMeasurement b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAppMeasurement.framework/GoogleAppMeasurement new file mode 100644 index 0000000000..e8deb21db8 Binary files /dev/null and b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAppMeasurement.framework/GoogleAppMeasurement differ diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAppMeasurement.framework/Info.plist b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAppMeasurement.framework/Info.plist new file mode 100644 index 0000000000..d38c8d1e36 --- /dev/null +++ b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAppMeasurement.framework/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleExecutable + GoogleAppMeasurement + CFBundleIdentifier + com.firebase.Firebase-GoogleAppMeasurement + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + GoogleAppMeasurement + CFBundlePackageType + FMWK + CFBundleVersion + 8.12.0 + DTSDKName + iphonesimulator11.2 + + diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAppMeasurement.framework/Modules/module.modulemap b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAppMeasurement.framework/Modules/module.modulemap new file mode 100644 index 0000000000..d3499f09cc --- /dev/null +++ b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAppMeasurement.framework/Modules/module.modulemap @@ -0,0 +1,10 @@ +framework module GoogleAppMeasurement { +umbrella header "GoogleAppMeasurement-umbrella.h" +export * +module * { export * } + link framework "Security" + link framework "SystemConfiguration" + link "c++" + link "sqlite3" + link "z" +} diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAppMeasurement.framework/GoogleAppMeasurement b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAppMeasurement.framework/GoogleAppMeasurement new file mode 100644 index 0000000000..e0b928a13e Binary files /dev/null and b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAppMeasurement.framework/GoogleAppMeasurement differ diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAppMeasurement.framework/Info.plist b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAppMeasurement.framework/Info.plist new file mode 100644 index 0000000000..d38c8d1e36 --- /dev/null +++ b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAppMeasurement.framework/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleExecutable + GoogleAppMeasurement + CFBundleIdentifier + com.firebase.Firebase-GoogleAppMeasurement + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + GoogleAppMeasurement + CFBundlePackageType + FMWK + CFBundleVersion + 8.12.0 + DTSDKName + iphonesimulator11.2 + + diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAppMeasurement.framework/Modules/module.modulemap b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAppMeasurement.framework/Modules/module.modulemap new file mode 100644 index 0000000000..d3499f09cc --- /dev/null +++ b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAppMeasurement.framework/Modules/module.modulemap @@ -0,0 +1,10 @@ +framework module GoogleAppMeasurement { +umbrella header "GoogleAppMeasurement-umbrella.h" +export * +module * { export * } + link framework "Security" + link framework "SystemConfiguration" + link "c++" + link "sqlite3" + link "z" +} diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/macos-arm64_x86_64/GoogleAppMeasurement.framework/GoogleAppMeasurement b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/macos-arm64_x86_64/GoogleAppMeasurement.framework/GoogleAppMeasurement new file mode 100644 index 0000000000..09733e246e Binary files /dev/null and b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/macos-arm64_x86_64/GoogleAppMeasurement.framework/GoogleAppMeasurement differ diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/macos-arm64_x86_64/GoogleAppMeasurement.framework/Info.plist b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/macos-arm64_x86_64/GoogleAppMeasurement.framework/Info.plist new file mode 100644 index 0000000000..d38c8d1e36 --- /dev/null +++ b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/macos-arm64_x86_64/GoogleAppMeasurement.framework/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleExecutable + GoogleAppMeasurement + CFBundleIdentifier + com.firebase.Firebase-GoogleAppMeasurement + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + GoogleAppMeasurement + CFBundlePackageType + FMWK + CFBundleVersion + 8.12.0 + DTSDKName + iphonesimulator11.2 + + diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/macos-arm64_x86_64/GoogleAppMeasurement.framework/Modules/module.modulemap b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/macos-arm64_x86_64/GoogleAppMeasurement.framework/Modules/module.modulemap new file mode 100644 index 0000000000..d3499f09cc --- /dev/null +++ b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/macos-arm64_x86_64/GoogleAppMeasurement.framework/Modules/module.modulemap @@ -0,0 +1,10 @@ +framework module GoogleAppMeasurement { +umbrella header "GoogleAppMeasurement-umbrella.h" +export * +module * { export * } + link framework "Security" + link framework "SystemConfiguration" + link "c++" + link "sqlite3" + link "z" +} diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/tvos-arm64/GoogleAppMeasurement.framework/GoogleAppMeasurement b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/tvos-arm64/GoogleAppMeasurement.framework/GoogleAppMeasurement new file mode 100644 index 0000000000..c981ea725c Binary files /dev/null and b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/tvos-arm64/GoogleAppMeasurement.framework/GoogleAppMeasurement differ diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/tvos-arm64/GoogleAppMeasurement.framework/Info.plist b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/tvos-arm64/GoogleAppMeasurement.framework/Info.plist new file mode 100644 index 0000000000..d38c8d1e36 --- /dev/null +++ b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/tvos-arm64/GoogleAppMeasurement.framework/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleExecutable + GoogleAppMeasurement + CFBundleIdentifier + com.firebase.Firebase-GoogleAppMeasurement + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + GoogleAppMeasurement + CFBundlePackageType + FMWK + CFBundleVersion + 8.12.0 + DTSDKName + iphonesimulator11.2 + + diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/tvos-arm64/GoogleAppMeasurement.framework/Modules/module.modulemap b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/tvos-arm64/GoogleAppMeasurement.framework/Modules/module.modulemap new file mode 100644 index 0000000000..d3499f09cc --- /dev/null +++ b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/tvos-arm64/GoogleAppMeasurement.framework/Modules/module.modulemap @@ -0,0 +1,10 @@ +framework module GoogleAppMeasurement { +umbrella header "GoogleAppMeasurement-umbrella.h" +export * +module * { export * } + link framework "Security" + link framework "SystemConfiguration" + link "c++" + link "sqlite3" + link "z" +} diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/tvos-arm64_x86_64-simulator/GoogleAppMeasurement.framework/GoogleAppMeasurement b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/tvos-arm64_x86_64-simulator/GoogleAppMeasurement.framework/GoogleAppMeasurement new file mode 100644 index 0000000000..a0a2036484 Binary files /dev/null and b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/tvos-arm64_x86_64-simulator/GoogleAppMeasurement.framework/GoogleAppMeasurement differ diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/tvos-arm64_x86_64-simulator/GoogleAppMeasurement.framework/Info.plist b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/tvos-arm64_x86_64-simulator/GoogleAppMeasurement.framework/Info.plist new file mode 100644 index 0000000000..d38c8d1e36 --- /dev/null +++ b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/tvos-arm64_x86_64-simulator/GoogleAppMeasurement.framework/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleExecutable + GoogleAppMeasurement + CFBundleIdentifier + com.firebase.Firebase-GoogleAppMeasurement + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + GoogleAppMeasurement + CFBundlePackageType + FMWK + CFBundleVersion + 8.12.0 + DTSDKName + iphonesimulator11.2 + + diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/tvos-arm64_x86_64-simulator/GoogleAppMeasurement.framework/Modules/module.modulemap b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/tvos-arm64_x86_64-simulator/GoogleAppMeasurement.framework/Modules/module.modulemap new file mode 100644 index 0000000000..d3499f09cc --- /dev/null +++ b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/tvos-arm64_x86_64-simulator/GoogleAppMeasurement.framework/Modules/module.modulemap @@ -0,0 +1,10 @@ +framework module GoogleAppMeasurement { +umbrella header "GoogleAppMeasurement-umbrella.h" +export * +module * { export * } + link framework "Security" + link framework "SystemConfiguration" + link "c++" + link "sqlite3" + link "z" +} diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/Info.plist b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/Info.plist new file mode 100644 index 0000000000..151096eee7 --- /dev/null +++ b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/Info.plist @@ -0,0 +1,97 @@ + + + + + AvailableLibraries + + + LibraryIdentifier + macos-arm64_x86_64 + LibraryPath + GoogleAppMeasurementIdentitySupport.framework + SupportedArchitectures + + arm64 + x86_64 + + SupportedPlatform + macos + + + LibraryIdentifier + ios-arm64_x86_64-maccatalyst + LibraryPath + GoogleAppMeasurementIdentitySupport.framework + SupportedArchitectures + + arm64 + x86_64 + + SupportedPlatform + ios + SupportedPlatformVariant + maccatalyst + + + LibraryIdentifier + ios-arm64_armv7 + LibraryPath + GoogleAppMeasurementIdentitySupport.framework + SupportedArchitectures + + arm64 + armv7 + + SupportedPlatform + ios + + + LibraryIdentifier + tvos-arm64 + LibraryPath + GoogleAppMeasurementIdentitySupport.framework + SupportedArchitectures + + arm64 + + SupportedPlatform + tvos + + + LibraryIdentifier + ios-arm64_i386_x86_64-simulator + LibraryPath + GoogleAppMeasurementIdentitySupport.framework + SupportedArchitectures + + arm64 + i386 + x86_64 + + SupportedPlatform + ios + SupportedPlatformVariant + simulator + + + LibraryIdentifier + tvos-arm64_x86_64-simulator + LibraryPath + GoogleAppMeasurementIdentitySupport.framework + SupportedArchitectures + + arm64 + x86_64 + + SupportedPlatform + tvos + SupportedPlatformVariant + simulator + + + CFBundlePackageType + XFWK + XCFrameworkFormatVersion + 1.0 + + diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_armv7/GoogleAppMeasurementIdentitySupport.framework/GoogleAppMeasurementIdentitySupport b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_armv7/GoogleAppMeasurementIdentitySupport.framework/GoogleAppMeasurementIdentitySupport new file mode 100644 index 0000000000..ae0715738c Binary files /dev/null and b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_armv7/GoogleAppMeasurementIdentitySupport.framework/GoogleAppMeasurementIdentitySupport differ diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_armv7/GoogleAppMeasurementIdentitySupport.framework/Info.plist b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_armv7/GoogleAppMeasurementIdentitySupport.framework/Info.plist new file mode 100644 index 0000000000..2a56ba45c2 --- /dev/null +++ b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_armv7/GoogleAppMeasurementIdentitySupport.framework/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleExecutable + GoogleAppMeasurementIdentitySupport + CFBundleIdentifier + com.firebase.Firebase-GoogleAppMeasurementIdentitySupport + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + GoogleAppMeasurementIdentitySupport + CFBundlePackageType + FMWK + CFBundleVersion + 8.12.0 + DTSDKName + iphonesimulator11.2 + + diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_armv7/GoogleAppMeasurementIdentitySupport.framework/Modules/module.modulemap b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_armv7/GoogleAppMeasurementIdentitySupport.framework/Modules/module.modulemap new file mode 100644 index 0000000000..4a42c5deb4 --- /dev/null +++ b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_armv7/GoogleAppMeasurementIdentitySupport.framework/Modules/module.modulemap @@ -0,0 +1,5 @@ +framework module GoogleAppMeasurementIdentitySupport { +umbrella header "GoogleAppMeasurementIdentitySupport-umbrella.h" +export * +module * { export * } +} diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAppMeasurementIdentitySupport.framework/GoogleAppMeasurementIdentitySupport b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAppMeasurementIdentitySupport.framework/GoogleAppMeasurementIdentitySupport new file mode 100644 index 0000000000..664f39fb31 Binary files /dev/null and b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAppMeasurementIdentitySupport.framework/GoogleAppMeasurementIdentitySupport differ diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAppMeasurementIdentitySupport.framework/Info.plist b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAppMeasurementIdentitySupport.framework/Info.plist new file mode 100644 index 0000000000..2a56ba45c2 --- /dev/null +++ b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAppMeasurementIdentitySupport.framework/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleExecutable + GoogleAppMeasurementIdentitySupport + CFBundleIdentifier + com.firebase.Firebase-GoogleAppMeasurementIdentitySupport + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + GoogleAppMeasurementIdentitySupport + CFBundlePackageType + FMWK + CFBundleVersion + 8.12.0 + DTSDKName + iphonesimulator11.2 + + diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAppMeasurementIdentitySupport.framework/Modules/module.modulemap b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAppMeasurementIdentitySupport.framework/Modules/module.modulemap new file mode 100644 index 0000000000..4a42c5deb4 --- /dev/null +++ b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAppMeasurementIdentitySupport.framework/Modules/module.modulemap @@ -0,0 +1,5 @@ +framework module GoogleAppMeasurementIdentitySupport { +umbrella header "GoogleAppMeasurementIdentitySupport-umbrella.h" +export * +module * { export * } +} diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAppMeasurementIdentitySupport.framework/GoogleAppMeasurementIdentitySupport b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAppMeasurementIdentitySupport.framework/GoogleAppMeasurementIdentitySupport new file mode 100644 index 0000000000..75c6404765 Binary files /dev/null and b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAppMeasurementIdentitySupport.framework/GoogleAppMeasurementIdentitySupport differ diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAppMeasurementIdentitySupport.framework/Info.plist b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAppMeasurementIdentitySupport.framework/Info.plist new file mode 100644 index 0000000000..2a56ba45c2 --- /dev/null +++ b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAppMeasurementIdentitySupport.framework/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleExecutable + GoogleAppMeasurementIdentitySupport + CFBundleIdentifier + com.firebase.Firebase-GoogleAppMeasurementIdentitySupport + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + GoogleAppMeasurementIdentitySupport + CFBundlePackageType + FMWK + CFBundleVersion + 8.12.0 + DTSDKName + iphonesimulator11.2 + + diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAppMeasurementIdentitySupport.framework/Modules/module.modulemap b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAppMeasurementIdentitySupport.framework/Modules/module.modulemap new file mode 100644 index 0000000000..4a42c5deb4 --- /dev/null +++ b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAppMeasurementIdentitySupport.framework/Modules/module.modulemap @@ -0,0 +1,5 @@ +framework module GoogleAppMeasurementIdentitySupport { +umbrella header "GoogleAppMeasurementIdentitySupport-umbrella.h" +export * +module * { export * } +} diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/macos-arm64_x86_64/GoogleAppMeasurementIdentitySupport.framework/GoogleAppMeasurementIdentitySupport b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/macos-arm64_x86_64/GoogleAppMeasurementIdentitySupport.framework/GoogleAppMeasurementIdentitySupport new file mode 100644 index 0000000000..9cf5e5372a Binary files /dev/null and b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/macos-arm64_x86_64/GoogleAppMeasurementIdentitySupport.framework/GoogleAppMeasurementIdentitySupport differ diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/macos-arm64_x86_64/GoogleAppMeasurementIdentitySupport.framework/Info.plist b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/macos-arm64_x86_64/GoogleAppMeasurementIdentitySupport.framework/Info.plist new file mode 100644 index 0000000000..2a56ba45c2 --- /dev/null +++ b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/macos-arm64_x86_64/GoogleAppMeasurementIdentitySupport.framework/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleExecutable + GoogleAppMeasurementIdentitySupport + CFBundleIdentifier + com.firebase.Firebase-GoogleAppMeasurementIdentitySupport + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + GoogleAppMeasurementIdentitySupport + CFBundlePackageType + FMWK + CFBundleVersion + 8.12.0 + DTSDKName + iphonesimulator11.2 + + diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/macos-arm64_x86_64/GoogleAppMeasurementIdentitySupport.framework/Modules/module.modulemap b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/macos-arm64_x86_64/GoogleAppMeasurementIdentitySupport.framework/Modules/module.modulemap new file mode 100644 index 0000000000..4a42c5deb4 --- /dev/null +++ b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/macos-arm64_x86_64/GoogleAppMeasurementIdentitySupport.framework/Modules/module.modulemap @@ -0,0 +1,5 @@ +framework module GoogleAppMeasurementIdentitySupport { +umbrella header "GoogleAppMeasurementIdentitySupport-umbrella.h" +export * +module * { export * } +} diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/tvos-arm64/GoogleAppMeasurementIdentitySupport.framework/GoogleAppMeasurementIdentitySupport b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/tvos-arm64/GoogleAppMeasurementIdentitySupport.framework/GoogleAppMeasurementIdentitySupport new file mode 100644 index 0000000000..2ada1b9bf0 Binary files /dev/null and b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/tvos-arm64/GoogleAppMeasurementIdentitySupport.framework/GoogleAppMeasurementIdentitySupport differ diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/tvos-arm64/GoogleAppMeasurementIdentitySupport.framework/Info.plist b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/tvos-arm64/GoogleAppMeasurementIdentitySupport.framework/Info.plist new file mode 100644 index 0000000000..2a56ba45c2 --- /dev/null +++ b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/tvos-arm64/GoogleAppMeasurementIdentitySupport.framework/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleExecutable + GoogleAppMeasurementIdentitySupport + CFBundleIdentifier + com.firebase.Firebase-GoogleAppMeasurementIdentitySupport + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + GoogleAppMeasurementIdentitySupport + CFBundlePackageType + FMWK + CFBundleVersion + 8.12.0 + DTSDKName + iphonesimulator11.2 + + diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/tvos-arm64/GoogleAppMeasurementIdentitySupport.framework/Modules/module.modulemap b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/tvos-arm64/GoogleAppMeasurementIdentitySupport.framework/Modules/module.modulemap new file mode 100644 index 0000000000..4a42c5deb4 --- /dev/null +++ b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/tvos-arm64/GoogleAppMeasurementIdentitySupport.framework/Modules/module.modulemap @@ -0,0 +1,5 @@ +framework module GoogleAppMeasurementIdentitySupport { +umbrella header "GoogleAppMeasurementIdentitySupport-umbrella.h" +export * +module * { export * } +} diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/tvos-arm64_x86_64-simulator/GoogleAppMeasurementIdentitySupport.framework/GoogleAppMeasurementIdentitySupport b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/tvos-arm64_x86_64-simulator/GoogleAppMeasurementIdentitySupport.framework/GoogleAppMeasurementIdentitySupport new file mode 100644 index 0000000000..4934044e4e Binary files /dev/null and b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/tvos-arm64_x86_64-simulator/GoogleAppMeasurementIdentitySupport.framework/GoogleAppMeasurementIdentitySupport differ diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/tvos-arm64_x86_64-simulator/GoogleAppMeasurementIdentitySupport.framework/Info.plist b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/tvos-arm64_x86_64-simulator/GoogleAppMeasurementIdentitySupport.framework/Info.plist new file mode 100644 index 0000000000..2a56ba45c2 --- /dev/null +++ b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/tvos-arm64_x86_64-simulator/GoogleAppMeasurementIdentitySupport.framework/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleExecutable + GoogleAppMeasurementIdentitySupport + CFBundleIdentifier + com.firebase.Firebase-GoogleAppMeasurementIdentitySupport + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + GoogleAppMeasurementIdentitySupport + CFBundlePackageType + FMWK + CFBundleVersion + 8.12.0 + DTSDKName + iphonesimulator11.2 + + diff --git a/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/tvos-arm64_x86_64-simulator/GoogleAppMeasurementIdentitySupport.framework/Modules/module.modulemap b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/tvos-arm64_x86_64-simulator/GoogleAppMeasurementIdentitySupport.framework/Modules/module.modulemap new file mode 100644 index 0000000000..4a42c5deb4 --- /dev/null +++ b/iOS/MyStudies/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/tvos-arm64_x86_64-simulator/GoogleAppMeasurementIdentitySupport.framework/Modules/module.modulemap @@ -0,0 +1,5 @@ +framework module GoogleAppMeasurementIdentitySupport { +umbrella header "GoogleAppMeasurementIdentitySupport-umbrella.h" +export * +module * { export * } +} diff --git a/iOS/MyStudies/Pods/GoogleDataTransport/GoogleDataTransport/GDTCCTLibrary/GDTCCTUploadOperation.m b/iOS/MyStudies/Pods/GoogleDataTransport/GoogleDataTransport/GDTCCTLibrary/GDTCCTUploadOperation.m index 4146028464..f3887dfc11 100644 --- a/iOS/MyStudies/Pods/GoogleDataTransport/GoogleDataTransport/GDTCCTLibrary/GDTCCTUploadOperation.m +++ b/iOS/MyStudies/Pods/GoogleDataTransport/GoogleDataTransport/GDTCCTLibrary/GDTCCTUploadOperation.m @@ -549,7 +549,7 @@ - (void)finishOperation { } } -- (void)main { +- (void)start { [self startOperation]; GDTCORLogDebug(@"Upload operation started: %@", self); diff --git a/iOS/MyStudies/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORAssert.m b/iOS/MyStudies/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORAssert.m index e8f95ad501..14462aea8a 100644 --- a/iOS/MyStudies/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORAssert.m +++ b/iOS/MyStudies/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORAssert.m @@ -24,9 +24,8 @@ GDTCORAssertionBlock GDTCORAssertionBlockToRunInstead(void) { if (assertionBlockSEL) { IMP assertionBlockIMP = [GDTCORAssertClass methodForSelector:assertionBlockSEL]; if (assertionBlockIMP) { - GDTCORAssertionBlock assertionBlock = - ((GDTCORAssertionBlock(*)(id, SEL))assertionBlockIMP)(GDTCORAssertClass, - assertionBlockSEL); + GDTCORAssertionBlock assertionBlock = ((GDTCORAssertionBlock(*)(id, SEL))assertionBlockIMP)( + GDTCORAssertClass, assertionBlockSEL); if (assertionBlock) { return assertionBlock; } diff --git a/iOS/MyStudies/Pods/GoogleDataTransport/README.md b/iOS/MyStudies/Pods/GoogleDataTransport/README.md index b76e58a89a..2633a79f8e 100644 --- a/iOS/MyStudies/Pods/GoogleDataTransport/README.md +++ b/iOS/MyStudies/Pods/GoogleDataTransport/README.md @@ -89,7 +89,7 @@ The release process is as follows: It's recommended to point to the `GoogleDataTransport.podspec` in `staging` to make sure the correct spec is being published. ```console - pod trunk push ~/.cocoapods/repos/staging/GoogleDataTransport.podspec --skip-tests + pod trunk push ~/.cocoapods/repos/staging/GoogleDataTransport/{version}/GoogleDataTransport.podspec --skip-tests ``` The pod push was successful if the above command logs: `🚀 GoogleDataTransport ({version}) successfully published`. @@ -209,7 +209,7 @@ GitHub Actions will verify that any code changes are done in a style compliant way. Install `clang-format` and `mint`: ```console -brew install clang-format@12 +brew install clang-format@13 brew install mint ``` diff --git a/iOS/MyStudies/Pods/GoogleUtilities/GoogleUtilities/Environment/GULHeartbeatDateStorage.m b/iOS/MyStudies/Pods/GoogleUtilities/GoogleUtilities/Environment/GULHeartbeatDateStorage.m index 25ee5f48e0..f1d8ddccec 100644 --- a/iOS/MyStudies/Pods/GoogleUtilities/GoogleUtilities/Environment/GULHeartbeatDateStorage.m +++ b/iOS/MyStudies/Pods/GoogleUtilities/GoogleUtilities/Environment/GULHeartbeatDateStorage.m @@ -20,8 +20,7 @@ NSString *const kGULHeartbeatStorageDirectory = @"Google/FIRApp"; @interface GULHeartbeatDateStorage () -/** The storage to store the date of the last sent heartbeat. */ -@property(nonatomic, readonly) NSFileCoordinator *fileCoordinator; + /** The name of the file that stores heartbeat information. */ @property(nonatomic, readonly) NSString *fileName; @end @@ -35,7 +34,6 @@ - (instancetype)initWithFileName:(NSString *)fileName { self = [super init]; if (self) { - _fileCoordinator = [[NSFileCoordinator alloc] initWithFilePresenter:nil]; _fileName = fileName; } return self; @@ -74,59 +72,46 @@ - (NSURL *)directoryPathURL { * @param directoryPathURL The path to the directory that needs to exist. */ - (void)checkAndCreateDirectory:(NSURL *)directoryPathURL { - NSError *fileCoordinatorError = nil; - [self.fileCoordinator - coordinateWritingItemAtURL:directoryPathURL - options:0 - error:&fileCoordinatorError - byAccessor:^(NSURL *writingDirectoryURL) { - NSError *error; - if (![writingDirectoryURL checkResourceIsReachableAndReturnError:&error]) { - NSError *error; - [[NSFileManager defaultManager] createDirectoryAtURL:writingDirectoryURL - withIntermediateDirectories:YES - attributes:nil - error:&error]; - } - }]; + NSError *error; + if (![directoryPathURL checkResourceIsReachableAndReturnError:&error]) { + NSError *error; + [[NSFileManager defaultManager] createDirectoryAtURL:directoryPathURL + withIntermediateDirectories:YES + attributes:nil + error:&error]; + } } - (nullable NSDate *)heartbeatDateForTag:(NSString *)tag { - __block NSDictionary *heartbeatDictionary; - NSError *error; - [self.fileCoordinator coordinateReadingItemAtURL:self.fileURL - options:0 - error:&error - byAccessor:^(NSURL *readingURL) { - heartbeatDictionary = - [self heartbeatDictionaryWithFileURL:readingURL]; - }]; - NSDate *heartbeatDate = heartbeatDictionary[tag]; - if (![heartbeatDate isKindOfClass:[NSDate class]]) { - return nil; + @synchronized(self.class) { + NSDictionary *heartbeatDictionary = [self heartbeatDictionaryWithFileURL:self.fileURL]; + NSDate *heartbeatDate = heartbeatDictionary[tag]; + + // Validate the value type. If the storage file was corrupted or updated with a different format + // by a newer SDK version the value type may be different. + if (![heartbeatDate isKindOfClass:[NSDate class]]) { + heartbeatDate = nil; + } + + return heartbeatDate; } - return heartbeatDate; } - (BOOL)setHearbeatDate:(NSDate *)date forTag:(NSString *)tag { - NSError *error; - __block BOOL isSuccess = false; - [self.fileCoordinator - coordinateReadingItemAtURL:self.fileURL - options:0 - writingItemAtURL:self.fileURL - options:0 - error:&error - byAccessor:^(NSURL *readingURL, NSURL *writingURL) { - NSMutableDictionary *heartbeatDictionary = - [[self heartbeatDictionaryWithFileURL:readingURL] mutableCopy]; - heartbeatDictionary[tag] = date; - NSError *error; - isSuccess = [self writeDictionary:[heartbeatDictionary copy] - forWritingURL:writingURL - error:&error]; - }]; - return isSuccess; + // Synchronize on the class to ensure that the different instances of the class will not access + // the same file concurrently. + // TODO: Consider a different synchronization strategy here and in `-heartbeatDateForTag:` method. + // Currently no heartbeats can be read/written concurrently even if they are in different files. + @synchronized(self.class) { + NSMutableDictionary *heartbeatDictionary = + [[self heartbeatDictionaryWithFileURL:self.fileURL] mutableCopy]; + heartbeatDictionary[tag] = date; + NSError *error; + BOOL isSuccess = [self writeDictionary:[heartbeatDictionary copy] + forWritingURL:self.fileURL + error:&error]; + return isSuccess; + } } - (NSDictionary *)heartbeatDictionaryWithFileURL:(NSURL *)readingFileURL { diff --git a/iOS/MyStudies/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GoogleUtilities/GULAppEnvironmentUtil.h b/iOS/MyStudies/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GoogleUtilities/GULAppEnvironmentUtil.h index d2bb935b7a..72c46c26fa 100644 --- a/iOS/MyStudies/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GoogleUtilities/GULAppEnvironmentUtil.h +++ b/iOS/MyStudies/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GoogleUtilities/GULAppEnvironmentUtil.h @@ -47,7 +47,7 @@ NS_ASSUME_NONNULL_BEGIN "Always `YES` because only iOS 8 and higher supported. The method will be removed."); /// @return YES if Swift runtime detected in the app. -+ (BOOL)hasSwiftRuntime; ++ (BOOL)hasSwiftRuntime __deprecated; /// @return An Apple platform. Possible values "ios", "tvos", "macos", "watchos", "maccatalyst". + (NSString *)applePlatform; diff --git a/iOS/MyStudies/Pods/GoogleUtilities/GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.m b/iOS/MyStudies/Pods/GoogleUtilities/GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.m index 0a26c699b2..0dca8990ad 100644 --- a/iOS/MyStudies/Pods/GoogleUtilities/GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.m +++ b/iOS/MyStudies/Pods/GoogleUtilities/GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.m @@ -17,6 +17,7 @@ #import #import #import +#import #import #import @@ -212,12 +213,32 @@ + (NSString *)deviceModel { static dispatch_once_t once; static NSString *deviceModel; +#if TARGET_OS_OSX || TARGET_OS_MACCATALYST + dispatch_once(&once, ^{ + // The `uname` function only returns x86_64 for Macs. Use `sysctlbyname` instead, but fall back + // to the `uname` function if it fails. + size_t size; + sysctlbyname("hw.model", NULL, &size, NULL, 0); + if (size > 0) { + char *machine = malloc(size); + sysctlbyname("hw.model", machine, &size, NULL, 0); + deviceModel = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding]; + free(machine); + } else { + struct utsname systemInfo; + if (uname(&systemInfo) == 0) { + deviceModel = [NSString stringWithUTF8String:systemInfo.machine]; + } + } + }); +#else dispatch_once(&once, ^{ struct utsname systemInfo; if (uname(&systemInfo) == 0) { deviceModel = [NSString stringWithUTF8String:systemInfo.machine]; } }); +#endif // TARGET_OS_OSX || TARGET_OS_MACCATALYST return deviceModel; } diff --git a/iOS/MyStudies/Pods/GoogleUtilities/GoogleUtilities/MethodSwizzler/GULSwizzler.m b/iOS/MyStudies/Pods/GoogleUtilities/GoogleUtilities/MethodSwizzler/GULSwizzler.m new file mode 100644 index 0000000000..7f0c82ee8d --- /dev/null +++ b/iOS/MyStudies/Pods/GoogleUtilities/GoogleUtilities/MethodSwizzler/GULSwizzler.m @@ -0,0 +1,153 @@ +// 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/MethodSwizzler/Public/GoogleUtilities/GULSwizzler.h" + +#import + +#ifdef DEBUG +#import "GoogleUtilities/Common/GULLoggerCodes.h" +#import "GoogleUtilities/Logger/Public/GoogleUtilities/GULLogger.h" + +static GULLoggerService kGULLoggerSwizzler = @"[GoogleUtilities/MethodSwizzler]"; +#endif + +dispatch_queue_t GetGULSwizzlingQueue(void) { + static dispatch_queue_t queue; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + queue = dispatch_queue_create("com.google.GULSwizzler", DISPATCH_QUEUE_SERIAL); + }); + return queue; +} + +@implementation GULSwizzler + ++ (void)swizzleClass:(Class)aClass + selector:(SEL)selector + isClassSelector:(BOOL)isClassSelector + withBlock:(nullable id)block { + dispatch_sync(GetGULSwizzlingQueue(), ^{ + NSAssert(selector, @"The selector cannot be NULL"); + NSAssert(aClass, @"The class cannot be Nil"); + Class resolvedClass = aClass; + Method method = nil; + if (isClassSelector) { + method = class_getClassMethod(aClass, selector); + resolvedClass = object_getClass(aClass); + } else { + method = class_getInstanceMethod(aClass, selector); + } + NSAssert(method, @"You're attempting to swizzle a method that doesn't exist. (%@, %@)", + NSStringFromClass(resolvedClass), NSStringFromSelector(selector)); + IMP newImp = imp_implementationWithBlock(block); +#ifdef DEBUG + IMP currentImp = class_getMethodImplementation(resolvedClass, selector); + Class class = NSClassFromString(@"GULSwizzlingCache"); + if (class) { + SEL cacheSelector = NSSelectorFromString(@"cacheCurrentIMP:forNewIMP:forClass:withSelector:"); + NSMethodSignature *methodSignature = [class methodSignatureForSelector:cacheSelector]; + if (methodSignature != nil) { + NSInvocation *inv = [NSInvocation invocationWithMethodSignature:methodSignature]; + [inv setSelector:cacheSelector]; + [inv setTarget:class]; + [inv setArgument:&(currentImp) atIndex:2]; + [inv setArgument:&(newImp) atIndex:3]; + [inv setArgument:&(resolvedClass) atIndex:4]; + [inv setArgument:(void *_Nonnull)&(selector) atIndex:5]; + [inv invoke]; + } + } +#endif + + const char *typeEncoding = method_getTypeEncoding(method); + __unused IMP originalImpOfClass = + class_replaceMethod(resolvedClass, selector, newImp, typeEncoding); + +#ifdef DEBUG + // If !originalImpOfClass, then the IMP came from a superclass. + if (originalImpOfClass) { + SEL selector = NSSelectorFromString(@"originalIMPOfCurrentIMP:"); + NSMethodSignature *methodSignature = [class methodSignatureForSelector:selector]; + if (methodSignature != nil) { + NSInvocation *inv = [NSInvocation invocationWithMethodSignature:methodSignature]; + [inv setSelector:selector]; + [inv setTarget:class]; + [inv setArgument:&(currentImp) atIndex:2]; + [inv invoke]; + IMP testOriginal; + [inv getReturnValue:&testOriginal]; + if (originalImpOfClass != testOriginal) { + GULLogWarning(kGULLoggerSwizzler, NO, + [NSString stringWithFormat:@"I-SWZ%06ld", + (long)kGULSwizzlerMessageCodeMethodSwizzling000], + @"Swizzling class: %@ SEL:%@ after it has been previously been swizzled.", + NSStringFromClass(resolvedClass), NSStringFromSelector(selector)); + } + } + } +#endif + }); +} + ++ (nullable IMP)currentImplementationForClass:(Class)aClass + selector:(SEL)selector + isClassSelector:(BOOL)isClassSelector { + NSAssert(selector, @"The selector cannot be NULL"); + NSAssert(aClass, @"The class cannot be Nil"); + if (selector == NULL || aClass == nil) { + return nil; + } + __block IMP currentIMP = nil; + dispatch_sync(GetGULSwizzlingQueue(), ^{ + Method method = nil; + if (isClassSelector) { + method = class_getClassMethod(aClass, selector); + } else { + method = class_getInstanceMethod(aClass, selector); + } + NSAssert(method, @"The Method for this class/selector combo doesn't exist (%@, %@).", + NSStringFromClass(aClass), NSStringFromSelector(selector)); + if (method == nil) { + return; + } + currentIMP = method_getImplementation(method); + NSAssert(currentIMP, @"The IMP for this class/selector combo doesn't exist (%@, %@).", + NSStringFromClass(aClass), NSStringFromSelector(selector)); + }); + return currentIMP; +} + ++ (BOOL)selector:(SEL)selector existsInClass:(Class)aClass isClassSelector:(BOOL)isClassSelector { + Method method = isClassSelector ? class_getClassMethod(aClass, selector) + : class_getInstanceMethod(aClass, selector); + return method != nil; +} + ++ (NSArray *)ivarObjectsForObject:(id)object { + NSMutableArray *array = [NSMutableArray array]; + unsigned int count; + Ivar *vars = class_copyIvarList([object class], &count); + for (NSUInteger i = 0; i < count; i++) { + const char *typeEncoding = ivar_getTypeEncoding(vars[i]); + // Check to see if the ivar is an object. + if (strncmp(typeEncoding, "@", 1) == 0) { + id ivarObject = object_getIvar(object, vars[i]); + [array addObject:ivarObject]; + } + } + free(vars); + return array; +} +@end diff --git a/iOS/MyStudies/Pods/GoogleUtilities/GoogleUtilities/MethodSwizzler/Public/GoogleUtilities/GULOriginalIMPConvenienceMacros.h b/iOS/MyStudies/Pods/GoogleUtilities/GoogleUtilities/MethodSwizzler/Public/GoogleUtilities/GULOriginalIMPConvenienceMacros.h new file mode 100644 index 0000000000..a33262af09 --- /dev/null +++ b/iOS/MyStudies/Pods/GoogleUtilities/GoogleUtilities/MethodSwizzler/Public/GoogleUtilities/GULOriginalIMPConvenienceMacros.h @@ -0,0 +1,207 @@ +/* + * 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. + */ + +/** + * GULOriginalIMPConvenienceMacros.h + * + * This header contains convenience macros for invoking the original IMP of a swizzled method. + */ + +/** + * Invokes original IMP when the original selector takes no arguments. + * + * @param __receivingObject The object on which the IMP is invoked. + * @param __swizzledSEL The selector used for swizzling. + * @param __returnType The return type of the original implementation. + * @param __originalIMP The original IMP. + */ +#define GUL_INVOKE_ORIGINAL_IMP0(__receivingObject, __swizzledSEL, __returnType, __originalIMP) \ + ((__returnType(*)(id, SEL))__originalIMP)(__receivingObject, __swizzledSEL) + +/** + * Invokes original IMP when the original selector takes 1 argument. + * + * @param __receivingObject The object on which the IMP is invoked. + * @param __swizzledSEL The selector used for swizzling. + * @param __returnType The return type of the original implementation. + * @param __originalIMP The original IMP. + * @param __arg1 The first argument. + */ +#define GUL_INVOKE_ORIGINAL_IMP1(__receivingObject, __swizzledSEL, __returnType, __originalIMP, \ + __arg1) \ + ((__returnType(*)(id, SEL, __typeof__(__arg1)))__originalIMP)(__receivingObject, __swizzledSEL, \ + __arg1) + +/** + * Invokes original IMP when the original selector takes 2 arguments. + * + * @param __receivingObject The object on which the IMP is invoked. + * @param __swizzledSEL The selector used for swizzling. + * @param __returnType The return type of the original implementation. + * @param __originalIMP The original IMP. + * @param __arg1 The first argument. + * @param __arg2 The second argument. + */ +#define GUL_INVOKE_ORIGINAL_IMP2(__receivingObject, __swizzledSEL, __returnType, __originalIMP, \ + __arg1, __arg2) \ + ((__returnType(*)(id, SEL, __typeof__(__arg1), __typeof__(__arg2)))__originalIMP)( \ + __receivingObject, __swizzledSEL, __arg1, __arg2) + +/** + * Invokes original IMP when the original selector takes 3 arguments. + * + * @param __receivingObject The object on which the IMP is invoked. + * @param __swizzledSEL The selector used for swizzling. + * @param __returnType The return type of the original implementation. + * @param __originalIMP The original IMP. + * @param __arg1 The first argument. + * @param __arg2 The second argument. + * @param __arg3 The third argument. + */ +#define GUL_INVOKE_ORIGINAL_IMP3(__receivingObject, __swizzledSEL, __returnType, __originalIMP, \ + __arg1, __arg2, __arg3) \ + ((__returnType(*)(id, SEL, __typeof__(__arg1), __typeof__(__arg2), \ + __typeof__(__arg3)))__originalIMP)(__receivingObject, __swizzledSEL, __arg1, \ + __arg2, __arg3) + +/** + * Invokes original IMP when the original selector takes 4 arguments. + * + * @param __receivingObject The object on which the IMP is invoked. + * @param __swizzledSEL The selector used for swizzling. + * @param __returnType The return type of the original implementation. + * @param __originalIMP The original IMP. + * @param __arg1 The first argument. + * @param __arg2 The second argument. + * @param __arg3 The third argument. + * @param __arg4 The fourth argument. + */ +#define GUL_INVOKE_ORIGINAL_IMP4(__receivingObject, __swizzledSEL, __returnType, __originalIMP, \ + __arg1, __arg2, __arg3, __arg4) \ + ((__returnType(*)(id, SEL, __typeof__(__arg1), __typeof__(__arg2), __typeof__(__arg3), \ + __typeof__(__arg4)))__originalIMP)(__receivingObject, __swizzledSEL, __arg1, \ + __arg2, __arg3, __arg4) + +/** + * Invokes original IMP when the original selector takes 5 arguments. + * + * @param __receivingObject The object on which the IMP is invoked. + * @param __swizzledSEL The selector used for swizzling. + * @param __returnType The return type of the original implementation. + * @param __originalIMP The original IMP. + * @param __arg1 The first argument. + * @param __arg2 The second argument. + * @param __arg3 The third argument. + * @param __arg4 The fourth argument. + * @param __arg5 The fifth argument. + */ +#define GUL_INVOKE_ORIGINAL_IMP5(__receivingObject, __swizzledSEL, __returnType, __originalIMP, \ + __arg1, __arg2, __arg3, __arg4, __arg5) \ + ((__returnType(*)(id, SEL, __typeof__(__arg1), __typeof__(__arg2), __typeof__(__arg3), \ + __typeof__(__arg4), __typeof__(__arg5)))__originalIMP)( \ + __receivingObject, __swizzledSEL, __arg1, __arg2, __arg3, __arg4, __arg5) + +/** + * Invokes original IMP when the original selector takes 6 arguments. + * + * @param __receivingObject The object on which the IMP is invoked. + * @param __swizzledSEL The selector used for swizzling. + * @param __returnType The return type of the original implementation. + * @param __originalIMP The original IMP. + * @param __arg1 The first argument. + * @param __arg2 The second argument. + * @param __arg3 The third argument. + * @param __arg4 The fourth argument. + * @param __arg5 The fifth argument. + * @param __arg6 The sixth argument. + */ +#define GUL_INVOKE_ORIGINAL_IMP6(__receivingObject, __swizzledSEL, __returnType, __originalIMP, \ + __arg1, __arg2, __arg3, __arg4, __arg5, __arg6) \ + ((__returnType(*)(id, SEL, __typeof__(__arg1), __typeof__(__arg2), __typeof__(__arg3), \ + __typeof__(__arg4), __typeof__(__arg5), __typeof__(__arg6)))__originalIMP)( \ + __receivingObject, __swizzledSEL, __arg1, __arg2, __arg3, __arg4, __arg5, __arg6) + +/** + * Invokes original IMP when the original selector takes 7 arguments. + * + * @param __receivingObject The object on which the IMP is invoked. + * @param __swizzledSEL The selector used for swizzling. + * @param __returnType The return type of the original implementation. + * @param __originalIMP The original IMP. + * @param __arg1 The first argument. + * @param __arg2 The second argument. + * @param __arg3 The third argument. + * @param __arg4 The fourth argument. + * @param __arg5 The fifth argument. + * @param __arg6 The sixth argument. + * @param __arg7 The seventh argument. + */ +#define GUL_INVOKE_ORIGINAL_IMP7(__receivingObject, __swizzledSEL, __returnType, __originalIMP, \ + __arg1, __arg2, __arg3, __arg4, __arg5, __arg6, __arg7) \ + ((__returnType(*)(id, SEL, __typeof__(__arg1), __typeof__(__arg2), __typeof__(__arg3), \ + __typeof__(__arg4), __typeof__(__arg5), __typeof__(__arg6), \ + __typeof__(__arg7)))__originalIMP)( \ + __receivingObject, __swizzledSEL, __arg1, __arg2, __arg3, __arg4, __arg5, __arg6, __arg7) + +/** + * Invokes original IMP when the original selector takes 8 arguments. + * + * @param __receivingObject The object on which the IMP is invoked. + * @param __swizzledSEL The selector used for swizzling. + * @param __returnType The return type of the original implementation. + * @param __originalIMP The original IMP. + * @param __arg1 The first argument. + * @param __arg2 The second argument. + * @param __arg3 The third argument. + * @param __arg4 The fourth argument. + * @param __arg5 The fifth argument. + * @param __arg6 The sixth argument. + * @param __arg7 The seventh argument. + * @param __arg8 The eighth argument. + */ +#define GUL_INVOKE_ORIGINAL_IMP8(__receivingObject, __swizzledSEL, __returnType, __originalIMP, \ + __arg1, __arg2, __arg3, __arg4, __arg5, __arg6, __arg7, __arg8) \ + ((__returnType(*)(id, SEL, __typeof__(__arg1), __typeof__(__arg2), __typeof__(__arg3), \ + __typeof__(__arg4), __typeof__(__arg5), __typeof__(__arg6), \ + __typeof__(__arg7), __typeof__(__arg8)))__originalIMP)( \ + __receivingObject, __swizzledSEL, __arg1, __arg2, __arg3, __arg4, __arg5, __arg6, __arg7, \ + __arg8) + +/** + * Invokes original IMP when the original selector takes 9 arguments. + * + * @param __receivingObject The object on which the IMP is invoked. + * @param __swizzledSEL The selector used for swizzling. + * @param __returnType The return type of the original implementation. + * @param __originalIMP The original IMP. + * @param __arg1 The first argument. + * @param __arg2 The second argument. + * @param __arg3 The third argument. + * @param __arg4 The fourth argument. + * @param __arg5 The fifth argument. + * @param __arg6 The sixth argument. + * @param __arg7 The seventh argument. + * @param __arg8 The eighth argument. + * @param __arg9 The ninth argument. + */ +#define GUL_INVOKE_ORIGINAL_IMP9(__receivingObject, __swizzledSEL, __returnType, __originalIMP, \ + __arg1, __arg2, __arg3, __arg4, __arg5, __arg6, __arg7, __arg8, \ + __arg9) \ + ((__returnType(*)(id, SEL, __typeof__(__arg1), __typeof__(__arg2), __typeof__(__arg3), \ + __typeof__(__arg4), __typeof__(__arg5), __typeof__(__arg6), \ + __typeof__(__arg7), __typeof__(__arg8), __typeof__(__arg9)))__originalIMP)( \ + __receivingObject, __swizzledSEL, __arg1, __arg2, __arg3, __arg4, __arg5, __arg6, __arg7, \ + __arg8, __arg9) diff --git a/iOS/MyStudies/Pods/GoogleUtilities/GoogleUtilities/MethodSwizzler/Public/GoogleUtilities/GULSwizzler.h b/iOS/MyStudies/Pods/GoogleUtilities/GoogleUtilities/MethodSwizzler/Public/GoogleUtilities/GULSwizzler.h new file mode 100644 index 0000000000..26949c8867 --- /dev/null +++ b/iOS/MyStudies/Pods/GoogleUtilities/GoogleUtilities/MethodSwizzler/Public/GoogleUtilities/GULSwizzler.h @@ -0,0 +1,71 @@ +/* + * 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 + +NS_ASSUME_NONNULL_BEGIN + +/** This class handles the runtime manipulation necessary to instrument selectors. It stores the + * classes and selectors that have been swizzled, and runs all operations on its own queue. + */ +@interface GULSwizzler : NSObject + +/** Manipulates the Objective-C runtime to replace the original IMP with the supplied block. + * + * @param aClass The class to swizzle. + * @param selector The selector of the class to swizzle. + * @param isClassSelector A BOOL specifying whether the selector is a class or instance selector. + * @param block The block that replaces the original IMP. + */ ++ (void)swizzleClass:(Class)aClass + selector:(SEL)selector + isClassSelector:(BOOL)isClassSelector + withBlock:(nullable id)block; + +/** Returns the current 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. + */ ++ (nullable IMP)currentImplementationForClass:(Class)aClass + selector:(SEL)selector + isClassSelector:(BOOL)isClassSelector; + +/** Checks the runtime to see if a selector exists on a class. If a property is declared as + * @dynamic, we have a reverse swizzling situation, where the implementation of a method exists + * only in concrete subclasses, and NOT in the superclass. We can detect that situation using + * this helper method. Similarly, we can detect situations where a class doesn't implement a + * protocol method. + * + * @param selector The selector to check for. + * @param aClass The class to check. + * @param isClassSelector A BOOL specifying whether the selector is a class or instance selector. + * @return YES if the method was found in this selector/class combination, NO otherwise. + */ ++ (BOOL)selector:(SEL)selector existsInClass:(Class)aClass isClassSelector:(BOOL)isClassSelector; + +/** Returns a list of all Objective-C (and not primitive) ivars contained by the given object. + * + * @param object The object whose ivars will be iterated. + * @return The list of ivar objects. + */ ++ (NSArray *)ivarObjectsForObject:(id)object; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iOS/MyStudies/Pods/GoogleUtilities/README.md b/iOS/MyStudies/Pods/GoogleUtilities/README.md index d3ee9d2927..ff9fe1ae51 100644 --- a/iOS/MyStudies/Pods/GoogleUtilities/README.md +++ b/iOS/MyStudies/Pods/GoogleUtilities/README.md @@ -168,7 +168,7 @@ GitHub Actions will verify that any code changes are done in a style compliant way. Install `clang-format` and `mint`: ```console -brew install clang-format@12 +brew install clang-format@13 brew install mint ``` diff --git a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQNSArray+Sort.swift b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQNSArray+Sort.swift index 442ef43f80..1d3a4c23ed 100644 --- a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQNSArray+Sort.swift +++ b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQNSArray+Sort.swift @@ -1,7 +1,7 @@ // // IQNSArray+Sort.swift // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. +// Copyright (c) 2013-20 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -21,34 +21,31 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -import Foundation +// import Foundation - UIKit contains Foundation import UIKit /** UIView.subviews sorting category. */ +@available(iOSApplicationExtension, unavailable) internal extension Array where Element: UIView { - - ///-------------- - /// MARK: Sorting - ///-------------- - + /** Returns the array by sorting the UIView's by their tag property. */ func sortedArrayByTag() -> [Element] { - + return sorted(by: { (obj1: Element, obj2: Element) -> Bool in - + return (obj1.tag < obj2.tag) }) } - + /** Returns the array by sorting the UIView's by their tag property. */ func sortedArrayByPosition() -> [Element] { - + return sorted(by: { (obj1: Element, obj2: Element) -> Bool in if obj1.frame.minY != obj2.frame.minY { return obj1.frame.minY < obj2.frame.minY diff --git a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQUIScrollView+Additions.swift b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQUIScrollView+Additions.swift index 3dc04e704e..93d495ab17 100644 --- a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQUIScrollView+Additions.swift +++ b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQUIScrollView+Additions.swift @@ -1,7 +1,7 @@ // // IQUIScrollView+Additions.swift // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. +// Copyright (c) 2013-20 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -21,83 +21,71 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -import Foundation +// import Foundation - UIKit contains Foundation import UIKit -private var kIQShouldIgnoreScrollingAdjustment = "kIQShouldIgnoreScrollingAdjustment" -private var kIQShouldIgnoreContentInsetAdjustment = "kIQShouldIgnoreContentInsetAdjustment" -private var kIQShouldRestoreScrollViewContentOffset = "kIQShouldRestoreScrollViewContentOffset" - +@available(iOSApplicationExtension, unavailable) @objc public extension UIScrollView { - + + private struct AssociatedKeys { + static var shouldIgnoreScrollingAdjustment = "shouldIgnoreScrollingAdjustment" + static var shouldIgnoreContentInsetAdjustment = "shouldIgnoreContentInsetAdjustment" + static var shouldRestoreScrollViewContentOffset = "shouldRestoreScrollViewContentOffset" + } + /** If YES, then scrollview will ignore scrolling (simply not scroll it) for adjusting textfield position. Default is NO. */ - @objc var shouldIgnoreScrollingAdjustment: Bool { + var shouldIgnoreScrollingAdjustment: Bool { get { - - if let aValue = objc_getAssociatedObject(self, &kIQShouldIgnoreScrollingAdjustment) as? Bool { - return aValue - } else { - return false - } + return objc_getAssociatedObject(self, &AssociatedKeys.shouldIgnoreScrollingAdjustment) as? Bool ?? false } set(newValue) { - objc_setAssociatedObject(self, &kIQShouldIgnoreScrollingAdjustment, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) + objc_setAssociatedObject(self, &AssociatedKeys.shouldIgnoreScrollingAdjustment, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) } } /** If YES, then scrollview will ignore content inset adjustment (simply not updating it) when keyboard is shown. Default is NO. */ - @objc var shouldIgnoreContentInsetAdjustment: Bool { + var shouldIgnoreContentInsetAdjustment: Bool { get { - - if let aValue = objc_getAssociatedObject(self, &kIQShouldIgnoreContentInsetAdjustment) as? Bool { - return aValue - } else { - return false - } + return objc_getAssociatedObject(self, &AssociatedKeys.shouldIgnoreContentInsetAdjustment) as? Bool ?? false } set(newValue) { - objc_setAssociatedObject(self, &kIQShouldIgnoreContentInsetAdjustment, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) + objc_setAssociatedObject(self, &AssociatedKeys.shouldIgnoreContentInsetAdjustment, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) } } - + /** To set customized distance from keyboard for textField/textView. Can't be less than zero */ - @objc var shouldRestoreScrollViewContentOffset: Bool { + var shouldRestoreScrollViewContentOffset: Bool { get { - - if let aValue = objc_getAssociatedObject(self, &kIQShouldRestoreScrollViewContentOffset) as? Bool { - return aValue - } else { - return false - } + return objc_getAssociatedObject(self, &AssociatedKeys.shouldRestoreScrollViewContentOffset) as? Bool ?? false } set(newValue) { - objc_setAssociatedObject(self, &kIQShouldRestoreScrollViewContentOffset, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) + objc_setAssociatedObject(self, &AssociatedKeys.shouldRestoreScrollViewContentOffset, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) } } } +@available(iOSApplicationExtension, unavailable) internal extension UITableView { - + func previousIndexPath(of indexPath: IndexPath) -> IndexPath? { var previousRow = indexPath.row - 1 var previousSection = indexPath.section - + //Fixing indexPath if previousRow < 0 { previousSection -= 1 - if previousSection >= 0 { previousRow = self.numberOfRows(inSection: previousSection) - 1 } } - - if previousRow >= 0 && previousSection >= 0 { + + if previousRow >= 0, previousSection >= 0 { return IndexPath(row: previousRow, section: previousSection) } else { return nil @@ -105,22 +93,22 @@ internal extension UITableView { } } +@available(iOSApplicationExtension, unavailable) internal extension UICollectionView { - + func previousIndexPath(of indexPath: IndexPath) -> IndexPath? { var previousRow = indexPath.row - 1 var previousSection = indexPath.section - + //Fixing indexPath if previousRow < 0 { previousSection -= 1 - if previousSection >= 0 { previousRow = self.numberOfItems(inSection: previousSection) - 1 } } - - if previousRow >= 0 && previousSection >= 0 { + + if previousRow >= 0, previousSection >= 0 { return IndexPath(item: previousRow, section: previousSection) } else { return nil diff --git a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQUITextFieldView+Additions.swift b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQUITextFieldView+Additions.swift index 38a23a8dfc..3a14494f2c 100644 --- a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQUITextFieldView+Additions.swift +++ b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQUITextFieldView+Additions.swift @@ -1,7 +1,7 @@ // // IQUITextFieldView+Additions.swift // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. +// Copyright (c) 2013-20 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -21,89 +21,73 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -import Foundation +// import Foundation - UIKit contains Foundation import UIKit /** Uses default keyboard distance for textField. */ +@available(iOSApplicationExtension, unavailable) public let kIQUseDefaultKeyboardDistance = CGFloat.greatestFiniteMagnitude -private var kIQKeyboardDistanceFromTextField = "kIQKeyboardDistanceFromTextField" -private var kIQKeyboardEnableMode = "kIQKeyboardEnableMode" -private var kIQShouldResignOnTouchOutsideMode = "kIQShouldResignOnTouchOutsideMode" -private var kIQIgnoreSwitchingByNextPrevious = "kIQIgnoreSwitchingByNextPrevious" - /** UIView category for managing UITextField/UITextView */ +@available(iOSApplicationExtension, unavailable) @objc public extension UIView { + private struct AssociatedKeys { + static var keyboardDistanceFromTextField = "keyboardDistanceFromTextField" + static var ignoreSwitchingByNextPrevious = "ignoreSwitchingByNextPrevious" + static var enableMode = "enableMode" + static var shouldResignOnTouchOutsideMode = "shouldResignOnTouchOutsideMode" + } + /** To set customized distance from keyboard for textField/textView. Can't be less than zero */ - @objc var keyboardDistanceFromTextField: CGFloat { + var keyboardDistanceFromTextField: CGFloat { get { - - if let aValue = objc_getAssociatedObject(self, &kIQKeyboardDistanceFromTextField) as? CGFloat { - return aValue - } else { - return kIQUseDefaultKeyboardDistance - } + return objc_getAssociatedObject(self, &AssociatedKeys.keyboardDistanceFromTextField) as? CGFloat ?? kIQUseDefaultKeyboardDistance } set(newValue) { - objc_setAssociatedObject(self, &kIQKeyboardDistanceFromTextField, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) + objc_setAssociatedObject(self, &AssociatedKeys.keyboardDistanceFromTextField, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) } } - + /** If shouldIgnoreSwitchingByNextPrevious is true then library will ignore this textField/textView while moving to other textField/textView using keyboard toolbar next previous buttons. Default is false */ - @objc var ignoreSwitchingByNextPrevious: Bool { + var ignoreSwitchingByNextPrevious: Bool { get { - - if let aValue = objc_getAssociatedObject(self, &kIQIgnoreSwitchingByNextPrevious) as? Bool { - return aValue - } else { - return false - } + return objc_getAssociatedObject(self, &AssociatedKeys.ignoreSwitchingByNextPrevious) as? Bool ?? false } set(newValue) { - objc_setAssociatedObject(self, &kIQIgnoreSwitchingByNextPrevious, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) + objc_setAssociatedObject(self, &AssociatedKeys.ignoreSwitchingByNextPrevious, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) } } - -// /** -// Override Enable/disable managing distance between keyboard and textField behaviour for this particular textField. -// */ - @objc var enableMode: IQEnableMode { + + /** + Override Enable/disable managing distance between keyboard and textField behaviour for this particular textField. + */ + var enableMode: IQEnableMode { get { - - if let savedMode = objc_getAssociatedObject(self, &kIQKeyboardEnableMode) as? IQEnableMode { - return savedMode - } else { - return .default - } + return objc_getAssociatedObject(self, &AssociatedKeys.enableMode) as? IQEnableMode ?? .default } set(newValue) { - objc_setAssociatedObject(self, &kIQKeyboardEnableMode, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) + objc_setAssociatedObject(self, &AssociatedKeys.enableMode, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) } } - + /** Override resigns Keyboard on touching outside of UITextField/View behaviour for this particular textField. */ - @objc var shouldResignOnTouchOutsideMode: IQEnableMode { + var shouldResignOnTouchOutsideMode: IQEnableMode { get { - - if let savedMode = objc_getAssociatedObject(self, &kIQShouldResignOnTouchOutsideMode) as? IQEnableMode { - return savedMode - } else { - return .default - } + return objc_getAssociatedObject(self, &AssociatedKeys.shouldResignOnTouchOutsideMode) as? IQEnableMode ?? .default } set(newValue) { - objc_setAssociatedObject(self, &kIQShouldResignOnTouchOutsideMode, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) + objc_setAssociatedObject(self, &AssociatedKeys.shouldResignOnTouchOutsideMode, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) } } } diff --git a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQUIView+Hierarchy.swift b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQUIView+Hierarchy.swift index 7003331985..99a0c763a1 100644 --- a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQUIView+Hierarchy.swift +++ b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQUIView+Hierarchy.swift @@ -1,7 +1,7 @@ // // IQUIView+Hierarchy.swift // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. +// Copyright (c) 2013-20 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -26,86 +26,85 @@ import UIKit /** UIView hierarchy category. */ +@available(iOSApplicationExtension, unavailable) @objc public extension UIView { - - ///---------------------- - /// MARK: viewControllers - ///---------------------- + + // MARK: viewControllers /** Returns the UIViewController object that manages the receiver. */ - @objc func viewContainingController() -> UIViewController? { - + func viewContainingController() -> UIViewController? { + var nextResponder: UIResponder? = self - + repeat { nextResponder = nextResponder?.next - + if let viewController = nextResponder as? UIViewController { return viewController } - + } while nextResponder != nil - + return nil } - + /** Returns the topMost UIViewController object in hierarchy. */ - @objc func topMostController() -> UIViewController? { - + func topMostController() -> UIViewController? { + var controllersHierarchy = [UIViewController]() if var topController = window?.rootViewController { controllersHierarchy.append(topController) while let presented = topController.presentedViewController { - + topController = presented controllersHierarchy.append(presented) } - + var matchController: UIResponder? = viewContainingController() while let mController = matchController as? UIViewController, controllersHierarchy.contains(mController) == false { - + repeat { matchController = matchController?.next } while matchController != nil && matchController is UIViewController == false } - + return matchController as? UIViewController - + } else { return viewContainingController() } } - + /** Returns the UIViewController object that is actually the parent of this object. Most of the time it's the viewController object which actually contains it, but result may be different if it's viewController is added as childViewController of another viewController. */ - @objc func parentContainerViewController() -> UIViewController? { - + func parentContainerViewController() -> UIViewController? { + var matchController = viewContainingController() var parentContainerViewController: UIViewController? if var navController = matchController?.navigationController { - + while let parentNav = navController.navigationController { navController = parentNav } - + var parentController: UIViewController = navController while let parent = parentController.parent, (parent.isKind(of: UINavigationController.self) == false && parent.isKind(of: UITabBarController.self) == false && parent.isKind(of: UISplitViewController.self) == false) { - + parentController = parent } @@ -115,7 +114,7 @@ UIView hierarchy category. parentContainerViewController = parentController } } else if let tabController = matchController?.tabBarController { - + if let navController = tabController.selectedViewController as? UINavigationController { parentContainerViewController = navController.topViewController } else { @@ -126,23 +125,21 @@ UIView hierarchy category. (parentController.isKind(of: UINavigationController.self) == false && parentController.isKind(of: UITabBarController.self) == false && parentController.isKind(of: UISplitViewController.self) == false) { - + matchController = parentController } parentContainerViewController = matchController } - + let finalController = parentContainerViewController?.parentIQContainerViewController() ?? parentContainerViewController - + return finalController } - ///----------------------------------- - /// MARK: Superviews/Subviews/Siglings - ///----------------------------------- - + // MARK: Superviews/Subviews/Siglings + /** Returns the superView of provided class type. @@ -151,24 +148,24 @@ UIView hierarchy category. @param belowView view object in upper hierarchy where method should stop searching and return nil */ - @objc func superviewOfClassType(_ classType: UIView.Type, belowView: UIView? = nil) -> UIView? { + func superviewOfClassType(_ classType: UIView.Type, belowView: UIView? = nil) -> UIView? { var superView = superview - + while let unwrappedSuperView = superView { - + if unwrappedSuperView.isKind(of: classType) { - + //If it's UIScrollView, then validating for special cases if unwrappedSuperView.isKind(of: UIScrollView.self) { - + let classNameString = NSStringFromClass(type(of: unwrappedSuperView.self)) // If it's not UITableViewWrapperView class, this is internal class which is actually manage in UITableview. The speciality of this class is that it's superview is UITableView. // If it's not UITableViewCellScrollView class, this is internal class which is actually manage in UITableviewCell. The speciality of this class is that it's superview is UITableViewCell. //If it's not _UIQueuingScrollView class, actually we validate for _ prefix which usually used by Apple internal classes - if unwrappedSuperView.superview?.isKind(of: UITableView.self) == false && - unwrappedSuperView.superview?.isKind(of: UITableViewCell.self) == false && + if unwrappedSuperView.superview?.isKind(of: UITableView.self) == false, + unwrappedSuperView.superview?.isKind(of: UITableViewCell.self) == false, classNameString.hasPrefix("_") == false { return superView } @@ -178,10 +175,10 @@ UIView hierarchy category. } else if unwrappedSuperView == belowView { return nil } - + superView = unwrappedSuperView.superview } - + return nil } @@ -195,10 +192,8 @@ UIView hierarchy category. // Getting all siblings if let siblings = superview?.subviews { - for textField in siblings { - - if (textField == self || textField.ignoreSwitchingByNextPrevious == false) && textField.IQcanBecomeFirstResponder() == true { + if (textField == self || textField.ignoreSwitchingByNextPrevious == false), textField.IQcanBecomeFirstResponder() { tempTextFields.append(textField) } } @@ -206,32 +201,32 @@ UIView hierarchy category. return tempTextFields } - + /** Returns all deep subViews of the receiver which canBecomeFirstResponder. */ internal func deepResponderViews() -> [UIView] { - + //Array of (UITextField/UITextView's). var textfields = [UIView]() - + for textField in subviews { - - if (textField == self || textField.ignoreSwitchingByNextPrevious == false) && textField.IQcanBecomeFirstResponder() == true { + + if (textField == self || textField.ignoreSwitchingByNextPrevious == false), textField.IQcanBecomeFirstResponder() { textfields.append(textField) } //Sometimes there are hidden or disabled views and textField inside them still recorded, so we added some more validations here (Bug ID: #458) //Uncommented else (Bug ID: #625) - else if textField.subviews.count != 0 && isUserInteractionEnabled == true && isHidden == false && alpha != 0.0 { + else if textField.subviews.count != 0, isUserInteractionEnabled, !isHidden, alpha != 0.0 { for deepView in textField.deepResponderViews() { textfields.append(deepView) } } } - + //subviews are returning in opposite order. Sorting according the frames 'y'. return textfields.sorted(by: { (view1: UIView, view2: UIView) -> Bool in - + let frame1 = view1.convert(view1.bounds, to: self) let frame2 = view2.convert(view2.bounds, to: self) @@ -242,11 +237,11 @@ UIView hierarchy category. } }) } - + private func IQcanBecomeFirstResponder() -> Bool { - + var IQcanBecomeFirstResponder = false - + if self.conforms(to: UITextInput.self) { // Setting toolbar to keyboard. if let textView = self as? UITextView { @@ -255,75 +250,74 @@ UIView hierarchy category. IQcanBecomeFirstResponder = textField.isEnabled } } - - if IQcanBecomeFirstResponder == true { - IQcanBecomeFirstResponder = isUserInteractionEnabled == true && isHidden == false && alpha != 0.0 && isAlertViewTextField() == false && textFieldSearchBar() == nil + + if IQcanBecomeFirstResponder { + IQcanBecomeFirstResponder = isUserInteractionEnabled && !isHidden && alpha != 0.0 && !isAlertViewTextField() && textFieldSearchBar() == nil } return IQcanBecomeFirstResponder } - ///------------------------- - /// MARK: Special TextFields - ///------------------------- - + // MARK: Special TextFields + /** Returns searchBar if receiver object is UISearchBarTextField, otherwise return nil. */ internal func textFieldSearchBar() -> UISearchBar? { - + var responder: UIResponder? = self.next - + while let bar = responder { - + if let searchBar = bar as? UISearchBar { return searchBar } else if bar is UIViewController { break } - + responder = bar.next } - + return nil } - + /** Returns YES if the receiver object is UIAlertSheetTextField, otherwise return NO. */ internal func isAlertViewTextField() -> Bool { - + var alertViewController: UIResponder? = viewContainingController() - + var isAlertViewTextField = false - - while let controller = alertViewController, isAlertViewTextField == false { - + + while let controller = alertViewController, !isAlertViewTextField { + if controller.isKind(of: UIAlertController.self) { isAlertViewTextField = true break } - + alertViewController = controller.next } - + return isAlertViewTextField } - + private func depth() -> Int { var depth: Int = 0 - + if let superView = superview { depth = superView.depth()+1 } - + return depth } - + } +@available(iOSApplicationExtension, unavailable) extension NSObject { - + internal func _IQDescription() -> String { return "<\(self) \(Unmanaged.passUnretained(self).toOpaque())>" } diff --git a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQUIViewController+Additions.swift b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQUIViewController+Additions.swift index 61b59c5abd..0750edf45a 100644 --- a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQUIViewController+Additions.swift +++ b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQUIViewController+Additions.swift @@ -1,7 +1,7 @@ // // IQUIViewController+Additions.swift // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. +// Copyright (c) 2013-20 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -23,31 +23,32 @@ import UIKit -private var kIQLayoutGuideConstraint = "kIQLayoutGuideConstraint" - +@available(iOSApplicationExtension, unavailable) @objc public extension UIViewController { + private struct AssociatedKeys { + static var IQLayoutGuideConstraint = "IQLayoutGuideConstraint" + } + /** This method is provided to override by viewController's if the library lifts a viewController which you doesn't want to lift . This may happen if you have implemented side menu feature in your app and the library try to lift the side menu controller. Overriding this method in side menu class to return correct controller should fix the problem. */ func parentIQContainerViewController() -> UIViewController? { return self } - + /** To set customized distance from keyboard for textField/textView. Can't be less than zero @deprecated Due to change in core-logic of handling distance between textField and keyboard distance, this layout contraint tweak is no longer needed and things will just work out of the box regardless of constraint pinned with safeArea/layoutGuide/superview */ @available(*, deprecated, message: "Due to change in core-logic of handling distance between textField and keyboard distance, this layout contraint tweak is no longer needed and things will just work out of the box regardless of constraint pinned with safeArea/layoutGuide/superview.") - @IBOutlet @objc var IQLayoutGuideConstraint: NSLayoutConstraint? { + @IBOutlet var IQLayoutGuideConstraint: NSLayoutConstraint? { get { - - return objc_getAssociatedObject(self, &kIQLayoutGuideConstraint) as? NSLayoutConstraint + return objc_getAssociatedObject(self, &AssociatedKeys.IQLayoutGuideConstraint) as? NSLayoutConstraint } - set(newValue) { - objc_setAssociatedObject(self, &kIQLayoutGuideConstraint, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) + objc_setAssociatedObject(self, &AssociatedKeys.IQLayoutGuideConstraint, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) } } } diff --git a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstants.swift b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstants.swift index 60b910dd9d..3eea696519 100644 --- a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstants.swift +++ b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstants.swift @@ -1,7 +1,7 @@ // // IQKeyboardManagerConstants.swift // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. +// Copyright (c) 2013-20 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -23,9 +23,7 @@ import Foundation -///----------------------------------- -/// MARK: IQAutoToolbarManageBehaviour -///----------------------------------- +// MARK: IQAutoToolbarManageBehaviour /** `IQAutoToolbarBySubviews` @@ -37,6 +35,7 @@ Creates Toolbar according to tag property of TextField's. `IQAutoToolbarByPosition` Creates Toolbar according to the y,x position of textField in it's superview coordinate. */ +@available(iOSApplicationExtension, unavailable) @objc public enum IQAutoToolbarManageBehaviour: Int { case bySubviews case byTag @@ -53,6 +52,7 @@ Creates Toolbar according to the y,x position of textField in it's superview coo `IQPreviousNextDisplayModeAlwaysShow` Always show nextPrevious buttons, if there are more than 1 textField then both buttons will be visible but will be shown as disabled. */ +@available(iOSApplicationExtension, unavailable) @objc public enum IQPreviousNextDisplayMode: Int { case `default` case alwaysHide @@ -69,6 +69,7 @@ Creates Toolbar according to the y,x position of textField in it's superview coo `IQEnableModeDisabled` setting is disabled. */ +@available(iOSApplicationExtension, unavailable) @objc public enum IQEnableMode: Int { case `default` case enabled diff --git a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstantsInternal.swift b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstantsInternal.swift index 1e65ac11e3..595b2e55d9 100644 --- a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstantsInternal.swift +++ b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstantsInternal.swift @@ -1,7 +1,7 @@ // // IQKeyboardManagerConstantsInternal.swift // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. +// Copyright (c) 2013-20 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -21,4 +21,4 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -import Foundation +import UIKit diff --git a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+Debug.swift b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+Debug.swift new file mode 100644 index 0000000000..8efe2fbc6a --- /dev/null +++ b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+Debug.swift @@ -0,0 +1,111 @@ +// +// IQKeyboardManager+Debug.swift +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-20 Iftekhar Qurashi. +// +// 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. + +// import Foundation - UIKit contains Foundation +import UIKit + +// MARK: Debugging & Developer options +@available(iOSApplicationExtension, unavailable) +public extension IQKeyboardManager { + + private struct AssociatedKeys { + static var enableDebugging = "enableDebugging" + } + + @objc var enableDebugging: Bool { + get { + return objc_getAssociatedObject(self, &AssociatedKeys.enableDebugging) as? Bool ?? false + } + set(newValue) { + objc_setAssociatedObject(self, &AssociatedKeys.enableDebugging, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + } + + /** + @warning Use below methods to completely enable/disable notifications registered by library internally. + Please keep in mind that library is totally dependent on NSNotification of UITextField, UITextField, Keyboard etc. + If you do unregisterAllNotifications then library will not work at all. You should only use below methods if you want to completedly disable all library functions. + You should use below methods at your own risk. + */ + @objc func registerAllNotifications() { + + // Registering for keyboard notification. + NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillShow(_:)), name: UIResponder.keyboardWillShowNotification, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardDidShow(_:)), name: UIResponder.keyboardDidShowNotification, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide(_:)), name: UIResponder.keyboardWillHideNotification, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardDidHide(_:)), name: UIResponder.keyboardDidHideNotification, object: nil) + + // Registering for UITextField notification. + registerTextFieldViewClass(UITextField.self, didBeginEditingNotificationName: UITextField.textDidBeginEditingNotification.rawValue, didEndEditingNotificationName: UITextField.textDidEndEditingNotification.rawValue) + + // Registering for UITextView notification. + registerTextFieldViewClass(UITextView.self, didBeginEditingNotificationName: UITextView.textDidBeginEditingNotification.rawValue, didEndEditingNotificationName: UITextView.textDidEndEditingNotification.rawValue) + + // Registering for orientation changes notification + NotificationCenter.default.addObserver(self, selector: #selector(self.willChangeStatusBarOrientation(_:)), name: UIApplication.willChangeStatusBarOrientationNotification, object: UIApplication.shared) + } + + @objc func unregisterAllNotifications() { + + // Unregistering for keyboard notification. + NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillShowNotification, object: nil) + NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardDidShowNotification, object: nil) + NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification, object: nil) + NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardDidHideNotification, object: nil) + + // Unregistering for UITextField notification. + unregisterTextFieldViewClass(UITextField.self, didBeginEditingNotificationName: UITextField.textDidBeginEditingNotification.rawValue, didEndEditingNotificationName: UITextField.textDidEndEditingNotification.rawValue) + + // Unregistering for UITextView notification. + unregisterTextFieldViewClass(UITextView.self, didBeginEditingNotificationName: UITextView.textDidBeginEditingNotification.rawValue, didEndEditingNotificationName: UITextView.textDidEndEditingNotification.rawValue) + + // Unregistering for orientation changes notification + NotificationCenter.default.removeObserver(self, name: UIApplication.willChangeStatusBarOrientationNotification, object: UIApplication.shared) + } + + struct Static { + static var indentation = 0 + } + + internal func showLog(_ logString: String, indentation: Int = 0) { + + guard enableDebugging else { + return + } + + if indentation < 0 { + Static.indentation = max(0, Static.indentation + indentation) + } + + var preLog = "IQKeyboardManager" + for _ in 0 ... Static.indentation { + preLog += "|\t" + } + + print(preLog + logString) + + if indentation > 0 { + Static.indentation += indentation + } + } +} diff --git a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+Internal.swift b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+Internal.swift new file mode 100644 index 0000000000..2c0501b662 --- /dev/null +++ b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+Internal.swift @@ -0,0 +1,193 @@ +// +// IQKeyboardManager+Internal.swift +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-20 Iftekhar Qurashi. +// +// 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. + +// import Foundation - UIKit contains Foundation +import UIKit + +@available(iOSApplicationExtension, unavailable) +internal extension IQKeyboardManager { + + /** Get all UITextField/UITextView siblings of textFieldView. */ + func responderViews() -> [UIView]? { + + var superConsideredView: UIView? + + //If find any consider responderView in it's upper hierarchy then will get deepResponderView. + for disabledClass in toolbarPreviousNextAllowedClasses { + superConsideredView = textFieldView?.superviewOfClassType(disabledClass) + if superConsideredView != nil { + break + } + } + + //If there is a superConsideredView in view's hierarchy, then fetching all it's subview that responds. No sorting for superConsideredView, it's by subView position. (Enhancement ID: #22) + if let view = superConsideredView { + return view.deepResponderViews() + } else { //Otherwise fetching all the siblings + + guard let textFields = textFieldView?.responderSiblings() else { + return nil + } + + //Sorting textFields according to behaviour + switch toolbarManageBehaviour { + //If autoToolbar behaviour is bySubviews, then returning it. + case .bySubviews: return textFields + + //If autoToolbar behaviour is by tag, then sorting it according to tag property. + case .byTag: return textFields.sortedArrayByTag() + + //If autoToolbar behaviour is by tag, then sorting it according to tag property. + case .byPosition: return textFields.sortedArrayByPosition() + } + } + } + + func privateIsEnabled() -> Bool { + + var isEnabled = enable + + let enableMode = textFieldView?.enableMode + + if enableMode == .enabled { + isEnabled = true + } else if enableMode == .disabled { + isEnabled = false + } else if var textFieldViewController = textFieldView?.viewContainingController() { + + //If it is searchBar textField embedded in Navigation Bar + if textFieldView?.textFieldSearchBar() != nil, let navController = textFieldViewController as? UINavigationController, let topController = navController.topViewController { + textFieldViewController = topController + } + + //If viewController is kind of enable viewController class, then assuming it's enabled. + if !isEnabled, enabledDistanceHandlingClasses.contains(where: { textFieldViewController.isKind(of: $0) }) { + isEnabled = true + } + + if isEnabled { + + //If viewController is kind of disabled viewController class, then assuming it's disabled. + if disabledDistanceHandlingClasses.contains(where: { textFieldViewController.isKind(of: $0) }) { + isEnabled = false + } + + //Special Controllers + if isEnabled { + + let classNameString = NSStringFromClass(type(of: textFieldViewController.self)) + + //_UIAlertControllerTextFieldViewController + if classNameString.contains("UIAlertController"), classNameString.hasSuffix("TextFieldViewController") { + isEnabled = false + } + } + } + } + + return isEnabled + } + + func privateIsEnableAutoToolbar() -> Bool { + + guard var textFieldViewController = textFieldView?.viewContainingController() else { + return enableAutoToolbar + } + + //If it is searchBar textField embedded in Navigation Bar + if textFieldView?.textFieldSearchBar() != nil, let navController = textFieldViewController as? UINavigationController, let topController = navController.topViewController { + textFieldViewController = topController + } + + var enableToolbar = enableAutoToolbar + + if !enableToolbar, enabledToolbarClasses.contains(where: { textFieldViewController.isKind(of: $0) }) { + enableToolbar = true + } + + if enableToolbar { + + //If found any toolbar disabled classes then return. + if disabledToolbarClasses.contains(where: { textFieldViewController.isKind(of: $0) }) { + enableToolbar = true + } + + //Special Controllers + if enableToolbar { + + let classNameString = NSStringFromClass(type(of: textFieldViewController.self)) + + //_UIAlertControllerTextFieldViewController + if classNameString.contains("UIAlertController"), classNameString.hasSuffix("TextFieldViewController") { + enableToolbar = false + } + } + } + + return enableToolbar + } + + func privateShouldResignOnTouchOutside() -> Bool { + + var shouldResign = shouldResignOnTouchOutside + + let enableMode = textFieldView?.shouldResignOnTouchOutsideMode + + if enableMode == .enabled { + shouldResign = true + } else if enableMode == .disabled { + shouldResign = false + } else if var textFieldViewController = textFieldView?.viewContainingController() { + + //If it is searchBar textField embedded in Navigation Bar + if textFieldView?.textFieldSearchBar() != nil, let navController = textFieldViewController as? UINavigationController, let topController = navController.topViewController { + textFieldViewController = topController + } + + //If viewController is kind of enable viewController class, then assuming shouldResignOnTouchOutside is enabled. + if !shouldResign, enabledTouchResignedClasses.contains(where: { textFieldViewController.isKind(of: $0) }) { + shouldResign = true + } + + if shouldResign { + + //If viewController is kind of disable viewController class, then assuming shouldResignOnTouchOutside is disable. + if disabledTouchResignedClasses.contains(where: { textFieldViewController.isKind(of: $0) }) { + shouldResign = false + } + + //Special Controllers + if shouldResign { + + let classNameString = NSStringFromClass(type(of: textFieldViewController.self)) + + //_UIAlertControllerTextFieldViewController + if classNameString.contains("UIAlertController"), classNameString.hasSuffix("TextFieldViewController") { + shouldResign = false + } + } + } + } + return shouldResign + } +} diff --git a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+OrientationNotification.swift b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+OrientationNotification.swift new file mode 100644 index 0000000000..d148ec2d1b --- /dev/null +++ b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+OrientationNotification.swift @@ -0,0 +1,76 @@ +// +// IQKeyboardManager+OrientationNotification.swift +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-20 Iftekhar Qurashi. +// +// 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. + +// import Foundation - UIKit contains Foundation +import UIKit + +// MARK: UIStatusBar Notification methods +@available(iOSApplicationExtension, unavailable) +internal extension IQKeyboardManager { + + /** UIApplicationWillChangeStatusBarOrientationNotification. Need to set the textView to it's original position. If any frame changes made. (Bug ID: #92)*/ + @objc func willChangeStatusBarOrientation(_ notification: Notification) { + + let currentStatusBarOrientation: UIInterfaceOrientation + #if swift(>=5.1) + if #available(iOS 13, *) { + currentStatusBarOrientation = keyWindow()?.windowScene?.interfaceOrientation ?? UIInterfaceOrientation.unknown + } else { + currentStatusBarOrientation = UIApplication.shared.statusBarOrientation + } + #else + currentStatusBarOrientation = UIApplication.shared.statusBarOrientation + #endif + + guard let statusBarOrientation = notification.userInfo?[UIApplication.statusBarOrientationUserInfoKey] as? Int, currentStatusBarOrientation.rawValue != statusBarOrientation else { + return + } + + let startTime = CACurrentMediaTime() + showLog("****** \(#function) started ******", indentation: 1) + + //If textViewContentInsetChanged is saved then restore it. + if let textView = textFieldView as? UITextView, textView.responds(to: #selector(getter: UITextView.isEditable)) { + + if isTextViewContentInsetChanged { + self.isTextViewContentInsetChanged = false + if textView.contentInset != self.startingTextViewContentInsets { + UIView.animate(withDuration: animationDuration, delay: 0, options: animationCurve, animations: { () -> Void in + + self.showLog("Restoring textView.contentInset to: \(self.startingTextViewContentInsets)") + + //Setting textField to it's initial contentInset + textView.contentInset = self.startingTextViewContentInsets + textView.scrollIndicatorInsets = self.startingTextViewScrollIndicatorInsets + + }, completion: { (_) -> Void in }) + } + } + } + + restorePosition() + + let elapsedTime = CACurrentMediaTime() - startTime + showLog("****** \(#function) ended: \(elapsedTime) seconds ******", indentation: -1) + } +} diff --git a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+Position.swift b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+Position.swift new file mode 100644 index 0000000000..3e7f95abf7 --- /dev/null +++ b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+Position.swift @@ -0,0 +1,678 @@ +// +// IQKeyboardManager+Position.swift +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-20 Iftekhar Qurashi. +// +// 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. + +// import Foundation - UIKit contains Foundation +import UIKit + +@available(iOSApplicationExtension, unavailable) +public extension IQKeyboardManager { + + private struct AssociatedKeys { + static var movedDistance = "movedDistance" + static var movedDistanceChanged = "movedDistanceChanged" + static var lastScrollView = "lastScrollView" + static var startingContentOffset = "startingContentOffset" + static var startingScrollIndicatorInsets = "startingScrollIndicatorInsets" + static var startingContentInsets = "startingContentInsets" + static var startingTextViewContentInsets = "startingTextViewContentInsets" + static var startingTextViewScrollIndicatorInsets = "startingTextViewScrollIndicatorInsets" + static var isTextViewContentInsetChanged = "isTextViewContentInsetChanged" + static var hasPendingAdjustRequest = "hasPendingAdjustRequest" + } + + /** + moved distance to the top used to maintain distance between keyboard and textField. Most of the time this will be a positive value. + */ + @objc private(set) var movedDistance: CGFloat { + get { + return objc_getAssociatedObject(self, &AssociatedKeys.movedDistance) as? CGFloat ?? 0.0 + } + set(newValue) { + objc_setAssociatedObject(self, &AssociatedKeys.movedDistance, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + movedDistanceChanged?(movedDistance) + } + } + + /** + Will be called then movedDistance will be changed + */ + @objc var movedDistanceChanged: ((CGFloat) -> Void)? { + get { + return objc_getAssociatedObject(self, &AssociatedKeys.movedDistanceChanged) as? ((CGFloat) -> Void) + } + set(newValue) { + objc_setAssociatedObject(self, &AssociatedKeys.movedDistanceChanged, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + movedDistanceChanged?(movedDistance) + } + } + + /** Variable to save lastScrollView that was scrolled. */ + internal weak var lastScrollView: UIScrollView? { + get { + return (objc_getAssociatedObject(self, &AssociatedKeys.lastScrollView) as? WeakObjectContainer)?.object as? UIScrollView + } + set(newValue) { + objc_setAssociatedObject(self, &AssociatedKeys.lastScrollView, WeakObjectContainer(object: newValue), .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + } + + /** LastScrollView's initial contentOffset. */ + internal var startingContentOffset: CGPoint { + get { + return objc_getAssociatedObject(self, &AssociatedKeys.startingContentOffset) as? CGPoint ?? IQKeyboardManager.kIQCGPointInvalid + } + set(newValue) { + objc_setAssociatedObject(self, &AssociatedKeys.startingContentOffset, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + } + + /** LastScrollView's initial scrollIndicatorInsets. */ + internal var startingScrollIndicatorInsets: UIEdgeInsets { + get { + return objc_getAssociatedObject(self, &AssociatedKeys.startingScrollIndicatorInsets) as? UIEdgeInsets ?? .init() + } + set(newValue) { + objc_setAssociatedObject(self, &AssociatedKeys.startingScrollIndicatorInsets, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + } + + /** LastScrollView's initial contentInsets. */ + internal var startingContentInsets: UIEdgeInsets { + get { + return objc_getAssociatedObject(self, &AssociatedKeys.startingContentInsets) as? UIEdgeInsets ?? .init() + } + set(newValue) { + objc_setAssociatedObject(self, &AssociatedKeys.startingContentInsets, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + } + + /** used to adjust contentInset of UITextView. */ + internal var startingTextViewContentInsets: UIEdgeInsets { + get { + return objc_getAssociatedObject(self, &AssociatedKeys.startingTextViewContentInsets) as? UIEdgeInsets ?? .init() + } + set(newValue) { + objc_setAssociatedObject(self, &AssociatedKeys.startingTextViewContentInsets, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + } + + /** used to adjust scrollIndicatorInsets of UITextView. */ + internal var startingTextViewScrollIndicatorInsets: UIEdgeInsets { + get { + return objc_getAssociatedObject(self, &AssociatedKeys.startingTextViewScrollIndicatorInsets) as? UIEdgeInsets ?? .init() + } + set(newValue) { + objc_setAssociatedObject(self, &AssociatedKeys.startingTextViewScrollIndicatorInsets, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + } + + /** used with textView to detect a textFieldView contentInset is changed or not. (Bug ID: #92)*/ + internal var isTextViewContentInsetChanged: Bool { + get { + return objc_getAssociatedObject(self, &AssociatedKeys.isTextViewContentInsetChanged) as? Bool ?? false + } + set(newValue) { + objc_setAssociatedObject(self, &AssociatedKeys.isTextViewContentInsetChanged, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + } + + /** To know if we have any pending request to adjust view position. */ + private var hasPendingAdjustRequest: Bool { + get { + return objc_getAssociatedObject(self, &AssociatedKeys.hasPendingAdjustRequest) as? Bool ?? false + } + set(newValue) { + objc_setAssociatedObject(self, &AssociatedKeys.hasPendingAdjustRequest, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + } + + internal func optimizedAdjustPosition() { + if !hasPendingAdjustRequest { + hasPendingAdjustRequest = true + OperationQueue.main.addOperation { + self.adjustPosition() + self.hasPendingAdjustRequest = false + } + } + } + + /* Adjusting RootViewController's frame according to interface orientation. */ + private func adjustPosition() { + + // We are unable to get textField object while keyboard showing on WKWebView's textField. (Bug ID: #11) + guard hasPendingAdjustRequest, + let textFieldView = textFieldView, + let rootController = textFieldView.parentContainerViewController(), + let window = keyWindow(), + let textFieldViewRectInWindow = textFieldView.superview?.convert(textFieldView.frame, to: window), + let textFieldViewRectInRootSuperview = textFieldView.superview?.convert(textFieldView.frame, to: rootController.view?.superview) else { + return + } + + let startTime = CACurrentMediaTime() + showLog("****** \(#function) started ******", indentation: 1) + + // Getting RootViewOrigin. + var rootViewOrigin = rootController.view.frame.origin + + //Maintain keyboardDistanceFromTextField + var specialKeyboardDistanceFromTextField = textFieldView.keyboardDistanceFromTextField + + if let searchBar = textFieldView.textFieldSearchBar() { + specialKeyboardDistanceFromTextField = searchBar.keyboardDistanceFromTextField + } + + let newKeyboardDistanceFromTextField = (specialKeyboardDistanceFromTextField == kIQUseDefaultKeyboardDistance) ? keyboardDistanceFromTextField : specialKeyboardDistanceFromTextField + + var kbSize = keyboardFrame.size + + do { + var kbFrame = keyboardFrame + + kbFrame.origin.y -= newKeyboardDistanceFromTextField + kbFrame.size.height += newKeyboardDistanceFromTextField + + //Calculating actual keyboard covered size respect to window, keyboard frame may be different when hardware keyboard is attached (Bug ID: #469) (Bug ID: #381) (Bug ID: #1506) + let intersectRect = kbFrame.intersection(window.frame) + + if intersectRect.isNull { + kbSize = CGSize(width: kbFrame.size.width, height: 0) + } else { + kbSize = intersectRect.size + } + } + + let statusBarHeight: CGFloat + + #if swift(>=5.1) + if #available(iOS 13, *) { + statusBarHeight = window.windowScene?.statusBarManager?.statusBarFrame.height ?? 0 + } else { + statusBarHeight = UIApplication.shared.statusBarFrame.height + } + #else + statusBarHeight = UIApplication.shared.statusBarFrame.height + #endif + + let navigationBarAreaHeight: CGFloat = statusBarHeight + ( rootController.navigationController?.navigationBar.frame.height ?? 0) + let layoutAreaHeight: CGFloat = rootController.view.layoutMargins.bottom + + let topLayoutGuide: CGFloat = max(navigationBarAreaHeight, layoutAreaHeight) + 5 + let bottomLayoutGuide: CGFloat = (textFieldView is UIScrollView && textFieldView.responds(to: #selector(getter: UITextView.isEditable))) ? 0 : rootController.view.layoutMargins.bottom //Validation of textView for case where there is a tab bar at the bottom or running on iPhone X and textView is at the bottom. + + // Move positive = textField is hidden. + // Move negative = textField is showing. + // Calculating move position. + var move: CGFloat = min(textFieldViewRectInRootSuperview.minY-(topLayoutGuide), textFieldViewRectInWindow.maxY-(window.frame.height-kbSize.height)+bottomLayoutGuide) + + showLog("Need to move: \(move)") + + var superScrollView: UIScrollView? + var superView = textFieldView.superviewOfClassType(UIScrollView.self) as? UIScrollView + + //Getting UIScrollView whose scrolling is enabled. // (Bug ID: #285) + while let view = superView { + + if view.isScrollEnabled, !view.shouldIgnoreScrollingAdjustment { + superScrollView = view + break + } else { + // Getting it's superScrollView. // (Enhancement ID: #21, #24) + superView = view.superviewOfClassType(UIScrollView.self) as? UIScrollView + } + } + + //If there was a lastScrollView. // (Bug ID: #34) + if let lastScrollView = lastScrollView { + //If we can't find current superScrollView, then setting lastScrollView to it's original form. + if superScrollView == nil { + + if lastScrollView.contentInset != self.startingContentInsets { + showLog("Restoring contentInset to: \(startingContentInsets)") + UIView.animate(withDuration: animationDuration, delay: 0, options: animationCurve, animations: { () -> Void in + + lastScrollView.contentInset = self.startingContentInsets + lastScrollView.scrollIndicatorInsets = self.startingScrollIndicatorInsets + }) + } + + if lastScrollView.shouldRestoreScrollViewContentOffset, !lastScrollView.contentOffset.equalTo(startingContentOffset) { + showLog("Restoring contentOffset to: \(startingContentOffset)") + + let animatedContentOffset = textFieldView.superviewOfClassType(UIStackView.self, belowView: lastScrollView) != nil // (Bug ID: #1365, #1508, #1541) + + if animatedContentOffset { + lastScrollView.setContentOffset(startingContentOffset, animated: UIView.areAnimationsEnabled) + } else { + lastScrollView.contentOffset = startingContentOffset + } + } + + startingContentInsets = UIEdgeInsets() + startingScrollIndicatorInsets = UIEdgeInsets() + startingContentOffset = CGPoint.zero + self.lastScrollView = nil + } else if superScrollView != lastScrollView { //If both scrollView's are different, then reset lastScrollView to it's original frame and setting current scrollView as last scrollView. + + if lastScrollView.contentInset != self.startingContentInsets { + showLog("Restoring contentInset to: \(startingContentInsets)") + UIView.animate(withDuration: animationDuration, delay: 0, options: animationCurve, animations: { () -> Void in + + lastScrollView.contentInset = self.startingContentInsets + lastScrollView.scrollIndicatorInsets = self.startingScrollIndicatorInsets + }) + } + + if lastScrollView.shouldRestoreScrollViewContentOffset, !lastScrollView.contentOffset.equalTo(startingContentOffset) { + showLog("Restoring contentOffset to: \(startingContentOffset)") + + let animatedContentOffset = textFieldView.superviewOfClassType(UIStackView.self, belowView: lastScrollView) != nil // (Bug ID: #1365, #1508, #1541) + + if animatedContentOffset { + lastScrollView.setContentOffset(startingContentOffset, animated: UIView.areAnimationsEnabled) + } else { + lastScrollView.contentOffset = startingContentOffset + } + } + + self.lastScrollView = superScrollView + if let scrollView = superScrollView { + startingContentInsets = scrollView.contentInset + startingContentOffset = scrollView.contentOffset + + #if swift(>=5.1) + if #available(iOS 11.1, *) { + startingScrollIndicatorInsets = scrollView.verticalScrollIndicatorInsets + } else { + startingScrollIndicatorInsets = scrollView.scrollIndicatorInsets + } + #else + _startingScrollIndicatorInsets = scrollView.scrollIndicatorInsets + #endif + } + + showLog("Saving ScrollView New contentInset: \(startingContentInsets) and contentOffset: \(startingContentOffset)") + } + //Else the case where superScrollView == lastScrollView means we are on same scrollView after switching to different textField. So doing nothing, going ahead + } else if let unwrappedSuperScrollView = superScrollView { //If there was no lastScrollView and we found a current scrollView. then setting it as lastScrollView. + lastScrollView = unwrappedSuperScrollView + startingContentInsets = unwrappedSuperScrollView.contentInset + startingContentOffset = unwrappedSuperScrollView.contentOffset + + #if swift(>=5.1) + if #available(iOS 11.1, *) { + startingScrollIndicatorInsets = unwrappedSuperScrollView.verticalScrollIndicatorInsets + } else { + startingScrollIndicatorInsets = unwrappedSuperScrollView.scrollIndicatorInsets + } + #else + _startingScrollIndicatorInsets = unwrappedSuperScrollView.scrollIndicatorInsets + #endif + + showLog("Saving ScrollView contentInset: \(startingContentInsets) and contentOffset: \(startingContentOffset)") + } + + // Special case for ScrollView. + // If we found lastScrollView then setting it's contentOffset to show textField. + if let lastScrollView = lastScrollView { + //Saving + var lastView = textFieldView + var superScrollView = self.lastScrollView + + while let scrollView = superScrollView { + + var shouldContinue = false + + if move > 0 { + shouldContinue = move > (-scrollView.contentOffset.y - scrollView.contentInset.top) + + } else if let tableView = scrollView.superviewOfClassType(UITableView.self) as? UITableView { + + shouldContinue = scrollView.contentOffset.y > 0 + + if shouldContinue, let tableCell = textFieldView.superviewOfClassType(UITableViewCell.self) as? UITableViewCell, let indexPath = tableView.indexPath(for: tableCell), let previousIndexPath = tableView.previousIndexPath(of: indexPath) { + + let previousCellRect = tableView.rectForRow(at: previousIndexPath) + if !previousCellRect.isEmpty { + let previousCellRectInRootSuperview = tableView.convert(previousCellRect, to: rootController.view.superview) + + move = min(0, previousCellRectInRootSuperview.maxY - topLayoutGuide) + } + } + } else if let collectionView = scrollView.superviewOfClassType(UICollectionView.self) as? UICollectionView { + + shouldContinue = scrollView.contentOffset.y > 0 + + if shouldContinue, let collectionCell = textFieldView.superviewOfClassType(UICollectionViewCell.self) as? UICollectionViewCell, let indexPath = collectionView.indexPath(for: collectionCell), let previousIndexPath = collectionView.previousIndexPath(of: indexPath), let attributes = collectionView.layoutAttributesForItem(at: previousIndexPath) { + + let previousCellRect = attributes.frame + if !previousCellRect.isEmpty { + let previousCellRectInRootSuperview = collectionView.convert(previousCellRect, to: rootController.view.superview) + + move = min(0, previousCellRectInRootSuperview.maxY - topLayoutGuide) + } + } + } else { + + shouldContinue = textFieldViewRectInRootSuperview.origin.y < topLayoutGuide + + if shouldContinue { + move = min(0, textFieldViewRectInRootSuperview.origin.y - topLayoutGuide) + } + } + + //Looping in upper hierarchy until we don't found any scrollView in it's upper hirarchy till UIWindow object. + if shouldContinue { + + var tempScrollView = scrollView.superviewOfClassType(UIScrollView.self) as? UIScrollView + var nextScrollView: UIScrollView? + while let view = tempScrollView { + + if view.isScrollEnabled, !view.shouldIgnoreScrollingAdjustment { + nextScrollView = view + break + } else { + tempScrollView = view.superviewOfClassType(UIScrollView.self) as? UIScrollView + } + } + + //Getting lastViewRect. + if let lastViewRect = lastView.superview?.convert(lastView.frame, to: scrollView) { + + //Calculating the expected Y offset from move and scrollView's contentOffset. + var shouldOffsetY = scrollView.contentOffset.y - min(scrollView.contentOffset.y, -move) + + //Rearranging the expected Y offset according to the view. + shouldOffsetY = min(shouldOffsetY, lastViewRect.origin.y) + + //[_textFieldView isKindOfClass:[UITextView class]] If is a UITextView type + //nextScrollView == nil If processing scrollView is last scrollView in upper hierarchy (there is no other scrollView upper hierrchy.) + //[_textFieldView isKindOfClass:[UITextView class]] If is a UITextView type + //shouldOffsetY >= 0 shouldOffsetY must be greater than in order to keep distance from navigationBar (Bug ID: #92) + if (textFieldView is UIScrollView && textFieldView.responds(to: #selector(getter: UITextView.isEditable))), + nextScrollView == nil, + shouldOffsetY >= 0 { + + // Converting Rectangle according to window bounds. + if let currentTextFieldViewRect = textFieldView.superview?.convert(textFieldView.frame, to: window) { + + //Calculating expected fix distance which needs to be managed from navigation bar + let expectedFixDistance = currentTextFieldViewRect.minY - topLayoutGuide + + //Now if expectedOffsetY (superScrollView.contentOffset.y + expectedFixDistance) is lower than current shouldOffsetY, which means we're in a position where navigationBar up and hide, then reducing shouldOffsetY with expectedOffsetY (superScrollView.contentOffset.y + expectedFixDistance) + shouldOffsetY = min(shouldOffsetY, scrollView.contentOffset.y + expectedFixDistance) + + //Setting move to 0 because now we don't want to move any view anymore (All will be managed by our contentInset logic. + move = 0 + } else { + //Subtracting the Y offset from the move variable, because we are going to change scrollView's contentOffset.y to shouldOffsetY. + move -= (shouldOffsetY-scrollView.contentOffset.y) + } + } else { + //Subtracting the Y offset from the move variable, because we are going to change scrollView's contentOffset.y to shouldOffsetY. + move -= (shouldOffsetY-scrollView.contentOffset.y) + } + + let newContentOffset = CGPoint(x: scrollView.contentOffset.x, y: shouldOffsetY) + + if scrollView.contentOffset.equalTo(newContentOffset) == false { + + showLog("old contentOffset: \(scrollView.contentOffset) new contentOffset: \(newContentOffset)") + self.showLog("Remaining Move: \(move)") + + //Getting problem while using `setContentOffset:animated:`, So I used animation API. + UIView.animate(withDuration: animationDuration, delay: 0, options: animationCurve, animations: { () -> Void in + + let animatedContentOffset = textFieldView.superviewOfClassType(UIStackView.self, belowView: scrollView) != nil // (Bug ID: #1365, #1508, #1541) + + if animatedContentOffset { + scrollView.setContentOffset(newContentOffset, animated: UIView.areAnimationsEnabled) + } else { + scrollView.contentOffset = newContentOffset + } + }, completion: { _ in + + if scrollView is UITableView || scrollView is UICollectionView { + //This will update the next/previous states + self.addToolbarIfRequired() + } + }) + } + } + + // Getting next lastView & superScrollView. + lastView = scrollView + superScrollView = nextScrollView + } else { + move = 0 + break + } + } + + //Updating contentInset + if let lastScrollViewRect = lastScrollView.superview?.convert(lastScrollView.frame, to: window), + lastScrollView.shouldIgnoreContentInsetAdjustment == false { + + var bottomInset: CGFloat = (kbSize.height)-(window.frame.height-lastScrollViewRect.maxY) + var bottomScrollIndicatorInset = bottomInset - newKeyboardDistanceFromTextField + + // Update the insets so that the scroll vew doesn't shift incorrectly when the offset is near the bottom of the scroll view. + bottomInset = max(startingContentInsets.bottom, bottomInset) + bottomScrollIndicatorInset = max(startingScrollIndicatorInsets.bottom, bottomScrollIndicatorInset) + + if #available(iOS 11, *) { + bottomInset -= lastScrollView.safeAreaInsets.bottom + bottomScrollIndicatorInset -= lastScrollView.safeAreaInsets.bottom + } + + var movedInsets = lastScrollView.contentInset + movedInsets.bottom = bottomInset + + if lastScrollView.contentInset != movedInsets { + showLog("old ContentInset: \(lastScrollView.contentInset) new ContentInset: \(movedInsets)") + + UIView.animate(withDuration: animationDuration, delay: 0, options: animationCurve, animations: { () -> Void in + lastScrollView.contentInset = movedInsets + + var newScrollIndicatorInset: UIEdgeInsets + + #if swift(>=5.1) + if #available(iOS 11.1, *) { + newScrollIndicatorInset = lastScrollView.verticalScrollIndicatorInsets + } else { + newScrollIndicatorInset = lastScrollView.scrollIndicatorInsets + } + #else + newScrollIndicatorInset = lastScrollView.scrollIndicatorInsets + #endif + + newScrollIndicatorInset.bottom = bottomScrollIndicatorInset + lastScrollView.scrollIndicatorInsets = newScrollIndicatorInset + }) + } + } + } + //Going ahead. No else if. + + //Special case for UITextView(Readjusting textView.contentInset when textView hight is too big to fit on screen) + //_lastScrollView If not having inside any scrollView, (now contentInset manages the full screen textView. + //[_textFieldView isKindOfClass:[UITextView class]] If is a UITextView type + if let textView = textFieldView as? UIScrollView, textView.isScrollEnabled, textFieldView.responds(to: #selector(getter: UITextView.isEditable)) { + + // CGRect rootSuperViewFrameInWindow = [_rootViewController.view.superview convertRect:_rootViewController.view.superview.bounds toView:keyWindow]; + // + // CGFloat keyboardOverlapping = CGRectGetMaxY(rootSuperViewFrameInWindow) - keyboardYPosition; + // + // CGFloat textViewHeight = MIN(CGRectGetHeight(_textFieldView.frame), (CGRectGetHeight(rootSuperViewFrameInWindow)-topLayoutGuide-keyboardOverlapping)); + + let keyboardYPosition = window.frame.height - (kbSize.height-newKeyboardDistanceFromTextField) + var rootSuperViewFrameInWindow = window.frame + if let rootSuperview = rootController.view.superview { + rootSuperViewFrameInWindow = rootSuperview.convert(rootSuperview.bounds, to: window) + } + + let keyboardOverlapping = rootSuperViewFrameInWindow.maxY - keyboardYPosition + + let textViewHeight = min(textView.frame.height, rootSuperViewFrameInWindow.height-topLayoutGuide-keyboardOverlapping) + + if textView.frame.size.height-textView.contentInset.bottom>textViewHeight { + //_isTextViewContentInsetChanged, If frame is not change by library in past, then saving user textView properties (Bug ID: #92) + if !self.isTextViewContentInsetChanged { + self.startingTextViewContentInsets = textView.contentInset + + #if swift(>=5.1) + if #available(iOS 11.1, *) { + self.startingTextViewScrollIndicatorInsets = textView.verticalScrollIndicatorInsets + } else { + self.startingTextViewScrollIndicatorInsets = textView.scrollIndicatorInsets + } + #else + self.startingTextViewScrollIndicatorInsets = textView.scrollIndicatorInsets + #endif + } + + self.isTextViewContentInsetChanged = true + + var newContentInset = textView.contentInset + newContentInset.bottom = textView.frame.size.height-textViewHeight + + if #available(iOS 11, *) { + newContentInset.bottom -= textView.safeAreaInsets.bottom + } + + if textView.contentInset != newContentInset { + self.showLog("\(textFieldView) Old UITextView.contentInset: \(textView.contentInset) New UITextView.contentInset: \(newContentInset)") + + UIView.animate(withDuration: animationDuration, delay: 0, options: animationCurve, animations: { () -> Void in + + textView.contentInset = newContentInset + textView.scrollIndicatorInsets = newContentInset + }, completion: { (_) -> Void in }) + } + } + } + + // +Positive or zero. + if move >= 0 { + + rootViewOrigin.y = max(rootViewOrigin.y - move, min(0, -(kbSize.height-newKeyboardDistanceFromTextField))) + + if rootController.view.frame.origin.equalTo(rootViewOrigin) == false { + showLog("Moving Upward") + + UIView.animate(withDuration: animationDuration, delay: 0, options: animationCurve, animations: { () -> Void in + + var rect = rootController.view.frame + rect.origin = rootViewOrigin + rootController.view.frame = rect + + //Animating content if needed (Bug ID: #204) + if self.layoutIfNeededOnUpdate { + //Animating content (Bug ID: #160) + rootController.view.setNeedsLayout() + rootController.view.layoutIfNeeded() + } + + self.showLog("Set \(rootController) origin to: \(rootViewOrigin)") + }) + } + + movedDistance = (topViewBeginOrigin.y-rootViewOrigin.y) + } else { // -Negative + let disturbDistance: CGFloat = rootViewOrigin.y-topViewBeginOrigin.y + + // disturbDistance Negative = frame disturbed. + // disturbDistance positive = frame not disturbed. + if disturbDistance <= 0 { + + rootViewOrigin.y -= max(move, disturbDistance) + + if rootController.view.frame.origin.equalTo(rootViewOrigin) == false { + showLog("Moving Downward") + // Setting adjusted rootViewRect + // Setting adjusted rootViewRect + + UIView.animate(withDuration: animationDuration, delay: 0, options: animationCurve, animations: { () -> Void in + + var rect = rootController.view.frame + rect.origin = rootViewOrigin + rootController.view.frame = rect + + //Animating content if needed (Bug ID: #204) + if self.layoutIfNeededOnUpdate { + //Animating content (Bug ID: #160) + rootController.view.setNeedsLayout() + rootController.view.layoutIfNeeded() + } + + self.showLog("Set \(rootController) origin to: \(rootViewOrigin)") + }) + } + + movedDistance = (topViewBeginOrigin.y-rootViewOrigin.y) + } + } + + let elapsedTime = CACurrentMediaTime() - startTime + showLog("****** \(#function) ended: \(elapsedTime) seconds ******", indentation: -1) + } + + internal func restorePosition() { + + hasPendingAdjustRequest = false + + // Setting rootViewController frame to it's original position. // (Bug ID: #18) + guard topViewBeginOrigin.equalTo(IQKeyboardManager.kIQCGPointInvalid) == false, let rootViewController = rootViewController else { + return + } + + if rootViewController.view.frame.origin.equalTo(self.topViewBeginOrigin) == false { + //Used UIViewAnimationOptionBeginFromCurrentState to minimize strange animations. + UIView.animate(withDuration: animationDuration, delay: 0, options: animationCurve, animations: { () -> Void in + + self.showLog("Restoring \(rootViewController) origin to: \(self.topViewBeginOrigin)") + + // Setting it's new frame + var rect = rootViewController.view.frame + rect.origin = self.topViewBeginOrigin + rootViewController.view.frame = rect + + //Animating content if needed (Bug ID: #204) + if self.layoutIfNeededOnUpdate { + //Animating content (Bug ID: #160) + rootViewController.view.setNeedsLayout() + rootViewController.view.layoutIfNeeded() + } + }) + } + + self.movedDistance = 0 + + if rootViewController.navigationController?.interactivePopGestureRecognizer?.state == .began { + self.rootViewControllerWhilePopGestureRecognizerActive = rootViewController + self.topViewBeginOriginWhilePopGestureRecognizerActive = self.topViewBeginOrigin + } + + self.rootViewController = nil + } +} diff --git a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+Toolbar.swift b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+Toolbar.swift new file mode 100644 index 0000000000..33541e9487 --- /dev/null +++ b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+Toolbar.swift @@ -0,0 +1,373 @@ +// +// IQKeyboardManager+Toolbar.swift +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-20 Iftekhar Qurashi. +// +// 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. + +// import Foundation - UIKit contains Foundation +import UIKit + +@available(iOSApplicationExtension, unavailable) +public extension IQKeyboardManager { + + /** + Default tag for toolbar with Done button -1002. + */ + private static let kIQDoneButtonToolbarTag = -1002 + + /** + Default tag for toolbar with Previous/Next buttons -1005. + */ + private static let kIQPreviousNextButtonToolbarTag = -1005 + + /** Add toolbar if it is required to add on textFields and it's siblings. */ + internal func addToolbarIfRequired() { + + //Either there is no inputAccessoryView or if accessoryView is not appropriate for current situation(There is Previous/Next/Done toolbar). + guard let siblings = responderViews(), !siblings.isEmpty, + let textField = textFieldView, textField.responds(to: #selector(setter: UITextField.inputAccessoryView)), + (textField.inputAccessoryView == nil || + textField.inputAccessoryView?.tag == IQKeyboardManager.kIQPreviousNextButtonToolbarTag || + textField.inputAccessoryView?.tag == IQKeyboardManager.kIQDoneButtonToolbarTag) else { + return + } + + let startTime = CACurrentMediaTime() + showLog("****** \(#function) started ******", indentation: 1) + + showLog("Found \(siblings.count) responder sibling(s)") + + let rightConfiguration: IQBarButtonItemConfiguration + + if let doneBarButtonItemImage = toolbarDoneBarButtonItemImage { + rightConfiguration = IQBarButtonItemConfiguration(image: doneBarButtonItemImage, action: #selector(self.doneAction(_:))) + } else if let doneBarButtonItemText = toolbarDoneBarButtonItemText { + rightConfiguration = IQBarButtonItemConfiguration(title: doneBarButtonItemText, action: #selector(self.doneAction(_:))) + } else { + rightConfiguration = IQBarButtonItemConfiguration(barButtonSystemItem: .done, action: #selector(self.doneAction(_:))) + } + rightConfiguration.accessibilityLabel = toolbarDoneBarButtonItemAccessibilityLabel ?? "Done" + + // If only one object is found, then adding only Done button. + if (siblings.count <= 1 && previousNextDisplayMode == .default) || previousNextDisplayMode == .alwaysHide { + + textField.addKeyboardToolbarWithTarget(target: self, titleText: (shouldShowToolbarPlaceholder ? textField.drawingToolbarPlaceholder: nil), rightBarButtonConfiguration: rightConfiguration, previousBarButtonConfiguration: nil, nextBarButtonConfiguration: nil) + + textField.inputAccessoryView?.tag = IQKeyboardManager.kIQDoneButtonToolbarTag // (Bug ID: #78) + + } else if previousNextDisplayMode == .default || previousNextDisplayMode == .alwaysShow { + + let prevConfiguration: IQBarButtonItemConfiguration + + if let doneBarButtonItemImage = toolbarPreviousBarButtonItemImage { + prevConfiguration = IQBarButtonItemConfiguration(image: doneBarButtonItemImage, action: #selector(self.previousAction(_:))) + } else if let doneBarButtonItemText = toolbarPreviousBarButtonItemText { + prevConfiguration = IQBarButtonItemConfiguration(title: doneBarButtonItemText, action: #selector(self.previousAction(_:))) + } else { + prevConfiguration = IQBarButtonItemConfiguration(image: (UIImage.keyboardPreviousImage() ?? UIImage()), action: #selector(self.previousAction(_:))) + } + prevConfiguration.accessibilityLabel = toolbarPreviousBarButtonItemAccessibilityLabel ?? "Previous" + + let nextConfiguration: IQBarButtonItemConfiguration + + if let doneBarButtonItemImage = toolbarNextBarButtonItemImage { + nextConfiguration = IQBarButtonItemConfiguration(image: doneBarButtonItemImage, action: #selector(self.nextAction(_:))) + } else if let doneBarButtonItemText = toolbarNextBarButtonItemText { + nextConfiguration = IQBarButtonItemConfiguration(title: doneBarButtonItemText, action: #selector(self.nextAction(_:))) + } else { + nextConfiguration = IQBarButtonItemConfiguration(image: (UIImage.keyboardNextImage() ?? UIImage()), action: #selector(self.nextAction(_:))) + } + nextConfiguration.accessibilityLabel = toolbarNextBarButtonItemAccessibilityLabel ?? "Next" + + textField.addKeyboardToolbarWithTarget(target: self, titleText: (shouldShowToolbarPlaceholder ? textField.drawingToolbarPlaceholder: nil), rightBarButtonConfiguration: rightConfiguration, previousBarButtonConfiguration: prevConfiguration, nextBarButtonConfiguration: nextConfiguration) + + textField.inputAccessoryView?.tag = IQKeyboardManager.kIQPreviousNextButtonToolbarTag // (Bug ID: #78) + } + + let toolbar = textField.keyboardToolbar + + //Setting toolbar tintColor // (Enhancement ID: #30) + toolbar.tintColor = shouldToolbarUsesTextFieldTintColor ? textField.tintColor : toolbarTintColor + + // Setting toolbar to keyboard. + if let textFieldView = textField as? UITextInput { + + //Bar style according to keyboard appearance + switch textFieldView.keyboardAppearance { + + case .dark?: + toolbar.barStyle = .black + toolbar.barTintColor = nil + default: + toolbar.barStyle = .default + toolbar.barTintColor = toolbarBarTintColor + } + } + + //Setting toolbar title font. // (Enhancement ID: #30) + if shouldShowToolbarPlaceholder, !textField.shouldHideToolbarPlaceholder { + + //Updating placeholder font to toolbar. //(Bug ID: #148, #272) + if toolbar.titleBarButton.title == nil || + toolbar.titleBarButton.title != textField.drawingToolbarPlaceholder { + toolbar.titleBarButton.title = textField.drawingToolbarPlaceholder + } + + //Setting toolbar title font. // (Enhancement ID: #30) + toolbar.titleBarButton.titleFont = placeholderFont + + //Setting toolbar title color. // (Enhancement ID: #880) + toolbar.titleBarButton.titleColor = placeholderColor + + //Setting toolbar button title color. // (Enhancement ID: #880) + toolbar.titleBarButton.selectableTitleColor = placeholderButtonColor + + } else { + toolbar.titleBarButton.title = nil + } + + //In case of UITableView (Special), the next/previous buttons has to be refreshed everytime. (Bug ID: #56) + + textField.keyboardToolbar.previousBarButton.isEnabled = (siblings.first != textField) // If firstTextField, then previous should not be enabled. + textField.keyboardToolbar.nextBarButton.isEnabled = (siblings.last != textField) // If lastTextField then next should not be enaled. + + let elapsedTime = CACurrentMediaTime() - startTime + showLog("****** \(#function) ended: \(elapsedTime) seconds ******", indentation: -1) + } + + /** Remove any toolbar if it is IQToolbar. */ + internal func removeToolbarIfRequired() { // (Bug ID: #18) + + guard let siblings = responderViews(), !siblings.isEmpty, + let textField = textFieldView, textField.responds(to: #selector(setter: UITextField.inputAccessoryView)), + (textField.inputAccessoryView == nil || + textField.inputAccessoryView?.tag == IQKeyboardManager.kIQPreviousNextButtonToolbarTag || + textField.inputAccessoryView?.tag == IQKeyboardManager.kIQDoneButtonToolbarTag) else { + return + } + + let startTime = CACurrentMediaTime() + showLog("****** \(#function) started ******", indentation: 1) + + showLog("Found \(siblings.count) responder sibling(s)") + + for view in siblings { + if let toolbar = view.inputAccessoryView as? IQToolbar { + + //setInputAccessoryView: check (Bug ID: #307) + if view.responds(to: #selector(setter: UITextField.inputAccessoryView)), + (toolbar.tag == IQKeyboardManager.kIQDoneButtonToolbarTag || toolbar.tag == IQKeyboardManager.kIQPreviousNextButtonToolbarTag) { + + if let textField = view as? UITextField { + textField.inputAccessoryView = nil + } else if let textView = view as? UITextView { + textView.inputAccessoryView = nil + } + + view.reloadInputViews() + } + } + } + + let elapsedTime = CACurrentMediaTime() - startTime + showLog("****** \(#function) ended: \(elapsedTime) seconds ******", indentation: -1) + } + + /** reloadInputViews to reload toolbar buttons enable/disable state on the fly Enhancement ID #434. */ + @objc func reloadInputViews() { + + //If enabled then adding toolbar. + if privateIsEnableAutoToolbar() { + self.addToolbarIfRequired() + } else { + self.removeToolbarIfRequired() + } + } +} + +// MARK: Previous next button actions +@available(iOSApplicationExtension, unavailable) +public extension IQKeyboardManager { + + /** + Returns YES if can navigate to previous responder textField/textView, otherwise NO. + */ + @objc var canGoPrevious: Bool { + //If it is not first textField. then it's previous object canBecomeFirstResponder. + guard let textFields = responderViews(), let textFieldRetain = textFieldView, let index = textFields.firstIndex(of: textFieldRetain), index > 0 else { + return false + } + return true + } + + /** + Returns YES if can navigate to next responder textField/textView, otherwise NO. + */ + @objc var canGoNext: Bool { + //If it is not first textField. then it's previous object canBecomeFirstResponder. + guard let textFields = responderViews(), let textFieldRetain = textFieldView, let index = textFields.firstIndex(of: textFieldRetain), index < textFields.count-1 else { + return false + } + return true + } + + /** + Navigate to previous responder textField/textView. + */ + @objc @discardableResult func goPrevious() -> Bool { + + //If it is not first textField. then it's previous object becomeFirstResponder. + guard let textFields = responderViews(), let textFieldRetain = textFieldView, let index = textFields.firstIndex(of: textFieldRetain), index > 0 else { + return false + } + + let nextTextField = textFields[index-1] + + let isAcceptAsFirstResponder = nextTextField.becomeFirstResponder() + + // If it refuses then becoming previous textFieldView as first responder again. (Bug ID: #96) + if isAcceptAsFirstResponder == false { + //If next field refuses to become first responder then restoring old textField as first responder. + textFieldRetain.becomeFirstResponder() + + showLog("Refuses to become first responder: \(nextTextField)") + } + + return isAcceptAsFirstResponder } + + /** + Navigate to next responder textField/textView. + */ + @objc @discardableResult func goNext() -> Bool { + + //If it is not first textField. then it's previous object becomeFirstResponder. + guard let textFields = responderViews(), let textFieldRetain = textFieldView, let index = textFields.firstIndex(of: textFieldRetain), index < textFields.count-1 else { + return false + } + + let nextTextField = textFields[index+1] + + let isAcceptAsFirstResponder = nextTextField.becomeFirstResponder() + + // If it refuses then becoming previous textFieldView as first responder again. (Bug ID: #96) + if isAcceptAsFirstResponder == false { + //If next field refuses to become first responder then restoring old textField as first responder. + textFieldRetain.becomeFirstResponder() + + showLog("Refuses to become first responder: \(nextTextField)") + } + + return isAcceptAsFirstResponder + } + + /** previousAction. */ + @objc internal func previousAction (_ barButton: IQBarButtonItem) { + + //If user wants to play input Click sound. + if shouldPlayInputClicks { + //Play Input Click Sound. + UIDevice.current.playInputClick() + } + + guard canGoPrevious, let textFieldRetain = textFieldView else { + return + } + + let isAcceptAsFirstResponder = goPrevious() + + var invocation = barButton.invocation + var sender = textFieldRetain + + //Handling search bar special case + do { + if let searchBar = textFieldRetain.textFieldSearchBar() { + invocation = searchBar.keyboardToolbar.previousBarButton.invocation + sender = searchBar + } + } + + if isAcceptAsFirstResponder { + invocation?.invoke(from: sender) + } + } + + /** nextAction. */ + @objc internal func nextAction (_ barButton: IQBarButtonItem) { + + //If user wants to play input Click sound. + if shouldPlayInputClicks { + //Play Input Click Sound. + UIDevice.current.playInputClick() + } + + guard canGoNext, let textFieldRetain = textFieldView else { + return + } + + let isAcceptAsFirstResponder = goNext() + + var invocation = barButton.invocation + var sender = textFieldRetain + + //Handling search bar special case + do { + if let searchBar = textFieldRetain.textFieldSearchBar() { + invocation = searchBar.keyboardToolbar.nextBarButton.invocation + sender = searchBar + } + } + + if isAcceptAsFirstResponder { + invocation?.invoke(from: sender) + } + } + + /** doneAction. Resigning current textField. */ + @objc internal func doneAction (_ barButton: IQBarButtonItem) { + + //If user wants to play input Click sound. + if shouldPlayInputClicks { + //Play Input Click Sound. + UIDevice.current.playInputClick() + } + + guard let textFieldRetain = textFieldView else { + return + } + + //Resign textFieldView. + let isResignedFirstResponder = resignFirstResponder() + + var invocation = barButton.invocation + var sender = textFieldRetain + + //Handling search bar special case + do { + if let searchBar = textFieldRetain.textFieldSearchBar() { + invocation = searchBar.keyboardToolbar.doneBarButton.invocation + sender = searchBar + } + } + + if isResignedFirstResponder { + invocation?.invoke(from: sender) + } + } +} diff --git a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+UIKeyboardNotification.swift b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+UIKeyboardNotification.swift new file mode 100644 index 0000000000..c6ec605293 --- /dev/null +++ b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+UIKeyboardNotification.swift @@ -0,0 +1,304 @@ +// +// IQKeyboardManager+UIKeyboardNotification.swift +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-20 Iftekhar Qurashi. +// +// 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. + +// import Foundation - UIKit contains Foundation +import UIKit + +// MARK: UIKeyboard Notifications +@available(iOSApplicationExtension, unavailable) +public extension IQKeyboardManager { + + private struct AssociatedKeys { + static var keyboardShowing = "keyboardShowing" + static var keyboardShowNotification = "keyboardShowNotification" + static var keyboardFrame = "keyboardFrame" + static var animationDuration = "animationDuration" + static var animationCurve = "animationCurve" + } + + /** + Boolean to know if keyboard is showing. + */ + @objc private(set) var keyboardShowing: Bool { + get { + return objc_getAssociatedObject(self, &AssociatedKeys.keyboardShowing) as? Bool ?? false + } + set(newValue) { + objc_setAssociatedObject(self, &AssociatedKeys.keyboardShowing, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + } + + /** To save keyboardWillShowNotification. Needed for enable keyboard functionality. */ + internal var keyboardShowNotification: Notification? { + get { + return objc_getAssociatedObject(self, &AssociatedKeys.keyboardShowNotification) as? Notification + } + set(newValue) { + objc_setAssociatedObject(self, &AssociatedKeys.keyboardShowNotification, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + } + + /** To save keyboard rame. */ + internal var keyboardFrame: CGRect { + get { + return objc_getAssociatedObject(self, &AssociatedKeys.keyboardFrame) as? CGRect ?? .zero + } + set(newValue) { + objc_setAssociatedObject(self, &AssociatedKeys.keyboardFrame, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + } + + /** To save keyboard animation duration. */ + internal var animationDuration: TimeInterval { + get { + return objc_getAssociatedObject(self, &AssociatedKeys.animationDuration) as? TimeInterval ?? 0.25 + } + set(newValue) { + objc_setAssociatedObject(self, &AssociatedKeys.animationDuration, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + } + + /** To mimic the keyboard animation */ + internal var animationCurve: UIView.AnimationOptions { + get { + return objc_getAssociatedObject(self, &AssociatedKeys.animationCurve) as? UIView.AnimationOptions ?? .curveEaseOut + } + set(newValue) { + objc_setAssociatedObject(self, &AssociatedKeys.animationCurve, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + } + + /* UIKeyboardWillShowNotification. */ + @objc internal func keyboardWillShow(_ notification: Notification?) { + + keyboardShowNotification = notification + + // Boolean to know keyboard is showing/hiding + keyboardShowing = true + + let oldKBFrame = keyboardFrame + + if let info = notification?.userInfo { + + // Getting keyboard animation. + if let curve = info[UIResponder.keyboardAnimationCurveUserInfoKey] as? UInt { + animationCurve = UIView.AnimationOptions(rawValue: curve).union(.beginFromCurrentState) + } else { + animationCurve = UIView.AnimationOptions.curveEaseOut.union(.beginFromCurrentState) + } + + // Getting keyboard animation duration + animationDuration = info[UIResponder.keyboardAnimationDurationUserInfoKey] as? TimeInterval ?? 0.25 + + // Getting UIKeyboardSize. + if let kbFrame = info[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect { + + keyboardFrame = kbFrame + showLog("UIKeyboard Frame: \(keyboardFrame)") + } + } + + guard privateIsEnabled() else { + restorePosition() + topViewBeginOrigin = IQKeyboardManager.kIQCGPointInvalid + return + } + + let startTime = CACurrentMediaTime() + showLog("****** \(#function) started ******", indentation: 1) + + // (Bug ID: #5) + if let textFieldView = textFieldView, topViewBeginOrigin.equalTo(IQKeyboardManager.kIQCGPointInvalid) { + + // keyboard is not showing(At the beginning only). We should save rootViewRect. + rootViewController = textFieldView.parentContainerViewController() + if let controller = rootViewController { + + if rootViewControllerWhilePopGestureRecognizerActive == controller { + topViewBeginOrigin = topViewBeginOriginWhilePopGestureRecognizerActive + } else { + topViewBeginOrigin = controller.view.frame.origin + } + + rootViewControllerWhilePopGestureRecognizerActive = nil + topViewBeginOriginWhilePopGestureRecognizerActive = IQKeyboardManager.kIQCGPointInvalid + + self.showLog("Saving \(controller) beginning origin: \(self.topViewBeginOrigin)") + } + } + + //If last restored keyboard size is different(any orientation accure), then refresh. otherwise not. + if keyboardFrame.equalTo(oldKBFrame) == false { + + //If textFieldView is inside UITableViewController then let UITableViewController to handle it (Bug ID: #37) (Bug ID: #76) See note:- https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html If it is UIAlertView textField then do not affect anything (Bug ID: #70). + + if keyboardShowing, + let textFieldView = textFieldView, + textFieldView.isAlertViewTextField() == false { + + // keyboard is already showing. adjust position. + optimizedAdjustPosition() + } + } + + let elapsedTime = CACurrentMediaTime() - startTime + showLog("****** \(#function) ended: \(elapsedTime) seconds ******", indentation: -1) + } + + /* UIKeyboardDidShowNotification. */ + @objc internal func keyboardDidShow(_ notification: Notification?) { + + guard privateIsEnabled(), + let textFieldView = textFieldView, + let parentController = textFieldView.parentContainerViewController(), (parentController.modalPresentationStyle == UIModalPresentationStyle.formSheet || parentController.modalPresentationStyle == UIModalPresentationStyle.pageSheet), + textFieldView.isAlertViewTextField() == false else { + return + } + + let startTime = CACurrentMediaTime() + showLog("****** \(#function) started ******", indentation: 1) + + self.optimizedAdjustPosition() + + let elapsedTime = CACurrentMediaTime() - startTime + showLog("****** \(#function) ended: \(elapsedTime) seconds ******", indentation: -1) + } + + /* UIKeyboardWillHideNotification. So setting rootViewController to it's default frame. */ + @objc internal func keyboardWillHide(_ notification: Notification?) { + + //If it's not a fake notification generated by [self setEnable:NO]. + if notification != nil { + keyboardShowNotification = nil + } + + // Boolean to know keyboard is showing/hiding + keyboardShowing = false + + if let info = notification?.userInfo { + + // Getting keyboard animation. + if let curve = info[UIResponder.keyboardAnimationCurveUserInfoKey] as? UInt { + animationCurve = UIView.AnimationOptions(rawValue: curve).union(.beginFromCurrentState) + } else { + animationCurve = UIView.AnimationOptions.curveEaseOut.union(.beginFromCurrentState) + } + + // Getting keyboard animation duration + animationDuration = info[UIResponder.keyboardAnimationDurationUserInfoKey] as? TimeInterval ?? 0.25 + } + + //If not enabled then do nothing. + guard privateIsEnabled() else { + return + } + + let startTime = CACurrentMediaTime() + showLog("****** \(#function) started ******", indentation: 1) + + //Commented due to #56. Added all the conditions below to handle WKWebView's textFields. (Bug ID: #56) + // We are unable to get textField object while keyboard showing on WKWebView's textField. (Bug ID: #11) + // if (_textFieldView == nil) return + + //Restoring the contentOffset of the lastScrollView + if let lastScrollView = lastScrollView { + + UIView.animate(withDuration: animationDuration, delay: 0, options: animationCurve, animations: { () -> Void in + + if lastScrollView.contentInset != self.startingContentInsets { + self.showLog("Restoring contentInset to: \(self.startingContentInsets)") + lastScrollView.contentInset = self.startingContentInsets + lastScrollView.scrollIndicatorInsets = self.startingScrollIndicatorInsets + } + + if lastScrollView.shouldRestoreScrollViewContentOffset, !lastScrollView.contentOffset.equalTo(self.startingContentOffset) { + self.showLog("Restoring contentOffset to: \(self.startingContentOffset)") + + let animatedContentOffset = self.textFieldView?.superviewOfClassType(UIStackView.self, belowView: lastScrollView) != nil // (Bug ID: #1365, #1508, #1541) + + if animatedContentOffset { + lastScrollView.setContentOffset(self.startingContentOffset, animated: UIView.areAnimationsEnabled) + } else { + lastScrollView.contentOffset = self.startingContentOffset + } + } + + // TODO: restore scrollView state + // This is temporary solution. Have to implement the save and restore scrollView state + var superScrollView: UIScrollView? = lastScrollView + + while let scrollView = superScrollView { + + let contentSize = CGSize(width: max(scrollView.contentSize.width, scrollView.frame.width), height: max(scrollView.contentSize.height, scrollView.frame.height)) + + let minimumY = contentSize.height - scrollView.frame.height + + if minimumY < scrollView.contentOffset.y { + + let newContentOffset = CGPoint(x: scrollView.contentOffset.x, y: minimumY) + if scrollView.contentOffset.equalTo(newContentOffset) == false { + + let animatedContentOffset = self.textFieldView?.superviewOfClassType(UIStackView.self, belowView: scrollView) != nil // (Bug ID: #1365, #1508, #1541) + + if animatedContentOffset { + scrollView.setContentOffset(newContentOffset, animated: UIView.areAnimationsEnabled) + } else { + scrollView.contentOffset = newContentOffset + } + + self.showLog("Restoring contentOffset to: \(self.startingContentOffset)") + } + } + + superScrollView = scrollView.superviewOfClassType(UIScrollView.self) as? UIScrollView + } + }) + } + + restorePosition() + + //Reset all values + lastScrollView = nil + keyboardFrame = CGRect.zero + startingContentInsets = UIEdgeInsets() + startingScrollIndicatorInsets = UIEdgeInsets() + startingContentOffset = CGPoint.zero + // topViewBeginRect = CGRectZero //Commented due to #82 + + let elapsedTime = CACurrentMediaTime() - startTime + showLog("****** \(#function) ended: \(elapsedTime) seconds ******", indentation: -1) + } + + @objc internal func keyboardDidHide(_ notification: Notification) { + + let startTime = CACurrentMediaTime() + showLog("****** \(#function) started ******", indentation: 1) + + topViewBeginOrigin = IQKeyboardManager.kIQCGPointInvalid + + keyboardFrame = CGRect.zero + + let elapsedTime = CACurrentMediaTime() - startTime + showLog("****** \(#function) ended: \(elapsedTime) seconds ******", indentation: -1) + } +} diff --git a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+UITextFieldViewNotification.swift b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+UITextFieldViewNotification.swift new file mode 100644 index 0000000000..80886e119b --- /dev/null +++ b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+UITextFieldViewNotification.swift @@ -0,0 +1,207 @@ +// +// IQKeyboardManager+UITextFieldViewNotification.swift +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-20 Iftekhar Qurashi. +// +// 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. + +// import Foundation - UIKit contains Foundation +import UIKit + +// MARK: UITextField/UITextView Notifications +@available(iOSApplicationExtension, unavailable) +internal extension IQKeyboardManager { + + private struct AssociatedKeys { + static var textFieldView = "textFieldView" + static var topViewBeginOrigin = "topViewBeginOrigin" + static var rootViewController = "rootViewController" + static var rootViewControllerWhilePopGestureRecognizerActive = "rootViewControllerWhilePopGestureRecognizerActive" + static var topViewBeginOriginWhilePopGestureRecognizerActive = "topViewBeginOriginWhilePopGestureRecognizerActive" + } + + /** To save UITextField/UITextView object voa textField/textView notifications. */ + weak var textFieldView: UIView? { + get { + return (objc_getAssociatedObject(self, &AssociatedKeys.textFieldView) as? WeakObjectContainer)?.object as? UIView + } + set(newValue) { + objc_setAssociatedObject(self, &AssociatedKeys.textFieldView, WeakObjectContainer(object: newValue), .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + } + + var topViewBeginOrigin: CGPoint { + get { + return objc_getAssociatedObject(self, &AssociatedKeys.topViewBeginOrigin) as? CGPoint ?? IQKeyboardManager.kIQCGPointInvalid + } + set(newValue) { + objc_setAssociatedObject(self, &AssociatedKeys.topViewBeginOrigin, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + } + + /** To save rootViewController */ + weak var rootViewController: UIViewController? { + get { + return (objc_getAssociatedObject(self, &AssociatedKeys.rootViewController) as? WeakObjectContainer)?.object as? UIViewController + } + set(newValue) { + objc_setAssociatedObject(self, &AssociatedKeys.rootViewController, WeakObjectContainer(object: newValue), .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + } + + /** To overcome with popGestureRecognizer issue Bug ID: #1361 */ + weak var rootViewControllerWhilePopGestureRecognizerActive: UIViewController? { + get { + return (objc_getAssociatedObject(self, &AssociatedKeys.rootViewControllerWhilePopGestureRecognizerActive) as? WeakObjectContainer)?.object as? UIViewController + } + set(newValue) { + objc_setAssociatedObject(self, &AssociatedKeys.rootViewControllerWhilePopGestureRecognizerActive, WeakObjectContainer(object: newValue), .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + } + + var topViewBeginOriginWhilePopGestureRecognizerActive: CGPoint { + get { + return objc_getAssociatedObject(self, &AssociatedKeys.topViewBeginOriginWhilePopGestureRecognizerActive) as? CGPoint ?? IQKeyboardManager.kIQCGPointInvalid + } + set(newValue) { + objc_setAssociatedObject(self, &AssociatedKeys.topViewBeginOriginWhilePopGestureRecognizerActive, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + } + + /** UITextFieldTextDidBeginEditingNotification, UITextViewTextDidBeginEditingNotification. Fetching UITextFieldView object. */ + @objc func textFieldViewDidBeginEditing(_ notification: Notification) { + + let startTime = CACurrentMediaTime() + showLog("****** \(#function) started ******", indentation: 1) + + // Getting object + textFieldView = notification.object as? UIView + + if overrideKeyboardAppearance, let textInput = textFieldView as? UITextInput, textInput.keyboardAppearance != keyboardAppearance { + //Setting textField keyboard appearance and reloading inputViews. + if let textFieldView = textFieldView as? UITextField { + textFieldView.keyboardAppearance = keyboardAppearance + } else if let textFieldView = textFieldView as? UITextView { + textFieldView.keyboardAppearance = keyboardAppearance + } + textFieldView?.reloadInputViews() + } + + //If autoToolbar enable, then add toolbar on all the UITextField/UITextView's if required. + if privateIsEnableAutoToolbar() { + + //UITextView special case. Keyboard Notification is firing before textView notification so we need to resign it first and then again set it as first responder to add toolbar on it. + if let textView = textFieldView as? UIScrollView, textView.responds(to: #selector(getter: UITextView.isEditable)), + textView.inputAccessoryView == nil { + + UIView.animate(withDuration: 0.00001, delay: 0, options: animationCurve, animations: { () -> Void in + + self.addToolbarIfRequired() + + }, completion: { (_) -> Void in + + //On textView toolbar didn't appear on first time, so forcing textView to reload it's inputViews. + textView.reloadInputViews() + }) + } else { + //Adding toolbar + addToolbarIfRequired() + } + } else { + removeToolbarIfRequired() + } + + resignFirstResponderGesture.isEnabled = privateShouldResignOnTouchOutside() + textFieldView?.window?.addGestureRecognizer(resignFirstResponderGesture) // (Enhancement ID: #14) + + if privateIsEnabled() == false { + restorePosition() + topViewBeginOrigin = IQKeyboardManager.kIQCGPointInvalid + } else { + if topViewBeginOrigin.equalTo(IQKeyboardManager.kIQCGPointInvalid) { // (Bug ID: #5) + + rootViewController = textFieldView?.parentContainerViewController() + + if let controller = rootViewController { + + if rootViewControllerWhilePopGestureRecognizerActive == controller { + topViewBeginOrigin = topViewBeginOriginWhilePopGestureRecognizerActive + } else { + topViewBeginOrigin = controller.view.frame.origin + } + + rootViewControllerWhilePopGestureRecognizerActive = nil + topViewBeginOriginWhilePopGestureRecognizerActive = IQKeyboardManager.kIQCGPointInvalid + + self.showLog("Saving \(controller) beginning origin: \(self.topViewBeginOrigin)") + } + } + + //If textFieldView is inside ignored responder then do nothing. (Bug ID: #37, #74, #76) + //See notes:- https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html If it is UIAlertView textField then do not affect anything (Bug ID: #70). + if keyboardShowing, + let textFieldView = textFieldView, + textFieldView.isAlertViewTextField() == false { + + // keyboard is already showing. adjust position. + optimizedAdjustPosition() + } + } + + let elapsedTime = CACurrentMediaTime() - startTime + showLog("****** \(#function) ended: \(elapsedTime) seconds ******", indentation: -1) + } + + /** UITextFieldTextDidEndEditingNotification, UITextViewTextDidEndEditingNotification. Removing fetched object. */ + @objc func textFieldViewDidEndEditing(_ notification: Notification) { + + let startTime = CACurrentMediaTime() + showLog("****** \(#function) started ******", indentation: 1) + + //Removing gesture recognizer (Enhancement ID: #14) + textFieldView?.window?.removeGestureRecognizer(resignFirstResponderGesture) + + // We check if there's a change in original frame or not. + + if let textView = textFieldView as? UIScrollView, textView.responds(to: #selector(getter: UITextView.isEditable)) { + + if isTextViewContentInsetChanged { + self.isTextViewContentInsetChanged = false + + if textView.contentInset != self.startingTextViewContentInsets { + self.showLog("Restoring textView.contentInset to: \(self.startingTextViewContentInsets)") + + UIView.animate(withDuration: animationDuration, delay: 0, options: animationCurve, animations: { () -> Void in + + //Setting textField to it's initial contentInset + textView.contentInset = self.startingTextViewContentInsets + textView.scrollIndicatorInsets = self.startingTextViewScrollIndicatorInsets + + }, completion: { (_) -> Void in }) + } + } + } + + //Setting object to nil + textFieldView = nil + + let elapsedTime = CACurrentMediaTime() - startTime + showLog("****** \(#function) ended: \(elapsedTime) seconds ******", indentation: -1) + } +} diff --git a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager.swift b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager.swift index 2c9328ac02..5d9e92e45b 100644 --- a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager.swift +++ b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager.swift @@ -1,7 +1,7 @@ // // IQKeyboardManager.swift // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. +// Copyright (c) 2013-20 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -21,171 +21,64 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -import Foundation -import CoreGraphics +// import Foundation - UIKit contains Foundation import UIKit +import CoreGraphics import QuartzCore -///--------------------- -/// MARK: IQToolbar tags -///--------------------- +// MARK: IQToolbar tags /** Codeless drop-in universal library allows to prevent issues of keyboard sliding up and cover UITextField/UITextView. Neither need to write any code nor any setup required and much more. A generic version of KeyboardManagement. https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html */ -@objc public class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { - - /** - Default tag for toolbar with Done button -1002. - */ - private static let kIQDoneButtonToolbarTag = -1002 - +@available(iOSApplicationExtension, unavailable) +@objc public final class IQKeyboardManager: NSObject { + /** - Default tag for toolbar with Previous/Next buttons -1005. + Returns the default singleton instance. */ - private static let kIQPreviousNextButtonToolbarTag = -1005 + @objc public static let shared = IQKeyboardManager() /** Invalid point value. */ - private static let kIQCGPointInvalid = CGPoint.init(x: CGFloat.greatestFiniteMagnitude, y: CGFloat.greatestFiniteMagnitude) + internal static let kIQCGPointInvalid = CGPoint.init(x: CGFloat.greatestFiniteMagnitude, y: CGFloat.greatestFiniteMagnitude) + + // MARK: UIKeyboard handling - ///--------------------------- - /// MARK: UIKeyboard handling - ///--------------------------- - /** Enable/disable managing distance between keyboard and textField. Default is YES(Enabled when class loads in `+(void)load` method). */ @objc public var enable = false { - + didSet { //If not enable, enable it. - if enable == true && - oldValue == false { + if enable, !oldValue { //If keyboard is currently showing. Sending a fake notification for keyboardWillHide to retain view's original position. - if let notification = _kbShowNotification { + if let notification = keyboardShowNotification { keyboardWillShow(notification) } showLog("Enabled") - } else if enable == false && - oldValue == true { //If not disable, desable it. + } else if !enable, oldValue { //If not disable, desable it. keyboardWillHide(nil) showLog("Disabled") } } } - - private func privateIsEnabled() -> Bool { - - var isEnabled = enable - - let enableMode = _textFieldView?.enableMode - - if enableMode == .enabled { - isEnabled = true - } else if enableMode == .disabled { - isEnabled = false - } else { - if var textFieldViewController = _textFieldView?.viewContainingController() { - - //If it is searchBar textField embedded in Navigation Bar - if _textFieldView?.textFieldSearchBar() != nil, let navController = textFieldViewController as? UINavigationController, let topController = navController.topViewController { - textFieldViewController = topController - } - - if isEnabled == false { - - //If viewController is kind of enable viewController class, then assuming it's enabled. - for enabledClass in enabledDistanceHandlingClasses { - - if textFieldViewController.isKind(of: enabledClass) { - isEnabled = true - break - } - } - } - - if isEnabled == true { - - //If viewController is kind of disabled viewController class, then assuming it's disabled. - for disabledClass in disabledDistanceHandlingClasses { - - if textFieldViewController.isKind(of: disabledClass) { - isEnabled = false - break - } - } - - //Special Controllers - if isEnabled == true { - - let classNameString = NSStringFromClass(type(of: textFieldViewController.self)) - - //_UIAlertControllerTextFieldViewController - if classNameString.contains("UIAlertController") && classNameString.hasSuffix("TextFieldViewController") { - isEnabled = false - } - } - } - } - } - - return isEnabled - } - + /** To set keyboard distance from textField. can't be less than zero. Default is 10.0. */ - @objc public var keyboardDistanceFromTextField: CGFloat { - - set { - _privateKeyboardDistanceFromTextField = max(0, newValue) - showLog("keyboardDistanceFromTextField: \(_privateKeyboardDistanceFromTextField)") - } - get { - return _privateKeyboardDistanceFromTextField - } - } - - /** - Boolean to know if keyboard is showing. - */ - @objc public var keyboardShowing: Bool { - - return _privateIsKeyboardShowing - } - - /** - moved distance to the top used to maintain distance between keyboard and textField. Most of the time this will be a positive value. - */ - @objc public var movedDistance: CGFloat { - - return _privateMovedDistance - } - - /** - Will be called then movedDistance will be changed - */ - @objc public var movedDistanceChanged: ((CGFloat) -> Void)? + @objc public var keyboardDistanceFromTextField: CGFloat = 10.0 + + // MARK: IQToolbar handling - /** - Returns the default singleton instance. - */ - @objc public static let shared = IQKeyboardManager() - - ///------------------------- - /// MARK: IQToolbar handling - ///------------------------- - /** Automatic add the IQToolbar functionality. Default is YES. */ @objc public var enableAutoToolbar = true { - didSet { - privateIsEnableAutoToolbar() ? addToolbarIfRequired() : removeToolbarIfRequired() let enableToolbar = enableAutoToolbar ? "Yes" : "NO" @@ -193,63 +86,13 @@ Codeless drop-in universal library allows to prevent issues of keyboard sliding showLog("enableAutoToolbar: \(enableToolbar)") } } - - private func privateIsEnableAutoToolbar() -> Bool { - - var enableToolbar = enableAutoToolbar - - if var textFieldViewController = _textFieldView?.viewContainingController() { - - //If it is searchBar textField embedded in Navigation Bar - if _textFieldView?.textFieldSearchBar() != nil, let navController = textFieldViewController as? UINavigationController, let topController = navController.topViewController { - textFieldViewController = topController - } - - if enableToolbar == false { - - //If found any toolbar enabled classes then return. - for enabledClass in enabledToolbarClasses { - - if textFieldViewController.isKind(of: enabledClass) { - enableToolbar = true - break - } - } - } - - if enableToolbar == true { - - //If found any toolbar disabled classes then return. - for disabledClass in disabledToolbarClasses { - - if textFieldViewController.isKind(of: disabledClass) { - enableToolbar = false - break - } - } - - //Special Controllers - if enableToolbar == true { - - let classNameString = NSStringFromClass(type(of: textFieldViewController.self)) - - //_UIAlertControllerTextFieldViewController - if classNameString.contains("UIAlertController") && classNameString.hasSuffix("TextFieldViewController") { - enableToolbar = false - } - } - } - } - - return enableToolbar - } /** /** IQAutoToolbarBySubviews: Creates Toolbar according to subview's hirarchy of Textfield's in view. IQAutoToolbarByTag: Creates Toolbar according to tag property of TextField's. IQAutoToolbarByPosition: Creates Toolbar according to the y,x position of textField in it's superview coordinate. - + Default is IQAutoToolbarBySubviews. */ AutoToolbar managing behaviour. Default is IQAutoToolbarBySubviews. @@ -260,7 +103,7 @@ Codeless drop-in universal library allows to prevent issues of keyboard sliding If YES, then uses textField's tintColor property for IQToolbar, otherwise tint color is default. Default is NO. */ @objc public var shouldToolbarUsesTextFieldTintColor = false - + /** This is used for toolbar.tintColor when textfield.keyboardAppearance is UIKeyboardAppearanceDefault. If shouldToolbarUsesTextFieldTintColor is YES then this property is ignored. Default is nil and uses black color. */ @@ -304,62 +147,45 @@ Codeless drop-in universal library allows to prevent issues of keyboard sliding Placeholder Font. Default is nil. */ @objc public var placeholderFont: UIFont? - + /** Placeholder Color. Default is nil. Which means lightGray */ @objc public var placeholderColor: UIColor? - + /** Placeholder Button Color when it's treated as button. Default is nil. */ @objc public var placeholderButtonColor: UIColor? - ///-------------------------- - /// MARK: UITextView handling - ///-------------------------- - - /** used to adjust contentInset of UITextView. */ - private var startingTextViewContentInsets = UIEdgeInsets() - - /** used to adjust scrollIndicatorInsets of UITextView. */ - private var startingTextViewScrollIndicatorInsets = UIEdgeInsets() - - /** used with textView to detect a textFieldView contentInset is changed or not. (Bug ID: #92)*/ - private var isTextViewContentInsetChanged = false - - ///--------------------------------------- - /// MARK: UIKeyboard appearance overriding - ///--------------------------------------- + // MARK: UIKeyboard appearance overriding /** Override the keyboardAppearance for all textField/textView. Default is NO. */ @objc public var overrideKeyboardAppearance = false - + /** If overrideKeyboardAppearance is YES, then all the textField keyboardAppearance is set using this property. */ @objc public var keyboardAppearance = UIKeyboardAppearance.default - ///----------------------------------------------------------- - /// MARK: UITextField/UITextView Next/Previous/Resign handling - ///----------------------------------------------------------- + // MARK: UITextField/UITextView Next/Previous/Resign handling /** Resigns Keyboard on touching outside of UITextField/View. Default is NO. */ @objc public var shouldResignOnTouchOutside = false { - + didSet { resignFirstResponderGesture.isEnabled = privateShouldResignOnTouchOutside() - + let shouldResign = shouldResignOnTouchOutside ? "Yes" : "NO" - + showLog("shouldResignOnTouchOutside: \(shouldResign)") } } - + /** TapGesture to resign keyboard on view's touch. It's a readonly property and exposed only for adding/removing dependencies if your added gesture does have collision with this one */ @objc lazy public var resignFirstResponderGesture: UITapGestureRecognizer = { @@ -369,361 +195,60 @@ Codeless drop-in universal library allows to prevent issues of keyboard sliding return tapGesture }() - + /*******************************************/ - - private func privateShouldResignOnTouchOutside() -> Bool { - - var shouldResign = shouldResignOnTouchOutside - - let enableMode = _textFieldView?.shouldResignOnTouchOutsideMode - - if enableMode == .enabled { - shouldResign = true - } else if enableMode == .disabled { - shouldResign = false - } else { - if var textFieldViewController = _textFieldView?.viewContainingController() { - - //If it is searchBar textField embedded in Navigation Bar - if _textFieldView?.textFieldSearchBar() != nil, let navController = textFieldViewController as? UINavigationController, let topController = navController.topViewController { - textFieldViewController = topController - } - if shouldResign == false { - - //If viewController is kind of enable viewController class, then assuming shouldResignOnTouchOutside is enabled. - for enabledClass in enabledTouchResignedClasses { - - if textFieldViewController.isKind(of: enabledClass) { - shouldResign = true - break - } - } - } - - if shouldResign == true { - - //If viewController is kind of disable viewController class, then assuming shouldResignOnTouchOutside is disable. - for disabledClass in disabledTouchResignedClasses { - - if textFieldViewController.isKind(of: disabledClass) { - shouldResign = false - break - } - } - - //Special Controllers - if shouldResign == true { - - let classNameString = NSStringFromClass(type(of: textFieldViewController.self)) - - //_UIAlertControllerTextFieldViewController - if classNameString.contains("UIAlertController") && classNameString.hasSuffix("TextFieldViewController") { - shouldResign = false - } - } - } - } - } - - return shouldResign - } - /** Resigns currently first responder field. */ @objc @discardableResult public func resignFirstResponder() -> Bool { - - if let textFieldRetain = _textFieldView { - - //Resigning first responder - let isResignFirstResponder = textFieldRetain.resignFirstResponder() - - // If it refuses then becoming it as first responder again. (Bug ID: #96) - if isResignFirstResponder == false { - //If it refuses to resign then becoming it first responder again for getting notifications callback. - textFieldRetain.becomeFirstResponder() - - showLog("Refuses to resign first responder: \(textFieldRetain)") - } - - return isResignFirstResponder - } - - return false - } - - /** - Returns YES if can navigate to previous responder textField/textView, otherwise NO. - */ - @objc public var canGoPrevious: Bool { - //Getting all responder view's. - if let textFields = responderViews() { - if let textFieldRetain = _textFieldView { - - //Getting index of current textField. - if let index = textFields.firstIndex(of: textFieldRetain) { - - //If it is not first textField. then it's previous object canBecomeFirstResponder. - if index > 0 { - return true - } - } - } - } - return false - } - - /** - Returns YES if can navigate to next responder textField/textView, otherwise NO. - */ - @objc public var canGoNext: Bool { - //Getting all responder view's. - if let textFields = responderViews() { - if let textFieldRetain = _textFieldView { - //Getting index of current textField. - if let index = textFields.firstIndex(of: textFieldRetain) { - - //If it is not first textField. then it's previous object canBecomeFirstResponder. - if index < textFields.count-1 { - return true - } - } - } - } - return false - } - - /** - Navigate to previous responder textField/textView. - */ - @objc @discardableResult public func goPrevious() -> Bool { - - //Getting all responder view's. - if let textFieldRetain = _textFieldView { - if let textFields = responderViews() { - //Getting index of current textField. - if let index = textFields.firstIndex(of: textFieldRetain) { - - //If it is not first textField. then it's previous object becomeFirstResponder. - if index > 0 { - - let nextTextField = textFields[index-1] - - let isAcceptAsFirstResponder = nextTextField.becomeFirstResponder() - - // If it refuses then becoming previous textFieldView as first responder again. (Bug ID: #96) - if isAcceptAsFirstResponder == false { - //If next field refuses to become first responder then restoring old textField as first responder. - textFieldRetain.becomeFirstResponder() - - showLog("Refuses to become first responder: \(nextTextField)") - } - - return isAcceptAsFirstResponder - } - } - } - } - - return false - } - - /** - Navigate to next responder textField/textView. - */ - @objc @discardableResult public func goNext() -> Bool { - - //Getting all responder view's. - if let textFieldRetain = _textFieldView { - if let textFields = responderViews() { - //Getting index of current textField. - if let index = textFields.firstIndex(of: textFieldRetain) { - //If it is not last textField. then it's next object becomeFirstResponder. - if index < textFields.count-1 { - - let nextTextField = textFields[index+1] - - let isAcceptAsFirstResponder = nextTextField.becomeFirstResponder() - - // If it refuses then becoming previous textFieldView as first responder again. (Bug ID: #96) - if isAcceptAsFirstResponder == false { - //If next field refuses to become first responder then restoring old textField as first responder. - textFieldRetain.becomeFirstResponder() - - showLog("Refuses to become first responder: \(nextTextField)") - } - - return isAcceptAsFirstResponder - } - } - } - } - return false - } - - /** previousAction. */ - @objc internal func previousAction (_ barButton: IQBarButtonItem) { - - //If user wants to play input Click sound. - if shouldPlayInputClicks == true { - //Play Input Click Sound. - UIDevice.current.playInputClick() + guard let textFieldRetain = textFieldView else { + return false } - - if canGoPrevious == true { - - if let textFieldRetain = _textFieldView { - let isAcceptAsFirstResponder = goPrevious() - - var invocation = barButton.invocation - var sender = textFieldRetain - - //Handling search bar special case - do { - if let searchBar = textFieldRetain.textFieldSearchBar() { - invocation = searchBar.keyboardToolbar.previousBarButton.invocation - sender = searchBar - } - } - - if isAcceptAsFirstResponder { - invocation?.invoke(from: sender) - } - } - } - } - - /** nextAction. */ - @objc internal func nextAction (_ barButton: IQBarButtonItem) { - - //If user wants to play input Click sound. - if shouldPlayInputClicks == true { - //Play Input Click Sound. - UIDevice.current.playInputClick() - } - - if canGoNext == true { - - if let textFieldRetain = _textFieldView { - let isAcceptAsFirstResponder = goNext() - - var invocation = barButton.invocation - var sender = textFieldRetain - - //Handling search bar special case - do { - if let searchBar = textFieldRetain.textFieldSearchBar() { - invocation = searchBar.keyboardToolbar.nextBarButton.invocation - sender = searchBar - } - } - if isAcceptAsFirstResponder { - invocation?.invoke(from: sender) - } - } - } - } - - /** doneAction. Resigning current textField. */ - @objc internal func doneAction (_ barButton: IQBarButtonItem) { - - //If user wants to play input Click sound. - if shouldPlayInputClicks == true { - //Play Input Click Sound. - UIDevice.current.playInputClick() - } - - if let textFieldRetain = _textFieldView { - //Resign textFieldView. - let isResignedFirstResponder = resignFirstResponder() - - var invocation = barButton.invocation - var sender = textFieldRetain - - //Handling search bar special case - do { - if let searchBar = textFieldRetain.textFieldSearchBar() { - invocation = searchBar.keyboardToolbar.doneBarButton.invocation - sender = searchBar - } - } - - if isResignedFirstResponder { - invocation?.invoke(from: sender) - } - } - } - - /** Resigning on tap gesture. (Enhancement ID: #14)*/ - @objc internal func tapRecognized(_ gesture: UITapGestureRecognizer) { - - if gesture.state == .ended { - - //Resigning currently responder textField. - resignFirstResponder() - } - } - - /** Note: returning YES is guaranteed to allow simultaneous recognition. returning NO is not guaranteed to prevent simultaneous recognition, as the other gesture's delegate may return YES. */ - @objc public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { - return false - } - - /** To not detect touch events in a subclass of UIControl, these may have added their own selector for specific work */ - @objc public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool { - // Should not recognize gesture if the clicked view is either UIControl or UINavigationBar(=4.2) - private var _animationCurve: UIView.AnimationOptions = .curveEaseOut - #else - private var _animationCurve: UIViewAnimationOptions = .curveEaseOut - #endif - /*******************************************/ - - /** Boolean to maintain keyboard is showing or it is hide. To solve rootViewController.view.frame calculations. */ - private var _privateIsKeyboardShowing = false - - private var _privateMovedDistance: CGFloat = 0.0 { - didSet { - movedDistanceChanged?(_privateMovedDistance) - } + /**************************************************************************************/ + internal struct WeakObjectContainer { + weak var object: AnyObject? } - - /** To use with keyboardDistanceFromTextField. */ - private var _privateKeyboardDistanceFromTextField: CGFloat = 10.0 - - /** To know if we have any pending request to adjust view position. */ - private var _privateHasPendingAdjustRequest = false /**************************************************************************************/ - - ///-------------------------------------- - /// MARK: Initialization/Deinitialization - ///-------------------------------------- - + + // MARK: Initialization/Deinitialization + /* Singleton Object Initialization. */ override init() { - + super.init() self.registerAllNotifications() //Creating gesture for @shouldResignOnTouchOutside. (Enhancement ID: #14) resignFirstResponderGesture.isEnabled = shouldResignOnTouchOutside - + //Loading IQToolbar, IQTitleBarButtonItem, IQBarButtonItem to fix first time keyboard appearance delay (Bug ID: #550) //If you experience exception breakpoint issue at below line then try these solutions https://stackoverflow.com/questions/27375640/all-exception-break-point-is-stopping-for-no-reason-on-simulator let textField = UITextField() textField.addDoneOnKeyboardWithTarget(nil, action: #selector(self.doneAction(_:))) textField.addPreviousNextDoneOnKeyboardWithTarget(nil, previousAction: #selector(self.previousAction(_:)), nextAction: #selector(self.nextAction(_:)), doneAction: #selector(self.doneAction(_:))) - + disabledDistanceHandlingClasses.append(UITableViewController.self) disabledDistanceHandlingClasses.append(UIAlertController.self) disabledToolbarClasses.append(UIAlertController.self) @@ -873,39 +330,27 @@ Codeless drop-in universal library allows to prevent issues of keyboard sliding touchResignedGestureIgnoreClasses.append(UIControl.self) touchResignedGestureIgnoreClasses.append(UINavigationBar.self) } - - /** Override +load method to enable KeyboardManager when class loader load IQKeyboardManager. Enabling when app starts (No need to write any code) */ - /** It doesn't work from Swift 1.2 */ -// override public class func load() { -// super.load() -// -// //Enabling IQKeyboardManager. -// IQKeyboardManager.shared.enable = true -// } - + deinit { // Disable the keyboard manager. enable = false - - //Removing notification observers on dealloc. - NotificationCenter.default.removeObserver(self) } - + /** Getting keyWindow. */ - private func keyWindow() -> UIWindow? { - - if let keyWindow = _textFieldView?.window { + internal func keyWindow() -> UIWindow? { + + if let keyWindow = textFieldView?.window { return keyWindow } else { - + struct Static { /** @abstract Save keyWindow object for reuse. @discussion Sometimes [[UIApplication sharedApplication] keyWindow] is returning nil between the app. */ static weak var keyWindow: UIWindow? } - var originalKeyWindow : UIWindow? = nil - + var originalKeyWindow: UIWindow? + #if swift(>=5.1) if #available(iOS 13, *) { originalKeyWindow = UIApplication.shared.connectedScenes @@ -919,8 +364,6 @@ Codeless drop-in universal library allows to prevent issues of keyboard sliding originalKeyWindow = UIApplication.shared.keyWindow #endif - - //If original key window is not nil and the cached keywindow is also not original keywindow then changing keywindow. if let originalKeyWindow = originalKeyWindow { Static.keyWindow = originalKeyWindow @@ -931,1372 +374,51 @@ Codeless drop-in universal library allows to prevent issues of keyboard sliding } } - ///----------------------- - /// MARK: Helper Functions - ///----------------------- - - private func optimizedAdjustPosition() { - if _privateHasPendingAdjustRequest == false { - _privateHasPendingAdjustRequest = true - OperationQueue.main.addOperation { - self.adjustPosition() - self._privateHasPendingAdjustRequest = false - } - } - } - - /* Adjusting RootViewController's frame according to interface orientation. */ - private func adjustPosition() { - - // We are unable to get textField object while keyboard showing on WKWebView's textField. (Bug ID: #11) - if _privateHasPendingAdjustRequest == true, - let textFieldView = _textFieldView, - let rootController = textFieldView.parentContainerViewController(), - let window = keyWindow(), - let textFieldViewRectInWindow = textFieldView.superview?.convert(textFieldView.frame, to: window), - let textFieldViewRectInRootSuperview = textFieldView.superview?.convert(textFieldView.frame, to: rootController.view?.superview) { - let startTime = CACurrentMediaTime() - showLog("****** \(#function) started ******", indentation: 1) - - // Getting RootViewOrigin. - var rootViewOrigin = rootController.view.frame.origin - - //Maintain keyboardDistanceFromTextField - var specialKeyboardDistanceFromTextField = textFieldView.keyboardDistanceFromTextField - - if let searchBar = textFieldView.textFieldSearchBar() { - - specialKeyboardDistanceFromTextField = searchBar.keyboardDistanceFromTextField - } - - let newKeyboardDistanceFromTextField = (specialKeyboardDistanceFromTextField == kIQUseDefaultKeyboardDistance) ? keyboardDistanceFromTextField : specialKeyboardDistanceFromTextField - - var kbSize = _kbFrame.size - - do { - var kbFrame = _kbFrame - - kbFrame.origin.y -= newKeyboardDistanceFromTextField - kbFrame.size.height += newKeyboardDistanceFromTextField - - //Calculating actual keyboard covered size respect to window, keyboard frame may be different when hardware keyboard is attached (Bug ID: #469) (Bug ID: #381) (Bug ID: #1506) - let intersectRect = kbFrame.intersection(window.frame) - - if intersectRect.isNull { - kbSize = CGSize(width: kbFrame.size.width, height: 0) - } else { - kbSize = intersectRect.size - } - } - - let statusBarHeight : CGFloat - - #if swift(>=5.1) - if #available(iOS 13, *) { - statusBarHeight = window.windowScene?.statusBarManager?.statusBarFrame.height ?? 0 - } else { - statusBarHeight = UIApplication.shared.statusBarFrame.height - } - #else - statusBarHeight = UIApplication.shared.statusBarFrame.height - #endif - - let navigationBarAreaHeight: CGFloat = statusBarHeight + ( rootController.navigationController?.navigationBar.frame.height ?? 0) - let layoutAreaHeight: CGFloat = rootController.view.layoutMargins.bottom - - let topLayoutGuide: CGFloat = max(navigationBarAreaHeight, layoutAreaHeight) + 5 - let bottomLayoutGuide: CGFloat = (textFieldView is UIScrollView && textFieldView.responds(to: #selector(getter: UITextView.isEditable))) ? 0 : rootController.view.layoutMargins.bottom //Validation of textView for case where there is a tab bar at the bottom or running on iPhone X and textView is at the bottom. - - // Move positive = textField is hidden. - // Move negative = textField is showing. - // Calculating move position. - var move: CGFloat = min(textFieldViewRectInRootSuperview.minY-(topLayoutGuide), textFieldViewRectInWindow.maxY-(window.frame.height-kbSize.height)+bottomLayoutGuide) - - showLog("Need to move: \(move)") - - var superScrollView: UIScrollView? - var superView = textFieldView.superviewOfClassType(UIScrollView.self) as? UIScrollView - - //Getting UIScrollView whose scrolling is enabled. // (Bug ID: #285) - while let view = superView { - - if view.isScrollEnabled && view.shouldIgnoreScrollingAdjustment == false { - superScrollView = view - break - } else { - // Getting it's superScrollView. // (Enhancement ID: #21, #24) - superView = view.superviewOfClassType(UIScrollView.self) as? UIScrollView - } - } - - //If there was a lastScrollView. // (Bug ID: #34) - if let lastScrollView = _lastScrollView { - //If we can't find current superScrollView, then setting lastScrollView to it's original form. - if superScrollView == nil { - - if lastScrollView.contentInset != self._startingContentInsets { - showLog("Restoring contentInset to: \(_startingContentInsets)") - UIView.animate(withDuration: _animationDuration, delay: 0, options: _animationCurve.union(.beginFromCurrentState), animations: { () -> Void in - - lastScrollView.contentInset = self._startingContentInsets - lastScrollView.scrollIndicatorInsets = self._startingScrollIndicatorInsets - }) - } - - if lastScrollView.shouldRestoreScrollViewContentOffset == true && lastScrollView.contentOffset.equalTo(_startingContentOffset) == false { - showLog("Restoring contentOffset to: \(_startingContentOffset)") - - var animatedContentOffset = false // (Bug ID: #1365, #1508, #1541) - - if #available(iOS 9, *) { - animatedContentOffset = textFieldView.superviewOfClassType(UIStackView.self, belowView: lastScrollView) != nil - } - - if animatedContentOffset { - lastScrollView.setContentOffset(_startingContentOffset, animated: UIView.areAnimationsEnabled) - } else { - lastScrollView.contentOffset = _startingContentOffset - } - } - - _startingContentInsets = UIEdgeInsets() - _startingScrollIndicatorInsets = UIEdgeInsets() - _startingContentOffset = CGPoint.zero - _lastScrollView = nil - } else if superScrollView != lastScrollView { //If both scrollView's are different, then reset lastScrollView to it's original frame and setting current scrollView as last scrollView. - - if lastScrollView.contentInset != self._startingContentInsets { - showLog("Restoring contentInset to: \(_startingContentInsets)") - UIView.animate(withDuration: _animationDuration, delay: 0, options: _animationCurve.union(.beginFromCurrentState), animations: { () -> Void in - - lastScrollView.contentInset = self._startingContentInsets - lastScrollView.scrollIndicatorInsets = self._startingScrollIndicatorInsets - }) - } - - if lastScrollView.shouldRestoreScrollViewContentOffset == true && lastScrollView.contentOffset.equalTo(_startingContentOffset) == false { - showLog("Restoring contentOffset to: \(_startingContentOffset)") - - var animatedContentOffset = false // (Bug ID: #1365, #1508, #1541) - - if #available(iOS 9, *) { - animatedContentOffset = textFieldView.superviewOfClassType(UIStackView.self, belowView: lastScrollView) != nil - } - - if animatedContentOffset { - lastScrollView.setContentOffset(_startingContentOffset, animated: UIView.areAnimationsEnabled) - } else { - lastScrollView.contentOffset = _startingContentOffset - } - } - - _lastScrollView = superScrollView - if let scrollView = superScrollView { - _startingContentInsets = scrollView.contentInset - _startingContentOffset = scrollView.contentOffset - - #if swift(>=5.1) - if #available(iOS 11.1, *) { - _startingScrollIndicatorInsets = scrollView.verticalScrollIndicatorInsets - } else { - _startingScrollIndicatorInsets = scrollView.scrollIndicatorInsets - } - #else - _startingScrollIndicatorInsets = scrollView.scrollIndicatorInsets - #endif - } - - showLog("Saving ScrollView New contentInset: \(_startingContentInsets) and contentOffset: \(_startingContentOffset)") - } - //Else the case where superScrollView == lastScrollView means we are on same scrollView after switching to different textField. So doing nothing, going ahead - } else if let unwrappedSuperScrollView = superScrollView { //If there was no lastScrollView and we found a current scrollView. then setting it as lastScrollView. - _lastScrollView = unwrappedSuperScrollView - _startingContentInsets = unwrappedSuperScrollView.contentInset - _startingContentOffset = unwrappedSuperScrollView.contentOffset - - #if swift(>=5.1) - if #available(iOS 11.1, *) { - _startingScrollIndicatorInsets = unwrappedSuperScrollView.verticalScrollIndicatorInsets - } else { - _startingScrollIndicatorInsets = unwrappedSuperScrollView.scrollIndicatorInsets - } - #else - _startingScrollIndicatorInsets = unwrappedSuperScrollView.scrollIndicatorInsets - #endif - - showLog("Saving ScrollView contentInset: \(_startingContentInsets) and contentOffset: \(_startingContentOffset)") - } - - // Special case for ScrollView. - // If we found lastScrollView then setting it's contentOffset to show textField. - if let lastScrollView = _lastScrollView { - //Saving - var lastView = textFieldView - var superScrollView = _lastScrollView - - while let scrollView = superScrollView { - - var shouldContinue = false - - if move > 0 { - shouldContinue = move > (-scrollView.contentOffset.y - scrollView.contentInset.top) - - } else if let tableView = scrollView.superviewOfClassType(UITableView.self) as? UITableView { - - shouldContinue = scrollView.contentOffset.y > 0 - - if shouldContinue == true, let tableCell = textFieldView.superviewOfClassType(UITableViewCell.self) as? UITableViewCell, let indexPath = tableView.indexPath(for: tableCell), let previousIndexPath = tableView.previousIndexPath(of: indexPath) { - - let previousCellRect = tableView.rectForRow(at: previousIndexPath) - if previousCellRect.isEmpty == false { - let previousCellRectInRootSuperview = tableView.convert(previousCellRect, to: rootController.view.superview) - - move = min(0, previousCellRectInRootSuperview.maxY - topLayoutGuide) - } - } - } else if let collectionView = scrollView.superviewOfClassType(UICollectionView.self) as? UICollectionView { - - shouldContinue = scrollView.contentOffset.y > 0 - - if shouldContinue == true, let collectionCell = textFieldView.superviewOfClassType(UICollectionViewCell.self) as? UICollectionViewCell, let indexPath = collectionView.indexPath(for: collectionCell), let previousIndexPath = collectionView.previousIndexPath(of: indexPath), let attributes = collectionView.layoutAttributesForItem(at: previousIndexPath) { - - let previousCellRect = attributes.frame - if previousCellRect.isEmpty == false { - let previousCellRectInRootSuperview = collectionView.convert(previousCellRect, to: rootController.view.superview) - - move = min(0, previousCellRectInRootSuperview.maxY - topLayoutGuide) - } - } - } else { - - shouldContinue = textFieldViewRectInRootSuperview.origin.y < topLayoutGuide - - if shouldContinue { - move = min(0, textFieldViewRectInRootSuperview.origin.y - topLayoutGuide) - } - } - - //Looping in upper hierarchy until we don't found any scrollView in it's upper hirarchy till UIWindow object. - if shouldContinue { - - var tempScrollView = scrollView.superviewOfClassType(UIScrollView.self) as? UIScrollView - var nextScrollView: UIScrollView? - while let view = tempScrollView { - - if view.isScrollEnabled && view.shouldIgnoreScrollingAdjustment == false { - nextScrollView = view - break - } else { - tempScrollView = view.superviewOfClassType(UIScrollView.self) as? UIScrollView - } - } - - //Getting lastViewRect. - if let lastViewRect = lastView.superview?.convert(lastView.frame, to: scrollView) { - - //Calculating the expected Y offset from move and scrollView's contentOffset. - var shouldOffsetY = scrollView.contentOffset.y - min(scrollView.contentOffset.y, -move) - - //Rearranging the expected Y offset according to the view. - shouldOffsetY = min(shouldOffsetY, lastViewRect.origin.y) - - //[_textFieldView isKindOfClass:[UITextView class]] If is a UITextView type - //nextScrollView == nil If processing scrollView is last scrollView in upper hierarchy (there is no other scrollView upper hierrchy.) - //[_textFieldView isKindOfClass:[UITextView class]] If is a UITextView type - //shouldOffsetY >= 0 shouldOffsetY must be greater than in order to keep distance from navigationBar (Bug ID: #92) - if (textFieldView is UIScrollView && textFieldView.responds(to: #selector(getter: UITextView.isEditable))) && - nextScrollView == nil && - shouldOffsetY >= 0 { - - // Converting Rectangle according to window bounds. - if let currentTextFieldViewRect = textFieldView.superview?.convert(textFieldView.frame, to: window) { - - //Calculating expected fix distance which needs to be managed from navigation bar - let expectedFixDistance = currentTextFieldViewRect.minY - topLayoutGuide - - //Now if expectedOffsetY (superScrollView.contentOffset.y + expectedFixDistance) is lower than current shouldOffsetY, which means we're in a position where navigationBar up and hide, then reducing shouldOffsetY with expectedOffsetY (superScrollView.contentOffset.y + expectedFixDistance) - shouldOffsetY = min(shouldOffsetY, scrollView.contentOffset.y + expectedFixDistance) - - //Setting move to 0 because now we don't want to move any view anymore (All will be managed by our contentInset logic. - move = 0 - } else { - //Subtracting the Y offset from the move variable, because we are going to change scrollView's contentOffset.y to shouldOffsetY. - move -= (shouldOffsetY-scrollView.contentOffset.y) - } - } else { - //Subtracting the Y offset from the move variable, because we are going to change scrollView's contentOffset.y to shouldOffsetY. - move -= (shouldOffsetY-scrollView.contentOffset.y) - } - - let newContentOffset = CGPoint(x: scrollView.contentOffset.x, y: shouldOffsetY) - - if scrollView.contentOffset.equalTo(newContentOffset) == false { - - showLog("old contentOffset: \(scrollView.contentOffset) new contentOffset: \(newContentOffset)") - self.showLog("Remaining Move: \(move)") - - //Getting problem while using `setContentOffset:animated:`, So I used animation API. - UIView.animate(withDuration: _animationDuration, delay: 0, options: _animationCurve.union(.beginFromCurrentState), animations: { () -> Void in - - var animatedContentOffset = false // (Bug ID: #1365, #1508, #1541) - - if #available(iOS 9, *) { - animatedContentOffset = textFieldView.superviewOfClassType(UIStackView.self, belowView: scrollView) != nil - } - - if animatedContentOffset { - scrollView.setContentOffset(newContentOffset, animated: UIView.areAnimationsEnabled) - } else { - scrollView.contentOffset = newContentOffset - } - }) { _ in - - if scrollView is UITableView || scrollView is UICollectionView { - //This will update the next/previous states - self.addToolbarIfRequired() - } - } - } - } - - // Getting next lastView & superScrollView. - lastView = scrollView - superScrollView = nextScrollView - } else { - move = 0 - break - } - } - - //Updating contentInset - if let lastScrollViewRect = lastScrollView.superview?.convert(lastScrollView.frame, to: window), - lastScrollView.shouldIgnoreContentInsetAdjustment == false { - - var bottomInset: CGFloat = (kbSize.height)-(window.frame.height-lastScrollViewRect.maxY) - var bottomScrollIndicatorInset = bottomInset - newKeyboardDistanceFromTextField - - // Update the insets so that the scroll vew doesn't shift incorrectly when the offset is near the bottom of the scroll view. - bottomInset = max(_startingContentInsets.bottom, bottomInset) - bottomScrollIndicatorInset = max(_startingScrollIndicatorInsets.bottom, bottomScrollIndicatorInset) - - #if swift(>=4.0) - if #available(iOS 11, *) { - bottomInset -= lastScrollView.safeAreaInsets.bottom - bottomScrollIndicatorInset -= lastScrollView.safeAreaInsets.bottom - } - #endif - - var movedInsets = lastScrollView.contentInset - movedInsets.bottom = bottomInset - - if lastScrollView.contentInset != movedInsets { - showLog("old ContentInset: \(lastScrollView.contentInset) new ContentInset: \(movedInsets)") - - UIView.animate(withDuration: _animationDuration, delay: 0, options: _animationCurve.union(.beginFromCurrentState), animations: { () -> Void in - lastScrollView.contentInset = movedInsets - - var newScrollIndicatorInset : UIEdgeInsets - - #if swift(>=5.1) - if #available(iOS 11.1, *) { - newScrollIndicatorInset = lastScrollView.verticalScrollIndicatorInsets - } else { - newScrollIndicatorInset = lastScrollView.scrollIndicatorInsets - } - #else - newScrollIndicatorInset = lastScrollView.scrollIndicatorInsets - #endif - - newScrollIndicatorInset.bottom = bottomScrollIndicatorInset - lastScrollView.scrollIndicatorInsets = newScrollIndicatorInset - }) - } - } - } - //Going ahead. No else if. - - //Special case for UITextView(Readjusting textView.contentInset when textView hight is too big to fit on screen) - //_lastScrollView If not having inside any scrollView, (now contentInset manages the full screen textView. - //[_textFieldView isKindOfClass:[UITextView class]] If is a UITextView type - if let textView = textFieldView as? UIScrollView, textView.isScrollEnabled, textFieldView.responds(to: #selector(getter: UITextView.isEditable)) { - -// CGRect rootSuperViewFrameInWindow = [_rootViewController.view.superview convertRect:_rootViewController.view.superview.bounds toView:keyWindow]; -// -// CGFloat keyboardOverlapping = CGRectGetMaxY(rootSuperViewFrameInWindow) - keyboardYPosition; -// -// CGFloat textViewHeight = MIN(CGRectGetHeight(_textFieldView.frame), (CGRectGetHeight(rootSuperViewFrameInWindow)-topLayoutGuide-keyboardOverlapping)); - - let keyboardYPosition = window.frame.height - (kbSize.height-newKeyboardDistanceFromTextField) - var rootSuperViewFrameInWindow = window.frame - if let rootSuperview = rootController.view.superview { - rootSuperViewFrameInWindow = rootSuperview.convert(rootSuperview.bounds, to: window) - } - - let keyboardOverlapping = rootSuperViewFrameInWindow.maxY - keyboardYPosition - - let textViewHeight = min(textView.frame.height, rootSuperViewFrameInWindow.height-topLayoutGuide-keyboardOverlapping) - - if textView.frame.size.height-textView.contentInset.bottom>textViewHeight { - //_isTextViewContentInsetChanged, If frame is not change by library in past, then saving user textView properties (Bug ID: #92) - if self.isTextViewContentInsetChanged == false { - self.startingTextViewContentInsets = textView.contentInset - - #if swift(>=5.1) - if #available(iOS 11.1, *) { - self.startingTextViewScrollIndicatorInsets = textView.verticalScrollIndicatorInsets - } else { - self.startingTextViewScrollIndicatorInsets = textView.scrollIndicatorInsets - } - #else - self.startingTextViewScrollIndicatorInsets = textView.scrollIndicatorInsets - #endif - } - - self.isTextViewContentInsetChanged = true - - var newContentInset = textView.contentInset - newContentInset.bottom = textView.frame.size.height-textViewHeight - - #if swift(>=4.0) - if #available(iOS 11, *) { - newContentInset.bottom -= textView.safeAreaInsets.bottom - } - #endif - - if textView.contentInset != newContentInset { - self.showLog("\(textFieldView) Old UITextView.contentInset: \(textView.contentInset) New UITextView.contentInset: \(newContentInset)") - - UIView.animate(withDuration: _animationDuration, delay: 0, options: _animationCurve.union(.beginFromCurrentState), animations: { () -> Void in - - textView.contentInset = newContentInset - textView.scrollIndicatorInsets = newContentInset - }, completion: { (_) -> Void in }) - } - } - } - - // +Positive or zero. - if move >= 0 { - - rootViewOrigin.y = max(rootViewOrigin.y - move, min(0, -(kbSize.height-newKeyboardDistanceFromTextField))) - - if rootController.view.frame.origin.equalTo(rootViewOrigin) == false { - showLog("Moving Upward") - - UIView.animate(withDuration: _animationDuration, delay: 0, options: _animationCurve.union(.beginFromCurrentState), animations: { () -> Void in - - var rect = rootController.view.frame - rect.origin = rootViewOrigin - rootController.view.frame = rect - - //Animating content if needed (Bug ID: #204) - if self.layoutIfNeededOnUpdate == true { - //Animating content (Bug ID: #160) - rootController.view.setNeedsLayout() - rootController.view.layoutIfNeeded() - } - - self.showLog("Set \(rootController) origin to: \(rootViewOrigin)") - }) - } - - _privateMovedDistance = (_topViewBeginOrigin.y-rootViewOrigin.y) - } else { // -Negative - let disturbDistance: CGFloat = rootViewOrigin.y-_topViewBeginOrigin.y - - // disturbDistance Negative = frame disturbed. - // disturbDistance positive = frame not disturbed. - if disturbDistance <= 0 { - - rootViewOrigin.y -= max(move, disturbDistance) - - if rootController.view.frame.origin.equalTo(rootViewOrigin) == false { - showLog("Moving Downward") - // Setting adjusted rootViewRect - // Setting adjusted rootViewRect - - UIView.animate(withDuration: _animationDuration, delay: 0, options: _animationCurve.union(.beginFromCurrentState), animations: { () -> Void in - - var rect = rootController.view.frame - rect.origin = rootViewOrigin - rootController.view.frame = rect - - //Animating content if needed (Bug ID: #204) - if self.layoutIfNeededOnUpdate == true { - //Animating content (Bug ID: #160) - rootController.view.setNeedsLayout() - rootController.view.layoutIfNeeded() - } - - self.showLog("Set \(rootController) origin to: \(rootViewOrigin)") - }) - } - - _privateMovedDistance = (_topViewBeginOrigin.y-rootViewOrigin.y) - } - } - - let elapsedTime = CACurrentMediaTime() - startTime - showLog("****** \(#function) ended: \(elapsedTime) seconds ******", indentation: -1) - } - } - - private func restorePosition() { - - _privateHasPendingAdjustRequest = false - - // Setting rootViewController frame to it's original position. // (Bug ID: #18) - if _topViewBeginOrigin.equalTo(IQKeyboardManager.kIQCGPointInvalid) == false { - - if let rootViewController = _rootViewController { - - if rootViewController.view.frame.origin.equalTo(self._topViewBeginOrigin) == false { - //Used UIViewAnimationOptionBeginFromCurrentState to minimize strange animations. - UIView.animate(withDuration: _animationDuration, delay: 0, options: _animationCurve.union(.beginFromCurrentState), animations: { () -> Void in - - self.showLog("Restoring \(rootViewController) origin to: \(self._topViewBeginOrigin)") - - // Setting it's new frame - var rect = rootViewController.view.frame - rect.origin = self._topViewBeginOrigin - rootViewController.view.frame = rect - - //Animating content if needed (Bug ID: #204) - if self.layoutIfNeededOnUpdate == true { - //Animating content (Bug ID: #160) - rootViewController.view.setNeedsLayout() - rootViewController.view.layoutIfNeeded() - } - }) - } - - self._privateMovedDistance = 0 - - if rootViewController.navigationController?.interactivePopGestureRecognizer?.state == .began { - self._rootViewControllerWhilePopGestureRecognizerActive = rootViewController - self._topViewBeginOriginWhilePopGestureRecognizerActive = self._topViewBeginOrigin - } - - _rootViewController = nil - } - } - } + // MARK: Public Methods - ///--------------------- - /// MARK: Public Methods - ///--------------------- - /* Refreshes textField/textView position if any external changes is explicitly made by user. */ @objc public func reloadLayoutIfNeeded() { - if privateIsEnabled() == true { - if _privateIsKeyboardShowing == true, - _topViewBeginOrigin.equalTo(IQKeyboardManager.kIQCGPointInvalid) == false, - let textFieldView = _textFieldView, - textFieldView.isAlertViewTextField() == false { - optimizedAdjustPosition() - } - } - } - - ///------------------------------- - /// MARK: UIKeyboard Notifications - ///------------------------------- - - /* UIKeyboardWillShowNotification. */ - @objc internal func keyboardWillShow(_ notification: Notification?) { - - _kbShowNotification = notification - - // Boolean to know keyboard is showing/hiding - _privateIsKeyboardShowing = true - - let oldKBFrame = _kbFrame - - if let info = notification?.userInfo { - - #if swift(>=4.2) - let curveUserInfoKey = UIResponder.keyboardAnimationCurveUserInfoKey - let durationUserInfoKey = UIResponder.keyboardAnimationDurationUserInfoKey - let frameEndUserInfoKey = UIResponder.keyboardFrameEndUserInfoKey - #else - let curveUserInfoKey = UIKeyboardAnimationCurveUserInfoKey - let durationUserInfoKey = UIKeyboardAnimationDurationUserInfoKey - let frameEndUserInfoKey = UIKeyboardFrameEndUserInfoKey - #endif - - // Getting keyboard animation. - if let curve = info[curveUserInfoKey] as? UInt { - _animationCurve = .init(rawValue: curve) - } else { - _animationCurve = .curveEaseOut - } - - // Getting keyboard animation duration - if let duration = info[durationUserInfoKey] as? TimeInterval { - - //Saving animation duration - if duration != 0.0 { - _animationDuration = duration - } - } else { - _animationDuration = 0.25 - } - - // Getting UIKeyboardSize. - if let kbFrame = info[frameEndUserInfoKey] as? CGRect { - - _kbFrame = kbFrame - showLog("UIKeyboard Frame: \(_kbFrame)") - } - } - - if privateIsEnabled() == false { - restorePosition() - _topViewBeginOrigin = IQKeyboardManager.kIQCGPointInvalid - return - } - - let startTime = CACurrentMediaTime() - showLog("****** \(#function) started ******", indentation: 1) - - // (Bug ID: #5) - if let textFieldView = _textFieldView, _topViewBeginOrigin.equalTo(IQKeyboardManager.kIQCGPointInvalid) == true { - - // keyboard is not showing(At the beginning only). We should save rootViewRect. - _rootViewController = textFieldView.parentContainerViewController() - if let controller = _rootViewController { - - if _rootViewControllerWhilePopGestureRecognizerActive == controller { - _topViewBeginOrigin = _topViewBeginOriginWhilePopGestureRecognizerActive - } else { - _topViewBeginOrigin = controller.view.frame.origin - } - - _rootViewControllerWhilePopGestureRecognizerActive = nil - _topViewBeginOriginWhilePopGestureRecognizerActive = IQKeyboardManager.kIQCGPointInvalid - - self.showLog("Saving \(controller) beginning origin: \(self._topViewBeginOrigin)") - } - } - - //If last restored keyboard size is different(any orientation accure), then refresh. otherwise not. - if _kbFrame.equalTo(oldKBFrame) == false { - - //If _textFieldView is inside UITableViewController then let UITableViewController to handle it (Bug ID: #37) (Bug ID: #76) See note:- https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html If it is UIAlertView textField then do not affect anything (Bug ID: #70). - - if _privateIsKeyboardShowing == true, - let textFieldView = _textFieldView, - textFieldView.isAlertViewTextField() == false { - - // keyboard is already showing. adjust position. - optimizedAdjustPosition() - } - } - - let elapsedTime = CACurrentMediaTime() - startTime - showLog("****** \(#function) ended: \(elapsedTime) seconds ******", indentation: -1) - } - - /* UIKeyboardDidShowNotification. */ - @objc internal func keyboardDidShow(_ notification: Notification?) { - - if privateIsEnabled() == false { - return - } - - let startTime = CACurrentMediaTime() - showLog("****** \(#function) started ******", indentation: 1) - - if let textFieldView = _textFieldView, - let parentController = textFieldView.parentContainerViewController(), (parentController.modalPresentationStyle == UIModalPresentationStyle.formSheet || parentController.modalPresentationStyle == UIModalPresentationStyle.pageSheet), - textFieldView.isAlertViewTextField() == false { - - self.optimizedAdjustPosition() - } - - let elapsedTime = CACurrentMediaTime() - startTime - showLog("****** \(#function) ended: \(elapsedTime) seconds ******", indentation: -1) - } - - /* UIKeyboardWillHideNotification. So setting rootViewController to it's default frame. */ - @objc internal func keyboardWillHide(_ notification: Notification?) { - - //If it's not a fake notification generated by [self setEnable:NO]. - if notification != nil { - _kbShowNotification = nil - } - - // Boolean to know keyboard is showing/hiding - _privateIsKeyboardShowing = false - - if let info = notification?.userInfo { - - #if swift(>=4.2) - let durationUserInfoKey = UIResponder.keyboardAnimationDurationUserInfoKey - #else - let durationUserInfoKey = UIKeyboardAnimationDurationUserInfoKey - #endif - - // Getting keyboard animation duration - if let duration = info[durationUserInfoKey] as? TimeInterval { - if duration != 0 { - // Setitng keyboard animation duration - _animationDuration = duration - } - } - } - - //If not enabled then do nothing. - if privateIsEnabled() == false { - return + guard privateIsEnabled(), + keyboardShowing, + topViewBeginOrigin.equalTo(IQKeyboardManager.kIQCGPointInvalid) == false, let textFieldView = textFieldView, + textFieldView.isAlertViewTextField() == false else { + return } - - let startTime = CACurrentMediaTime() - showLog("****** \(#function) started ******", indentation: 1) - - //Commented due to #56. Added all the conditions below to handle WKWebView's textFields. (Bug ID: #56) - // We are unable to get textField object while keyboard showing on WKWebView's textField. (Bug ID: #11) - // if (_textFieldView == nil) return - - //Restoring the contentOffset of the lastScrollView - if let lastScrollView = _lastScrollView { - - UIView.animate(withDuration: _animationDuration, delay: 0, options: _animationCurve.union(.beginFromCurrentState), animations: { () -> Void in - - if lastScrollView.contentInset != self._startingContentInsets { - self.showLog("Restoring contentInset to: \(self._startingContentInsets)") - lastScrollView.contentInset = self._startingContentInsets - lastScrollView.scrollIndicatorInsets = self._startingScrollIndicatorInsets - } - - if lastScrollView.shouldRestoreScrollViewContentOffset == true && lastScrollView.contentOffset.equalTo(self._startingContentOffset) == false { - self.showLog("Restoring contentOffset to: \(self._startingContentOffset)") - - var animatedContentOffset = false // (Bug ID: #1365, #1508, #1541) - - if #available(iOS 9, *) { - animatedContentOffset = self._textFieldView?.superviewOfClassType(UIStackView.self, belowView: lastScrollView) != nil - } - - if animatedContentOffset { - lastScrollView.setContentOffset(self._startingContentOffset, animated: UIView.areAnimationsEnabled) - } else { - lastScrollView.contentOffset = self._startingContentOffset - } - } - - // TODO: restore scrollView state - // This is temporary solution. Have to implement the save and restore scrollView state - var superScrollView: UIScrollView? = lastScrollView - - while let scrollView = superScrollView { - - let contentSize = CGSize(width: max(scrollView.contentSize.width, scrollView.frame.width), height: max(scrollView.contentSize.height, scrollView.frame.height)) - - let minimumY = contentSize.height - scrollView.frame.height - - if minimumY < scrollView.contentOffset.y { - - let newContentOffset = CGPoint(x: scrollView.contentOffset.x, y: minimumY) - if scrollView.contentOffset.equalTo(newContentOffset) == false { - - var animatedContentOffset = false // (Bug ID: #1365, #1508, #1541) - - if #available(iOS 9, *) { - animatedContentOffset = self._textFieldView?.superviewOfClassType(UIStackView.self, belowView: scrollView) != nil - } - - if animatedContentOffset { - scrollView.setContentOffset(newContentOffset, animated: UIView.areAnimationsEnabled) - } else { - scrollView.contentOffset = newContentOffset - } - - self.showLog("Restoring contentOffset to: \(self._startingContentOffset)") - } - } - - superScrollView = scrollView.superviewOfClassType(UIScrollView.self) as? UIScrollView - } - }) - } - - restorePosition() - - //Reset all values - _lastScrollView = nil - _kbFrame = CGRect.zero - _startingContentInsets = UIEdgeInsets() - _startingScrollIndicatorInsets = UIEdgeInsets() - _startingContentOffset = CGPoint.zero - // topViewBeginRect = CGRectZero //Commented due to #82 - - let elapsedTime = CACurrentMediaTime() - startTime - showLog("****** \(#function) ended: \(elapsedTime) seconds ******", indentation: -1) + optimizedAdjustPosition() } +} - @objc internal func keyboardDidHide(_ notification: Notification) { - - let startTime = CACurrentMediaTime() - showLog("****** \(#function) started ******", indentation: 1) - - _topViewBeginOrigin = IQKeyboardManager.kIQCGPointInvalid - - _kbFrame = CGRect.zero +@available(iOSApplicationExtension, unavailable) +extension IQKeyboardManager: UIGestureRecognizerDelegate { - let elapsedTime = CACurrentMediaTime() - startTime - showLog("****** \(#function) ended: \(elapsedTime) seconds ******", indentation: -1) - } - - ///------------------------------------------- - /// MARK: UITextField/UITextView Notifications - ///------------------------------------------- - - /** UITextFieldTextDidBeginEditingNotification, UITextViewTextDidBeginEditingNotification. Fetching UITextFieldView object. */ - @objc internal func textFieldViewDidBeginEditing(_ notification: Notification) { - - let startTime = CACurrentMediaTime() - showLog("****** \(#function) started ******", indentation: 1) - - // Getting object - _textFieldView = notification.object as? UIView - - if overrideKeyboardAppearance == true { - if let textInput = _textFieldView as? UITextInput { - if textInput.keyboardAppearance != keyboardAppearance { - //Setting textField keyboard appearance and reloading inputViews. - if let textFieldView = _textFieldView as? UITextField { - textFieldView.keyboardAppearance = keyboardAppearance - } else if let textFieldView = _textFieldView as? UITextView { - textFieldView.keyboardAppearance = keyboardAppearance - } - _textFieldView?.reloadInputViews() - } - } - } - - //If autoToolbar enable, then add toolbar on all the UITextField/UITextView's if required. - if privateIsEnableAutoToolbar() == true { - - //UITextView special case. Keyboard Notification is firing before textView notification so we need to resign it first and then again set it as first responder to add toolbar on it. - if let textView = _textFieldView as? UIScrollView, textView.responds(to: #selector(getter: UITextView.isEditable)), - textView.inputAccessoryView == nil { - - UIView.animate(withDuration: 0.00001, delay: 0, options: _animationCurve.union(.beginFromCurrentState), animations: { () -> Void in - - self.addToolbarIfRequired() - - }, completion: { (_) -> Void in - - //On textView toolbar didn't appear on first time, so forcing textView to reload it's inputViews. - textView.reloadInputViews() - }) - } else { - //Adding toolbar - addToolbarIfRequired() - } - } else { - removeToolbarIfRequired() - } + /** Resigning on tap gesture. (Enhancement ID: #14)*/ + @objc internal func tapRecognized(_ gesture: UITapGestureRecognizer) { - resignFirstResponderGesture.isEnabled = privateShouldResignOnTouchOutside() - _textFieldView?.window?.addGestureRecognizer(resignFirstResponderGesture) // (Enhancement ID: #14) + if gesture.state == .ended { - if privateIsEnabled() == false { - restorePosition() - _topViewBeginOrigin = IQKeyboardManager.kIQCGPointInvalid - } else { - if _topViewBeginOrigin.equalTo(IQKeyboardManager.kIQCGPointInvalid) == true { // (Bug ID: #5) - - _rootViewController = _textFieldView?.parentContainerViewController() - - if let controller = _rootViewController { - - if _rootViewControllerWhilePopGestureRecognizerActive == controller { - _topViewBeginOrigin = _topViewBeginOriginWhilePopGestureRecognizerActive - } else { - _topViewBeginOrigin = controller.view.frame.origin - } - - _rootViewControllerWhilePopGestureRecognizerActive = nil - _topViewBeginOriginWhilePopGestureRecognizerActive = IQKeyboardManager.kIQCGPointInvalid - - self.showLog("Saving \(controller) beginning origin: \(self._topViewBeginOrigin)") - } - } - - //If _textFieldView is inside ignored responder then do nothing. (Bug ID: #37, #74, #76) - //See notes:- https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html If it is UIAlertView textField then do not affect anything (Bug ID: #70). - if _privateIsKeyboardShowing == true, - let textFieldView = _textFieldView, - textFieldView.isAlertViewTextField() == false { - - // keyboard is already showing. adjust position. - optimizedAdjustPosition() - } + //Resigning currently responder textField. + resignFirstResponder() } - - let elapsedTime = CACurrentMediaTime() - startTime - showLog("****** \(#function) ended: \(elapsedTime) seconds ******", indentation: -1) } - - /** UITextFieldTextDidEndEditingNotification, UITextViewTextDidEndEditingNotification. Removing fetched object. */ - @objc internal func textFieldViewDidEndEditing(_ notification: Notification) { - - let startTime = CACurrentMediaTime() - showLog("****** \(#function) started ******", indentation: 1) - - //Removing gesture recognizer (Enhancement ID: #14) - _textFieldView?.window?.removeGestureRecognizer(resignFirstResponderGesture) - - // We check if there's a change in original frame or not. - - if let textView = _textFieldView as? UIScrollView, textView.responds(to: #selector(getter: UITextView.isEditable)) { - - if isTextViewContentInsetChanged == true { - self.isTextViewContentInsetChanged = false - - if textView.contentInset != self.startingTextViewContentInsets { - self.showLog("Restoring textView.contentInset to: \(self.startingTextViewContentInsets)") - - UIView.animate(withDuration: _animationDuration, delay: 0, options: _animationCurve.union(.beginFromCurrentState), animations: { () -> Void in - - //Setting textField to it's initial contentInset - textView.contentInset = self.startingTextViewContentInsets - textView.scrollIndicatorInsets = self.startingTextViewScrollIndicatorInsets - - }, completion: { (_) -> Void in }) - } - } - } - - //Setting object to nil - _textFieldView = nil - let elapsedTime = CACurrentMediaTime() - startTime - showLog("****** \(#function) ended: \(elapsedTime) seconds ******", indentation: -1) + /** Note: returning YES is guaranteed to allow simultaneous recognition. returning NO is not guaranteed to prevent simultaneous recognition, as the other gesture's delegate may return YES. */ + @objc public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { + return false } - ///--------------------------------------- - /// MARK: UIStatusBar Notification methods - ///--------------------------------------- - - /** UIApplicationWillChangeStatusBarOrientationNotification. Need to set the textView to it's original position. If any frame changes made. (Bug ID: #92)*/ - @objc internal func willChangeStatusBarOrientation(_ notification: Notification) { - - let currentStatusBarOrientation : UIInterfaceOrientation - #if swift(>=5.1) - if #available(iOS 13, *) { - currentStatusBarOrientation = keyWindow()?.windowScene?.interfaceOrientation ?? UIInterfaceOrientation.unknown - } else { - currentStatusBarOrientation = UIApplication.shared.statusBarOrientation - } - #else - currentStatusBarOrientation = UIApplication.shared.statusBarOrientation - #endif - - #if swift(>=4.2) - let statusBarUserInfoKey = UIApplication.statusBarOrientationUserInfoKey - #else - let statusBarUserInfoKey = UIApplicationStatusBarOrientationUserInfoKey - #endif - - guard let statusBarOrientation = notification.userInfo?[statusBarUserInfoKey] as? Int, currentStatusBarOrientation.rawValue != statusBarOrientation else { - return - } - - let startTime = CACurrentMediaTime() - showLog("****** \(#function) started ******", indentation: 1) - - //If textViewContentInsetChanged is saved then restore it. - if let textView = _textFieldView as? UITextView, textView.responds(to: #selector(getter: UITextView.isEditable)) { - - if isTextViewContentInsetChanged == true { - - self.isTextViewContentInsetChanged = false - - if textView.contentInset != self.startingTextViewContentInsets { - UIView.animate(withDuration: _animationDuration, delay: 0, options: _animationCurve.union(.beginFromCurrentState), animations: { () -> Void in - - self.showLog("Restoring textView.contentInset to: \(self.startingTextViewContentInsets)") - - //Setting textField to it's initial contentInset - textView.contentInset = self.startingTextViewContentInsets - textView.scrollIndicatorInsets = self.startingTextViewScrollIndicatorInsets - - }, completion: { (_) -> Void in }) - } - } - } - - restorePosition() + /** To not detect touch events in a subclass of UIControl, these may have added their own selector for specific work */ + @objc public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool { + // Should not recognize gesture if the clicked view is either UIControl or UINavigationBar( [UIView]? { - - var superConsideredView: UIView? - - //If find any consider responderView in it's upper hierarchy then will get deepResponderView. - for disabledClass in toolbarPreviousNextAllowedClasses { - - superConsideredView = _textFieldView?.superviewOfClassType(disabledClass) - - if superConsideredView != nil { - break - } - } - - //If there is a superConsideredView in view's hierarchy, then fetching all it's subview that responds. No sorting for superConsideredView, it's by subView position. (Enhancement ID: #22) - if let view = superConsideredView { - return view.deepResponderViews() - } else { //Otherwise fetching all the siblings - - if let textFields = _textFieldView?.responderSiblings() { - - //Sorting textFields according to behaviour - switch toolbarManageBehaviour { - //If autoToolbar behaviour is bySubviews, then returning it. - case IQAutoToolbarManageBehaviour.bySubviews: return textFields - - //If autoToolbar behaviour is by tag, then sorting it according to tag property. - case IQAutoToolbarManageBehaviour.byTag: return textFields.sortedArrayByTag() - - //If autoToolbar behaviour is by tag, then sorting it according to tag property. - case IQAutoToolbarManageBehaviour.byPosition: return textFields.sortedArrayByPosition() - } - } else { - return nil - } - } - } - - /** Add toolbar if it is required to add on textFields and it's siblings. */ - private func addToolbarIfRequired() { - - let startTime = CACurrentMediaTime() - showLog("****** \(#function) started ******", indentation: 1) - - // Getting all the sibling textFields. - if let siblings = responderViews(), !siblings.isEmpty { - - showLog("Found \(siblings.count) responder sibling(s)") - - if let textField = _textFieldView { - //Either there is no inputAccessoryView or if accessoryView is not appropriate for current situation(There is Previous/Next/Done toolbar). - //setInputAccessoryView: check (Bug ID: #307) - if textField.responds(to: #selector(setter: UITextField.inputAccessoryView)) { - - if textField.inputAccessoryView == nil || - textField.inputAccessoryView?.tag == IQKeyboardManager.kIQPreviousNextButtonToolbarTag || - textField.inputAccessoryView?.tag == IQKeyboardManager.kIQDoneButtonToolbarTag { - - let rightConfiguration: IQBarButtonItemConfiguration - - if let doneBarButtonItemImage = toolbarDoneBarButtonItemImage { - rightConfiguration = IQBarButtonItemConfiguration(image: doneBarButtonItemImage, action: #selector(self.doneAction(_:))) - } else if let doneBarButtonItemText = toolbarDoneBarButtonItemText { - rightConfiguration = IQBarButtonItemConfiguration(title: doneBarButtonItemText, action: #selector(self.doneAction(_:))) - } else { - rightConfiguration = IQBarButtonItemConfiguration(barButtonSystemItem: .done, action: #selector(self.doneAction(_:))) - } - rightConfiguration.accessibilityLabel = toolbarDoneBarButtonItemAccessibilityLabel ?? "Done" - - // If only one object is found, then adding only Done button. - if (siblings.count <= 1 && previousNextDisplayMode == .default) || previousNextDisplayMode == .alwaysHide { - - textField.addKeyboardToolbarWithTarget(target: self, titleText: (shouldShowToolbarPlaceholder ? textField.drawingToolbarPlaceholder: nil), rightBarButtonConfiguration: rightConfiguration, previousBarButtonConfiguration: nil, nextBarButtonConfiguration: nil) - - textField.inputAccessoryView?.tag = IQKeyboardManager.kIQDoneButtonToolbarTag // (Bug ID: #78) - - } else if previousNextDisplayMode == .default || previousNextDisplayMode == .alwaysShow { - - let prevConfiguration: IQBarButtonItemConfiguration - - if let doneBarButtonItemImage = toolbarPreviousBarButtonItemImage { - prevConfiguration = IQBarButtonItemConfiguration(image: doneBarButtonItemImage, action: #selector(self.previousAction(_:))) - } else if let doneBarButtonItemText = toolbarPreviousBarButtonItemText { - prevConfiguration = IQBarButtonItemConfiguration(title: doneBarButtonItemText, action: #selector(self.previousAction(_:))) - } else { - prevConfiguration = IQBarButtonItemConfiguration(image: (UIImage.keyboardPreviousImage() ?? UIImage()), action: #selector(self.previousAction(_:))) - } - prevConfiguration.accessibilityLabel = toolbarPreviousBarButtonItemAccessibilityLabel ?? "Previous" - - let nextConfiguration: IQBarButtonItemConfiguration - - if let doneBarButtonItemImage = toolbarNextBarButtonItemImage { - nextConfiguration = IQBarButtonItemConfiguration(image: doneBarButtonItemImage, action: #selector(self.nextAction(_:))) - } else if let doneBarButtonItemText = toolbarNextBarButtonItemText { - nextConfiguration = IQBarButtonItemConfiguration(title: doneBarButtonItemText, action: #selector(self.nextAction(_:))) - } else { - nextConfiguration = IQBarButtonItemConfiguration(image: (UIImage.keyboardNextImage() ?? UIImage()), action: #selector(self.nextAction(_:))) - } - nextConfiguration.accessibilityLabel = toolbarNextBarButtonItemAccessibilityLabel ?? "Next" - - textField.addKeyboardToolbarWithTarget(target: self, titleText: (shouldShowToolbarPlaceholder ? textField.drawingToolbarPlaceholder: nil), rightBarButtonConfiguration: rightConfiguration, previousBarButtonConfiguration: prevConfiguration, nextBarButtonConfiguration: nextConfiguration) - - textField.inputAccessoryView?.tag = IQKeyboardManager.kIQPreviousNextButtonToolbarTag // (Bug ID: #78) - } - - let toolbar = textField.keyboardToolbar - - //Setting toolbar tintColor // (Enhancement ID: #30) - if shouldToolbarUsesTextFieldTintColor { - toolbar.tintColor = textField.tintColor - } else if let tintColor = toolbarTintColor { - toolbar.tintColor = tintColor - } else { - toolbar.tintColor = nil - } - - // Setting toolbar to keyboard. - if let textFieldView = textField as? UITextInput { - - //Bar style according to keyboard appearance - switch textFieldView.keyboardAppearance { - - case .dark?: - toolbar.barStyle = .black - toolbar.barTintColor = nil - default: - toolbar.barStyle = .default - toolbar.barTintColor = toolbarBarTintColor - } - } - - //Setting toolbar title font. // (Enhancement ID: #30) - if shouldShowToolbarPlaceholder == true && - textField.shouldHideToolbarPlaceholder == false { - - //Updating placeholder font to toolbar. //(Bug ID: #148, #272) - if toolbar.titleBarButton.title == nil || - toolbar.titleBarButton.title != textField.drawingToolbarPlaceholder { - toolbar.titleBarButton.title = textField.drawingToolbarPlaceholder - } - - //Setting toolbar title font. // (Enhancement ID: #30) - if let font = placeholderFont { - toolbar.titleBarButton.titleFont = font - } - - //Setting toolbar title color. // (Enhancement ID: #880) - if let color = placeholderColor { - toolbar.titleBarButton.titleColor = color - } - - //Setting toolbar button title color. // (Enhancement ID: #880) - if let color = placeholderButtonColor { - toolbar.titleBarButton.selectableTitleColor = color - } - - } else { - - toolbar.titleBarButton.title = nil - } - - //In case of UITableView (Special), the next/previous buttons has to be refreshed everytime. (Bug ID: #56) - // If firstTextField, then previous should not be enabled. - if siblings.first == textField { - if siblings.count == 1 { - textField.keyboardToolbar.previousBarButton.isEnabled = false - textField.keyboardToolbar.nextBarButton.isEnabled = false - } else { - textField.keyboardToolbar.previousBarButton.isEnabled = false - textField.keyboardToolbar.nextBarButton.isEnabled = true - } - } else if siblings.last == textField { // If lastTextField then next should not be enaled. - textField.keyboardToolbar.previousBarButton.isEnabled = true - textField.keyboardToolbar.nextBarButton.isEnabled = false - } else { - textField.keyboardToolbar.previousBarButton.isEnabled = true - textField.keyboardToolbar.nextBarButton.isEnabled = true - } - } - } - } - } + for ignoreClass in touchResignedGestureIgnoreClasses { - let elapsedTime = CACurrentMediaTime() - startTime - showLog("****** \(#function) ended: \(elapsedTime) seconds ******", indentation: -1) - } - - /** Remove any toolbar if it is IQToolbar. */ - private func removeToolbarIfRequired() { // (Bug ID: #18) - - let startTime = CACurrentMediaTime() - showLog("****** \(#function) started ******", indentation: 1) - - // Getting all the sibling textFields. - if let siblings = responderViews() { - - showLog("Found \(siblings.count) responder sibling(s)") - - for view in siblings { - - if let toolbar = view.inputAccessoryView as? IQToolbar { - - //setInputAccessoryView: check (Bug ID: #307) - if view.responds(to: #selector(setter: UITextField.inputAccessoryView)) && - (toolbar.tag == IQKeyboardManager.kIQDoneButtonToolbarTag || toolbar.tag == IQKeyboardManager.kIQPreviousNextButtonToolbarTag) { - - if let textField = view as? UITextField { - textField.inputAccessoryView = nil - } else if let textView = view as? UITextView { - textView.inputAccessoryView = nil - } - - view.reloadInputViews() - } - } + if touch.view?.isKind(of: ignoreClass) ?? false { + return false } } - let elapsedTime = CACurrentMediaTime() - startTime - showLog("****** \(#function) ended: \(elapsedTime) seconds ******", indentation: -1) - } - - /** reloadInputViews to reload toolbar buttons enable/disable state on the fly Enhancement ID #434. */ - @objc public func reloadInputViews() { - - //If enabled then adding toolbar. - if privateIsEnableAutoToolbar() == true { - self.addToolbarIfRequired() - } else { - self.removeToolbarIfRequired() - } - } - - ///------------------------------------ - /// MARK: Debugging & Developer options - ///------------------------------------ - - @objc public var enableDebugging = false - - /** - @warning Use below methods to completely enable/disable notifications registered by library internally. Please keep in mind that library is totally dependent on NSNotification of UITextField, UITextField, Keyboard etc. If you do unregisterAllNotifications then library will not work at all. You should only use below methods if you want to completedly disable all library functions. You should use below methods at your own risk. - */ - @objc public func registerAllNotifications() { - - #if swift(>=4.2) - let UIKeyboardWillShow = UIResponder.keyboardWillShowNotification - let UIKeyboardDidShow = UIResponder.keyboardDidShowNotification - let UIKeyboardWillHide = UIResponder.keyboardWillHideNotification - let UIKeyboardDidHide = UIResponder.keyboardDidHideNotification - - let UITextFieldTextDidBeginEditing = UITextField.textDidBeginEditingNotification - let UITextFieldTextDidEndEditing = UITextField.textDidEndEditingNotification - - let UITextViewTextDidBeginEditing = UITextView.textDidBeginEditingNotification - let UITextViewTextDidEndEditing = UITextView.textDidEndEditingNotification - - let UIApplicationWillChangeStatusBarOrientation = UIApplication.willChangeStatusBarOrientationNotification - #else - let UIKeyboardWillShow = Notification.Name.UIKeyboardWillShow - let UIKeyboardDidShow = Notification.Name.UIKeyboardDidShow - let UIKeyboardWillHide = Notification.Name.UIKeyboardWillHide - let UIKeyboardDidHide = Notification.Name.UIKeyboardDidHide - - let UITextFieldTextDidBeginEditing = Notification.Name.UITextFieldTextDidBeginEditing - let UITextFieldTextDidEndEditing = Notification.Name.UITextFieldTextDidEndEditing - - let UITextViewTextDidBeginEditing = Notification.Name.UITextViewTextDidBeginEditing - let UITextViewTextDidEndEditing = Notification.Name.UITextViewTextDidEndEditing - - let UIApplicationWillChangeStatusBarOrientation = Notification.Name.UIApplicationWillChangeStatusBarOrientation - #endif - - // Registering for keyboard notification. - NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillShow(_:)), name: UIKeyboardWillShow, object: nil) - NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardDidShow(_:)), name: UIKeyboardDidShow, object: nil) - NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide(_:)), name: UIKeyboardWillHide, object: nil) - NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardDidHide(_:)), name: UIKeyboardDidHide, object: nil) - - // Registering for UITextField notification. - registerTextFieldViewClass(UITextField.self, didBeginEditingNotificationName: UITextFieldTextDidBeginEditing.rawValue, didEndEditingNotificationName: UITextFieldTextDidEndEditing.rawValue) - - // Registering for UITextView notification. - registerTextFieldViewClass(UITextView.self, didBeginEditingNotificationName: UITextViewTextDidBeginEditing.rawValue, didEndEditingNotificationName: UITextViewTextDidEndEditing.rawValue) - - // Registering for orientation changes notification - NotificationCenter.default.addObserver(self, selector: #selector(self.willChangeStatusBarOrientation(_:)), name: UIApplicationWillChangeStatusBarOrientation, object: UIApplication.shared) - } - - @objc public func unregisterAllNotifications() { - - #if swift(>=4.2) - let UIKeyboardWillShow = UIResponder.keyboardWillShowNotification - let UIKeyboardDidShow = UIResponder.keyboardDidShowNotification - let UIKeyboardWillHide = UIResponder.keyboardWillHideNotification - let UIKeyboardDidHide = UIResponder.keyboardDidHideNotification - - let UITextFieldTextDidBeginEditing = UITextField.textDidBeginEditingNotification - let UITextFieldTextDidEndEditing = UITextField.textDidEndEditingNotification - - let UITextViewTextDidBeginEditing = UITextView.textDidBeginEditingNotification - let UITextViewTextDidEndEditing = UITextView.textDidEndEditingNotification - - let UIApplicationWillChangeStatusBarOrientation = UIApplication.willChangeStatusBarOrientationNotification - #else - let UIKeyboardWillShow = Notification.Name.UIKeyboardWillShow - let UIKeyboardDidShow = Notification.Name.UIKeyboardDidShow - let UIKeyboardWillHide = Notification.Name.UIKeyboardWillHide - let UIKeyboardDidHide = Notification.Name.UIKeyboardDidHide - - let UITextFieldTextDidBeginEditing = Notification.Name.UITextFieldTextDidBeginEditing - let UITextFieldTextDidEndEditing = Notification.Name.UITextFieldTextDidEndEditing - - let UITextViewTextDidBeginEditing = Notification.Name.UITextViewTextDidBeginEditing - let UITextViewTextDidEndEditing = Notification.Name.UITextViewTextDidEndEditing - - let UIApplicationWillChangeStatusBarOrientation = Notification.Name.UIApplicationWillChangeStatusBarOrientation - #endif - - // Unregistering for keyboard notification. - NotificationCenter.default.removeObserver(self, name: UIKeyboardWillShow, object: nil) - NotificationCenter.default.removeObserver(self, name: UIKeyboardDidShow, object: nil) - NotificationCenter.default.removeObserver(self, name: UIKeyboardWillHide, object: nil) - NotificationCenter.default.removeObserver(self, name: UIKeyboardDidHide, object: nil) - - // Unregistering for UITextField notification. - unregisterTextFieldViewClass(UITextField.self, didBeginEditingNotificationName: UITextFieldTextDidBeginEditing.rawValue, didEndEditingNotificationName: UITextFieldTextDidEndEditing.rawValue) - - // Unregistering for UITextView notification. - unregisterTextFieldViewClass(UITextView.self, didBeginEditingNotificationName: UITextViewTextDidBeginEditing.rawValue, didEndEditingNotificationName: UITextViewTextDidEndEditing.rawValue) - - // Unregistering for orientation changes notification - NotificationCenter.default.removeObserver(self, name: UIApplicationWillChangeStatusBarOrientation, object: UIApplication.shared) + return true } - private func showLog(_ logString: String, indentation: Int = 0) { - - struct Static { - static var indentation = 0 - } - - if indentation < 0 { - Static.indentation = max(0, Static.indentation + indentation) - } - - if enableDebugging { - - var preLog = "IQKeyboardManager" - - for _ in 0 ... Static.indentation { - preLog += "|\t" - } - print(preLog + logString) - } - - if indentation > 0 { - Static.indentation += indentation - } - } } diff --git a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardReturnKeyHandler.swift b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardReturnKeyHandler.swift index f0ee16e215..8f43f78d6e 100644 --- a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardReturnKeyHandler.swift +++ b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardReturnKeyHandler.swift @@ -1,7 +1,7 @@ // // IQKeyboardReturnKeyHandler.swift // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. +// Copyright (c) 2013-20 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -21,16 +21,17 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -import Foundation +// import Foundation - UIKit contains Foundation import UIKit -private class IQTextFieldViewInfoModal: NSObject { +@available(iOSApplicationExtension, unavailable) +private final class IQTextFieldViewInfoModal: NSObject { fileprivate weak var textFieldDelegate: UITextFieldDelegate? fileprivate weak var textViewDelegate: UITextViewDelegate? fileprivate weak var textFieldView: UIView? fileprivate var originalReturnKeyType = UIReturnKeyType.default - + init(textFieldView: UIView?, textFieldDelegate: UITextFieldDelegate?, textViewDelegate: UITextViewDelegate?, originalReturnKeyType: UIReturnKeyType = .default) { self.textFieldView = textFieldView self.textFieldDelegate = textFieldDelegate @@ -42,57 +43,54 @@ private class IQTextFieldViewInfoModal: NSObject { /** Manages the return key to work like next/done in a view hierarchy. */ -public class IQKeyboardReturnKeyHandler: NSObject, UITextFieldDelegate, UITextViewDelegate { +@available(iOSApplicationExtension, unavailable) +public final class IQKeyboardReturnKeyHandler: NSObject { + + // MARK: Settings - ///--------------- - /// MARK: Settings - ///--------------- - /** Delegate of textField/textView. */ @objc public weak var delegate: (UITextFieldDelegate & UITextViewDelegate)? - + /** Set the last textfield return key type. Default is UIReturnKeyDefault. */ @objc public var lastTextFieldReturnKeyType: UIReturnKeyType = UIReturnKeyType.default { - + didSet { - + for modal in textFieldInfoCache { - + if let view = modal.textFieldView { updateReturnKeyTypeOnTextField(view) } } } } - - ///-------------------------------------- - /// MARK: Initialization/Deinitialization - ///-------------------------------------- + + // MARK: Initialization/Deinitialization @objc public override init() { super.init() } - + /** Add all the textFields available in UIViewController's view. */ @objc public init(controller: UIViewController) { super.init() - + addResponderFromView(controller.view) } deinit { - + for modal in textFieldInfoCache { - + if let textField = modal.textFieldView as? UITextField { textField.returnKeyType = modal.originalReturnKeyType - + textField.delegate = modal.textFieldDelegate } else if let textView = modal.textFieldView as? UITextView { @@ -102,22 +100,18 @@ public class IQKeyboardReturnKeyHandler: NSObject, UITextFieldDelegate, UITextVi textView.delegate = modal.textViewDelegate } } - + textFieldInfoCache.removeAll() } - ///------------------------ - /// MARK: Private variables - ///------------------------ + // MARK: Private variables private var textFieldInfoCache = [IQTextFieldViewInfoModal]() - - ///------------------------ - /// MARK: Private Functions - ///------------------------ + + // MARK: Private Functions private func textFieldViewCachedInfo(_ textField: UIView) -> IQTextFieldViewInfoModal? { - + for modal in textFieldInfoCache { - + if let view = modal.textFieldView { if view == textField { @@ -125,32 +119,32 @@ public class IQKeyboardReturnKeyHandler: NSObject, UITextFieldDelegate, UITextVi } } } - + return nil } private func updateReturnKeyTypeOnTextField(_ view: UIView) { var superConsideredView: UIView? - + //If find any consider responderView in it's upper hierarchy then will get deepResponderView. (Bug ID: #347) for disabledClass in IQKeyboardManager.shared.toolbarPreviousNextAllowedClasses { - + superConsideredView = view.superviewOfClassType(disabledClass) - + if superConsideredView != nil { break } } var textFields = [UIView]() - + //If there is a tableView in view's hierarchy, then fetching all it's subview that responds. if let unwrappedTableView = superConsideredView { // (Enhancement ID: #22) textFields = unwrappedTableView.deepResponderViews() } else { //Otherwise fetching all the siblings - + textFields = view.responderSiblings() - + //Sorting textFields according to behaviour switch IQKeyboardManager.shared.toolbarManageBehaviour { //If needs to sort it by tag @@ -160,24 +154,22 @@ public class IQKeyboardReturnKeyHandler: NSObject, UITextFieldDelegate, UITextVi default: break } } - + if let lastView = textFields.last { - + if let textField = view as? UITextField { - + //If it's the last textField in responder view, else next textField.returnKeyType = (view == lastView) ? lastTextFieldReturnKeyType: UIReturnKeyType.next } else if let textView = view as? UITextView { - + //If it's the last textField in responder view, else next textView.returnKeyType = (view == lastView) ? lastTextFieldReturnKeyType: UIReturnKeyType.next } } } - ///---------------------------------------------- - /// MARK: Registering/Unregistering textFieldView - ///---------------------------------------------- + // MARK: Registering/Unregistering textFieldView /** Should pass UITextField/UITextView intance. Assign textFieldView delegate to self, change it's returnKeyType. @@ -185,34 +177,34 @@ public class IQKeyboardReturnKeyHandler: NSObject, UITextFieldDelegate, UITextVi @param view UITextField/UITextView object to register. */ @objc public func addTextFieldView(_ view: UIView) { - + let modal = IQTextFieldViewInfoModal(textFieldView: view, textFieldDelegate: nil, textViewDelegate: nil) - + if let textField = view as? UITextField { - + modal.originalReturnKeyType = textField.returnKeyType modal.textFieldDelegate = textField.delegate textField.delegate = self - + } else if let textView = view as? UITextView { modal.originalReturnKeyType = textView.returnKeyType modal.textViewDelegate = textView.delegate textView.delegate = self } - + textFieldInfoCache.append(modal) } - + /** Should pass UITextField/UITextView intance. Restore it's textFieldView delegate and it's returnKeyType. @param view UITextField/UITextView object to unregister. */ @objc public func removeTextFieldView(_ view: UIView) { - + if let modal = textFieldViewCachedInfo(view) { - + if let textField = view as? UITextField { textField.returnKeyType = modal.originalReturnKeyType @@ -222,67 +214,67 @@ public class IQKeyboardReturnKeyHandler: NSObject, UITextFieldDelegate, UITextVi textView.returnKeyType = modal.originalReturnKeyType textView.delegate = modal.textViewDelegate } - + if let index = textFieldInfoCache.firstIndex(where: { $0.textFieldView == view}) { textFieldInfoCache.remove(at: index) } } } - + /** Add all the UITextField/UITextView responderView's. @param view UIView object to register all it's responder subviews. */ @objc public func addResponderFromView(_ view: UIView) { - + let textFields = view.deepResponderViews() - + for textField in textFields { - + addTextFieldView(textField) } } - + /** Remove all the UITextField/UITextView responderView's. @param view UIView object to unregister all it's responder subviews. */ @objc public func removeResponderFromView(_ view: UIView) { - + let textFields = view.deepResponderViews() - + for textField in textFields { - + removeTextFieldView(textField) } } - + @discardableResult private func goToNextResponderOrResign(_ view: UIView) -> Bool { - + var superConsideredView: UIView? - + //If find any consider responderView in it's upper hierarchy then will get deepResponderView. (Bug ID: #347) for disabledClass in IQKeyboardManager.shared.toolbarPreviousNextAllowedClasses { - + superConsideredView = view.superviewOfClassType(disabledClass) - + if superConsideredView != nil { break } } - + var textFields = [UIView]() - + //If there is a tableView in view's hierarchy, then fetching all it's subview that responds. if let unwrappedTableView = superConsideredView { // (Enhancement ID: #22) textFields = unwrappedTableView.deepResponderViews() } else { //Otherwise fetching all the siblings - + textFields = view.responderSiblings() - + //Sorting textFields according to behaviour switch IQKeyboardManager.shared.toolbarManageBehaviour { //If needs to sort it by tag @@ -298,12 +290,12 @@ public class IQKeyboardReturnKeyHandler: NSObject, UITextFieldDelegate, UITextVi if let index = textFields.firstIndex(of: view) { //If it is not last textField. then it's next object becomeFirstResponder. if index < (textFields.count - 1) { - + let nextTextField = textFields[index+1] nextTextField.becomeFirstResponder() return false } else { - + view.resignFirstResponder() return true } @@ -311,120 +303,104 @@ public class IQKeyboardReturnKeyHandler: NSObject, UITextFieldDelegate, UITextVi return true } } +} + +// MARK: UITextFieldDelegate +@available(iOSApplicationExtension, unavailable) +extension IQKeyboardReturnKeyHandler: UITextFieldDelegate { - ///--------------------------------------- - /// MARK: UITextField/UITextView delegates - ///--------------------------------------- - @objc public func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { - + if delegate == nil { - + if let unwrapDelegate = textFieldViewCachedInfo(textField)?.textFieldDelegate { if unwrapDelegate.responds(to: #selector(UITextFieldDelegate.textFieldShouldBeginEditing(_:))) { - return unwrapDelegate.textFieldShouldBeginEditing?(textField) == true + return unwrapDelegate.textFieldShouldBeginEditing?(textField) ?? false } } } - + return true } - + @objc public func textFieldShouldEndEditing(_ textField: UITextField) -> Bool { - + if delegate == nil { - + if let unwrapDelegate = textFieldViewCachedInfo(textField)?.textFieldDelegate { if unwrapDelegate.responds(to: #selector(UITextFieldDelegate.textFieldShouldEndEditing(_:))) { - return unwrapDelegate.textFieldShouldEndEditing?(textField) == true + return unwrapDelegate.textFieldShouldEndEditing?(textField) ?? false } } } - + return true } - + @objc public func textFieldDidBeginEditing(_ textField: UITextField) { updateReturnKeyTypeOnTextField(textField) - + var aDelegate: UITextFieldDelegate? = delegate - + if aDelegate == nil { - + if let modal = textFieldViewCachedInfo(textField) { aDelegate = modal.textFieldDelegate } } - + aDelegate?.textFieldDidBeginEditing?(textField) } - + @objc public func textFieldDidEndEditing(_ textField: UITextField) { - + var aDelegate: UITextFieldDelegate? = delegate - + if aDelegate == nil { - + if let modal = textFieldViewCachedInfo(textField) { aDelegate = modal.textFieldDelegate } } - + aDelegate?.textFieldDidEndEditing?(textField) } - - #if swift(>=4.2) + @available(iOS 10.0, *) @objc public func textFieldDidEndEditing(_ textField: UITextField, reason: UITextField.DidEndEditingReason) { - - var aDelegate: UITextFieldDelegate? = delegate - - if aDelegate == nil { - - if let modal = textFieldViewCachedInfo(textField) { - aDelegate = modal.textFieldDelegate - } - } - - aDelegate?.textFieldDidEndEditing?(textField, reason: reason) - } - #else - @available(iOS 10.0, *) - @objc public func textFieldDidEndEditing(_ textField: UITextField, reason: UITextFieldDidEndEditingReason) { var aDelegate: UITextFieldDelegate? = delegate - + if aDelegate == nil { - + if let modal = textFieldViewCachedInfo(textField) { aDelegate = modal.textFieldDelegate } } - + aDelegate?.textFieldDidEndEditing?(textField, reason: reason) } - #endif @objc public func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { - + if delegate == nil { - + if let unwrapDelegate = textFieldViewCachedInfo(textField)?.textFieldDelegate { if unwrapDelegate.responds(to: #selector(UITextFieldDelegate.textField(_:shouldChangeCharactersIn:replacementString:))) { - return unwrapDelegate.textField?(textField, shouldChangeCharactersIn: range, replacementString: string) == true + return unwrapDelegate.textField?(textField, shouldChangeCharactersIn: range, replacementString: string) ?? false } } } return true } - + @objc public func textFieldShouldClear(_ textField: UITextField) -> Bool { - + if delegate == nil { - + if let unwrapDelegate = textFieldViewCachedInfo(textField)?.textFieldDelegate { if unwrapDelegate.responds(to: #selector(UITextFieldDelegate.textFieldShouldClear(_:))) { - return unwrapDelegate.textFieldShouldClear?(textField) == true + return unwrapDelegate.textFieldShouldClear?(textField) ?? false } } } @@ -433,188 +409,193 @@ public class IQKeyboardReturnKeyHandler: NSObject, UITextFieldDelegate, UITextVi } @objc public func textFieldShouldReturn(_ textField: UITextField) -> Bool { - + var shouldReturn = true if delegate == nil { - + if let unwrapDelegate = textFieldViewCachedInfo(textField)?.textFieldDelegate { if unwrapDelegate.responds(to: #selector(UITextFieldDelegate.textFieldShouldReturn(_:))) { - shouldReturn = unwrapDelegate.textFieldShouldReturn?(textField) == true + shouldReturn = unwrapDelegate.textFieldShouldReturn?(textField) ?? false } } } - if shouldReturn == true { + if shouldReturn { goToNextResponderOrResign(textField) return true } else { return goToNextResponderOrResign(textField) } } +} + +// MARK: UITextViewDelegate +@available(iOSApplicationExtension, unavailable) +extension IQKeyboardReturnKeyHandler: UITextViewDelegate { @objc public func textViewShouldBeginEditing(_ textView: UITextView) -> Bool { - + if delegate == nil { - + if let unwrapDelegate = textFieldViewCachedInfo(textView)?.textViewDelegate { if unwrapDelegate.responds(to: #selector(UITextViewDelegate.textViewShouldBeginEditing(_:))) { - return unwrapDelegate.textViewShouldBeginEditing?(textView) == true + return unwrapDelegate.textViewShouldBeginEditing?(textView) ?? false } } } - + return true } - + @objc public func textViewShouldEndEditing(_ textView: UITextView) -> Bool { - + if delegate == nil { - + if let unwrapDelegate = textFieldViewCachedInfo(textView)?.textViewDelegate { if unwrapDelegate.responds(to: #selector(UITextViewDelegate.textViewShouldEndEditing(_:))) { - return unwrapDelegate.textViewShouldEndEditing?(textView) == true + return unwrapDelegate.textViewShouldEndEditing?(textView) ?? false } } } - + return true } - + @objc public func textViewDidBeginEditing(_ textView: UITextView) { updateReturnKeyTypeOnTextField(textView) - + var aDelegate: UITextViewDelegate? = delegate - + if aDelegate == nil { - + if let modal = textFieldViewCachedInfo(textView) { aDelegate = modal.textViewDelegate } } - + aDelegate?.textViewDidBeginEditing?(textView) } - + @objc public func textViewDidEndEditing(_ textView: UITextView) { - + var aDelegate: UITextViewDelegate? = delegate - + if aDelegate == nil { - + if let modal = textFieldViewCachedInfo(textView) { aDelegate = modal.textViewDelegate } } - + aDelegate?.textViewDidEndEditing?(textView) } - + @objc public func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { - + var shouldReturn = true - + if delegate == nil { - + if let unwrapDelegate = textFieldViewCachedInfo(textView)?.textViewDelegate { if unwrapDelegate.responds(to: #selector(UITextViewDelegate.textView(_:shouldChangeTextIn:replacementText:))) { - shouldReturn = (unwrapDelegate.textView?(textView, shouldChangeTextIn: range, replacementText: text)) == true + shouldReturn = (unwrapDelegate.textView?(textView, shouldChangeTextIn: range, replacementText: text)) ?? false } } } - - if shouldReturn == true && text == "\n" { + + if shouldReturn, text == "\n" { shouldReturn = goToNextResponderOrResign(textView) } - + return shouldReturn } - + @objc public func textViewDidChange(_ textView: UITextView) { - + var aDelegate: UITextViewDelegate? = delegate - + if aDelegate == nil { - + if let modal = textFieldViewCachedInfo(textView) { aDelegate = modal.textViewDelegate } } - + aDelegate?.textViewDidChange?(textView) } - + @objc public func textViewDidChangeSelection(_ textView: UITextView) { - + var aDelegate: UITextViewDelegate? = delegate - + if aDelegate == nil { - + if let modal = textFieldViewCachedInfo(textView) { aDelegate = modal.textViewDelegate } } - + aDelegate?.textViewDidChangeSelection?(textView) } - + @available(iOS 10.0, *) @objc public func textView(_ aTextView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool { - + if delegate == nil { - + if let unwrapDelegate = textFieldViewCachedInfo(aTextView)?.textViewDelegate { if unwrapDelegate.responds(to: #selector(textView as (UITextView, URL, NSRange, UITextItemInteraction) -> Bool)) { - return unwrapDelegate.textView?(aTextView, shouldInteractWith: URL, in: characterRange, interaction: interaction) == true + return unwrapDelegate.textView?(aTextView, shouldInteractWith: URL, in: characterRange, interaction: interaction) ?? false } } } - + return true } - + @available(iOS 10.0, *) @objc public func textView(_ aTextView: UITextView, shouldInteractWith textAttachment: NSTextAttachment, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool { - + if delegate == nil { - + if let unwrapDelegate = textFieldViewCachedInfo(aTextView)?.textViewDelegate { if unwrapDelegate.responds(to: #selector(textView as (UITextView, NSTextAttachment, NSRange, UITextItemInteraction) -> Bool)) { - return unwrapDelegate.textView?(aTextView, shouldInteractWith: textAttachment, in: characterRange, interaction: interaction) == true + return unwrapDelegate.textView?(aTextView, shouldInteractWith: textAttachment, in: characterRange, interaction: interaction) ?? false } } } - + return true } - + @available(iOS, deprecated: 10.0) @objc public func textView(_ aTextView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange) -> Bool { - + if delegate == nil { - + if let unwrapDelegate = textFieldViewCachedInfo(aTextView)?.textViewDelegate { if unwrapDelegate.responds(to: #selector(textView as (UITextView, URL, NSRange) -> Bool)) { - return unwrapDelegate.textView?(aTextView, shouldInteractWith: URL, in: characterRange) == true + return unwrapDelegate.textView?(aTextView, shouldInteractWith: URL, in: characterRange) ?? false } } } - + return true } - + @available(iOS, deprecated: 10.0) @objc public func textView(_ aTextView: UITextView, shouldInteractWith textAttachment: NSTextAttachment, in characterRange: NSRange) -> Bool { - + if delegate == nil { - + if let unwrapDelegate = textFieldViewCachedInfo(aTextView)?.textViewDelegate { if unwrapDelegate.responds(to: #selector(textView as (UITextView, NSTextAttachment, NSRange) -> Bool)) { - return unwrapDelegate.textView?(aTextView, shouldInteractWith: textAttachment, in: characterRange) == true + return unwrapDelegate.textView?(aTextView, shouldInteractWith: textAttachment, in: characterRange) ?? false } } } - + return true } } diff --git a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQTextView/IQTextView.swift b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQTextView/IQTextView.swift index 4be2b17ddf..d0c97e8271 100644 --- a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQTextView/IQTextView.swift +++ b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQTextView/IQTextView.swift @@ -1,7 +1,7 @@ // // IQTextView.swift // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. +// Copyright (c) 2013-20 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -24,64 +24,43 @@ import UIKit /** @abstract UITextView with placeholder support */ +@available(iOSApplicationExtension, unavailable) open class IQTextView: UITextView { - + @objc required public init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) - - #if swift(>=4.2) - let UITextViewTextDidChange = UITextView.textDidChangeNotification - #else - let UITextViewTextDidChange = Notification.Name.UITextViewTextDidChange - #endif - - NotificationCenter.default.addObserver(self, selector: #selector(self.refreshPlaceholder), name: UITextViewTextDidChange, object: self) + NotificationCenter.default.addObserver(self, selector: #selector(self.refreshPlaceholder), name: UITextView.textDidChangeNotification, object: self) } - + @objc override public init(frame: CGRect, textContainer: NSTextContainer?) { super.init(frame: frame, textContainer: textContainer) - - #if swift(>=4.2) - let notificationName = UITextView.textDidChangeNotification - #else - let notificationName = Notification.Name.UITextViewTextDidChange - #endif - - NotificationCenter.default.addObserver(self, selector: #selector(self.refreshPlaceholder), name: notificationName, object: self) + NotificationCenter.default.addObserver(self, selector: #selector(self.refreshPlaceholder), name: UITextView.textDidChangeNotification, object: self) } - + @objc override open func awakeFromNib() { super.awakeFromNib() - - #if swift(>=4.2) - let UITextViewTextDidChange = UITextView.textDidChangeNotification - #else - let UITextViewTextDidChange = Notification.Name.UITextViewTextDidChange - #endif - - NotificationCenter.default.addObserver(self, selector: #selector(self.refreshPlaceholder), name: UITextViewTextDidChange, object: self) + NotificationCenter.default.addObserver(self, selector: #selector(self.refreshPlaceholder), name: UITextView.textDidChangeNotification, object: self) } - + deinit { IQ_PlaceholderLabel.removeFromSuperview() - NotificationCenter.default.removeObserver(self) } private var placeholderInsets: UIEdgeInsets { return UIEdgeInsets(top: self.textContainerInset.top, left: self.textContainerInset.left + self.textContainer.lineFragmentPadding, bottom: self.textContainerInset.bottom, right: self.textContainerInset.right + self.textContainer.lineFragmentPadding) } - + private var placeholderExpectedFrame: CGRect { let placeholderInsets = self.placeholderInsets let maxWidth = self.frame.width-placeholderInsets.left-placeholderInsets.right let expectedSize = IQ_PlaceholderLabel.sizeThatFits(CGSize(width: maxWidth, height: self.frame.height-placeholderInsets.top-placeholderInsets.bottom)) - + return CGRect(x: placeholderInsets.left, y: placeholderInsets.top, width: maxWidth, height: expectedSize.height) } lazy var IQ_PlaceholderLabel: UILabel = { let label = UILabel() - + label.autoresizingMask = [.flexibleWidth, .flexibleHeight] label.lineBreakMode = .byWordWrapping label.numberOfLines = 0 @@ -95,29 +74,29 @@ open class IQTextView: UITextView { #endif label.alpha = 0 self.addSubview(label) - + return label }() - + /** @abstract To set textView's placeholder text color. */ @IBInspectable open var placeholderTextColor: UIColor? { - + get { return IQ_PlaceholderLabel.textColor } - + set { IQ_PlaceholderLabel.textColor = newValue } } - + /** @abstract To set textView's placeholder text. Default is nil. */ @IBInspectable open var placeholder: String? { - + get { return IQ_PlaceholderLabel.text } - + set { IQ_PlaceholderLabel.text = newValue refreshPlaceholder() @@ -135,40 +114,40 @@ open class IQTextView: UITextView { refreshPlaceholder() } } - + @objc override open func layoutSubviews() { super.layoutSubviews() - + IQ_PlaceholderLabel.frame = placeholderExpectedFrame } - + @objc internal func refreshPlaceholder() { - + if !text.isEmpty || !attributedText.string.isEmpty { IQ_PlaceholderLabel.alpha = 0 } else { IQ_PlaceholderLabel.alpha = 1 } } - + @objc override open var text: String! { - + didSet { refreshPlaceholder() } } - + open override var attributedText: NSAttributedString! { - + didSet { refreshPlaceholder() } } - + @objc override open var font: UIFont? { - + didSet { - + if let unwrappedFont = font { IQ_PlaceholderLabel.font = unwrappedFont } else { @@ -176,7 +155,7 @@ open class IQTextView: UITextView { } } } - + @objc override open var textAlignment: NSTextAlignment { didSet { IQ_PlaceholderLabel.textAlignment = textAlignment @@ -184,47 +163,26 @@ open class IQTextView: UITextView { } @objc override weak open var delegate: UITextViewDelegate? { - + get { refreshPlaceholder() return super.delegate } - + set { super.delegate = newValue } } - + @objc override open var intrinsicContentSize: CGSize { guard !hasText else { return super.intrinsicContentSize } - + var newSize = super.intrinsicContentSize let placeholderInsets = self.placeholderInsets newSize.height = placeholderExpectedFrame.height + placeholderInsets.top + placeholderInsets.bottom - + return newSize } } - -//#if swift(>=5.1) -//import SwiftUI -// -//struct IQTextViewSwiftUI: UIViewRepresentable { -// func makeUIView(context: Context) -> IQTextView { -// IQTextView(frame: .zero) -// } -// -// func updateUIView(_ view: IQTextView, context: Context) { -// } -//} -// -//struct IQTextViewSwiftUI_Preview: PreviewProvider { -// static var previews: some View { -// IQTextViewSwiftUI() -// } -//} -// -//#endif -// diff --git a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQBarButtonItem.swift b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQBarButtonItem.swift index 7e84dadc68..326bf620c1 100644 --- a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQBarButtonItem.swift +++ b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQBarButtonItem.swift @@ -1,7 +1,7 @@ // // IQBarButtonItem.swift // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. +// Copyright (c) 2013-20 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -21,9 +21,10 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +// import Foundation - UIKit contains Foundation import UIKit -import Foundation +@available(iOSApplicationExtension, unavailable) open class IQBarButtonItem: UIBarButtonItem { private static var _classInitialize: Void = classInitialize() @@ -42,11 +43,7 @@ open class IQBarButtonItem: UIBarButtonItem { let appearanceProxy = self.appearance() - #if swift(>=4.2) let states: [UIControl.State] - #else - let states: [UIControlState] - #endif states = [.normal, .highlighted, .disabled, .selected, .application, .reserved] @@ -57,47 +54,23 @@ open class IQBarButtonItem: UIBarButtonItem { appearanceProxy.setBackgroundImage(nil, for: state, style: .plain, barMetrics: .default) appearanceProxy.setBackButtonBackgroundImage(nil, for: state, barMetrics: .default) } - + appearanceProxy.setTitlePositionAdjustment(UIOffset(), for: .default) appearanceProxy.setBackgroundVerticalPositionAdjustment(0, for: .default) appearanceProxy.setBackButtonBackgroundVerticalPositionAdjustment(0, for: .default) } - + @objc override open var tintColor: UIColor? { didSet { - #if swift(>=4.2) var textAttributes = [NSAttributedString.Key: Any]() - let foregroundColorKey = NSAttributedString.Key.foregroundColor - #elseif swift(>=4) - var textAttributes = [NSAttributedStringKey: Any]() - let foregroundColorKey = NSAttributedStringKey.foregroundColor - #else - var textAttributes = [String: Any]() - let foregroundColorKey = NSForegroundColorAttributeName - #endif - - textAttributes[foregroundColorKey] = tintColor - - #if swift(>=4) - - if let attributes = titleTextAttributes(for: .normal) { - - for (key, value) in attributes { - #if swift(>=4.2) - textAttributes[key] = value - #else - textAttributes[NSAttributedStringKey.init(key)] = value - #endif - } - } - - #else + textAttributes[.foregroundColor] = tintColor - if let attributes = titleTextAttributes(for: .normal) { - textAttributes = attributes + if let attributes = titleTextAttributes(for: .normal) { + for (key, value) in attributes { + textAttributes[key] = value } - #endif + } setTitleTextAttributes(textAttributes, for: .normal) } @@ -107,7 +80,7 @@ open class IQBarButtonItem: UIBarButtonItem { Boolean to know if it's a system item or custom item, we are having a limitation that we cannot override a designated initializer, so we are manually setting this property once in initialization */ @objc internal var isSystemItem = false - + /** Additional target & action to do get callback action. Note that setting custom target & selector doesn't affect native functionality, this is just an additional target to get a callback. @@ -121,12 +94,12 @@ open class IQBarButtonItem: UIBarButtonItem { invocation = nil } } - + /** Customized Invocation to be called when button is pressed. invocation is internally created using setTarget:action: method. */ @objc open var invocation: IQInvocation? - + deinit { target = nil invocation = nil diff --git a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQInvocation.swift b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQInvocation.swift index e75a09775f..f43cd6e7af 100644 --- a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQInvocation.swift +++ b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQInvocation.swift @@ -1,7 +1,7 @@ // // IQInvocation.swift // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. +// Copyright (c) 2013-20 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -23,15 +23,16 @@ import UIKit -@objc public class IQInvocation: NSObject { +@available(iOSApplicationExtension, unavailable) +@objc public final class IQInvocation: NSObject { @objc public weak var target: AnyObject? @objc public var action: Selector - + @objc public init(_ target: AnyObject, _ action: Selector) { self.target = target self.action = action } - + @objc public func invoke(from: Any) { if let target = target { UIApplication.shared.sendAction(action, to: target, from: from, for: UIEvent()) diff --git a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQPreviousNextView.swift b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQPreviousNextView.swift index ad446e97d5..f7a1b867b6 100644 --- a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQPreviousNextView.swift +++ b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQPreviousNextView.swift @@ -1,7 +1,7 @@ // // IQPreviousNextView.swift // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. +// Copyright (c) 2013-20 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -23,27 +23,7 @@ import UIKit +@available(iOSApplicationExtension, unavailable) @objc public class IQPreviousNextView: UIView { } - -//#if swift(>=5.1) -//import SwiftUI -// -//struct IQPreviousNextViewSwiftUI: UIViewRepresentable { -// func makeUIView(context: Context) -> IQPreviousNextView { -// IQPreviousNextView(frame: .zero) -// } -// -// func updateUIView(_ view: IQPreviousNextView, context: Context) { -// } -//} -// -//struct IQTextViewSwiftUI_Preview: PreviewProvider { -// static var previews: some View { -// IQPreviousNextViewSwiftUI() -// } -//} -// -//#endif - diff --git a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQTitleBarButtonItem.swift b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQTitleBarButtonItem.swift index ab40a2e846..2c3c526b45 100644 --- a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQTitleBarButtonItem.swift +++ b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQTitleBarButtonItem.swift @@ -1,7 +1,7 @@ // // IQTitleBarButtonItem.swift // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. +// Copyright (c) 2013-20 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -21,13 +21,13 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -import Foundation import UIKit +@available(iOSApplicationExtension, unavailable) open class IQTitleBarButtonItem: IQBarButtonItem { - + @objc open var titleFont: UIFont? { - + didSet { if let unwrappedFont = titleFont { titleButton?.titleLabel?.font = unwrappedFont @@ -42,14 +42,14 @@ open class IQTitleBarButtonItem: IQBarButtonItem { titleButton?.setTitle(title, for: .normal) } } - + /** titleColor to be used for displaying button text when displaying title (disabled state). */ @objc open var titleColor: UIColor? { didSet { - + if let color = titleColor { titleButton?.setTitleColor(color, for: .disabled) } else { @@ -57,14 +57,14 @@ open class IQTitleBarButtonItem: IQBarButtonItem { } } } - + /** selectableTitleColor to be used for displaying button text when button is enabled. */ @objc open var selectableTitleColor: UIColor? { - + didSet { - + if let color = selectableTitleColor { titleButton?.setTitleColor(color, for: .normal) } else { @@ -83,7 +83,7 @@ open class IQTitleBarButtonItem: IQBarButtonItem { @objc override open var invocation: IQInvocation? { didSet { - + if let target = invocation?.target, let action = invocation?.action { self.isEnabled = true titleButton?.isEnabled = true @@ -102,14 +102,14 @@ open class IQTitleBarButtonItem: IQBarButtonItem { override init() { super.init() } - + @objc public convenience init(title: String?) { self.init(title: nil, style: .plain, target: nil, action: nil) - + _titleView = UIView() _titleView?.backgroundColor = UIColor.clear - + titleButton = UIButton(type: .system) titleButton?.isEnabled = false titleButton?.titleLabel?.numberOfLines = 3 @@ -125,28 +125,18 @@ open class IQTitleBarButtonItem: IQBarButtonItem { titleFont = UIFont.systemFont(ofSize: 13.0) titleButton?.titleLabel?.font = self.titleFont _titleView?.addSubview(titleButton!) - + if #available(iOS 11, *) { - - var layoutDefaultLowPriority: UILayoutPriority - var layoutDefaultHighPriority: UILayoutPriority - - #if swift(>=4.0) - let layoutPriorityLowValue = UILayoutPriority.defaultLow.rawValue-1 - let layoutPriorityHighValue = UILayoutPriority.defaultHigh.rawValue-1 - layoutDefaultLowPriority = UILayoutPriority(rawValue: layoutPriorityLowValue) - layoutDefaultHighPriority = UILayoutPriority(rawValue: layoutPriorityHighValue) - #else - layoutDefaultLowPriority = UILayoutPriorityDefaultLow-1 - layoutDefaultHighPriority = UILayoutPriorityDefaultHigh-1 - #endif - + + let layoutDefaultLowPriority = UILayoutPriority(rawValue: UILayoutPriority.defaultLow.rawValue-1) + let layoutDefaultHighPriority = UILayoutPriority(rawValue: UILayoutPriority.defaultHigh.rawValue-1) + _titleView?.translatesAutoresizingMaskIntoConstraints = false _titleView?.setContentHuggingPriority(layoutDefaultLowPriority, for: .vertical) _titleView?.setContentHuggingPriority(layoutDefaultLowPriority, for: .horizontal) _titleView?.setContentCompressionResistancePriority(layoutDefaultHighPriority, for: .vertical) _titleView?.setContentCompressionResistancePriority(layoutDefaultHighPriority, for: .horizontal) - + titleButton?.translatesAutoresizingMaskIntoConstraints = false titleButton?.setContentHuggingPriority(layoutDefaultLowPriority, for: .vertical) titleButton?.setContentHuggingPriority(layoutDefaultLowPriority, for: .horizontal) @@ -157,7 +147,7 @@ open class IQTitleBarButtonItem: IQBarButtonItem { let bottom = NSLayoutConstraint.init(item: titleButton!, attribute: .bottom, relatedBy: .equal, toItem: _titleView, attribute: .bottom, multiplier: 1, constant: 0) let leading = NSLayoutConstraint.init(item: titleButton!, attribute: .leading, relatedBy: .equal, toItem: _titleView, attribute: .leading, multiplier: 1, constant: 0) let trailing = NSLayoutConstraint.init(item: titleButton!, attribute: .trailing, relatedBy: .equal, toItem: _titleView, attribute: .trailing, multiplier: 1, constant: 0) - + _titleView?.addConstraints([top, bottom, leading, trailing]) } else { _titleView?.autoresizingMask = [.flexibleWidth, .flexibleHeight] @@ -170,7 +160,7 @@ open class IQTitleBarButtonItem: IQBarButtonItem { @objc required public init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } - + deinit { customView = nil titleButton?.removeTarget(nil, action: nil, for: .touchUpInside) diff --git a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQToolbar.swift b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQToolbar.swift index d9f19ce718..ce5128fec0 100644 --- a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQToolbar.swift +++ b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQToolbar.swift @@ -1,7 +1,7 @@ // // IQToolbar.swift // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. +// Copyright (c) 2013-20 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -24,16 +24,17 @@ import UIKit /** @abstract IQToolbar for IQKeyboardManager. */ +@available(iOSApplicationExtension, unavailable) open class IQToolbar: UIToolbar, UIInputViewAudioFeedback { private static var _classInitialize: Void = classInitialize() - + private class func classInitialize() { - + let appearanceProxy = self.appearance() appearanceProxy.barTintColor = nil - + let positions: [UIBarPosition] = [.any, .bottom, .top, .topAttached] for position in positions { @@ -45,7 +46,7 @@ open class IQToolbar: UIToolbar, UIInputViewAudioFeedback { //Background color appearanceProxy.backgroundColor = nil } - + /** Previous bar button of toolbar. */ @@ -57,12 +58,12 @@ open class IQToolbar: UIToolbar, UIInputViewAudioFeedback { } return privatePreviousBarButton! } - + set (newValue) { privatePreviousBarButton = newValue } } - + /** Next bar button of toolbar. */ @@ -74,12 +75,12 @@ open class IQToolbar: UIToolbar, UIInputViewAudioFeedback { } return privateNextBarButton! } - + set (newValue) { privateNextBarButton = newValue } } - + /** Title bar button of toolbar. */ @@ -92,12 +93,12 @@ open class IQToolbar: UIToolbar, UIInputViewAudioFeedback { } return privateTitleBarButton! } - + set (newValue) { privateTitleBarButton = newValue } } - + /** Done bar button of toolbar. */ @@ -109,7 +110,7 @@ open class IQToolbar: UIToolbar, UIInputViewAudioFeedback { } return privateDoneBarButton! } - + set (newValue) { privateDoneBarButton = newValue } @@ -131,10 +132,10 @@ open class IQToolbar: UIToolbar, UIInputViewAudioFeedback { } else { privateFixedSpaceBarButton!.width = 20 } - + return privateFixedSpaceBarButton! } - + set (newValue) { privateFixedSpaceBarButton = newValue } @@ -143,13 +144,13 @@ open class IQToolbar: UIToolbar, UIInputViewAudioFeedback { override init(frame: CGRect) { _ = IQToolbar._classInitialize super.init(frame: frame) - + sizeToFit() - + autoresizingMask = .flexibleWidth self.isTranslucent = true } - + @objc required public init?(coder aDecoder: NSCoder) { _ = IQToolbar._classInitialize super.init(coder: aDecoder) @@ -167,7 +168,7 @@ open class IQToolbar: UIToolbar, UIInputViewAudioFeedback { } @objc override open var tintColor: UIColor! { - + didSet { if let unwrappedItems = items { for item in unwrappedItems { @@ -176,7 +177,7 @@ open class IQToolbar: UIToolbar, UIInputViewAudioFeedback { } } } - + @objc override open func layoutSubviews() { super.layoutSubviews() @@ -187,7 +188,7 @@ open class IQToolbar: UIToolbar, UIInputViewAudioFeedback { var leftRect = CGRect.null var rightRect = CGRect.null var isTitleBarButtonFound = false - + let sortedSubviews = self.subviews.sorted(by: { (view1: UIView, view2: UIView) -> Bool in if view1.frame.minX != view2.frame.minX { return view1.frame.minX < view2.frame.minX @@ -195,67 +196,67 @@ open class IQToolbar: UIToolbar, UIInputViewAudioFeedback { return view1.frame.minY < view2.frame.minY } }) - + for barButtonItemView in sortedSubviews { - - if isTitleBarButtonFound == true { + + if isTitleBarButtonFound { rightRect = barButtonItemView.frame break } else if barButtonItemView === customTitleView { isTitleBarButtonFound = true //If it's UIToolbarButton or UIToolbarTextButton (which actually UIBarButtonItem) - } else if barButtonItemView.isKind(of: UIControl.self) == true { + } else if barButtonItemView.isKind(of: UIControl.self) { leftRect = barButtonItemView.frame } } - + let titleMargin: CGFloat = 16 let maxWidth: CGFloat = self.frame.width - titleMargin*2 - (leftRect.isNull ? 0 : leftRect.maxX) - (rightRect.isNull ? 0 : self.frame.width - rightRect.minX) let maxHeight = self.frame.height - + let sizeThatFits = customTitleView.sizeThatFits(CGSize(width: maxWidth, height: maxHeight)) - + var titleRect: CGRect - - if sizeThatFits.width > 0 && sizeThatFits.height > 0 { + + if sizeThatFits.width > 0, sizeThatFits.height > 0 { let width = min(sizeThatFits.width, maxWidth) let height = min(sizeThatFits.height, maxHeight) - + var xPosition: CGFloat - if leftRect.isNull == false { + if !leftRect.isNull { xPosition = titleMargin + leftRect.maxX + ((maxWidth - width)/2) } else { xPosition = titleMargin } - + let yPosition = (maxHeight - height)/2 - + titleRect = CGRect(x: xPosition, y: yPosition, width: width, height: height) } else { - + var xPosition: CGFloat - - if leftRect.isNull == false { + + if !leftRect.isNull { xPosition = titleMargin + leftRect.maxX } else { xPosition = titleMargin } let width: CGFloat = self.frame.width - titleMargin*2 - (leftRect.isNull ? 0 : leftRect.maxX) - (rightRect.isNull ? 0 : self.frame.width - rightRect.minX) - + titleRect = CGRect(x: xPosition, y: 0, width: width, height: maxHeight) } - + customTitleView.frame = titleRect } } - + @objc open var enableInputClicksWhenVisible: Bool { return true } - + deinit { items = nil diff --git a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQUIView+IQKeyboardToolbar.swift b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQUIView+IQKeyboardToolbar.swift index fde687f8cf..a3b5e81dca 100644 --- a/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQUIView+IQKeyboardToolbar.swift +++ b/iOS/MyStudies/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQUIView+IQKeyboardToolbar.swift @@ -1,7 +1,7 @@ // // IQUIView+IQKeyboardToolbar.swift // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. +// Copyright (c) 2013-20 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -23,17 +23,12 @@ import UIKit -private var kIQShouldHideToolbarPlaceholder = "kIQShouldHideToolbarPlaceholder" -private var kIQToolbarPlaceholder = "kIQToolbarPlaceholder" - -private var kIQKeyboardToolbar = "kIQKeyboardToolbar" - /** IQBarButtonItemConfiguration for creating toolbar with bar button items */ -@objc public class IQBarButtonItemConfiguration: NSObject { - - #if swift(>=4.2) +@available(iOSApplicationExtension, unavailable) +@objc public final class IQBarButtonItemConfiguration: NSObject { + @objc public init(barButtonSystemItem: UIBarButtonItem.SystemItem, action: Selector) { self.barButtonSystemItem = barButtonSystemItem self.image = nil @@ -41,15 +36,6 @@ private var kIQKeyboardToolbar = "kIQKeyboardToolbar" self.action = action super.init() } - #else - @objc public init(barButtonSystemItem: UIBarButtonSystemItem, action: Selector) { - self.barButtonSystemItem = barButtonSystemItem - self.image = nil - self.title = nil - self.action = action - super.init() - } - #endif @objc public init(image: UIImage, action: Selector) { self.barButtonSystemItem = nil @@ -58,7 +44,7 @@ private var kIQKeyboardToolbar = "kIQKeyboardToolbar" self.action = action super.init() } - + @objc public init(title: String, action: Selector) { self.barButtonSystemItem = nil self.image = nil @@ -66,128 +52,119 @@ private var kIQKeyboardToolbar = "kIQKeyboardToolbar" self.action = action super.init() } - - #if swift(>=4.2) + public let barButtonSystemItem: UIBarButtonItem.SystemItem? //System Item to be used to instantiate bar button. - #else - public let barButtonSystemItem: UIBarButtonSystemItem? //System Item to be used to instantiate bar button. - #endif - + @objc public let image: UIImage? //Image to show on bar button item if it's not a system item. - + @objc public let title: String? //Title to show on bar button item if it's not a system item. - + @objc public let action: Selector? //action for bar button item. Usually 'doneAction:(IQBarButtonItem*)item'. } /** UIImage category methods to get next/prev images */ +// swiftlint:disable nesting +// swiftlint:disable line_length +@available(iOSApplicationExtension, unavailable) @objc public extension UIImage { - - @objc static func keyboardLeftImage() -> UIImage? { - + + static func keyboardLeftImage() -> UIImage? { + struct Static { static var keyboardLeftImage: UIImage? } if Static.keyboardLeftImage == nil { - + let base64Data = "iVBORw0KGgoAAAANSUhEUgAAACQAAAA/CAYAAACIEWrAAAAAAXNSR0IArs4c6QAABtFJREFUaAXFmV1oHFUUx++d3SSbj/0k6Uc2u7Ob7QeVSqBSP7AUm1JpS0tb+6nFYhELxfahDxVU9KmgD0UU7ENRLLRQodRqNbVJY5IGXwRBEPHBh2x2ZpPQaDC7W2qSzc5c/3ebDTN3d5Pd7Gw6L3PPOcM5vzn33I+5Q8gTvJqbm52RYPAdIEg5DFuusdz3dq/X7XA6ewiVTvrcnvBkMvE9GNgTAQoGg16pztFLKX02mwhKOrwe99rJZPL2sgO1tbX5aiWpDzDPGHuFEvq01+2ZpEZltdutra3NjpranxC0Q4zFCLsVVZRjdtFQLTmycuUKZq/pA8zGvBiM3IiqynHoM8sCFGoJrSIO1o9u2SDCIDPXAXMCeo3bqg4UCARaJYkMEELXiTCEkauAOQm9nrPNj/+cwso7aiZQS6VBdFMeDDLz1ZAaM8Hw2FXLUHj1apnaawYIpWHxJRkjl5GZ09Az0VYVIFmWw6iXAWRGFgMynV2KxpWzhWD4s5Z3GeaZNXZGeTflwzDyGWDOFIPhQJZmqN3vX0clG7qJtHLnpktnFwFz3qQrIFgGJK+WN+D1+jGaVolxGNM/jsbVd0V9IdkSoEggsJFJlE96K8Qgus4uDMfVD0R9MbniGgr7/R1YsXkB58FgEH04HFdKhuGQFWUIo2kTZaQXQ9snvjGG9nsY2h+J+sXkJQO1BwKbMYv0YNX2ikF0ws4Pq8pFUV+KvCSgkD/0PCaMbnSTWwyCzJwDzKeivlS5bCBsOV/EsL6LAE5jEMYvSs4C5pJRX267LKBwILAVw/oOgjQZAz1mYaejinrZqF9Ku+QdY0SWOzkMaqbRGAgwOjJzKqqqXxj1S22jDBa/wsHgDqxNtwFTb3w6C0PYyWFVvWrUV9JetMsibfIuRuktkDuMgQCjYRdzYnhEvW7UV9peEKg9GNyDOeYmYOpMgRjLYD9zHDA3THoLhKIzdSgQ2k+p9A1imGEImUXNHEM3WQ7D36dghlAzhyRKeFfU8IcMV1rTtSOxePy2QWdpMw8oEggdwxp0DVFE2wy66SBg+LCv2mUa9mFZfhORrmA0mWCwz5zWdW0/uolPiFW95msIMGckQr8EjAkSo2mKMH0vMtNTVZI559lMtAdC5zCSPhEDAuaRppG9yqg6INqqJVNk5m1k5nMxAGAYYLYro8qywXAGiWYyvYSxUREIXUdtdnIKelM9ic9ZLWeXDnxdRmppdnMeEAMgUTex0XoN+lnRVg05C8Qd828pW5FvKUwD3w0pylE8lq4GhNHnPBBX+v3+tjpbTT+lZK3xId5GprqQqUNozog2K2UTEHfMDwdqJBtOKsh6MRAmxru6Ql+Jkdi0aLNKzgPijvnxia2e9WFhfUoMhC1qb1rP7BsZGZkSbVbI8xOj0Vnsn9gDMjO9DcH/MOp5G925o1aydeFko0G0WSEXBOKOh8bH/57OpDuxbPwuBsKM0Omw195taWkxbWXF55YiFwXizsbGxibSWqYTFf2b6ByZ2uqsb+jmZ82irRK5YA2JDkOekEdykXuA2CzaMP5+YanUzujkZDLfVr6mJCDu1ufzubxOZzeq6AUxDGrtVz1FXo4lYgnRVq5cMhB3zLvH1dD4I2poS14gdOuMru3A6Ps3z1aGYsEaEv1MTEw8fDQzvRP6QdGG4bep1mbv52fRebYyFGUBcb/j4+OPpmbTuzFz4yzIfCHdHQ6cK/IzabOldKlsIO4ao++/tK7tQe3cE0OhOzcSh+N+9mxaNJYgl1VDBfzVtcsyvtnobtGG+euvWV3rjMfjY6JtIXlJGTI4nMH/iQPI1A8GXbaJN13Pz6j5gi3aFpIrBeK+01E1dhAL77d5gShd47DZB/mZdZ6tiKLSLjO6tUeCoes4qjlsVPI2uk/RCNumKMqwaBNlKzKU85nBr4JXkamvc4rcHW8t87NrvjPN6YrdrQTiMTTU1OtY+67lBaQk+9+Dn2Xn2QwKq4G4a21IVd5Apq4Y4jxuUuonNvv97Jl2nnHukSJ6K9Q0EpQvYwZ/S3SGmhrPMH27qqp/ijbTV6porFTGT90u/NxdgXnKtEtATTXZKD3scTb1JFKpcWOcqgLxQIC643F7fNi6PGcMjHYjZvUjrkZPb/Jh8kHOVnUgHiiRTHQjUy5kyrx1obSBSuSI1+Xqm0ylsjP6sgBxKGTqHn6D1yNTpq0LslSPXxNH3c6mAXTfqJUTI4+76IXT3AvY5L1f4MFUhrBdy5ahHAAy1e91uzD46Es53dydYv7qWnYgHhxQgx6XexZQ2+dgZojGDuCf2p0nAsQhEqnkzz63awpz0hacve+LjqjZA7H/AWSbJ/TPf3CuAAAAAElFTkSuQmCC" - + if let data = Data(base64Encoded: base64Data, options: .ignoreUnknownCharacters) { Static.keyboardLeftImage = UIImage(data: data, scale: 3) } - + //Support for RTL languages like Arabic, Persia etc... (Bug ID: #448) - if #available(iOS 9, *) { - Static.keyboardLeftImage = Static.keyboardLeftImage?.imageFlippedForRightToLeftLayoutDirection() - } + Static.keyboardLeftImage = Static.keyboardLeftImage?.imageFlippedForRightToLeftLayoutDirection() } - + return Static.keyboardLeftImage } - - @objc static func keyboardRightImage() -> UIImage? { - + + static func keyboardRightImage() -> UIImage? { + struct Static { static var keyboardRightImage: UIImage? } - + if Static.keyboardRightImage == nil { - + let base64Data = "iVBORw0KGgoAAAANSUhEUgAAACQAAAA/CAYAAACIEWrAAAAAAXNSR0IArs4c6QAABu5JREFUaAXFmXtsFEUcx2f3rj0Kvd29k9LHtXfXqyjGV2J8EF/hIQgp4VnahPgIxviH0ZgYNSbGmBg1McaYGGOM+o8k+EINMQjIo6UoBAVEEBGQXnvbS1ttw91epUDbu/E7lb3bm22Pu97uOQnszO+3ne/nvjM7sw9CMsXRFAi83jhnTnUmVPqacEXSGfIHPhMEoYUSejpJyKJIJNJfehxCRIiWwZktDIYBCESY56BCZ319ve9/AQr5/c8CY7VRXBDIXJfo6Kyrq2swxktRZ0NWFgoEPocza3lBDF9P6rKwsGegp4fP2dVmQzYWjkTaCCVf8iKADIou0un3+0N8zq42A2JlvEvt2QBHPv2vmfkfFvrLiNAZqq+fm4naV9OBmEISTj0MpzaZ5AShXhAd+xrr6q435SwO6Je9sVsRc+ojDNdjxiCrw8GBcUoXq6p6is9Z1TY6pPeZglOPQ/1DPaAfAVnjFMQODN/Neszqo2OqDmNa/DuPJM/G+nSn8RxYOgux9Upl5a748PBfxpwV9SmBWOexhLbdIyserEvzs8QEYSYRxFZJUfZommbpip4TaAJKi+/0SnIlEYS7jVBwqQJutXkkqT2WSPQZc8XUrwo0AZXQdntkaQYg7jWKYU4hJrZJlXKnNqxFjbnp1vMCmoDStL2KJDsBdT8n5hJFoRXAP8Q0TeVyBTfzBmI9xxNah1eRU9j7FnJKLrTbZLf7QDyRiHC5gpoFAbGe4cJ+TPRRTPTFRiU4V45/rV5FOYRzuo25QuoFA7HOsST8qCjyBcyhpUYxAJVRSloVSToMp7qMuXzr0wJincc17SCc0uDUMqMYg8JEb/W65aNYNs4Zc/nUpw3EOodTh+DUEFb15QDBKpAuTiJi8ZSl4wA/m47mUSkKiPUPwcNeWR6ghDRzUA60W+DUSTh1Og+WiVOKBmK9YBIfVRQlCqdW8FC4J16nyPJpgOe1IVsCxKAgeAxOReDUyiwoTCik13olz9lYIn6SnZurWAbERODUcY+idMGpVYBK30mwOm5d1sCpMMBPlAzoCtRvsiSdEdmDAweF/Go4pcKpX6eCstQhXQRr0O9w6hTWqTWIpTXYUMKpVXCqD079op9vPKZPNgatqGP4/pAl9wlRENnTTFqHQaG9wiN5/oZTR3it9Il8woo2nDrjUeRjcGod+nPqfTIoYDVjnToPp37W4+xoKxATgFN/ym7lCKZ4C6xJQ7EcqJZjsx7BOQdZmxXbgZhIPBE/h9uTn1BdD4gyFssUYQmgkoDaz2IlAWJCEAxLlcpBDFULoMpZLFOERdgXBWxF+4z7TyZvYy1YH1wginQvoNLrlC6XIvT5rDHVEzYeRYdINhrXJ10LK7yapPSbUgI58AC6CQAbdAj9SCntpmOjC9X+/kipgJxN/uBmALTqEOkjpecujY8t6uvv72WxUgBNvO6B1iSve8jxkdHLSwYGBgZ1QLuByuHMFoit1AUzR3psNJl8ADDnMzF7HXLhveXXuB9qNgqyOubMkXFCl0aj0Rifs8WhIAnOcPjJVsA8yAsC5xAZTixTYzHNnLPBIbwsrcA68y0u7Qd4QThzIDFyYflQLDbM5/S2pQ5VV1fPcjkc27BLLdAF9CMej/YPXxxpHhoa+kePTXa0DKiqqqpylqtiO0TuMwvRDlzaKwYHB0fMueyIJUBer1eSKmbuwJzJekPCpODM7tFUclVfX9/FbOnJW0UDhTwembil79H9XWYJujOlCmuiJHrJnJs8UhQQXhd7MF92YYe+ne8eE3hbWI20IH6Zz+Vqm3bcXCcbcz6f7xo8M7Nd2wSDgdoKGHaXWBAM639aDtXU1FS5nGV78Pe3sE6MBc58BRi2gY4Z4/nWCwZin6/EctdeCNxoEqHkC8A8hPi4KZdnoCCgQCBQi/nSjnkzj+8fzmwGzKOIJ/lcIe285xD7XOUgwj48QZhgUpR8AphHioVh4HkBsc9U7HMV3LnO9Gsp/bhb7dmIOF71FV+uOmSNtbUBwVnWgb2pkZejNPVBWFWfRBx3oNaUnEDssxTuxdvhTMAkl6LvhXvVp03xIgNTDhnmzLXss9RkMHg+f6erN2I5DPstkzrEPkOJoqMdw1TH/+AUpW91q5EX+LhVbRNQoDZwA54t2aVdYxahbwDmJXPcukgWUFNDw01UxHZAyBxeArv2q7i0X+HjVrfTQI0+3634wrMHMLPNIvRlwLxmjlsfmQDCCnwb3iTtxpzx8hK4tF/Epf0mH7er7Qw1NNyBzndh11Z4kVSKPtfdq77Nx+1sO7GiVeCNpBN3e9mFpp4BzLvZQftbExhNfv89mD87IOfGJollhjwV7o28b798DoWgLzgfD3bnAfdEjtNsT/0LGvgrBSkuN9gAAAAASUVORK5CYII=" - + if let data = Data(base64Encoded: base64Data, options: .ignoreUnknownCharacters) { Static.keyboardRightImage = UIImage(data: data, scale: 3) } //Support for RTL languages like Arabic, Persia etc... (Bug ID: #448) - if #available(iOS 9, *) { - Static.keyboardRightImage = Static.keyboardRightImage?.imageFlippedForRightToLeftLayoutDirection() - } + Static.keyboardRightImage = Static.keyboardRightImage?.imageFlippedForRightToLeftLayoutDirection() } - + return Static.keyboardRightImage } - - @objc static func keyboardUpImage() -> UIImage? { - + + static func keyboardUpImage() -> UIImage? { + struct Static { static var keyboardUpImage: UIImage? } - + if Static.keyboardUpImage == nil { - + let base64Data = "iVBORw0KGgoAAAANSUhEUgAAAD8AAAAkCAYAAAA+TuKHAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgpMwidZAAAGmklEQVRoBd1ZWWwbRRie2bVz27s2adPGxzqxqAQCIRA3CDVJGxpKaEtRoSAVISQQggdeQIIHeIAHkOCBFyQeKlARhaYHvUJa0ksVoIgKUKFqKWqdeG2nR1Lsdeo0h73D54iku7NO6ySOk3alyPN//+zM/81/7MyEkDl66j2eJXWK8vocTT82rTgXk/t8vqBNEI9QSp9zOeVkPJnomgs7ik5eUZQ6OxGOEEq9WcKUksdlWbqU0LRfi70ARSXv8Xi8dkE8CsJ+I1FK6BNYgCgW4A8jPtvtopFHqNeWCLbDIF6fkxQjK91O1z9IgRM59bMAFoV8YEFgka1EyBJfMhkH5L9ACFstS9IpRMDJyfoVEp918sGamoVCme0QyN3GG87wAKcTOBYA4hrJKf+VSCb+nsBnqYHVnr2ntra2mpWWH0BVu52fhRH2XSZDmsA/xensokC21Pv9T3J4wcWrq17gob1er7tEhMcJuYsfGoS3hdTweuBpxaM0iCJph8fLuX7DJMPWnI2GOzi8YOKseD4gB+RSQezMRRx5vRPEn88Sz7IIx8KHgT3FCBniWJUyke6o8/uXc3jBxIKTd7vdTsFJfkSo38NbCY/vPRsOPwt81KgLqeoBXc+sBjZsxLF4ZfgM7goqSqMRL1S7oOSrq6sdLodjH0rYfbyByPEOePwZ4CO8Liv3RCL70Wctr8+mA2NkT53P91iu92aCFYx8TU1NpbOi8gfs2R7iDYLxnXqYPg3c5Fm+Xygcbs/omXXATZGBBagQqNAe9Psf4d+ZiVwQ8qjqFVVl5dmi9ShvDEL90IieXtVDevic5ruOyYiAXYiA9YSxsZow0YnSKkKFjoAn8OAENsPGjKs9qnp5iSDuBXFLXsLjR4fSIy29vb2DU7UThW4d8n0zxjXtRVAYNaJnlocikWNTHZPvP1PPl2LLujM3cfbzwJXUyukQzxrZraptRCcbEDm60Wh4S0IE7McByVJQjf3yac+EfEm9ouxAcWu2TsS6koOplr6+vstWXf5IKBrejBR4ybIAlLpE1JE6j8eyh8h/dEKmS95e7w9sy57G+MkQ6sdYMrmiv79/gNdNR0YEbGKUvIIFQMRffRBtbkG0HQj6fHdcRafWmg55Gzy+BR5vtUzF2O96kjSH4nHNopsB0B0Ob6SEvcYvAPYS1UwQDyqLFcu5IZ/pTMUkjxfEoD/wLVY9+z02PXDL8RE9s0y9qMZNigIJcU37TZblfj7aUAMqURLXuqqq9sQHBi5NZbqpkBfh8a9BPLtDMz3wyImh9GhTLBab0uSmQfIQcNQ95pJkDVG3wtgdC1KFA+HaSodjdzKZ/Neou1Y7X/JC0K98BeIvWAdjp+jwUKN6/nyfVVd4JK4lunDrkwJhc6Gl1GGjwhqnLO3UNC2Rz8z5kKfw+EYQf5EfEKF+Wh+kDd0XYxd43WzKiIBfEAEjiIAm0zyUSFiU1XJF+feJy5evW3euR57C41+A+MumSbICY2dGmd6gnlPPWXRFABABP7llCXsA2mCcDjVAJoK4qryycsfAwEDSqOPb1yQPj38O4q/yL4F4aCiTXhqNRmMWXREBFMGjslOywUbToQeyyy4IrVVO53bUgEk/uZOSr/MHPsOd0hs8F4R6mI2ONKi9vRFeNxdyIqkddknOMhA2nyuy+wAqtEol8rbEYCLnZisneXj8UxB/00KGkUiGsqU90WiPRTeHACLgoNsp4eBDHzaagRS4RbCzle6ysq3xVIq/LiMW8ti5fYRVfMs4yFibsdgI05eqqhqy6OYBEE9qnSiCLhRB7tRHFzDR1oIasBU1wHTAMpHHjcmHIP4OzwXf8XMkk24IR6NneN18klEE97mc0gJwuN9oF+SFNlF8vNJR1YYacGVcN0Eet6XvY6Pw3rhi/Bc5fiEzShp7eiOnx7H5/IsI6EAELEIE3Gu0EymwyCbQZocktWEfMHa3MEa+zqe8KwjCB8bO/7f70kxvVGPqyRy6eQshAtpdsuTDN/9us5F0MQ4zTS5BaIsPDQ3jO+5/G+fjj82dIDF2CZeKjd3R6J8W3Y0BYFca+JJQssFqLuvSUqlmESHSiZywGzsgx+OZNFnWE4scN+I3WJshAnYjAm5FBNxptp16y+y2hICLEtOVMXJcI0xvDveGi/ofU7NxBZN0XIpuIIy0mUZkZNNZVf1kDAt6lZagEhjGnxbweh8wdbw5hOwdxHbwY/j9BpTM9xi4MGzFvZhpk3Bz8J5gkb19ym7cJr5w/wEmUjzJqoNVhwAAAABJRU5ErkJggg==" - + if let data = Data(base64Encoded: base64Data, options: .ignoreUnknownCharacters) { Static.keyboardUpImage = UIImage(data: data, scale: 3) } //Support for RTL languages like Arabic, Persia etc... (Bug ID: #448) - if #available(iOS 9, *) { - Static.keyboardUpImage = Static.keyboardUpImage?.imageFlippedForRightToLeftLayoutDirection() - } + Static.keyboardUpImage = Static.keyboardUpImage?.imageFlippedForRightToLeftLayoutDirection() } - + return Static.keyboardUpImage } - - @objc static func keyboardDownImage() -> UIImage? { - + + static func keyboardDownImage() -> UIImage? { + struct Static { static var keyboardDownImage: UIImage? } - + if Static.keyboardDownImage == nil { let base64Data = "iVBORw0KGgoAAAANSUhEUgAAAD8AAAAkCAYAAAA+TuKHAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgpMwidZAAAGp0lEQVRoBd1ZCWhcRRiemff25WrydmOtuXbfZlMo4lEpKkppm6TpZUovC4UqKlQoUhURqQcUBcWDIkhVUCuI9SpJa+2h0VZjUawUEUUUirLNXqmxSnc32WaT7O4bv0nd5R1bc+2maR8s7z9m5v+/+f/5Z94sIf89jW73Yp/bfUuWvwLfDp/H8zhwObLYmCCaPJ6FjLJPCWNHNU1bkFVeQW/Zp2l7KWUvNmlaB3DJAhvz1ntvI5R1EUpnUUKdEifHGuvr519BwKUmj/cDYNtwARNd5/NoH4GWKIhzlFKXCSzn/xCut/jD4V9N8suPYYj4ewC+2e46f55Rwp/geExKSmdzJn2l1WrXmuSXF8MQ8XfyAeeEn9KTyV3MHwq9RTh50IqLEjJHUkh3Y13dPKvuMuApIr6bUHKP1VeE+Y8MIa09Z8/+JQlltD/+Q7VaFcW6X2VsjFmbRRnbUFFZeai/v/+cUTeDaYqIv4GlfL/NR879I3qmORwOnxG6UfCCiMbjJ51VagKdlgs+91BaKVO6oVJVD8bj8WhOPkMJn1t7jTL6gNU9pHpgKJ1q7u3tjWR1OfBCEOuPf+9Sq4YwAW3ZBqNvSqsYpeuc5WUHYolE3KSbQYzP430FwB+yuoSCFtKHaXP4z3DIqDOBFwpkwHfVThXLgrYaG6IGOAmT1pZVVHw8MDDQb9TNBLrJre0E8EdtvnAeSRPeHOwN9lh1NvCiASbgG5fqRLDJEmMHsSU6GFuDGrAfNWDAqLuUNE5uL6A2bbf5wPkZrmdaAuGw36aDIC940TAajx1HBijIgEWmjpRWS4ytrnKq+1EDEibdJWAa3dqzjLGnrKaxxvt4OtXS09v7u1WX5S8KXjRABnQ7VbUCEV+Y7SDeWAJX4dfuLCnZFzt//rxRN500jqo74NvTVptY42fTnLcGI5FTVp2R/1/womEsHj/mwgxg27vd2BH8bCrLq0rKyjoTicSgUTcdNIrbkwD+nM2WOJ3qmaVI9d9sOotgTPCiPTLgi+oqdTbOAbea+lM6xyHLK8pnVXSiCCZNuiIyjZr2GArSS1YTOKie45n0UqT6L1ZdPn5c4EVHHIS6sA3WYLZvNg6E9L9GZmwZzgEdqAFDRl0xaET8EQB/2To21ngsQ0kbIv6zVXcxftzgxQDIgM+qVbUeGbDAPCCtxbfxUhdjHdGhoWGzrnAcIr4NwHflGbGf6PqyQCj0Yx7dRUUTAi9GwQQccapOL7bBm4yjIiPqSElpC5VYRzKZLPgE4M5hK0rt67CDZDM9A+k0XxmIhE6apONgJgxejBmLxw65VHUu/LjRaANeNZQpyhJZUToGBwdHjLqp0Ij4FgB/0wocaxw7DV8F4CcmM/6kwMMQRwYcrFad87DvXW8yTKlbkZVFSmlJB3bBlEk3CQYRvxfA3wbw0Vun7BAAPqjrmfaecPjbrGyib2sKTbS/LG5F4NhGe0d+fDiTuSMSiUx6F8Bn6V343N6TB3gSyb/aHwx22+2OX2KazfF3y7VMnw4FcUvCP8lJcgRtVph0yEu8pTnRBAiv270JwN+1AscQw5zr66YKXLgyVfBijBQc2YQ0PCIY4wPH2yQPERNTYpSPRSPid0qUvY/+1mU5QjJ8PVL96FhjjEdfCPDCzggyAKnPP7cZpWQFlsZ+yPGdMPaDiK/F6fEjbKeypXVK5/pGfyTYZZFPmi0UeOHAcCZI1+Oa6JjVG0SwHbcrnZDn7sytbQSPiLdLTBJXy+Z2nKcR8U09odDhfP0mKyskeBIggaERPb0WGfC1zSFK1gDcXsitER1t6m3wrkTEbRmC5ZTRCd+MiB+wjTlFwVSrfV7zdXV15aWy0oWKvNjWgJMOfyiAIklwYXLhwfd4G/47OAxnTMVRAKec3u0PB8SkFfyxFpSCGMBHTkpWHPsU2bEEKe8xDUrJdfhKnItzgiiEXKvXWhijR9CuzNgOwHWc1+87HQ5+aJQXki4KeOGgOOFJDkdnqeJowSGlweg00vsGHJAa1UpnTJKIAF5u1AM4R8S3APgeo7zQdFHS3uikz+VSSWXVlwBo+hoUbUR0ITfVHQEcEd+K4rbbOE4xaJPhYhg4HY3GcYG4HFB/so5vBT6q53TbdAAXtooe+SzghoaGakWSu2FwflZmfWMffxjAX7XKi8VPG3gBoKam5uoKpeQEDjBz7YD4dpwUd9rlxZMUPe2Nrvf19f2dTKdasap7jHIsiR3TDdxsfxq5xtpazad5g02al+Na6plpND0zTHk8Hp+4iLyU3vwLp0orLWXqrZQAAAAASUVORK5CYII=" - + if let data = Data(base64Encoded: base64Data, options: .ignoreUnknownCharacters) { Static.keyboardDownImage = UIImage(data: data, scale: 3) } //Support for RTL languages like Arabic, Persia etc... (Bug ID: #448) - if #available(iOS 9, *) { - Static.keyboardDownImage = Static.keyboardDownImage?.imageFlippedForRightToLeftLayoutDirection() - } + Static.keyboardDownImage = Static.keyboardDownImage?.imageFlippedForRightToLeftLayoutDirection() } - + return Static.keyboardDownImage } - - @objc static func keyboardPreviousImage() -> UIImage? { - + + static func keyboardPreviousImage() -> UIImage? { + if #available(iOS 10, *) { return keyboardUpImage() } else { return keyboardLeftImage() } } - - @objc static func keyboardNextImage() -> UIImage? { - + + static func keyboardNextImage() -> UIImage? { + if #available(iOS 10, *) { return keyboardDownImage() } else { @@ -199,73 +176,64 @@ private var kIQKeyboardToolbar = "kIQKeyboardToolbar" /** UIView category methods to add IQToolbar on UIKeyboard. */ +@available(iOSApplicationExtension, unavailable) @objc public extension UIView { - - ///-------------- - /// MARK: Toolbar - ///-------------- - + + private struct AssociatedKeys { + static var keyboardToolbar = "keyboardToolbar" + static var shouldHideToolbarPlaceholder = "shouldHideToolbarPlaceholder" + static var toolbarPlaceholder = "toolbarPlaceholder" + } + + // MARK: Toolbar + /** IQToolbar references for better customization control. */ - @objc var keyboardToolbar: IQToolbar { + var keyboardToolbar: IQToolbar { var toolbar = inputAccessoryView as? IQToolbar - + if toolbar == nil { - toolbar = objc_getAssociatedObject(self, &kIQKeyboardToolbar) as? IQToolbar + toolbar = objc_getAssociatedObject(self, &AssociatedKeys.keyboardToolbar) as? IQToolbar } - + if let unwrappedToolbar = toolbar { - return unwrappedToolbar - } else { - + let frame = CGRect(origin: .zero, size: .init(width: UIScreen.main.bounds.width, height: 44)) let newToolbar = IQToolbar(frame: frame) - - objc_setAssociatedObject(self, &kIQKeyboardToolbar, newToolbar, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) - + + objc_setAssociatedObject(self, &AssociatedKeys.keyboardToolbar, newToolbar, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + return newToolbar } } - - ///-------------------- - /// MARK: Toolbar title - ///-------------------- - + + // MARK: Toolbar title + /** If `shouldHideToolbarPlaceholder` is YES, then title will not be added to the toolbar. Default to NO. */ - @objc var shouldHideToolbarPlaceholder: Bool { + var shouldHideToolbarPlaceholder: Bool { get { - let aValue = objc_getAssociatedObject(self, &kIQShouldHideToolbarPlaceholder) as Any? - - if let unwrapedValue = aValue as? Bool { - return unwrapedValue - } else { - return false - } + return objc_getAssociatedObject(self, &AssociatedKeys.shouldHideToolbarPlaceholder) as? Bool ?? false } set(newValue) { - objc_setAssociatedObject(self, &kIQShouldHideToolbarPlaceholder, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) - + objc_setAssociatedObject(self, &AssociatedKeys.shouldHideToolbarPlaceholder, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) self.keyboardToolbar.titleBarButton.title = self.drawingToolbarPlaceholder } } - + /** `toolbarPlaceholder` to override default `placeholder` text when drawing text on toolbar. */ - @objc var toolbarPlaceholder: String? { + var toolbarPlaceholder: String? { get { - let aValue = objc_getAssociatedObject(self, &kIQToolbarPlaceholder) as? String - - return aValue + return objc_getAssociatedObject(self, &AssociatedKeys.toolbarPlaceholder) as? String } set(newValue) { - objc_setAssociatedObject(self, &kIQToolbarPlaceholder, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) - + objc_setAssociatedObject(self, &AssociatedKeys.toolbarPlaceholder, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) self.keyboardToolbar.titleBarButton.title = self.drawingToolbarPlaceholder } } @@ -273,14 +241,14 @@ UIView category methods to add IQToolbar on UIKeyboard. /** `drawingToolbarPlaceholder` will be actual text used to draw on toolbar. This would either `placeholder` or `toolbarPlaceholder`. */ - @objc var drawingToolbarPlaceholder: String? { + var drawingToolbarPlaceholder: String? { if self.shouldHideToolbarPlaceholder { return nil } else if self.toolbarPlaceholder?.isEmpty == false { return self.toolbarPlaceholder } else if self.responds(to: #selector(getter: UITextField.placeholder)) { - + if let textField = self as? UITextField { return textField.placeholder } else if let textView = self as? IQTextView { @@ -293,40 +261,37 @@ UIView category methods to add IQToolbar on UIKeyboard. } } - ///--------------------- - /// MARK: Private helper - ///--------------------- - + // MARK: Private helper + + // swiftlint:disable nesting private static func flexibleBarButtonItem () -> IQBarButtonItem { - + struct Static { - + static let nilButton = IQBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil) } - + Static.nilButton.isSystemItem = true return Static.nilButton } - ///------------- - /// MARK: Common - ///------------- + // MARK: Common + + func addKeyboardToolbarWithTarget(target: AnyObject?, titleText: String?, rightBarButtonConfiguration: IQBarButtonItemConfiguration?, previousBarButtonConfiguration: IQBarButtonItemConfiguration? = nil, nextBarButtonConfiguration: IQBarButtonItemConfiguration? = nil) { - @objc func addKeyboardToolbarWithTarget(target: AnyObject?, titleText: String?, rightBarButtonConfiguration: IQBarButtonItemConfiguration?, previousBarButtonConfiguration: IQBarButtonItemConfiguration? = nil, nextBarButtonConfiguration: IQBarButtonItemConfiguration? = nil) { - //If can't set InputAccessoryView. Then return if self.responds(to: #selector(setter: UITextField.inputAccessoryView)) { - + // Creating a toolBar for phoneNumber keyboard let toolbar = self.keyboardToolbar - + var items: [IQBarButtonItem] = [] - + if let prevConfig = previousBarButtonConfiguration { var prev = toolbar.previousBarButton - if prevConfig.barButtonSystemItem == nil && prev.isSystemItem == false { + if prevConfig.barButtonSystemItem == nil, !prev.isSystemItem { prev.title = prevConfig.title prev.accessibilityLabel = prevConfig.accessibilityLabel prev.image = prevConfig.image @@ -341,7 +306,7 @@ UIView category methods to add IQToolbar on UIKeyboard. } else { prev = IQBarButtonItem(title: prevConfig.title, style: .plain, target: target, action: prevConfig.action) } - + prev.invocation = toolbar.previousBarButton.invocation prev.accessibilityLabel = prevConfig.accessibilityLabel prev.isEnabled = toolbar.previousBarButton.isEnabled @@ -351,17 +316,17 @@ UIView category methods to add IQToolbar on UIKeyboard. items.append(prev) } - - if previousBarButtonConfiguration != nil && nextBarButtonConfiguration != nil { - + + if previousBarButtonConfiguration != nil, nextBarButtonConfiguration != nil { + items.append(toolbar.fixedSpaceBarButton) } if let nextConfig = nextBarButtonConfiguration { - + var next = toolbar.nextBarButton - if nextConfig.barButtonSystemItem == nil && next.isSystemItem == false { + if nextConfig.barButtonSystemItem == nil, !next.isSystemItem { next.title = nextConfig.title next.accessibilityLabel = nextConfig.accessibilityLabel next.image = nextConfig.image @@ -376,7 +341,7 @@ UIView category methods to add IQToolbar on UIKeyboard. } else { next = IQBarButtonItem(title: nextConfig.title, style: .plain, target: target, action: nextConfig.action) } - + next.invocation = toolbar.nextBarButton.invocation next.accessibilityLabel = nextConfig.accessibilityLabel next.isEnabled = toolbar.nextBarButton.isEnabled @@ -386,30 +351,30 @@ UIView category methods to add IQToolbar on UIKeyboard. items.append(next) } - + //Title bar button item do { //Flexible space items.append(UIView.flexibleBarButtonItem()) - + //Title button toolbar.titleBarButton.title = titleText - + if #available(iOS 11, *) {} else { toolbar.titleBarButton.customView?.frame = CGRect.zero } - + items.append(toolbar.titleBarButton) - + //Flexible space items.append(UIView.flexibleBarButtonItem()) } - + if let rightConfig = rightBarButtonConfiguration { - + var done = toolbar.doneBarButton - if rightConfig.barButtonSystemItem == nil && done.isSystemItem == false { + if rightConfig.barButtonSystemItem == nil, !done.isSystemItem { done.title = rightConfig.title done.accessibilityLabel = rightConfig.accessibilityLabel done.image = rightConfig.image @@ -424,20 +389,20 @@ UIView category methods to add IQToolbar on UIKeyboard. } else { done = IQBarButtonItem(title: rightConfig.title, style: .plain, target: target, action: rightConfig.action) } - + done.invocation = toolbar.doneBarButton.invocation done.accessibilityLabel = rightConfig.accessibilityLabel done.isEnabled = toolbar.doneBarButton.isEnabled done.tag = toolbar.doneBarButton.tag toolbar.doneBarButton = done } - + items.append(done) } - + // Adding button to toolBar. toolbar.items = items - + if let textInput = self as? UITextInput { switch textInput.keyboardAppearance { case .dark?: @@ -455,133 +420,127 @@ UIView category methods to add IQToolbar on UIKeyboard. } } } - - ///------------ - /// MARK: Right - ///------------ - @objc func addDoneOnKeyboardWithTarget(_ target: AnyObject?, action: Selector, shouldShowPlaceholder: Bool = false) { - + // MARK: Right + + func addDoneOnKeyboardWithTarget(_ target: AnyObject?, action: Selector, shouldShowPlaceholder: Bool = false) { + addDoneOnKeyboardWithTarget(target, action: action, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder: nil)) } - @objc func addDoneOnKeyboardWithTarget(_ target: AnyObject?, action: Selector, titleText: String?) { - + func addDoneOnKeyboardWithTarget(_ target: AnyObject?, action: Selector, titleText: String?) { + let rightConfiguration = IQBarButtonItemConfiguration(barButtonSystemItem: .done, action: action) - + addKeyboardToolbarWithTarget(target: target, titleText: titleText, rightBarButtonConfiguration: rightConfiguration) } - @objc func addRightButtonOnKeyboardWithImage(_ image: UIImage, target: AnyObject?, action: Selector, shouldShowPlaceholder: Bool = false) { - + func addRightButtonOnKeyboardWithImage(_ image: UIImage, target: AnyObject?, action: Selector, shouldShowPlaceholder: Bool = false) { + addRightButtonOnKeyboardWithImage(image, target: target, action: action, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder: nil)) } - - @objc func addRightButtonOnKeyboardWithImage(_ image: UIImage, target: AnyObject?, action: Selector, titleText: String?) { - + + func addRightButtonOnKeyboardWithImage(_ image: UIImage, target: AnyObject?, action: Selector, titleText: String?) { + let rightConfiguration = IQBarButtonItemConfiguration(image: image, action: action) - + addKeyboardToolbarWithTarget(target: target, titleText: titleText, rightBarButtonConfiguration: rightConfiguration) } - @objc func addRightButtonOnKeyboardWithText(_ text: String, target: AnyObject?, action: Selector, shouldShowPlaceholder: Bool = false) { - + func addRightButtonOnKeyboardWithText(_ text: String, target: AnyObject?, action: Selector, shouldShowPlaceholder: Bool = false) { + addRightButtonOnKeyboardWithText(text, target: target, action: action, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder: nil)) } - - @objc func addRightButtonOnKeyboardWithText(_ text: String, target: AnyObject?, action: Selector, titleText: String?) { - + + func addRightButtonOnKeyboardWithText(_ text: String, target: AnyObject?, action: Selector, titleText: String?) { + let rightConfiguration = IQBarButtonItemConfiguration(title: text, action: action) - + addKeyboardToolbarWithTarget(target: target, titleText: titleText, rightBarButtonConfiguration: rightConfiguration) } - ///----------------- - /// MARK: Right/Left - ///----------------- + // MARK: Right/Left + + func addCancelDoneOnKeyboardWithTarget(_ target: AnyObject?, cancelAction: Selector, doneAction: Selector, shouldShowPlaceholder: Bool = false) { - @objc func addCancelDoneOnKeyboardWithTarget(_ target: AnyObject?, cancelAction: Selector, doneAction: Selector, shouldShowPlaceholder: Bool = false) { - addCancelDoneOnKeyboardWithTarget(target, cancelAction: cancelAction, doneAction: doneAction, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder: nil)) } - @objc func addRightLeftOnKeyboardWithTarget(_ target: AnyObject?, leftButtonTitle: String, rightButtonTitle: String, leftButtonAction: Selector, rightButtonAction: Selector, shouldShowPlaceholder: Bool = false) { - + func addRightLeftOnKeyboardWithTarget(_ target: AnyObject?, leftButtonTitle: String, rightButtonTitle: String, leftButtonAction: Selector, rightButtonAction: Selector, shouldShowPlaceholder: Bool = false) { + addRightLeftOnKeyboardWithTarget(target, leftButtonTitle: leftButtonTitle, rightButtonTitle: rightButtonTitle, leftButtonAction: leftButtonAction, rightButtonAction: rightButtonAction, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder: nil)) } - - @objc func addRightLeftOnKeyboardWithTarget(_ target: AnyObject?, leftButtonImage: UIImage, rightButtonImage: UIImage, leftButtonAction: Selector, rightButtonAction: Selector, shouldShowPlaceholder: Bool = false) { - + + func addRightLeftOnKeyboardWithTarget(_ target: AnyObject?, leftButtonImage: UIImage, rightButtonImage: UIImage, leftButtonAction: Selector, rightButtonAction: Selector, shouldShowPlaceholder: Bool = false) { + addRightLeftOnKeyboardWithTarget(target, leftButtonImage: leftButtonImage, rightButtonImage: rightButtonImage, leftButtonAction: leftButtonAction, rightButtonAction: rightButtonAction, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder: nil)) } - - @objc func addCancelDoneOnKeyboardWithTarget(_ target: AnyObject?, cancelAction: Selector, doneAction: Selector, titleText: String?) { - + + func addCancelDoneOnKeyboardWithTarget(_ target: AnyObject?, cancelAction: Selector, doneAction: Selector, titleText: String?) { + let leftConfiguration = IQBarButtonItemConfiguration(barButtonSystemItem: .cancel, action: cancelAction) let rightConfiguration = IQBarButtonItemConfiguration(barButtonSystemItem: .done, action: doneAction) - + addKeyboardToolbarWithTarget(target: target, titleText: titleText, rightBarButtonConfiguration: rightConfiguration, previousBarButtonConfiguration: leftConfiguration) } - - @objc func addRightLeftOnKeyboardWithTarget(_ target: AnyObject?, leftButtonTitle: String, rightButtonTitle: String, leftButtonAction: Selector, rightButtonAction: Selector, titleText: String?) { - + + func addRightLeftOnKeyboardWithTarget(_ target: AnyObject?, leftButtonTitle: String, rightButtonTitle: String, leftButtonAction: Selector, rightButtonAction: Selector, titleText: String?) { + let leftConfiguration = IQBarButtonItemConfiguration(title: leftButtonTitle, action: leftButtonAction) let rightConfiguration = IQBarButtonItemConfiguration(title: rightButtonTitle, action: rightButtonAction) - + addKeyboardToolbarWithTarget(target: target, titleText: titleText, rightBarButtonConfiguration: rightConfiguration, previousBarButtonConfiguration: leftConfiguration) } - - @objc func addRightLeftOnKeyboardWithTarget(_ target: AnyObject?, leftButtonImage: UIImage, rightButtonImage: UIImage, leftButtonAction: Selector, rightButtonAction: Selector, titleText: String?) { - + + func addRightLeftOnKeyboardWithTarget(_ target: AnyObject?, leftButtonImage: UIImage, rightButtonImage: UIImage, leftButtonAction: Selector, rightButtonAction: Selector, titleText: String?) { + let leftConfiguration = IQBarButtonItemConfiguration(image: leftButtonImage, action: leftButtonAction) let rightConfiguration = IQBarButtonItemConfiguration(image: rightButtonImage, action: rightButtonAction) - + addKeyboardToolbarWithTarget(target: target, titleText: titleText, rightBarButtonConfiguration: rightConfiguration, previousBarButtonConfiguration: leftConfiguration) } - - ///-------------------------- - /// MARK: Previous/Next/Right - ///-------------------------- - @objc func addPreviousNextDoneOnKeyboardWithTarget (_ target: AnyObject?, previousAction: Selector, nextAction: Selector, doneAction: Selector, shouldShowPlaceholder: Bool = false) { + // MARK: Previous/Next/Right + + func addPreviousNextDoneOnKeyboardWithTarget (_ target: AnyObject?, previousAction: Selector, nextAction: Selector, doneAction: Selector, shouldShowPlaceholder: Bool = false) { addPreviousNextDoneOnKeyboardWithTarget(target, previousAction: previousAction, nextAction: nextAction, doneAction: doneAction, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder: nil)) } - @objc func addPreviousNextRightOnKeyboardWithTarget(_ target: AnyObject?, rightButtonImage: UIImage, previousAction: Selector, nextAction: Selector, rightButtonAction: Selector, shouldShowPlaceholder: Bool = false) { - + func addPreviousNextRightOnKeyboardWithTarget(_ target: AnyObject?, rightButtonImage: UIImage, previousAction: Selector, nextAction: Selector, rightButtonAction: Selector, shouldShowPlaceholder: Bool = false) { + addPreviousNextRightOnKeyboardWithTarget(target, rightButtonImage: rightButtonImage, previousAction: previousAction, nextAction: nextAction, rightButtonAction: rightButtonAction, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder: nil)) } - - @objc func addPreviousNextRightOnKeyboardWithTarget(_ target: AnyObject?, rightButtonTitle: String, previousAction: Selector, nextAction: Selector, rightButtonAction: Selector, shouldShowPlaceholder: Bool = false) { - + + func addPreviousNextRightOnKeyboardWithTarget(_ target: AnyObject?, rightButtonTitle: String, previousAction: Selector, nextAction: Selector, rightButtonAction: Selector, shouldShowPlaceholder: Bool = false) { + addPreviousNextRightOnKeyboardWithTarget(target, rightButtonTitle: rightButtonTitle, previousAction: previousAction, nextAction: nextAction, rightButtonAction: rightButtonAction, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder: nil)) } - - @objc func addPreviousNextDoneOnKeyboardWithTarget (_ target: AnyObject?, previousAction: Selector, nextAction: Selector, doneAction: Selector, titleText: String?) { - + + func addPreviousNextDoneOnKeyboardWithTarget (_ target: AnyObject?, previousAction: Selector, nextAction: Selector, doneAction: Selector, titleText: String?) { + let rightConfiguration = IQBarButtonItemConfiguration(barButtonSystemItem: .done, action: doneAction) let nextConfiguration = IQBarButtonItemConfiguration(image: UIImage.keyboardNextImage() ?? UIImage(), action: nextAction) let prevConfiguration = IQBarButtonItemConfiguration(image: UIImage.keyboardPreviousImage() ?? UIImage(), action: previousAction) addKeyboardToolbarWithTarget(target: target, titleText: titleText, rightBarButtonConfiguration: rightConfiguration, previousBarButtonConfiguration: prevConfiguration, nextBarButtonConfiguration: nextConfiguration) } - - @objc func addPreviousNextRightOnKeyboardWithTarget(_ target: AnyObject?, rightButtonImage: UIImage, previousAction: Selector, nextAction: Selector, rightButtonAction: Selector, titleText: String?) { - + + func addPreviousNextRightOnKeyboardWithTarget(_ target: AnyObject?, rightButtonImage: UIImage, previousAction: Selector, nextAction: Selector, rightButtonAction: Selector, titleText: String?) { + let rightConfiguration = IQBarButtonItemConfiguration(image: rightButtonImage, action: rightButtonAction) let nextConfiguration = IQBarButtonItemConfiguration(image: UIImage.keyboardNextImage() ?? UIImage(), action: nextAction) let prevConfiguration = IQBarButtonItemConfiguration(image: UIImage.keyboardPreviousImage() ?? UIImage(), action: previousAction) - + addKeyboardToolbarWithTarget(target: target, titleText: titleText, rightBarButtonConfiguration: rightConfiguration, previousBarButtonConfiguration: prevConfiguration, nextBarButtonConfiguration: nextConfiguration) } - - @objc func addPreviousNextRightOnKeyboardWithTarget(_ target: AnyObject?, rightButtonTitle: String, previousAction: Selector, nextAction: Selector, rightButtonAction: Selector, titleText: String?) { - + + func addPreviousNextRightOnKeyboardWithTarget(_ target: AnyObject?, rightButtonTitle: String, previousAction: Selector, nextAction: Selector, rightButtonAction: Selector, titleText: String?) { + let rightConfiguration = IQBarButtonItemConfiguration(title: rightButtonTitle, action: rightButtonAction) let nextConfiguration = IQBarButtonItemConfiguration(image: UIImage.keyboardNextImage() ?? UIImage(), action: nextAction) let prevConfiguration = IQBarButtonItemConfiguration(image: UIImage.keyboardPreviousImage() ?? UIImage(), action: previousAction) - + addKeyboardToolbarWithTarget(target: target, titleText: titleText, rightBarButtonConfiguration: rightConfiguration, previousBarButtonConfiguration: prevConfiguration, nextBarButtonConfiguration: nextConfiguration) } } diff --git a/iOS/MyStudies/Pods/Manifest.lock b/iOS/MyStudies/Pods/Manifest.lock index 93797d5422..68759b31ae 100644 --- a/iOS/MyStudies/Pods/Manifest.lock +++ b/iOS/MyStudies/Pods/Manifest.lock @@ -1,55 +1,102 @@ PODS: - ActionSheetPicker-3.0 (2.7.1) - - Alamofire (5.4.3) - - CryptoSwift (1.4.0) - - Firebase/CoreOnly (8.4.0): - - FirebaseCore (= 8.4.0) - - Firebase/Messaging (8.4.0): + - Alamofire (5.5.0) + - CryptoSwift (1.4.3) + - Firebase/Analytics (8.12.1): + - Firebase/Core + - Firebase/Core (8.12.1): - Firebase/CoreOnly - - FirebaseMessaging (~> 8.4.0) - - FirebaseCore (8.4.0): + - FirebaseAnalytics (~> 8.12.0) + - Firebase/CoreOnly (8.12.1): + - FirebaseCore (= 8.12.1) + - Firebase/Messaging (8.12.1): + - Firebase/CoreOnly + - FirebaseMessaging (~> 8.12.0) + - FirebaseAnalytics (8.12.0): + - FirebaseAnalytics/AdIdSupport (= 8.12.0) + - FirebaseCore (~> 8.0) + - FirebaseInstallations (~> 8.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.7) + - GoogleUtilities/MethodSwizzler (~> 7.7) + - GoogleUtilities/Network (~> 7.7) + - "GoogleUtilities/NSData+zlib (~> 7.7)" + - nanopb (~> 2.30908.0) + - FirebaseAnalytics/AdIdSupport (8.12.0): + - FirebaseCore (~> 8.0) + - FirebaseInstallations (~> 8.0) + - GoogleAppMeasurement (= 8.12.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.7) + - GoogleUtilities/MethodSwizzler (~> 7.7) + - GoogleUtilities/Network (~> 7.7) + - "GoogleUtilities/NSData+zlib (~> 7.7)" + - nanopb (~> 2.30908.0) + - FirebaseCore (8.12.1): - FirebaseCoreDiagnostics (~> 8.0) - - GoogleUtilities/Environment (~> 7.4) - - GoogleUtilities/Logger (~> 7.4) - - FirebaseCoreDiagnostics (8.4.0): - - GoogleDataTransport (~> 9.0) - - GoogleUtilities/Environment (~> 7.4) - - GoogleUtilities/Logger (~> 7.4) + - GoogleUtilities/Environment (~> 7.7) + - GoogleUtilities/Logger (~> 7.7) + - FirebaseCoreDiagnostics (8.12.0): + - GoogleDataTransport (~> 9.1) + - GoogleUtilities/Environment (~> 7.7) + - GoogleUtilities/Logger (~> 7.7) - nanopb (~> 2.30908.0) - - FirebaseInstallations (8.4.0): + - FirebaseInstallations (8.12.0): - FirebaseCore (~> 8.0) - - GoogleUtilities/Environment (~> 7.4) - - GoogleUtilities/UserDefaults (~> 7.4) + - GoogleUtilities/Environment (~> 7.7) + - GoogleUtilities/UserDefaults (~> 7.7) - PromisesObjC (< 3.0, >= 1.2) - - FirebaseMessaging (8.4.0): + - FirebaseMessaging (8.12.0): - FirebaseCore (~> 8.0) - FirebaseInstallations (~> 8.0) - - GoogleUtilities/AppDelegateSwizzler (~> 7.4) - - GoogleUtilities/Environment (~> 7.4) - - GoogleUtilities/Reachability (~> 7.4) - - GoogleUtilities/UserDefaults (~> 7.4) - - GoogleDataTransport (9.1.0): + - GoogleDataTransport (~> 9.1) + - GoogleUtilities/AppDelegateSwizzler (~> 7.7) + - GoogleUtilities/Environment (~> 7.7) + - GoogleUtilities/Reachability (~> 7.7) + - GoogleUtilities/UserDefaults (~> 7.7) + - nanopb (~> 2.30908.0) + - GoogleAppMeasurement (8.12.0): + - GoogleAppMeasurement/AdIdSupport (= 8.12.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.7) + - GoogleUtilities/MethodSwizzler (~> 7.7) + - GoogleUtilities/Network (~> 7.7) + - "GoogleUtilities/NSData+zlib (~> 7.7)" + - nanopb (~> 2.30908.0) + - GoogleAppMeasurement/AdIdSupport (8.12.0): + - GoogleAppMeasurement/WithoutAdIdSupport (= 8.12.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.7) + - GoogleUtilities/MethodSwizzler (~> 7.7) + - GoogleUtilities/Network (~> 7.7) + - "GoogleUtilities/NSData+zlib (~> 7.7)" + - nanopb (~> 2.30908.0) + - GoogleAppMeasurement/WithoutAdIdSupport (8.12.0): + - GoogleUtilities/AppDelegateSwizzler (~> 7.7) + - GoogleUtilities/MethodSwizzler (~> 7.7) + - GoogleUtilities/Network (~> 7.7) + - "GoogleUtilities/NSData+zlib (~> 7.7)" + - nanopb (~> 2.30908.0) + - GoogleDataTransport (9.1.2): - GoogleUtilities/Environment (~> 7.2) - nanopb (~> 2.30908.0) - PromisesObjC (< 3.0, >= 1.2) - - GoogleUtilities/AppDelegateSwizzler (7.5.0): + - GoogleUtilities/AppDelegateSwizzler (7.7.0): - GoogleUtilities/Environment - GoogleUtilities/Logger - GoogleUtilities/Network - - GoogleUtilities/Environment (7.5.0): + - GoogleUtilities/Environment (7.7.0): - PromisesObjC (< 3.0, >= 1.2) - - GoogleUtilities/Logger (7.5.0): + - GoogleUtilities/Logger (7.7.0): - GoogleUtilities/Environment - - GoogleUtilities/Network (7.5.0): + - GoogleUtilities/MethodSwizzler (7.7.0): + - GoogleUtilities/Logger + - GoogleUtilities/Network (7.7.0): - GoogleUtilities/Logger - "GoogleUtilities/NSData+zlib" - GoogleUtilities/Reachability - - "GoogleUtilities/NSData+zlib (7.5.0)" - - GoogleUtilities/Reachability (7.5.0): + - "GoogleUtilities/NSData+zlib (7.7.0)" + - GoogleUtilities/Reachability (7.7.0): - GoogleUtilities/Logger - - GoogleUtilities/UserDefaults (7.5.0): + - GoogleUtilities/UserDefaults (7.7.0): - GoogleUtilities/Logger - - IQKeyboardManagerSwift (6.5.6) + - IQKeyboardManagerSwift (6.5.9) - Mockingjay (3.0.0-alpha.1): - Mockingjay/Core (= 3.0.0-alpha.1) - Mockingjay/XCTest (= 3.0.0-alpha.1) @@ -69,17 +116,18 @@ PODS: - Realm/Headers (5.3.5) - RealmSwift (5.3.5): - Realm (= 5.3.5) - - SDWebImage (5.11.1): - - SDWebImage/Core (= 5.11.1) - - SDWebImage/Core (5.11.1) + - SDWebImage (5.12.3): + - SDWebImage/Core (= 5.12.3) + - SDWebImage/Core (5.12.3) - SlideMenuControllerSwift (5.0.0) - Toast-Swift (5.0.1) - - URITemplate (3.0.0) + - URITemplate (3.0.1) DEPENDENCIES: - ActionSheetPicker-3.0 - Alamofire - CryptoSwift + - Firebase/Analytics - Firebase/Messaging - IQKeyboardManagerSwift - Mockingjay (= 3.0.0-alpha.1) @@ -95,10 +143,12 @@ SPEC REPOS: - Alamofire - CryptoSwift - Firebase + - FirebaseAnalytics - FirebaseCore - FirebaseCoreDiagnostics - FirebaseInstallations - FirebaseMessaging + - GoogleAppMeasurement - GoogleDataTransport - GoogleUtilities - IQKeyboardManagerSwift @@ -124,27 +174,29 @@ CHECKOUT OPTIONS: SPEC CHECKSUMS: ActionSheetPicker-3.0: 36da254b97a09ff89679ecb8b8510bd3e5bdc773 - Alamofire: e447a2774a40c996748296fa2c55112fdbbc42f9 - CryptoSwift: 7cc902df1784de3b389a387756c7d710f197730c - Firebase: 54cdc8bc9c9b3de54f43dab86e62f5a76b47034f - FirebaseCore: 31f389c37ac1ea52454a53d3081f2d7019485a4a - FirebaseCoreDiagnostics: cad03be1904b975f845e632f2720c3337da27faf - FirebaseInstallations: 1585729afc787877763208c2088ed84221161f77 - FirebaseMessaging: 78025c56654f05c7ebd6f7f87f9d4b12c5231207 - GoogleDataTransport: 85fd18ff3019bb85d3f2c551d04c481dedf71fc9 - GoogleUtilities: eea970f4a389963963bffe8d8fabe43540678b9c - IQKeyboardManagerSwift: c7df9d2deb356c04522f5c4b7b6e4ce4d8ed94fe + Alamofire: 1c4fb5369c3fe93d2857c780d8bbe09f06f97e7c + CryptoSwift: a0799ee936271bd2253a006f1e4523df21845000 + Firebase: 580d09e8edafc3073ebf09c03fd42e4d80d35fe9 + FirebaseAnalytics: bd10d7706ba8d6e01ea2816f8fe9e9b881cb0918 + FirebaseCore: 8138de860a90ca7eec5e324da5788fb0ebf1d93c + FirebaseCoreDiagnostics: 3b40dfadef5b90433a60ae01f01e90fe87aa76aa + FirebaseInstallations: 25764cf322e77f99449395870a65b2bef88e1545 + FirebaseMessaging: 23db8bf05585e929ada8af0f0968933c25252808 + GoogleAppMeasurement: ae033c3aad67e68294369373056b4d74cc8ae0d6 + GoogleDataTransport: 629c20a4d363167143f30ea78320d5a7eb8bd940 + GoogleUtilities: e0913149f6b0625b553d70dae12b49fc62914fd1 + IQKeyboardManagerSwift: 6e839c575c4aa1078d58a596e41244e77abe918f Mockingjay: 0f7c5aa49c7f1b95621cee3c79b557141f5a225c nanopb: a0ba3315591a9ae0a16a309ee504766e90db0c96 PromisesObjC: 68159ce6952d93e17b2dfe273b8c40907db5ba58 ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825 Realm: 2b52fcc86fc0ed3d75a56ac0eb1e73c4f1a60e16 RealmSwift: a6ea2ea561039fc3833c08dec81371a9a3bb5ca6 - SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d + SDWebImage: 53179a2dba77246efa8a9b85f5c5b21f8f43e38f SlideMenuControllerSwift: d740ea24105a658fe6a8c256f2bf5832fee7c047 Toast-Swift: 9b6a70f28b3bf0b96c40d46c0c4b9d6639846711 - URITemplate: 58e0d47f967006c5d59888af5356c4a8ed3b197d + URITemplate: 5f5a79f3e384884102c4e6b3325d159c20a8035a -PODFILE CHECKSUM: 873c948a2141ebc68332c6f5cb665f77c7c3e0e9 +PODFILE CHECKSUM: a01d0006ab9fc73a2ae03c9562484d7053653a13 -COCOAPODS: 1.10.1 +COCOAPODS: 1.11.2 diff --git a/iOS/MyStudies/Pods/Mockingjay/Sources/Mockingjay/XCTest.swift b/iOS/MyStudies/Pods/Mockingjay/Sources/Mockingjay/XCTest.swift index 8e2905a252..e3e83cfd73 100644 --- a/iOS/MyStudies/Pods/Mockingjay/Sources/Mockingjay/XCTest.swift +++ b/iOS/MyStudies/Pods/Mockingjay/Sources/Mockingjay/XCTest.swift @@ -10,7 +10,7 @@ import ObjectiveC import XCTest let swizzleTearDown: Void = { - let tearDown = class_getInstanceMethod(XCTest.self, #selector(XCTest.tearDown)) + let tearDown = class_getInstanceMethod(XCTest.self, #selector(XCTest.tearDownCleanUp)) let mockingjayTearDown = class_getInstanceMethod(XCTest.self, #selector(XCTest.mockingjayTearDown)) method_exchangeImplementations(tearDown!, mockingjayTearDown!) }() @@ -60,4 +60,9 @@ extension XCTest { MockingjayProtocol.removeAllStubs() } } + + @objc func tearDownCleanUp() { + // Your code goes here + self.tearDown() + } } diff --git a/iOS/MyStudies/Pods/Pods.xcodeproj/project.pbxproj b/iOS/MyStudies/Pods/Pods.xcodeproj/project.pbxproj index e050cfb13b..ad3fe34a0f 100644 --- a/iOS/MyStudies/Pods/Pods.xcodeproj/project.pbxproj +++ b/iOS/MyStudies/Pods/Pods.xcodeproj/project.pbxproj @@ -9,1351 +9,1460 @@ /* Begin PBXAggregateTarget section */ 072CEA044D2EF26F03496D5996BBF59F /* Firebase */ = { isa = PBXAggregateTarget; - buildConfigurationList = DE178E064E7F877C2A4D1D0D35F81F16 /* Build configuration list for PBXAggregateTarget "Firebase" */; + buildConfigurationList = DC4E51B97E1FFE8D42DD228E03F34A0E /* Build configuration list for PBXAggregateTarget "Firebase" */; buildPhases = ( ); dependencies = ( - 67A3BD5A3007B010451129DE03C7DEEF /* PBXTargetDependency */, - A2F242171C41DBA9123601695980BA05 /* PBXTargetDependency */, + B54B206C2F5AB5E0E249A1C5C87B81B3 /* PBXTargetDependency */, + 931843B4B93C30CEE0D56EC070F4518B /* PBXTargetDependency */, + 35DA40211E5E7F3C5554BFED6877E45E /* PBXTargetDependency */, ); name = Firebase; }; + B53D977A951AFC38B21751B706C1DF83 /* GoogleAppMeasurement */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 150EB8172255EB7AFF1D82428A915764 /* Build configuration list for PBXAggregateTarget "GoogleAppMeasurement" */; + buildPhases = ( + F5FF1A0F1CF6C4A999D48648E1CAA6FD /* [CP] Copy XCFrameworks */, + ); + dependencies = ( + F0324CC7ED48051EB29CC8D340048624 /* PBXTargetDependency */, + 0D614E1D1D00EE039DBD976B3FA97FA3 /* PBXTargetDependency */, + ); + name = GoogleAppMeasurement; + }; + C49E7A4D59E5C8BE8DE9FB1EFB150185 /* FirebaseAnalytics */ = { + isa = PBXAggregateTarget; + buildConfigurationList = D8CCD9A718D390435BD3AC8A5F22FD8A /* Build configuration list for PBXAggregateTarget "FirebaseAnalytics" */; + buildPhases = ( + 46B60BC8332761D7FC97574F44E15072 /* [CP] Copy XCFrameworks */, + ); + dependencies = ( + AD35104240D44871C69B39560E7B77C4 /* PBXTargetDependency */, + F46691F8474EFE9EF99AC4943B66F0E2 /* PBXTargetDependency */, + D310ECAC5E9C49F869633AEB16509D7E /* PBXTargetDependency */, + C22896C8C54E9D03E76B43DFE1F83A68 /* PBXTargetDependency */, + DAD718C3D841FFB12919FBC092508195 /* PBXTargetDependency */, + ); + name = FirebaseAnalytics; + }; /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 013BAC24F7AC722E59517CB110A9E685 /* HTTPMethod.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30E2B292ED156DC221F0CDE53D2CBA2B /* HTTPMethod.swift */; }; - 01B9052F948E7258215220AEC5A03DA1 /* GULLoggerLevel.h in Headers */ = {isa = PBXBuildFile; fileRef = EA80FDBE78E82B959D7B7B8181643434 /* GULLoggerLevel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 01E6FF9EF68F8F4DF9893A66DFD0FF00 /* ActionSheetCustomPicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 25DCFDDA5CA5EC617535E9A01B61348F /* ActionSheetCustomPicker.m */; }; - 01ED7401731A6D64E2EBDB0C9BA10D78 /* ActionSheetMultipleStringPicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C280205CE3A83276559BB5EB064D765 /* ActionSheetMultipleStringPicker.m */; }; - 01EE178D8EE78444952B3AEBA17848E1 /* FIRCoreDiagnosticsConnector.h in Headers */ = {isa = PBXBuildFile; fileRef = 3420442C8E639DC4A7E3B39DA0EC211E /* FIRCoreDiagnosticsConnector.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 02292FC1E8CF700F59D154DF2C841F75 /* SDAssociatedObject.m in Sources */ = {isa = PBXBuildFile; fileRef = ADB4CFD15093B3AD75723D8771CB7FFE /* SDAssociatedObject.m */; }; - 0246F480B6B64E28D5D06CCAEE8CB01A /* String+FoundationExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C6C389801C071C67181351FBD1B6E3D /* String+FoundationExtension.swift */; }; - 02630CF9E3967768C1A8EB31DBE9BB72 /* SDImageCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 67C1C2DD15E3F3ED592A6E43CBCF4BD5 /* SDImageCoder.m */; }; - 0271DDCC2136CC81C3B536352236AA74 /* results.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FD9FDAF2776A9225484C5B401514204A /* results.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 028CC7693646B33C5A1365E2E3E7084C /* FIRMessagingCheckinStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EBA825D4A1141948CDCC87E6B329704 /* FIRMessagingCheckinStore.m */; }; - 030A530C18D9BD1B716A3FA0AD7CC36F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96CE92E5425AE24E39E7772E791A1F9F /* Foundation.framework */; }; - 03307BCBA6557A848EB43AC538499356 /* pb_decode.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DFC44C94BC39670C0A4DAB333B3C9DB /* pb_decode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 037125AD9957D1DC984920699FBAE5E4 /* FirebaseCoreDiagnostics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB11C2119CDFFAD882507DE400C57E14 /* FirebaseCoreDiagnostics.framework */; }; - 03A32E1DF6506856A28CE85B83008DDA /* FBLPromise+Testing.m in Sources */ = {isa = PBXBuildFile; fileRef = A888E966597064B522ED26E1006DB2D2 /* FBLPromise+Testing.m */; }; - 04762E2F6696F6B57AC647288F800D2D /* SDWebImageCacheKeyFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 28D350610060943E1A96A0EB1032685B /* SDWebImageCacheKeyFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 04FA5D74D23CF3377C224605BF6A398B /* FirebaseInstallations-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C02635857EB5938F6B9153EA3F32DAA3 /* FirebaseInstallations-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 052652DFA619280C4430246B830599A8 /* work_queue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E375E189BF401CF23B0D83D10AC54EBB /* work_queue.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 064E3B3A6A411886A3648C2ADBE64F9B /* SDImageAPNGCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DACF37A31E17F90F1C66F2746050CBC /* SDImageAPNGCoder.m */; }; - 067A6E971C7D5446BDCD9A10C06132F8 /* Collection+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C200381FD7CABEC0F476BC0C00E3677 /* Collection+Extension.swift */; }; - 070F8166036AAD3F043CDF03BC200742 /* GDTCORTransport_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C91D43FD5AEBC0D1AD1FFBD0128B8DD /* GDTCORTransport_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 074F68B94FD8D42998CAE7979978E75B /* Realm.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FC94920448D483EBCEEFD5A74D40405 /* Realm.framework */; }; - 07D9B35CAE77FEA7A433025B33420136 /* FIRInstallationsAuthTokenResultInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FEC326411BC91F4F2B42B7A4666569E /* FIRInstallationsAuthTokenResultInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 07E6EA5D5054822A93A14BEFBA02174D /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 28F1C11AA3D4A6C9C4276D076B225AE8 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 07FFE8A9A145C12327F7D9605B057609 /* object.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 71597C20842E69E42CB41DDDA2580861 /* object.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 08414C28164CC487E519E30C48342B08 /* SDWebImageCacheSerializer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E46FBC12764A557BBF103DF0786B589 /* SDWebImageCacheSerializer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 08B0E83A7A3DB4DF2B556892AEEA9379 /* BlockModeOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD539CD04D5E57F34F39CDBD4775DBCD /* BlockModeOptions.swift */; }; - 092E352F77C5306E82961E8844CCB231 /* SDImageIOAnimatedCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 13A0D66F3E67C3A685C5BAAEAAF1736E /* SDImageIOAnimatedCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 096C42228A54BA98986DC889864BEE14 /* GULKeychainStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 55FCDE25725ED190E78EA751F46C2B39 /* GULKeychainStorage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 09944176280C980EB49784DBCA380462 /* ReachabilitySwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B3E6953895B94F7B91A9827DBA7B77FB /* ReachabilitySwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 09B4201E76C9673175C474F5A0274B81 /* FIRCoreDiagnosticsConnector.h in Headers */ = {isa = PBXBuildFile; fileRef = DE03DEF576E7122FCD234BDC0D66B806 /* FIRCoreDiagnosticsConnector.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 0A1849775CF90D514963187D3A771CF8 /* Combine.swift in Sources */ = {isa = PBXBuildFile; fileRef = E20A0DBB1253EA7D9C737FA70AAEAF75 /* Combine.swift */; }; - 0A900DF17E3B64F08AF673E9A0DDD697 /* OperationQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 593E670A8A84C0577E491FD16DF8F4CD /* OperationQueue+Alamofire.swift */; }; - 0A97EBECA9EC19BA150C343AAE92ADE1 /* RLMMigration.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = AF0F699C939997A311DBF5CAC1FB2BE3 /* RLMMigration.h */; }; - 0B0F8B7213F6508A6A054E2836C336F5 /* FIRDiagnosticsData.m in Sources */ = {isa = PBXBuildFile; fileRef = B5A5163FCB4FDD453B34F6E0DEC4F644 /* FIRDiagnosticsData.m */; }; - 0B9FE2E8030B65EB2FFB74C8D469EEB1 /* GDTCORStorageEventSelector.m in Sources */ = {isa = PBXBuildFile; fileRef = 44A787E2B38B6DD9272ECEB4FA30A7B0 /* GDTCORStorageEventSelector.m */; }; - 0BC52097426786A1611A11744FF823B4 /* SDWebImageCacheSerializer.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DBED427ED5F67FFC2FD84C7FE003EDB /* SDWebImageCacheSerializer.m */; }; - 0BF88B0D1028AA6595F4C29F4BC977A3 /* GoogleUtilities-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E3897F7232EC713A7B9F337E71E3CD3 /* GoogleUtilities-dummy.m */; }; - 0C9AF2D4C05CA86E42673E4880BC1EE1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96CE92E5425AE24E39E7772E791A1F9F /* Foundation.framework */; }; - 0C9DCF940239CA5E5EC4450A69697F0F /* RLMSchema.h in Headers */ = {isa = PBXBuildFile; fileRef = CEC0D8039B3C2C47ADAA62D10C906653 /* RLMSchema.h */; }; - 0D7B6A49FB9AB21F7A38D5749D4AFDC0 /* FBLPromise+Async.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B87A45E45815350DF624366426FBC52 /* FBLPromise+Async.m */; }; - 0DE72963700100361EA2789EA929EFFD /* SDDiskCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 61984E71B3C8DE01427EF4E43411EFE8 /* SDDiskCache.m */; }; - 0E8A8CEAB4D4F23CAC31063F4CA4B2E2 /* FIRMessagingSyncMessageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 039B16C1C293A2DD65CC5798825A479B /* FIRMessagingSyncMessageManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0ED4B4B33722E253444C3F69186286D8 /* FIRInteropParameterNames.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A13357AB64AA63E60E55758E3789FFD /* FIRInteropParameterNames.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0ED62F8DF63B1ED1D3FF30A64FB071C8 /* NSDictionary+FIRMessaging.h in Headers */ = {isa = PBXBuildFile; fileRef = EE496E95D1ED63E863567F9940177647 /* NSDictionary+FIRMessaging.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0F050134333B919E2867741D2128159B /* Object.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB5A313428803E7EC91039A3F03CCAB2 /* Object.swift */; }; - 0F6929A72D9693406E884B2FC75438DA /* RLMCollection_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C0FCB85B5691EBB5E27760C8F1A8C524 /* RLMCollection_Private.h */; }; - 0F69B7376CA8B0F98593472DCC9FF559 /* FIRInstallationsAuthTokenResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E5A2302A76BC97D7385934D695A5324 /* FIRInstallationsAuthTokenResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0F7162E35E217621D810B3B580D6692B /* FIRMessagingContextManagerService.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EF116B0168428A5BC33403A25DA22B5 /* FIRMessagingContextManagerService.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0FCAA6B71411E1EDFF3B72D72548661E /* CompactMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2BC55250AA90DF7564DACAFFBF34618 /* CompactMap.swift */; }; - 0FE4EBA08A8135658EE3FEE7198FF686 /* SDWebImageDownloaderConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 97C210490C902F002D72B2CCEABA2775 /* SDWebImageDownloaderConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 102F4487BC4ADC3C2B56A0470E0A9468 /* IQKeyboardManagerConstantsInternal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 072E25ED4BB736636C50A394C9F2FD5B /* IQKeyboardManagerConstantsInternal.swift */; }; - 10B5A5FF74C577DB66C759DE898D39D2 /* SDImageCodersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FBAE06143DB0136DDF58B9AA1D7313F /* SDImageCodersManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 10D2DBE24817C4FC3A01488A70B496F2 /* GDTCORDirectorySizeTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 428318B3F24614FD364D1537B3E26350 /* GDTCORDirectorySizeTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 114C2D0BB7EDBEAAA2433CCC8DE5526C /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 89B8D2823761EE3DB00B11BDD56D0074 /* UIButton+WebCache.m */; }; - 11FCB976B1ED05F140F02EC566A34C5C /* FIRCoreDiagnostics.h in Headers */ = {isa = PBXBuildFile; fileRef = B874BE11309727AA21DC626A5F951215 /* FIRCoreDiagnostics.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1203DE3A7A3E54730EDF39565687BAB4 /* StreamDecryptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5991724F8BDE5DF993E8099E99EA827D /* StreamDecryptor.swift */; }; - 1207F91A5851F6F88B9AF40B941BD833 /* FIRHeartbeatInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 2804786570BE3EE0349D1A823763B8DB /* FIRHeartbeatInfo.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 1208E81DA8B532D0646D627B50290EB6 /* AFError.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEF085D550281E8F9D45B3750525813F /* AFError.swift */; }; - 122DB9DE049753930486777CF3531DCE /* GoogleUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 660A5577CA9AAF26647707D912A886CC /* GoogleUtilities.framework */; }; - 12A64F91F064FFDF23286C886ABAF501 /* FBLPromise+Always.m in Sources */ = {isa = PBXBuildFile; fileRef = 9929F6E4584CF052BD347801DD3B4642 /* FBLPromise+Always.m */; }; - 140F868AFA7250D824D7518DF705C0F7 /* RLMObjectBase_Dynamic.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 7A8F3246E32B49855933788771B1CF10 /* RLMObjectBase_Dynamic.h */; }; - 1418333507D6C169269E41FC941A0A89 /* FBLPromise+Retry.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 2685CB813C038E116759E794136F7D7F /* FBLPromise+Retry.h */; }; - 149976169291794F8016861F4DE95B00 /* thread_safe_reference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E008E02B364610E665AEFE4A2271A14D /* thread_safe_reference.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 14DF9C62C4B8C92FDEB06B3A9A3F81C0 /* FIRMessagingCheckinStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C61B4CDC53A86188A9DE1485A8DAEBC /* FIRMessagingCheckinStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 14F561BF016628D16C6D89E8CE83E4C8 /* ActionSheetPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = AD77789BDC2D0067E91B041D158F6D4C /* ActionSheetPicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 158ED66F79A1A1B16072418E8B66E628 /* SDWebImageIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 05306FAF06C74D1F9998EFD834DF4409 /* SDWebImageIndicator.m */; }; - 15A7C6209F5781B6A1E5ABC152CBDAC9 /* FIRInstallations.m in Sources */ = {isa = PBXBuildFile; fileRef = 890947B98407FAF2248B81F88C9AD1F1 /* FIRInstallations.m */; }; - 15EE6FA6688DB3A6157997A8D15F2EE3 /* FIRBundleUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = BA4EDEEE041A69815E9E58C00528EA4E /* FIRBundleUtil.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 15F0D404DF94F1546A17142E40A8F3B1 /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F2A8344AC870E4E3DC8C5485DCE9324 /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 15F4114A9A3AE069EAF65B3606EBE525 /* BlockMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FA01A3D389B8E45A5925456F5760E2B /* BlockMode.swift */; }; - 164A62C568AF3674CCA397AD243906C6 /* RLMSyncPermission.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 2F294EDF1531907DE680A2507F79C9FF /* RLMSyncPermission.h */; }; - 16742EA83FB56B70EE936B33B776337F /* RLMConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 5148886951BEAF5EB22A32613ED23788 /* RLMConstants.h */; }; - 16778F9B4D2A04C819CC3CE3ABDA63FF /* GULReachabilityChecker.h in Headers */ = {isa = PBXBuildFile; fileRef = BFC5A78D5AAFC9E274644C98F1BE51C3 /* GULReachabilityChecker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 176543C8FCC06E8BAD9CFB2BAD51D065 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 06AFDF03F9C1D8B9F4CF9B8D0016C73C /* SystemConfiguration.framework */; }; - 1780733974379544222E324AE6C5E52B /* FBLPromise+Await.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 541DCEE9AC038D6D17A45DE00975B341 /* FBLPromise+Await.h */; }; - 18027381074D1860D216AA666AB38C4B /* FBLPromise+Recover.m in Sources */ = {isa = PBXBuildFile; fileRef = E16EF5514F69435C770664EF8AFE8954 /* FBLPromise+Recover.m */; }; - 18170681E5A5403B5DBB92099BBB3C7E /* FirebaseCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E2B5098199A64E5AF67AA2D92BD03BFE /* FirebaseCore-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1856927FAC2ED3C399E67DA568EC7A30 /* FIRConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 82B264AAB291711292025352DE361821 /* FIRConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 188017F725B43970E7ACE6AB8EF78536 /* RLMProperty_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CA0655A438232106484BF42EB014143 /* RLMProperty_Private.h */; }; - 18D1D252617EE8076F60E5F13462A79F /* SDAnimatedImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C71360D51309A6708D0136DA45D4A9A /* SDAnimatedImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 193937B8765E069B6840E374D80EEF7E /* RLMSchema_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B8EEE29B6D21F196FF2BC12DD5DD9D57 /* RLMSchema_Private.h */; }; - 19D605A3233499828FB6B790869F3E9C /* NetworkReachabilityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1C9D20BC0685850FD85B8F43A978FD3 /* NetworkReachabilityManager.swift */; }; - 1A03F5BEE43180440461309B173C704E /* GDTCCTUploader.m in Sources */ = {isa = PBXBuildFile; fileRef = 48CA79CE972CA130F3B98C5969E021BD /* GDTCCTUploader.m */; }; - 1A63B63F36883B0C1CD7D6A08DF256A7 /* RLMAccessor.h in Headers */ = {isa = PBXBuildFile; fileRef = F247FB6072E07EF70725C239EAA60351 /* RLMAccessor.h */; }; - 1B193F2660ED0767A5F0CB98562143BB /* Array+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0314417B4C5CD3C92C6DD04A12CE43D /* Array+Foundation.swift */; }; - 1B2A707C08431E6C9DD4AE516F9A9068 /* FIRDependency.m in Sources */ = {isa = PBXBuildFile; fileRef = 6AAA9CC30F33C99575CEC0CFCACEDAF0 /* FIRDependency.m */; }; - 1B696AEFE3B558E33F816DFF8A263997 /* FBLPromise+All.h in Headers */ = {isa = PBXBuildFile; fileRef = 25FCF1FC11F99F41CC8FE1C400879559 /* FBLPromise+All.h */; }; - 1B6A75EE2A4F79DA2D6D5418A7A44F4A /* Aliases.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9B65D8C82364E71DD4C6C3AA6E75A42 /* Aliases.swift */; }; - 1B6CF5D1D8FCF530E4889E7A24D3D359 /* SDImageAWebPCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 5646ED6F5BCD711B379A9F694D0A4B5A /* SDImageAWebPCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1B9049F7AB294D6C1063832569E8A832 /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90F19DCB0ACA9EC4BCCEC8C7BB005FAC /* Error.swift */; }; - 1BAB36C6DF94C2B99C091CE10DF6D234 /* Cryptors.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0757F725C090A38471D1EFAA15662A2 /* Cryptors.swift */; }; - 1BC79350CE6CA31DF3D3ADD1F1835B4C /* GDTCOREventDataObject.h in Headers */ = {isa = PBXBuildFile; fileRef = A6E5710B018893B0D662AE53096C1EBE /* GDTCOREventDataObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1BC9CE28BC5F33C5813D2125D4953666 /* RLMObject.mm in Sources */ = {isa = PBXBuildFile; fileRef = D1E893D7791A8935FCFB1811A626A282 /* RLMObject.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 1BE75988F4A2AF509C218BD1A68A7254 /* RLMObject_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 55DFDE0D991180170E72C2CE72A8C63A /* RLMObject_Private.h */; }; - 1C0B434DD60DF6ADC5E9B8BE1B8522AE /* RLMObject.h in Headers */ = {isa = PBXBuildFile; fileRef = C4A819A148B06A23D2615A4002E7B793 /* RLMObject.h */; }; - 1C18E0CA018BE89ADB75AA36FA32EB3A /* FBLPromise+Recover.h in Headers */ = {isa = PBXBuildFile; fileRef = BD0C7C30717E45F952F165E3BA7A9B7E /* FBLPromise+Recover.h */; }; - 1C2DA6A472F40360B30EF4BBF3B083FA /* FIRMessagingKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = A5E571043247FB18FD5E5D658C927971 /* FIRMessagingKeychain.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1C7E4B9154B4CCD4E2E20A7873C8ABD6 /* Mockingjay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35CADD0DB9B3DF2FC6ADB24779449323 /* Mockingjay.swift */; }; - 1C7FD60FFAD67D4FA202225FB6303128 /* SDWebImageDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = B2E66B8856C66C55EC07AE0B0C619A93 /* SDWebImageDefine.m */; }; - 1CBEEC98DEB7338620F68B0E705D132D /* NSImage+Compatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = B2F9CBECAC5227C8AFD9F50489EB9FA0 /* NSImage+Compatibility.m */; }; - 1CBF3B28CB5DFAE986E867C1062837F8 /* NSDictionary+FIRMessaging.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B33242AB54F7FF88A556749925B47B /* NSDictionary+FIRMessaging.m */; }; - 1CF6DBCE2AC02FC280637F3C00E1D0D8 /* FIRInstallationsErrorUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = B9984B319B861B12714D3B5ECAFE9258 /* FIRInstallationsErrorUtil.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1DA6DE69B7F59943AF3B60BA9ACFDEFA /* UIImage+MemoryCacheCost.m in Sources */ = {isa = PBXBuildFile; fileRef = 401DED0A7A6F531F70739B837278EC78 /* UIImage+MemoryCacheCost.m */; }; - 1E49C8AE41ADDC46838C347A22A18D90 /* PKCS5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41557D2BDE7B328CD32E826C75C34482 /* PKCS5.swift */; }; - 1E4BAB40C757F0ABC30ECC7863C007AE /* PromisesObjC-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A9A3526CC4B3753BB8BDDD76F69886B /* PromisesObjC-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1E680017B0D5CDF056F59880F56051A9 /* FIRInstallationsItem.h in Headers */ = {isa = PBXBuildFile; fileRef = F191F57D7F4EDC91BF6BD986F5AEA994 /* FIRInstallationsItem.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1E7D73EA3F470F1BB8C23D7E579FAE24 /* UInt128.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D4364CCF9E6A683282E4501A476CFE4 /* UInt128.swift */; }; - 1EAB98B2AD46328352995FCB038CD389 /* FIRCoreDiagnosticsConnector.m in Sources */ = {isa = PBXBuildFile; fileRef = F862415FEBDD3C262FDBB2A7ACEA0884 /* FIRCoreDiagnosticsConnector.m */; }; - 1ED64B745AF6E5FC003D7B1137ED2370 /* Mockingjay-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B1D21F0F5D94A4F560149D736A160D5 /* Mockingjay-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F09D0ECCE1AD4082D7CFB3154AD18CF /* FIRMessagingRmqManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 66A9764BDD7FF9FD8DFCC707C89DBDBB /* FIRMessagingRmqManager.m */; }; - 1F55097C4490DCFB8BA4B3D8D284ED33 /* SDAnimatedImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 76F3E7235301AEE7AA9B87E64DD1FB32 /* SDAnimatedImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F5A96B3EF393FE66CAA63900C7B0D56 /* SDDiskCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 680890F3701AEE80516DAC78514F0B29 /* SDDiskCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F7AFE861609115DF7D756769A553F87 /* SDAnimatedImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CA7613D1D20994E6A4F32EB8BB65BCA /* SDAnimatedImageView+WebCache.m */; }; - 2002E99E7B93181C4AB40731DCD54665 /* FBLPromise+Wrap.m in Sources */ = {isa = PBXBuildFile; fileRef = 887294FE52E59B5624DE24630AE49ACE /* FBLPromise+Wrap.m */; }; - 2024EE5E265681137A9FEBC630E6E0F1 /* Toast-Swift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 15796A8F6EE2C795704B1242ADE8D4D7 /* Toast-Swift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 206FB1FB8B23E4CCB0ED8C857B9412E5 /* placeholder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7914A904A8FB3E217B9E236A9BC0A928 /* placeholder.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 209503149D04A5683F58C51050CE8F83 /* FIRAppInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 85240B6EDDB1ABE5C7E06F2908E5D570 /* FIRAppInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 212EDC48B68107BEA9247F3464CE696E /* StringEncoding+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F511A39ADC1E231659A49E1436A6C0A /* StringEncoding+Alamofire.swift */; }; - 218C14EAE5AA31C30314AE0289B732A0 /* Protected.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A8B1E2C47B8DCFA7C15A6BC6FFF8E79 /* Protected.swift */; }; - 2222F144D4CF4425188A8D26B1176682 /* RLMRealm+Sync.h in Headers */ = {isa = PBXBuildFile; fileRef = 155B23A4872917ACBE28F725DFF6F659 /* RLMRealm+Sync.h */; }; - 2233F7DCFC0FD774331AF81555FF2DD7 /* RLMQueryUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = BA1C9450BC31E8BACA1A6AF6A13EC637 /* RLMQueryUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 22B2B6BA32529D764D3A2FE6D3720065 /* RLMRealmConfiguration.mm in Sources */ = {isa = PBXBuildFile; fileRef = EF46A00F83F3A0CFDCF78A6B466FDA6B /* RLMRealmConfiguration.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 22F267075EB742245798F0669800F8CA /* URITemplate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E3775A639F986F973A846594AF1C88A0 /* URITemplate.framework */; }; - 2358B57B83BE526AED64799C6892B2CE /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8ADD59B7A4F54D4DDA367047E513B60A /* QuartzCore.framework */; }; - 237543F114E97EE0A44F2A98D05CFB01 /* GULHeartbeatDateStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = ABB684A17E009AF9AE6F61C7CE779D7F /* GULHeartbeatDateStorage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 23CBF292B65AD0E76386CB8CD81EDDDD /* GCM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63080FFA2784DA24057BB18A90D0F3DA /* GCM.swift */; }; - 23E7FB7B8CDF4F211224E3C8D071A882 /* FIRMessagingLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A426FA0C178F5D5B7385132447399A7 /* FIRMessagingLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 24995E39505872AA8B99364C1E8BA2C6 /* FIRMessagingTokenManager.h in Headers */ = {isa = PBXBuildFile; fileRef = BB07687790364ABC3F94C7179536982A /* FIRMessagingTokenManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 24A57C6C160EF3C9CDB0AD2E5EC4978B /* FIRFirebaseUserAgent.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F59E45EF8F2EEDC090D425C40D0176 /* FIRFirebaseUserAgent.m */; }; - 2508CCD26AB0E21EBC9BF6B9A18252EB /* FIRLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = F8CBAB72694B30CF3F10C7908BDD1A6A /* FIRLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 251266E7B772DC468474BE9752DED7D9 /* Pods-MyStudies-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 88D9B81D709F1B6DC318C3DF8E784B2C /* Pods-MyStudies-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2585E42E28CF3FCD2D0FA3F953E67E4E /* FBLPromise+Delay.m in Sources */ = {isa = PBXBuildFile; fileRef = 524035FA6C26E04B57BACCD9925A532B /* FBLPromise+Delay.m */; }; - 259D6FC80BCFE785471F743B1F533970 /* IQNSArray+Sort.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FB4806E23BA4462C4C689399A4C0EEB /* IQNSArray+Sort.swift */; }; - 2608CD96F391AF97DF763B7F08CFBA53 /* FBLPromise+Reduce.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DCB5DB463BB3BB168FA088925303516 /* FBLPromise+Reduce.m */; }; - 26534C75DC62EA310B5910C6FCC9AE20 /* RLMSyncUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AA413F046AFBAEA8AB95CE6974E2545 /* RLMSyncUtil.h */; }; - 265FC61DB2A1ED7058F2CBCDE6126843 /* GDTCORUploadBatch.m in Sources */ = {isa = PBXBuildFile; fileRef = 314DF40A6DB850AB51424A6F2B1D779C /* GDTCORUploadBatch.m */; }; - 26AFA2DD186558E28CCAC2EF248B4E56 /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = F2DC808541F9BCBC45519EFAD1AD5868 /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 26D9C9FFCDC18618DC92736439FAD58A /* SDImageCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 50AFE4F61A458B99F602B8C0B16FD50F /* SDImageCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 273365A72D0B074B13467EEB9071EA83 /* Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B6E53A68A8A0D378E546FC8AB43BB6E /* Optional.swift */; }; - 273ACF8CDCA537DB5769A55F35195A03 /* SDImageCodersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = AFBCA17E1FDBAA063E69EF9BC644066F /* SDImageCodersManager.m */; }; - 274968CAE2ADC9D4A4FEBCF184148C6D /* SDImageTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = E845E378BFA5EDB33413995A63775D1E /* SDImageTransformer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 278202A224E009E342B9E6E6C86C6C20 /* FIRMessagingAuthKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = F8478F01670C32835F8395D701D4775D /* FIRMessagingAuthKeychain.m */; }; - 27E59A11A2743B0595CDE3A08675EAE1 /* DispatchQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E92F316CA8D3C689A4B512AC5541A4C /* DispatchQueue+Alamofire.swift */; }; - 28700A73DBE6787AF05954F379569A1C /* FIRCoreDiagnosticsInterop.h in Headers */ = {isa = PBXBuildFile; fileRef = 581706FDA11032852763BF85646ED803 /* FIRCoreDiagnosticsInterop.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 288694995551D97302540ABE26C5CAD2 /* SwiftVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDCBAA1DFB140B197E960E4FF9392EA7 /* SwiftVersion.swift */; }; - 290B0F2B5277C5931183842940AB4734 /* GULUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = F13E723A6559F6029C1EAC208E644205 /* GULUserDefaults.m */; }; - 290C02FEBC3B3E0CC50054E359235CE3 /* shared_realm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18E2801B86E3023E1076B7EC71754C1A /* shared_realm.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 294871A7129CE743BB3A1A37A5909905 /* ActionSheetDatePicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D95C7F99D2C68C5DBAAA51F236EBDBE /* ActionSheetDatePicker.m */; }; - 29886F05CA1B4402BBC29E898010E329 /* RLMArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 89FFF69FAB89315324004A48B8CFCEA9 /* RLMArray.h */; }; - 29A34FBE9DC82BF012AC83585F4530E0 /* SDInternalMacros.m in Sources */ = {isa = PBXBuildFile; fileRef = CBC1F6C1E105A67A37563B83B37F855E /* SDInternalMacros.m */; }; - 29C11EBD5BA1F4AB95FE233E96AFA3E6 /* SDWebImageDownloaderRequestModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = CC853F3B3AC728F92B8B62D999FD3A8C /* SDWebImageDownloaderRequestModifier.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 29ED8F96AA9CA9E72C5620E5DC520F3C /* weak_realm_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DE11C28AEB3EEDE16BD3291C54849806 /* weak_realm_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 2A4972C7ADE3DFAAE219A09318FC3F14 /* ActionSheetStringPicker.m in Sources */ = {isa = PBXBuildFile; fileRef = DB79AC3E6D402B145104D0F875B7EF7E /* ActionSheetStringPicker.m */; }; - 2B83A6320A1AF009A5B8A3C1545702D0 /* FIRBundleUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DFEE6A7766C550A778CA539B2DF4AEA /* FIRBundleUtil.m */; }; - 2B97B7047406ED60E22432A5540468F8 /* GULMutableDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = FA511C67CB5B0442362CC959A542F0BA /* GULMutableDictionary.m */; }; - 2BA28611DBF65CF01FCAE4C223FE235A /* FIRAnalyticsInterop.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C708F3B35B6ED8BDF28F2D6A3119690 /* FIRAnalyticsInterop.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2BB2B6F804D20EB708C049189F34EBAC /* FirebaseMessaging-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D5DDC2001E3FB091F054A22E136FC4BE /* FirebaseMessaging-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2C6B29E8E771456930B190F7A6CB3794 /* FIRConfigurationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = DC596FA8FEE460FAA58F43ACCB9AF76D /* FIRConfigurationInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2CE08437D8D7B8D7621433B48213EDBC /* FIRCurrentDateProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = AAE36D9F05640A6F7C035A6D1680FBF6 /* FIRCurrentDateProvider.m */; }; - 2CF565BE2E3A5218A4FE075D1642CC26 /* RLMObjectStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 83713112EC0F90E41C8B23E88DFE5CA5 /* RLMObjectStore.h */; }; - 2D1AB2CB6FF984135EFF4FB0C1E8B2F3 /* String+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB0A6A6A4F04DE2F8041628D4BBC034D /* String+Extension.swift */; }; - 2E51FE4FACE07C7E54A35FC5A0F8FDA9 /* FBLPromise+Timeout.h in Headers */ = {isa = PBXBuildFile; fileRef = 1318DAFB39FE3FA5EE1408916E5334B5 /* FBLPromise+Timeout.h */; }; - 2EA45B507F7B8958623D1CF64B96844F /* sync_config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C858E330281A8411087DBF4B39103EEB /* sync_config.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 2EE52D0804B31CB66E57E5AB89237739 /* Realm.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 722A539D0917C5A6312EB00EE2B8107A /* Realm.h */; }; - 2EEB6A0E637980229EB99F3F9244E844 /* FirebaseInstallations.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CF20EA6B0DE3339FC2E7ECE9D5B5FEB /* FirebaseInstallations.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2EFD51EE5923D01676D12A0EB6B770E4 /* SHA1.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEE1BC69EFE9E99DC39490C4C8274E81 /* SHA1.swift */; }; - 2F8B0412FF66064D67137E05C1596A32 /* GULReachabilityChecker+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 54063735C36300832D5415AC24D83590 /* GULReachabilityChecker+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2FACDF0093370FCD838C19CC5A5C345E /* GDTCORLifecycle.m in Sources */ = {isa = PBXBuildFile; fileRef = 428D24AE27003C44D1F38A6606EF5B36 /* GDTCORLifecycle.m */; }; - 2FC66E12ED6CBDE79E62F194D658F88A /* FIRMessagingUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = EFECAA0BD6E8BC83B9E9BD7E06E81BE4 /* FIRMessagingUtilities.m */; }; - 2FEB88BAFB0FF24BF06DA6FBCE1E3FD5 /* BlockEncryptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78076D3D35AED2432FDBB05969D93FA0 /* BlockEncryptor.swift */; }; - 2FF528E6D2C3DE5424403F85BE07A585 /* RLMObjectStore.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6CF59DCAC40F440B5B33C0E5A1548A08 /* RLMObjectStore.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 3000BB7D3F6F498126A0479704F32F29 /* FirebaseCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 86CE09E9CAE2F0425C7EC37256FA5A9D /* FirebaseCore.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 300162D3468AC52D6A1CCD7B51D35EBD /* sync_session.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C436844E51243B738467F6554C1302E /* sync_session.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 30487DD437CFB7896377678D051CE551 /* HMAC.swift in Sources */ = {isa = PBXBuildFile; fileRef = E21317BDA8DABD937E215DDB772DCA10 /* HMAC.swift */; }; - 30794BBEF4048C860E9EB86DBBE56607 /* FirebaseCoreInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 33BB7DA6ECF2D95DA65F887C501E3D14 /* FirebaseCoreInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3080E2919A9DE48583B05D6385912434 /* Cryptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38238CF7AD890DAF8D919747BF49E4AD /* Cryptor.swift */; }; - 3149ACDEC81C943908B84F1D2969FDC3 /* binding_callback_thread_observer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CBE5C53DDF67C42C5682CBBBEB5B5BD0 /* binding_callback_thread_observer.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 325DCCCD95B0324881D0DD227D2A6088 /* nanopb-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 386DE82B6615203FECE5C4CA67E66DF4 /* nanopb-dummy.m */; }; - 327653587222992921B557A9DD730730 /* FIRMessagingConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = DD1D28BFBABD37808AB06777A4B728D0 /* FIRMessagingConstants.m */; }; - 328A018EF12E784BCD19185D6317F9B1 /* FBLPromise+Race.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 05BFE78A90925045A780B3A8EB1F21DE /* FBLPromise+Race.h */; }; - 32F8C6FF75C97BF262B0062671FD0196 /* PKCS7.swift in Sources */ = {isa = PBXBuildFile; fileRef = 531ECE962339B1BE353B1662749344A3 /* PKCS7.swift */; }; - 33293CDA27A208E5050823A6F4A7B454 /* RLMConstants.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 5148886951BEAF5EB22A32613ED23788 /* RLMConstants.h */; }; - 33483C1C427390BED308CBAB3EEEE277 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EAA64E8C95C7D0DDF75E931838E9BA4 /* CoreGraphics.framework */; }; - 3389125ECCCB0754489646B80E1B400B /* LinkingObjects.swift in Sources */ = {isa = PBXBuildFile; fileRef = F14102388813EC6EC3107DEDC8F1BE4C /* LinkingObjects.swift */; }; - 34828E0377C5717331D00405EC4490A5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96CE92E5425AE24E39E7772E791A1F9F /* Foundation.framework */; }; - 34835B8188B55B08ABA1033956D47903 /* GULReachabilityChecker.m in Sources */ = {isa = PBXBuildFile; fileRef = 941EBA9CC982E351DBA271BBB7EB5AAD /* GULReachabilityChecker.m */; }; - 348BF6CE5B9BA3245F1B440726373506 /* RLMRealmConfiguration+Sync.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 9B664C77287C942F9E34C7D7D702F312 /* RLMRealmConfiguration+Sync.h */; }; - 349728F5E278D2429DC216045284ABFF /* Results.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5952E889205D2329C14CE59B7F11BB2B /* Results.swift */; }; - 34AEBBF4B2B4284246C124CEBF03C5A5 /* list_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D67D9A0CD96B92698D3250CA761B01BE /* list_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 3539E3E01A8DE6636BE39797BBBD13E4 /* SDImageIOCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F1F787E1DF3FC6B64AC7A57CC9A182B /* SDImageIOCoder.m */; }; - 3540C176FD4DFFFF2E6FF0D5D28E2F13 /* GoogleDataTransport.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CCFC6DBEBDC7C6ED8E119D7177DFB7D /* GoogleDataTransport.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 354ED7FE2CF541313426DDB96EC41B5D /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 177CAD5878399B14102554569E7C3B72 /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3555A585391D7FAA49717AD77868ECC0 /* StreamEncryptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55B1EC469D3411172E2BADB83FAC81F4 /* StreamEncryptor.swift */; }; - 35987C58F285217E7A5AE19AD6AEBD7B /* FBLPromise+Do.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 3A75C31C67E549259D25BDE159CEA0FE /* FBLPromise+Do.h */; }; - 35D7349FA198504825E3602C4941EF4D /* UIImage+Transform.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D5218F8B74DFC860B934E835C739EE1 /* UIImage+Transform.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 35FAC4DCA52E9D9EADAC951AFA3D4638 /* FBLPromise+Then.h in Headers */ = {isa = PBXBuildFile; fileRef = 1451B052EDF69823983D38AE91B6D78A /* FBLPromise+Then.h */; }; - 363EFECB0B868F7274F0EF5DB17F8C54 /* cct.nanopb.h in Headers */ = {isa = PBXBuildFile; fileRef = 38F70518F75132A097074E43D71C78CF /* cct.nanopb.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3669DF01C5083A622B7047351E0BD64E /* Property.swift in Sources */ = {isa = PBXBuildFile; fileRef = B500924F6C17D237612151C8A0B82036 /* Property.swift */; }; - 3678DF7B6539D273A7C1427C9B3A844E /* UIColor+SDHexString.m in Sources */ = {isa = PBXBuildFile; fileRef = 00FCD86B688052CF5033C426C4CB015B /* UIColor+SDHexString.m */; }; - 36C794D8EBC302AE35B96F96C02A34D0 /* GULURLSessionDataResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 1901AA5F111195BCD92FC5A0D680BC91 /* GULURLSessionDataResponse.m */; }; - 3712621D4AB06646D591BFB56FE46BBD /* SDWebImageDownloaderDecryptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 249FE35E9BC2F950342279D45727DFA8 /* SDWebImageDownloaderDecryptor.m */; }; - 3759323200DA8229F8EC73C233D1493A /* AES.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CCBF9796C8E7B87420F14B71979E65B /* AES.swift */; }; - 37FE33695A6CE95847CF1BBFF8D33A06 /* FIRMessagingBackupExcludedPlist.h in Headers */ = {isa = PBXBuildFile; fileRef = 750A35F5B0BD3AC3D9E33AE92A598D5A /* FIRMessagingBackupExcludedPlist.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3814D40733B8DBC6F7E150B707510C5F /* GDTCORFlatFileStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 78CD5A0B098764C81EC208C04DEDB25C /* GDTCORFlatFileStorage.m */; }; - 381FF05F8B4F611EE9C2FDBE4457BB89 /* SessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB7465975D38C5C6724AA697079DA5F8 /* SessionDelegate.swift */; }; - 385A9189A91BF29CDD615D9A8828E591 /* RLMSyncSession.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = CD9BCE9E2C02D1D7013DDBFA6CAE016A /* RLMSyncSession.h */; }; - 388578341C510BD6E0323A526C8D171D /* SDWebImageTransition.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A771BAFCBE02423B9261A03E8392C92 /* SDWebImageTransition.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 38CA4A48EC4E60CAD9CD1EB43ABD37F0 /* FIRVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = 82C895CD744D0DFD1DBBAE87075328E1 /* FIRVersion.m */; }; - 38EE0727B33503FD20E1363988E46AB2 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D4C31B2AFB205FB407F3B601E20BF9B5 /* UIKit.framework */; }; - 39992A51A1787D23CE8AF2EA4D0A51B7 /* RLMObjectSchema_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = BBA081D88B3A8E08ADBD5DA995E2ABDF /* RLMObjectSchema_Private.h */; }; - 39CE1CAC9BD7BC54966B8C33D8473D68 /* GDTCCTNanopbHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = FB16D133B15E74B820EC9F80CDB3F2AB /* GDTCCTNanopbHelpers.m */; }; - 39F424B577461FE3BE795EE3A7C43CAA /* GULHeartbeatDateStorable.h in Headers */ = {isa = PBXBuildFile; fileRef = F5F6919901B78E15C08AAF7BE2B59C93 /* GULHeartbeatDateStorable.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3A01B7A79B844758AEC2EE3C4FE3A07F /* FIRInstallationsIIDTokenStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 37667D87938175B0B9E0276B63D19F0B /* FIRInstallationsIIDTokenStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3A02462E4A72F2857839C8ECD2BF7191 /* GDTCCTCompressionHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = B22D80E91E4E6DAE0C4B9A4E38589EC5 /* GDTCCTCompressionHelper.m */; }; - 3A4F26B8301DB5D994EC167101327F28 /* RLMRealm_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 85821A534382A8F22B0A7A69CA0E6B49 /* RLMRealm_Private.h */; }; - 3A61543E124318E17FF811C66C7FE8F1 /* SDImageCoderHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = F4460AD4590695003C175BEC83A18700 /* SDImageCoderHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3A662C30D8D9ED53637B89F97D1AACF0 /* RLMArray.mm in Sources */ = {isa = PBXBuildFile; fileRef = 56C371181087B6899177B4A563C53B84 /* RLMArray.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 3AA46A2CEC7072823B69DD9B2AE44942 /* sync_user.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1F07AEA03081FA26561364FD6019DD67 /* sync_user.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 3AD34B4386EC2485BED8726337AD7FBC /* RLMPlatform.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 8AF076A07B131408F8B113F5691D6D4A /* RLMPlatform.h */; }; - 3B4232527625707E8C4D9B69333152A0 /* GDTCCTNanopbHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = B12C24DE5479F6BE3DE797E9097D4D7C /* GDTCCTNanopbHelpers.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3C1E5F3DCE6CBE061B32411E4EE22C20 /* PCBC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8236EEB3FBE373CA368D5A2630A5EB9B /* PCBC.swift */; }; - 3C53397585D451D0E1E23CBE5DB17274 /* FIRMessagingTokenOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CC8055C65A814C00D776EEB246F07D1 /* FIRMessagingTokenOperation.m */; }; - 3C70C6D6DF3FE7EC4B591116E1320CF3 /* RLMArray_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 29F79AD601A7A8B9B79F7169D2017A7F /* RLMArray_Private.h */; }; - 3CC95367C80EA6D4F06DC282519505D7 /* GULNetworkConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B9ADF3C3A0BAD3C891E96F90C0ADD15 /* GULNetworkConstants.m */; }; - 3D0F8A096CDEDFF8FA3AA85905686F95 /* Realm.h in Headers */ = {isa = PBXBuildFile; fileRef = 722A539D0917C5A6312EB00EE2B8107A /* Realm.h */; }; - 3D1787FFFD9EE21E73E2A43B93532CC2 /* ThreadSafeReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = B317CB43DF56DDE5623FAEE16531F3BD /* ThreadSafeReference.swift */; }; - 3D375A85D8162BC44D045F53781D006A /* SDWeakProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 8751C239CC9CC196F977655F387F073C /* SDWeakProxy.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 3D536376AFDA5E11EE45953044B0F300 /* FIRComponentContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 757834CDFA774B2AF52F022F5AF33717 /* FIRComponentContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3DB0D9280765633BD7B46F28F94CD62C /* CBCMAC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2873B53E0E594665AABD29242FD91B61 /* CBCMAC.swift */; }; - 3E344FED4F81EEA697CB210FEAC27659 /* SDImageAssetManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 766A4EDA4DCFD89068A9EE9E65A5373B /* SDImageAssetManager.m */; }; - 3F091C427A3E96117C902E8EA143729E /* IQKeyboardManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6249D347AB4C83E1771ED8FAD3A35BF /* IQKeyboardManager.swift */; }; - 3F7F76FB116AD0F755FC511BED59D897 /* FirebaseCoreInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C78A2C49ECD2A029B535EADAF3DBE36 /* FirebaseCoreInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 3F9FABD968C3211CFE64ECB162D082F6 /* GDTCORFlatFileStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 730F81D9DE531E5531DB90F3483175AE /* GDTCORFlatFileStorage.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3FA6E2E7FCC7A2F0A92D11A788F44063 /* FIRApp.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A7516205E1AB74247C872744951D82F /* FIRApp.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4050433E8D7A40858EBA244B30D7BC15 /* GDTCCTCompressionHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D34FEFC52A7D1B53C98AC34A4C933D3 /* GDTCCTCompressionHelper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 40570729E75A4EFAAA9BE8B1E99300A9 /* RLMObjectBase.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6750073F3E208E4508427AA4E2A3C714 /* RLMObjectBase.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 4086DF758953D34F37A0467127EBCC47 /* RLMClassInfo.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1BD2F315F65D74D0E9C9B15E315E96FD /* RLMClassInfo.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 40A5F8B62507885E01DB3FE0EDE93706 /* UIView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 89870C6B30A40925A5F6F66088475F68 /* UIView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 40C1238DC5744C26FB96C3391431639A /* SDImageHEICCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C2D53E51615226484159ACBC1E40A7F /* SDImageHEICCoder.m */; }; - 40E9245B83E966FBB00630B857DFD8F5 /* Migration.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6D1FF0163C1D9D60E0A8CB6C5E18027 /* Migration.swift */; }; - 4187259555D67D09602825B4040CC468 /* OCB.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD23C32EB4EECECF2AFF42CC6A4B85D0 /* OCB.swift */; }; - 41C2719D703841F6828E22B5C35AE6EF /* RealmSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 75CDDD2C741C2B3013B6135198196F5D /* RealmSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 41D299C22C18A78D39EB788D3311974A /* ActionSheetDistancePicker.h in Headers */ = {isa = PBXBuildFile; fileRef = DEE9BF2E150669C3B8731EAA7C6636C6 /* ActionSheetDistancePicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 425F0A7DB751E5FA66E9B04F924FD6CA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96CE92E5425AE24E39E7772E791A1F9F /* Foundation.framework */; }; - 429131FA89BBE71745DBD255843B9D76 /* GULAppDelegateSwizzler_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D32B1890FD584A4CC7C74B4D84BCB769 /* GULAppDelegateSwizzler_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 42C8D0174C82150F6C82AC03393C65AC /* FIRMessagingTokenStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 41E4B609B9ED90E731C3762FF56010F4 /* FIRMessagingTokenStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 42C8D19CD26B1E59F8C5746B1A5B885C /* FIRVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = EADFDE7F9C12CBF0002DBBA81A85CBA3 /* FIRVersion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 433FDCCAA259FF89BCE71C73BC985C71 /* FBLPromise+Await.h in Headers */ = {isa = PBXBuildFile; fileRef = 541DCEE9AC038D6D17A45DE00975B341 /* FBLPromise+Await.h */; }; - 4343D6D57000C0E7234487422A71DF27 /* FBLPromises.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 474FDBF5FF8966AFDB911BACA2C5BA7F /* FBLPromises.framework */; }; - 438C6CA3D5D8FC5994D2C68ABD72BCB2 /* FIRInstallationsStore.h in Headers */ = {isa = PBXBuildFile; fileRef = A188D6768838E06D9E265C5C808681F7 /* FIRInstallationsStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 43B865F79B7C0E694D8D9AC73F4FB9BD /* Rabbit+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A17D40ACA8F8A042A04883C715D859B /* Rabbit+Foundation.swift */; }; - 442B2172794FEF2166A3E7ABA352A5F5 /* CBC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77F188052E4D379660A93C519C66DB15 /* CBC.swift */; }; - 443370C9B6108F9D48DB89CBF5D2146D /* RLMObjectBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 8478BAB89219A419FF39EA29EA9E3DDB /* RLMObjectBase.h */; }; - 44403F010BD599F5C7BB62B23AF28680 /* FIRHeartbeatInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CD0BCA2633B549DF689C142B16127A4 /* FIRHeartbeatInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 444459C0B572D924168CFFB7020B44AC /* FIRInstallationsAPIService.m in Sources */ = {isa = PBXBuildFile; fileRef = EADD60FED881357516021098D8EF0962 /* FIRInstallationsAPIService.m */; }; - 44B4F51B018F0039263D2DD796E2F467 /* SDWebImageOptionsProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EB9F3A7FEC60780B14118789EAA1D4E /* SDWebImageOptionsProcessor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 44EE786DB4F692B94E18F45B43A6C5C7 /* GoogleUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 660A5577CA9AAF26647707D912A886CC /* GoogleUtilities.framework */; }; - 45B8CC1C61E7A0BB28CFA8CE7C12FEBC /* MultipartFormData.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFD5D75C949346B5A675325C42941FAB /* MultipartFormData.swift */; }; - 460EC7B7F9CC0D07EF1644609BEF95F8 /* RLMProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 928FE213F6BABD395070DBED6D711737 /* RLMProperty.h */; }; - 4622CCAF0DFDAF00F7CCA6ACAC8D7E27 /* FIRInstallationsHTTPError.m in Sources */ = {isa = PBXBuildFile; fileRef = F0EED7E4A4DF2AF6825AD5A8E644F43E /* FIRInstallationsHTTPError.m */; }; - 4627935AED721C697210046C88CA8918 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 06AFDF03F9C1D8B9F4CF9B8D0016C73C /* SystemConfiguration.framework */; }; - 46676CE21E0A0715D8382187513103FD /* sync_metadata.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9D6A99168873D172AFD88F381EC1D06C /* sync_metadata.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 46DC0B1353F58957086389C257219062 /* FIRDependency.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C8B4FE54AEA7F9E1C0D140112FF8BD5 /* FIRDependency.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 46DDBE7209F2486DC0076CF8F584D04D /* GULUserDefaults.h in Headers */ = {isa = PBXBuildFile; fileRef = D5F7928600A9EF34D656DCCCB7C0D131 /* GULUserDefaults.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 46E87A0B171235A8FDB57664CB4A3546 /* NSURLSession+GULPromises.m in Sources */ = {isa = PBXBuildFile; fileRef = 031138CCD8D9D474F40D82801D921C55 /* NSURLSession+GULPromises.m */; }; - 4737103B10A1C40C5301D0512B9310E4 /* IQKeyboardReturnKeyHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25BA8C2BED9D71530658549424438F43 /* IQKeyboardReturnKeyHandler.swift */; }; - 473B33DA62918C149F72D7F1B2DB97D5 /* keychain_helper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 06F05F478C5C28C47471C05ED820757B /* keychain_helper.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 4753716AE7A1AB22FB6BA61AA74D942F /* Toast.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97C914084CB577A244C3ECAF9F612198 /* Toast.swift */; }; - 476D5F33E25386C60D6BD75C4FA97C67 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96CE92E5425AE24E39E7772E791A1F9F /* Foundation.framework */; }; - 4777F57D6B71AECA1C7FC9BF5B238C5D /* ChaCha20.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52099236CE09D85935F717A05915FFA /* ChaCha20.swift */; }; - 47808BB808628C2E371FF6E5CA58F5D0 /* Updatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D62DC0C397687B9A3F30B1968806DB5 /* Updatable.swift */; }; - 47E0AD754FAB78368C50325AE2BEF618 /* RLMSyncCredentials.h in Headers */ = {isa = PBXBuildFile; fileRef = 77779AED9FA8778B208FF7F453264092 /* RLMSyncCredentials.h */; }; - 47EB8C6D7A75FC798CCA62D347DF5FF3 /* object_schema.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B0532F43B14A813ACBCF29A2984DA9B6 /* object_schema.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 47FDBBBD2704901588C3A7C56BBC502D /* ServerTrustEvaluation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F7589184FD469326D0CDDEE6348B467 /* ServerTrustEvaluation.swift */; }; - 482390939D521EDC7E4197436C13C005 /* SDMemoryCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 206793060D969FA7496E5BC0F5CC0014 /* SDMemoryCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 48613B407C17DF107D61D8D717017437 /* Sync.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E0C4E1EFC05808108934BE32EB223A8 /* Sync.swift */; }; - 48A649A7A62A0DC5A3FEC60DE76D4A80 /* FIRDiagnosticsData.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CE39D808F6A30D49B0E13F49595B3D1 /* FIRDiagnosticsData.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4920EE49A504E7FBC8A24185048D826D /* PromisesObjC-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5353BF79D83F058DDEFEB38385407A7E /* PromisesObjC-dummy.m */; }; - 494F5E5284E2F6D0FA92F07ADF5FB6AC /* SDFileAttributeHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = A6EB6C08B9CF5E2401D26CC5C855B17E /* SDFileAttributeHelper.m */; }; - 496830AC001A0919794D96A9D91CADC0 /* UInt64+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C75E41399C25E0B0531FE0EB0A551DE /* UInt64+Extension.swift */; }; - 49FAE250C87D104B40F3503F23341BF3 /* firebasecore.nanopb.c in Sources */ = {isa = PBXBuildFile; fileRef = 85F7AB2BB7587C5C389E17636045425D /* firebasecore.nanopb.c */; }; - 49FB090354FB9C77E089C345B020AE2D /* nanopb-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E916E009B186A1E251F964603947E671 /* nanopb-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4A5FA3B224563BB9695743344EEA7277 /* RLMSwiftSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = E16D1B384E3D86F15270DCC2209BFE02 /* RLMSwiftSupport.m */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 4A66907E934400C2896E866F40EE6D43 /* GDTCORTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1038ED066EC49DB4C900D898EBEA6E26 /* GDTCORTransformer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4AD5A0462F9600139B59B5D6AF2D3EB3 /* uuid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 11722587FEA5F33027B6060D7B17F3C4 /* uuid.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 4AEC050FA7D5ED52FDA9DF50EA3560DF /* ParameterEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0692B33FFCFE498DB4CA452B9728A3B6 /* ParameterEncoder.swift */; }; - 4AF459B05D072F9E3114704D25DB3272 /* RLMObservation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4698F5E317BE9BDBC28EB98E4D90D186 /* RLMObservation.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 4BB9C836A68DC72EAADB50AC55C99D42 /* ActionSheetCustomPickerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = B0F1D178D3AE8FF89D6BD0ECE869396E /* ActionSheetCustomPickerDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4BF868D6EC762DA1E25695733B8E91F5 /* BlockCipher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1570F708658C3D5FC6B0F902008DC01C /* BlockCipher.swift */; }; - 4C069FA7FAA45154DA92CF5DF3BCDCA9 /* IQUITextFieldView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68519E5F29D218784C27FC3B96BB54D7 /* IQUITextFieldView+Additions.swift */; }; - 4C63985796E8B613763C1E832BF3E6AA /* FirebaseCoreDiagnostics-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E90B933539CBEAA65AE4B02FDB3E02A3 /* FirebaseCoreDiagnostics-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4C73C0FCAF418A6857A226C9E542600B /* RLMSyncUtil_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = A08DA69B96F0B9F29FD22DD9358685AC /* RLMSyncUtil_Private.h */; }; - 4CB5270EE0537A17CEB794B045C72B54 /* collection_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F1EFD664168014D5F3A61C7B88B0C7E3 /* collection_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 4CBADB8A7E085B5E27EA5082E81B4156 /* GULAppDelegateSwizzler.m in Sources */ = {isa = PBXBuildFile; fileRef = C4A4E6AA5752EAB9E5560907951CC854 /* GULAppDelegateSwizzler.m */; }; - 4D3D9AA5E2ABCB9F87CD0A59AE536CC6 /* SDImageIOAnimatedCoderInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 16DE024C8CB16FA20C78D11CEE0D8750 /* SDImageIOAnimatedCoderInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 4D62BFF1AA120D6EF6675418121226AE /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D4C31B2AFB205FB407F3B601E20BF9B5 /* UIKit.framework */; }; - 4D705B7F335F6401ED416C31BD6E81EA /* RLMResults.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 1A5A8C27F0F94B75DF682413D266B486 /* RLMResults.h */; }; - 4DBCDDEE8921B3FE4EDBBA7ABB9BA606 /* GDTCORStorageProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = B2669C5C82B7C0A22A84597EC0D19D89 /* GDTCORStorageProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4DD3114913713279B536B8B5FFF49555 /* Util.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D3599CF550F9EB034877E67421264CC /* Util.swift */; }; - 4EF17B2F3C3696206B574F6719632FA2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96CE92E5425AE24E39E7772E791A1F9F /* Foundation.framework */; }; - 4F0CF2AD58CF0D08BC090E7AF0DD63D7 /* IQInvocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCE7B76546004A8A917269B63ED4B227 /* IQInvocation.swift */; }; - 4F211BF5DF132622C586DD05EF342E63 /* FIROptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 16DCA68A77792F71E4E233C3AAFA54E8 /* FIROptions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4F57332DC20744F45F1E82F6AA70D221 /* ObjectiveCSupport+Sync.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AE488274939C10B2FA5F802F96755AD /* ObjectiveCSupport+Sync.swift */; }; - 4F73877DBB190162C09521B6A8A070B0 /* FIRMessagingAPNSInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = E11C376BDDD54FF90A03E133A03A5564 /* FIRMessagingAPNSInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4F8A9C20777099FB43A24845886EDA2B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1BAA874222D307237209F71090049BE3 /* Security.framework */; }; - 4F9B8F367350FE6F02486D6B0AFC0D0C /* UIImage+ForceDecode.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7F463FE2F325B3C6F61A56AFABBBE4 /* UIImage+ForceDecode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4FE3E75FEF292E403FB8D13B64906F41 /* SHA3.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF366CEB33CB5CECB19ACB4F6F693422 /* SHA3.swift */; }; - 502D148FB284EE012260A1AA96674EEE /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C15943DC74ED80F7B29BCFDC74C2BD99 /* SDWebImageManager.m */; }; - 5044FEAEF09468B6964F9F37A1F1F45C /* IQPreviousNextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F63CCA1076F27B4DD0D3A0BEA2E5CC1 /* IQPreviousNextView.swift */; }; - 508A2A3BE4E32BD31141B81FB77390BE /* GULReachabilityMessageCode.h in Headers */ = {isa = PBXBuildFile; fileRef = B7E03D90F08417E443B3C51B6964D25F /* GULReachabilityMessageCode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 51204A385DF5C502BAA27ECE86719C7D /* ActionSheetDatePicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 38596DD1A62B86E3D0DFF6B6F9131A57 /* ActionSheetDatePicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 51213504F55CD20C4E3F03E4911059B2 /* ECB.swift in Sources */ = {isa = PBXBuildFile; fileRef = E704752616B93BE1422EB5F7F84F13F9 /* ECB.swift */; }; - 5158CE19500AE188ED7E1BF010880983 /* list.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 431724020214A6F7A52D05A937BA68D4 /* list.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 51E6D6EC168CEA630E9150DE56048363 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 13B1AA9A64AEFCDE68FEBB56B60AE309 /* CoreTelephony.framework */; }; - 522FB484F79064A183754528ED787059 /* DistancePickerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D2A115BC6E7B8C642444CB0D7497979 /* DistancePickerView.m */; }; - 526DDA15FFB439B38B653A31F3FAF062 /* RLMRealm_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 85821A534382A8F22B0A7A69CA0E6B49 /* RLMRealm_Private.h */; }; - 52BEB3FDEEC0675F59FB9A1442890E53 /* FirebaseCoreDiagnostics-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C658F80BADD9BF0AFF419083A18A3F0 /* FirebaseCoreDiagnostics-dummy.m */; }; - 535864D0DD2D3B6432EA9450B056F791 /* FIRInstallationsErrors.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA6D2A3329BA1F4EC69BFC39E6B7BC5 /* FIRInstallationsErrors.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5408BE7DEC61C1A3AA80CED53B7BD1F5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96CE92E5425AE24E39E7772E791A1F9F /* Foundation.framework */; }; - 5419D23A75236616FD9003BFEAB0A196 /* Digest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E37A51859909C1F97D55A46978EEF6D /* Digest.swift */; }; - 54230048C4FF834F051D2C378BD00465 /* RLMArray.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 89FFF69FAB89315324004A48B8CFCEA9 /* RLMArray.h */; }; - 543740C6C31D3637343F37FA099E11BD /* AEADChaCha20Poly1305.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ECFC83453F0ECB27A1E0234BCC2B4DF /* AEADChaCha20Poly1305.swift */; }; - 54CA4CC2D9DDD32F559FEFE36DB31914 /* NoPadding.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6724170FE5C0C60A4333BD83C440476 /* NoPadding.swift */; }; - 5504575556803AD827F70E111703751E /* RLMProperty.mm in Sources */ = {isa = PBXBuildFile; fileRef = B8ADE224AEF88610C101F4CD39934CD3 /* RLMProperty.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 5533771D40B677293AAB7156B664E174 /* RLMSyncSubscription.mm in Sources */ = {isa = PBXBuildFile; fileRef = B9C6687ED502E44AA73F9D0BB333E6FF /* RLMSyncSubscription.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 55C92BA5F52CE7CBE292D770B0872C84 /* FIRInstallationsLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = A1EFF535572854DB51DDFBA01D060B42 /* FIRInstallationsLogger.m */; }; - 561ADD5182A8726A15DA6B500E736B1E /* RLMRealmConfiguration+Sync.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3BFA3AA7F1811156155860B2A54C4772 /* RLMRealmConfiguration+Sync.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 56219CEF4A52B97061063238BDBE7250 /* FBLPromise+Timeout.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8C388117B0AFE665668A5CDDF11762 /* FBLPromise+Timeout.m */; }; - 56338AB6C096B0901C323031E0063F8B /* RLMCollection_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = C0FCB85B5691EBB5E27760C8F1A8C524 /* RLMCollection_Private.h */; }; - 563B9544C22BA4447DF43156531D5743 /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 7388B5A687333B951611AA629442DBDA /* SDImageCache.m */; }; - 565FFF620CE785D5F264F0C35121D578 /* SDImageLoadersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C7DDFDEABDDD4D9131C3EA1AA73276AA /* SDImageLoadersManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5662325CF302E6DBA5F13D89E0985214 /* RLMAccessor.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = F247FB6072E07EF70725C239EAA60351 /* RLMAccessor.h */; }; - 567D3E3DE7EFE42F37A0696EC5307F36 /* RealmConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 792DFC751461DE2A6E29F9023B572B68 /* RealmConfiguration.swift */; }; - 568375AF7304702204CB032D869DC2A1 /* CMAC.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7388F42531DF0394A844665C90EFA8 /* CMAC.swift */; }; - 5701BD2D60FD3607E0F600639022D695 /* CFB.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69917A87CC117A8C41D05AA9059D8C32 /* CFB.swift */; }; - 579E12DF863290040F3898A955D944D3 /* ChaCha20+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9751695F04AEFB9C3F95BB2E355F8090 /* ChaCha20+Foundation.swift */; }; - 58C172E532B41414133CBD7DB10E325F /* NSError+FIRMessaging.h in Headers */ = {isa = PBXBuildFile; fileRef = 18878089B49C4307981A487808368A62 /* NSError+FIRMessaging.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 58CF9A606A3CE3F0CC0CA8A42C4C77E6 /* ActionSheetStringPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C42C646F7AD853933601D509EF6E930 /* ActionSheetStringPicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 58E77A72F9E710AB315C85FA14D19652 /* GDTCOREventTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = 911AAC52B85C0038A4170B924E4C1E6C /* GDTCOREventTransformer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 591AE303B15F774C835262F757E8166F /* FIRMessagingPendingTopicsList.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F754AEB94FF9A7F96CB5EB9ED777103 /* FIRMessagingPendingTopicsList.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 59248A6C40C29D9A950F33DBF71C1903 /* FBLPromise+Wrap.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 4A16F5E77A8F00736FC7EC916B21494D /* FBLPromise+Wrap.h */; }; - 5961E7DDF55272B633F9B17F1526E8D8 /* OFB.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E1CE00C7B46C7D2CB3D4714DE216F8E /* OFB.swift */; }; - 59789CE08DF6F1682B65A0DB845F18BE /* ActionSheetPicker-3.0-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 41CFA1918BE4241B1A1AC31D78516FBF /* ActionSheetPicker-3.0-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5A1FCC508EE562E96648AC661F999ADF /* results_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9994D7EE2116F6014B4E9400C7C0BB95 /* results_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 5A67BD99039E153A8919A0F45C7BE7D7 /* RLMObjectBase_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 03B30AC1CAAF899A6FEC51FDFFD9317E /* RLMObjectBase_Private.h */; }; - 5AA825685E0EA682193195DBB12BFD71 /* RLMSyncManager.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 32EDBEAFA27BF7105E9222E0C4C56E47 /* RLMSyncManager.h */; }; - 5AC1EB70F2680C85DC0D575BCED67746 /* RLMObjectSchema.mm in Sources */ = {isa = PBXBuildFile; fileRef = F8999C37548066850F14E1572DE3E743 /* RLMObjectSchema.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 5B15D04083FFDAFFB3E9380BEA44174D /* FIRCoreDiagnostics.m in Sources */ = {isa = PBXBuildFile; fileRef = 5358FBDAF7303977A415971B059F538D /* FIRCoreDiagnostics.m */; }; - 5B4FD6483A9E606CDAC3823EA0CF383F /* FIRLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 2286A916678C9D2E35D70ADD42A8508F /* FIRLogger.m */; }; - 5B99208B26CC2A16CEA068A6DD56329E /* FIRMessagingTopicOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DC883C2E75107C200EB603B681CA0AA /* FIRMessagingTopicOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5C549BC759227E46AECAE19D5AA77912 /* FBLPromisePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 359A536046D13F9BF9A4977AA85528F9 /* FBLPromisePrivate.h */; }; - 5C56A58845045BE6A05F7A6390DC9D95 /* nanopb.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4AFC5C54F905DDB55FDA199F580E0FF1 /* nanopb.framework */; }; - 5C5721C0A5BD25F050FD02F573FAB7D8 /* scheduler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 059F94760C42A1A66ED75EAB3BC99B91 /* scheduler.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 5C6A59AFC722504CCFF0DFF523E4CD0E /* RLMMigration.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8DB06E08793DF7A35C65E4DEC596D535 /* RLMMigration.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 5CA2AC72A71CEF79A07FAAA283BE8A52 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A6620FB2CF03CE44DC554132934E15FC /* ImageIO.framework */; }; - 5CB6BFCD480F026E4AFFC8821AA30F4F /* FIRInstallationsStoredAuthToken.h in Headers */ = {isa = PBXBuildFile; fileRef = A023B5549EDC5FF374C920FC470B075A /* FIRInstallationsStoredAuthToken.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5D7A107C490EC35A0508AD4E043F415D /* NSError+RLMSync.h in Headers */ = {isa = PBXBuildFile; fileRef = FD4ACED2DB8A4A140AB9A04983A6CAA3 /* NSError+RLMSync.h */; }; - 5DADE82EAC2E0C8A77E2AC4A3C029171 /* FBLPromise+Any.h in Headers */ = {isa = PBXBuildFile; fileRef = 800E0C9B7CB1B577C7812930D92BA0CF /* FBLPromise+Any.h */; }; - 5DC28FB93409FB8EF2CE92927AFB1EA8 /* RLMSchema.mm in Sources */ = {isa = PBXBuildFile; fileRef = 68E71D44325D1EB91F8EA7D7A4C9BF43 /* RLMSchema.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 5E0D570A78EF2D89B442D62B266B275E /* SDImageLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = BC47C3781E84B22F01FD7F0435E586B2 /* SDImageLoader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5E2E7D406AE90AD8C485F9546A12B9E2 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D4C31B2AFB205FB407F3B601E20BF9B5 /* UIKit.framework */; }; - 5E4A07CB9EF37D7D4638A6857BD7B0D9 /* FBLPromise.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 00F1F168B4E790840B4C3B865A1A7A9F /* FBLPromise.h */; }; - 5E5379979F0884B49C030C5C1E351A0D /* FIRLibrary.h in Headers */ = {isa = PBXBuildFile; fileRef = A9386F39C17449D1C2CF204DB4A159AC /* FIRLibrary.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5E8056FC30438B2472365ABA67F70EA2 /* RLMRealmConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 2310F918A6725456B3386150ED5D4DA3 /* RLMRealmConfiguration.h */; }; - 5EA0D68161B8F2390A8C5D39C9EE18BD /* RLMObjectBase_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 03B30AC1CAAF899A6FEC51FDFFD9317E /* RLMObjectBase_Private.h */; }; - 5EE24959D52D6DB8D608239820BBE181 /* RLMJSONModels.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E03A51E166FA635F8C93FB0C9F09554 /* RLMJSONModels.m */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 5F0DF070A417AFD8AB18631CB9E80EF5 /* GULNSData+zlib.h in Headers */ = {isa = PBXBuildFile; fileRef = 80F21AA0F6A19D1C67E18AC6699D10D1 /* GULNSData+zlib.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F30B3E3E8730F2C598136CC57136A20 /* GULNetwork.m in Sources */ = {isa = PBXBuildFile; fileRef = 67758097F5B9C13C52FE595322FAE27B /* GULNetwork.m */; }; - 5F66586F96CD74B0CEB0E936F31543FA /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1BAA874222D307237209F71090049BE3 /* Security.framework */; }; - 5F6D6A648BFE8E9A400FF5F9F5BD6CA1 /* GDTCORClock.m in Sources */ = {isa = PBXBuildFile; fileRef = E4C6EFA2D288C791480494F39D8C43B3 /* GDTCORClock.m */; }; - 5FA18B31A86F803DEDE30ADC518DF987 /* RLMSyncSubscription.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = F5526109A3EFACE19B484D5620D7D1D5 /* RLMSyncSubscription.h */; }; - 5FB9C6FA5431264EE30AFDF665B36BFF /* FIRMessagingContextManagerService.m in Sources */ = {isa = PBXBuildFile; fileRef = BD2CC6EDE585E1DABF84ADFE93DD267B /* FIRMessagingContextManagerService.m */; }; - 6004AF2B6D5942DBF1D22646B5061E57 /* UIImage+Metadata.m in Sources */ = {isa = PBXBuildFile; fileRef = 95A10ED205450B356F0C4F723F4BD734 /* UIImage+Metadata.m */; }; - 600983DEB7205EC72FAB41DD91F1D605 /* SDMemoryCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 96C8813BD09278E35AF98C3BDDE23974 /* SDMemoryCache.m */; }; - 600E6B47A719CA2B7BC35B440F5A60C1 /* transact_log_handler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 81D2B1002F82F7AF499F3D5A2CFE0492 /* transact_log_handler.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 601078695EAB2498B63C7F1648BFF7F3 /* XCTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B593AB8B2EACC688BA648D23B96EF20 /* XCTest.swift */; }; - 606CF4C030B87CD04100E49A3B962C2B /* SDWebImageDownloaderRequestModifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A336109209870C637555876732E12CA /* SDWebImageDownloaderRequestModifier.m */; }; - 608DCB81E7D14F26CCE9F2C0B482D444 /* Pods-MyStudiesTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A84F08203C9AAC88EAE546EA369A5E7D /* Pods-MyStudiesTests-dummy.m */; }; - 60B67DC5010208901AEC5027EDABC293 /* FIRMessagingLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = F93E999A92D9AA579A16EB2FD5B57953 /* FIRMessagingLogger.m */; }; - 614FBE52FEDC787E6F63391F0CDD9717 /* GDTCORLifecycle.h in Headers */ = {isa = PBXBuildFile; fileRef = D713750F69F8612EC13CA626C1DF01BC /* GDTCORLifecycle.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 61AF13D4AE720C760E10E55F2BD6FB44 /* RLMOptionalBase.mm in Sources */ = {isa = PBXBuildFile; fileRef = F1D1E3FB57B02C8734195A17446F2FF4 /* RLMOptionalBase.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 61C477647D6EAD506F654F324D3E7B7D /* FIRMessagingTokenInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 79DC9ED48A74ECA18DA00C9E9CBCE3EF /* FIRMessagingTokenInfo.m */; }; - 61EDDBC8BC8D8BFC8C0FD6035AAEBD30 /* SHA2.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37B54E70FA95282CF15A607B01677C05 /* SHA2.swift */; }; - 6294D3663FED730B4F86E5E68953C155 /* Blowfish.swift in Sources */ = {isa = PBXBuildFile; fileRef = 173324043D4D3BA47FCB6F18925B2C90 /* Blowfish.swift */; }; - 62A85277D0462C43B80A05E8822794BB /* IQKeyboardManagerSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F8884BB64A79D96185E4A06A46C0141 /* IQKeyboardManagerSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 62DB17592BCAD587CC2777344B21202C /* FIRMessaging.h in Headers */ = {isa = PBXBuildFile; fileRef = F5BFCE0451A8A03DDEAF58131950B5EC /* FIRMessaging.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 635093060707BC262AD2F93CBC1DFC52 /* Data+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41F835695A0055130E4008FC969C8042 /* Data+Extension.swift */; }; - 6412FAE8F2D57B0B8E4811DF1F5958AB /* RLMCollection.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = D0671CDE367305EC8D3EAA017AE75ECD /* RLMCollection.h */; }; - 6426334186986F3FB6225876EB8A90DA /* SDImageGraphics.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BDAE9ECD2204684F06DB1E756BCCB1A /* SDImageGraphics.m */; }; - 644320462DB0C79BBB688EC18AB0834E /* RLMThreadSafeReference.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 3C46201584D8E0A2D22CBC11EB255C9A /* RLMThreadSafeReference.h */; }; - 64C1FF5CFE5CEAF41C0AB385310BD4AA /* nanopb.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4AFC5C54F905DDB55FDA199F580E0FF1 /* nanopb.framework */; }; - 64DAB91A8FA2EA338E04690A514F7AE0 /* SDImageAWebPCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 56C8C0126D2AE3C78DD8297405088C5C /* SDImageAWebPCoder.m */; }; - 65303FAC78F15F3CC8F26B67E550775E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96CE92E5425AE24E39E7772E791A1F9F /* Foundation.framework */; }; - 6546D728B69398F93B506845141EBD61 /* EventMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A81254465733788AF582A774ADB2F8E /* EventMonitor.swift */; }; - 66031F0BECBC101B2743A9901844EB62 /* index_set.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DACAA87063E2D84D45DAFE1C3749B9BA /* index_set.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 660751AEAE8DBBF4FBEC77223AC2C69C /* SDWebImageDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = 6590F755CC81D11D01FC0AF9EA8D49AE /* SDWebImageDefine.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 662A19ABDB2E857EBB698231443E50DF /* RLMManagedArray.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0CE874A89AAF583128863BA1FCA5760C /* RLMManagedArray.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 666EC5C8356E6D4448A2FE7BEE77AD88 /* RedirectHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6644CDBF39A33650B04A1D545BE7012 /* RedirectHandler.swift */; }; - 6670CE21A07A8FE1D74FAD1F5103A93B /* SDImageCachesManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 289B3F758C08CB9E187E1BAA9FE98C45 /* SDImageCachesManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 66B26C6CAE737EC21F4BA1F1851B69C5 /* Result+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = F72403B4A012D71CF64CFE363C1444DD /* Result+Alamofire.swift */; }; - 66C3024EFEDD40FB4E3A4D4B942EFAFC /* RLMRealm_Dynamic.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 38BEFC79FC0B3038FC08CEAE376D479A /* RLMRealm_Dynamic.h */; }; - 66E8E6F06019B0740B70B3FDE6B026F9 /* FIRAnalyticsConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 50C4031B83BB4A01B75DB3D7B766E5B7 /* FIRAnalyticsConfiguration.m */; }; - 66FE089B9952440D85C06BCDF82CDFFB /* RLMOptionalBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 0928E44AB241AA8AAB8DC0A33368B510 /* RLMOptionalBase.h */; }; - 6756BD53BEDF69C91FF3DD530937A8B5 /* FIRInstallationsItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 7BAD137506983EB9E1D80719D85FAC3F /* FIRInstallationsItem.m */; }; - 6804677C03455FD50D0069CD5F95D219 /* FIRMessagingTokenOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 300D715D4DB5901B4FCB9514A11C40AA /* FIRMessagingTokenOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 694569BA69DB36D7AFF27367F5ED3A36 /* UIImage+Metadata.h in Headers */ = {isa = PBXBuildFile; fileRef = DB7D95E15D6BFA80111E9DB521CF9934 /* UIImage+Metadata.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 695448157AFA78983586B8164B1C1DBC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96CE92E5425AE24E39E7772E791A1F9F /* Foundation.framework */; }; - 69E93249D2B7F0D3DAD389C45ECED024 /* FBLPromise+Recover.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = BD0C7C30717E45F952F165E3BA7A9B7E /* FBLPromise+Recover.h */; }; - 6AC5D2781167F9081FBA570FC8B89C90 /* SDAnimatedImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DF19DA9F7A7ED51656899AB5D859FBC /* SDAnimatedImage.m */; }; - 6AE407A4FB6C3D6ADD862CC6E3067A17 /* Session.swift in Sources */ = {isa = PBXBuildFile; fileRef = F81D75DDED82AF551A1BC2FA6DDCEE3C /* Session.swift */; }; - 6B0A94FEF6EEF7A9D420DD0567C74DA7 /* BlockDecryptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8BC6A8964E6AE54EE1A4466B07D5B30F /* BlockDecryptor.swift */; }; - 6B299224588A89A72CC867C2D1002523 /* firebasecore.nanopb.h in Headers */ = {isa = PBXBuildFile; fileRef = D9B4086214658B5946EA02E2752A0243 /* firebasecore.nanopb.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6B326644BB08AEDF697A82A0F1A66D68 /* Toast-Swift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 21B756D504A1CD0C1B8DB189A1C7D930 /* Toast-Swift-dummy.m */; }; - 6B8137456A145BBDF8A917EFF21D531A /* Checksum.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A0D2A5791B541D6FB60542F6A94DF63 /* Checksum.swift */; }; - 6B8EDCC151257594720CC9AE305F04ED /* GoogleDataTransport-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2188C48F8C4870DB2ADA3BFE10060920 /* GoogleDataTransport-dummy.m */; }; - 6BE82344F6F4685BED66FC63C002C958 /* FIRMessaging_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CAB2A4CFB5E017CE31DB53C7B460D93 /* FIRMessaging_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6BFD635B2171C951EB0E4FC6A61DFF02 /* FBLPromise+Race.m in Sources */ = {isa = PBXBuildFile; fileRef = A964D4988E284DA3B8D6DC7D430B561E /* FBLPromise+Race.m */; }; - 6C08F6A77889651626583100F560153D /* RequestTaskMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEF0415B5FB58AFE32EFE358CE6B6C30 /* RequestTaskMap.swift */; }; - 6C2BBA41B17029E7569C6FFB48FA669E /* FIRComponentContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 24DFFDE95AB183781DC4EA1DFF0D732E /* FIRComponentContainer.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 6C941B3F282D15E90FA15E3082615F7C /* Realm.swift in Sources */ = {isa = PBXBuildFile; fileRef = E69DC70F3A47E177698024A5C0471C1F /* Realm.swift */; }; - 6CAF35FBBB97B7A5C1CAB0E7F409562C /* GoogleUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 660A5577CA9AAF26647707D912A886CC /* GoogleUtilities.framework */; }; - 6CD261E331BE5F155ECD85CC512B0BD8 /* DigestType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06A993B3D361AC6CEC8E1A42D615F0C1 /* DigestType.swift */; }; - 6CD2E690E23D56B5B78365E223255624 /* RLMSyncCredentials.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 77779AED9FA8778B208FF7F453264092 /* RLMSyncCredentials.h */; }; - 6D4154C37D46221E2D008565A305C9FC /* RLMAccessor.mm in Sources */ = {isa = PBXBuildFile; fileRef = B0C902E9152FD66B14D7F9D4817DC883 /* RLMAccessor.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 6D51EB2967F59ED5BA8449E9CD2318D4 /* FIRMessagingCheckinService.m in Sources */ = {isa = PBXBuildFile; fileRef = E508A477D236550D27A108691D6DACB6 /* FIRMessagingCheckinService.m */; }; - 6D807F4E3245C11DF14F39F681BAEA23 /* SDAssociatedObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 86BE6B3F44465CD164284308AEEBA936 /* SDAssociatedObject.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 6E49EF14F30804F8B1DBCB93984B061F /* RLMSyncUtil.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 4AA413F046AFBAEA8AB95CE6974E2545 /* RLMSyncUtil.h */; }; - 6E54F64E8DA73F4B0B46C216F9F93F63 /* RequestInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = E88CA31B7293EE064978112B11BB5F14 /* RequestInterceptor.swift */; }; - 6E784AAE54EF542E1B1B6D13C6DA206C /* RLMSyncConfiguration_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DE20DC127752ABD579380CDFB7DE2F89 /* RLMSyncConfiguration_Private.h */; }; - 6E8196A5337BFD5CE54480F3583FB117 /* GULSecureCoding.m in Sources */ = {isa = PBXBuildFile; fileRef = B98CDEDD92AF09972CE95F3C4B875D57 /* GULSecureCoding.m */; }; - 6E872F26785163143192BC9F2BAFE719 /* FBLPromise+Any.m in Sources */ = {isa = PBXBuildFile; fileRef = DC49EF44127A92CF133BD2E694CAA520 /* FBLPromise+Any.m */; }; - 6E89EE0A83D419EA1EF17F409199F46B /* Array+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C26A3535842C1D9FD0200D20A89A5241 /* Array+Extension.swift */; }; - 6E8F129294E44619FA2674150EBE336A /* NSBezierPath+SDRoundedCorners.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AC79AEF663CE061B73BBC9C51CBD65F /* NSBezierPath+SDRoundedCorners.m */; }; - 6E9DED9EB93CA3DACF0589297355E53F /* FIROptionsInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 28F533A4844BA7F1E3FC68433FDDF818 /* FIROptionsInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 6EF03A3BAFDA8A4BDFF3265B98F9E421 /* CTR.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AEA21C41773B656C22018B7F70EA7B5 /* CTR.swift */; }; - 6F27684AC57716BA63A3C106BF1C6A5D /* SDWeakProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2EB83B09EF9F06403EE7B61ECF00D452 /* SDWeakProxy.m */; }; - 6F2F609031027F5FA28BF2301421C893 /* RLMCollection.mm in Sources */ = {isa = PBXBuildFile; fileRef = 805E92DED1B8DCA59C486F6854ED878F /* RLMCollection.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 6F3B1690F53D8DD5B00A062BE5FAE923 /* UIImage+ForceDecode.m in Sources */ = {isa = PBXBuildFile; fileRef = 0432627A142444D9A9B8665CF3ADB39B /* UIImage+ForceDecode.m */; }; - 6FE703D715ABAFFF02B0792358C3B27E /* FIRMessagingTokenStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 346099D94443E80FCAF9A2B788B1F37B /* FIRMessagingTokenStore.m */; }; - 706DF58ED22032AF84DA8AA2BD34A0FA /* FBLPromises.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = EE15263CF4C2C2818F862152C0AD12FF /* FBLPromises.h */; }; - 7091579FF22C64EE740ECFBEAB6A600A /* FIRComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 1039C413C929A2D6D726AC6859120CDB /* FIRComponent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 710B099BD183D22DC6138DEF0D82F478 /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = DA4633699EB63381AC3E13445A2BB204 /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 711093EDE5CDF062B681578996AA63CF /* FBLPromiseError.h in Headers */ = {isa = PBXBuildFile; fileRef = BD71CCA7604C663CE9211AF74D84BE11 /* FBLPromiseError.h */; }; - 718233E7BDF2451A812BBC20EF3046F1 /* GDTCCTUploadOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 843039480971C4CBB9A2E439E96BB460 /* GDTCCTUploadOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 71C95FB341142F6C81587F4A60DC189F /* SDAsyncBlockOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B68D177712773CE78129178A34ECA61 /* SDAsyncBlockOperation.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 71E8440CBEA56EFD2A64FCBD3DF8D315 /* GoogleDataTransport-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8838114C26F8D66D8AFD974AEE78EE20 /* GoogleDataTransport-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 722F585CFB02B9D9D2305E076D871727 /* FIRCoreDiagnosticsConnector.h in Headers */ = {isa = PBXBuildFile; fileRef = 12E5B7CE0F5FCA93F58A864E85041CAE /* FIRCoreDiagnosticsConnector.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 72A80124A9E9F0F28B5949657D31E328 /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 6075031448B4C9CE0101FBB38F246DD7 /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 72EA1E3A0FF44A316408197BB2548220 /* FIRLoggerLevel.h in Headers */ = {isa = PBXBuildFile; fileRef = F2D2AACFEAD202B1C62A847D4D03F99A /* FIRLoggerLevel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 72EC2712926E6D28B52360D9AC41668F /* AlamofireExtended.swift in Sources */ = {isa = PBXBuildFile; fileRef = F73C5B7E4C35698D7FF385B7D4BA390A /* AlamofireExtended.swift */; }; - 730F02CFFBD74BD46562276A09B922B0 /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = B0B4B6463A2DB13327B5E0B745FFE213 /* SDWebImageDownloader.m */; }; - 7360CEDAB021006D16225352EFE233C3 /* AbstractActionSheetPicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 946A8858C9C1B580A7060540FC0FC329 /* AbstractActionSheetPicker.m */; }; - 739D94DB13626873E4F91055ADFF76A5 /* SDFileAttributeHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 94D149E6E63A5F33A2B58BCB8C87B83B /* SDFileAttributeHelper.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 7422CCE898C2CA983C6A9625F84D8A77 /* GULNetworkMessageCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 219946A35B05998559D841DFC5C9877B /* GULNetworkMessageCode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74341DA37F4B926FDF4CB2599CAC547A /* IQUIViewController+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A00A1102CDB3233B98ADD6CBB039733D /* IQUIViewController+Additions.swift */; }; - 74479A06DA2E8BA094138F2EAAEC94E9 /* FIRLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = E0949D2B637DAB0E1512728627D8EB43 /* FIRLogger.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 7523FC5C348F565FA5A2C8ADBAB3CEA0 /* SDImageLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = A8ABF5253D991FB679BF0B185CB0652B /* SDImageLoader.m */; }; - 753C8C42CEFBED94E1F1E752955F0254 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96CE92E5425AE24E39E7772E791A1F9F /* Foundation.framework */; }; - 7584D9E6447049E2A9FB95504DD41DF5 /* MockingjayURLSessionConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 36CCB995FB5B9BF5BA18B6B93BE6421C /* MockingjayURLSessionConfiguration.m */; }; - 7621291436B4266E6803AC9165DA8613 /* GULNetworkLoggerProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 791FD2358CCF061FA9DEF6F541E41F2E /* GULNetworkLoggerProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 763795EAAF9566F31BB8FEADAB3FD857 /* List.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6875F93BA1C041F7E8C8CC62F9648826 /* List.swift */; }; - 76570E3AC348AFE2FC4415508AD12B7D /* RLMResults.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A5A8C27F0F94B75DF682413D266B486 /* RLMResults.h */; }; - 76573CB88EE288E3DBD2215A8D397AA6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96CE92E5425AE24E39E7772E791A1F9F /* Foundation.framework */; }; - 76B77668C3FBDE3C968DAD27D65FF71C /* GDTCORUploader.h in Headers */ = {isa = PBXBuildFile; fileRef = 53980335770F8A09C4C7339EABEE8AFF /* GDTCORUploader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 76F406E64D2CECCB8792E4611D81C7FE /* GULHeartbeatDateStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 59491E5FBA95EB70D5B820565FC54551 /* GULHeartbeatDateStorage.m */; }; - 772865DC2D164B0FEC0EF742AD288FF3 /* NSURLSessionConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = A05F4580ED3412CA66F556B74BA1DCA5 /* NSURLSessionConfiguration.swift */; }; - 772957B8FAD9FA2E780037409D8F7F25 /* FBLPromise+Always.h in Headers */ = {isa = PBXBuildFile; fileRef = BF3494D42C82FB5E482271BDF58BC576 /* FBLPromise+Always.h */; }; - 7771562E8212237F9D71DFA61B548766 /* SDDeviceHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3678D7EE39A50863492E94161B2802DA /* SDDeviceHelper.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 77E832AD4A71EB485751B36625FCA9EC /* RLMObjectStore.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 83713112EC0F90E41C8B23E88DFE5CA5 /* RLMObjectStore.h */; }; - 77FDBE69F83D9DB48C44A1722FF5B309 /* RLMPredicateUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = C7B1E426E789030D51033FAE857F5C50 /* RLMPredicateUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 780A91BA60F296254CBAB54F708D718C /* FIRMessagingPubSub.m in Sources */ = {isa = PBXBuildFile; fileRef = 7225392A28F4E4D91F8C0154D3D7405A /* FIRMessagingPubSub.m */; }; - 78EAF5EB18481BBCC1FE7DB38E929746 /* NSButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 8481B0727000CBFADA6B53DF5D7590E4 /* NSButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 78EBAE4A4F7FDA568D8CEE83E8B03F0D /* SDWebImageDownloaderConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = E7F9256D1CA12C6E149A86DA80E9F0F4 /* SDWebImageDownloaderConfig.m */; }; - 793F1671EB78CB44A5CFB784DC16E714 /* RLMSyncSessionRefreshHandle.mm in Sources */ = {isa = PBXBuildFile; fileRef = 400AA4E8EB633D266394275ACB8B6627 /* RLMSyncSessionRefreshHandle.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 7958AE8C4352219F24537DC524916EF1 /* SDImageCachesManagerOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = D9A808C2408C024D7F61E91427260FBD /* SDImageCachesManagerOperation.m */; }; - 79E50CC87928D8CCEFE26766F084D07D /* SlideMenuControllerSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C5EFFE1D4E98FECB12BEF710B058607 /* SlideMenuControllerSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7A97CBCDC753DD704CC34ABAB32E5DBF /* GoogleUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 660A5577CA9AAF26647707D912A886CC /* GoogleUtilities.framework */; }; - 7ABF7B40B3D56DF5AE62FEFEBAA0CAAF /* FBLPromise+Validate.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 8A2E811D849E65D02560B4FD80EEBDD6 /* FBLPromise+Validate.h */; }; - 7B933E94281FE1D6B36C0D89F19ECCCE /* SortDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CC326724D40B9B65C3C1A8E79E9F1FE /* SortDescriptor.swift */; }; - 7BD539092C04CDE11BE84139CC422C85 /* GDTCORConsoleLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 790CA29C065DD0F0B4F0098A3292067D /* GDTCORConsoleLogger.m */; }; - 7BEDB171741DB3BA9BF2D7BC78DCAC45 /* GDTCORClock.h in Headers */ = {isa = PBXBuildFile; fileRef = 0ED78A49E7C5A56E27CA0CB39145198F /* GDTCORClock.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7BFE56BB8AC3DC97C988565B3AE3C571 /* SDWebImageOptionsProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = 33BBB4CE14C3DFD13215A8C7D7EB11D4 /* SDWebImageOptionsProcessor.m */; }; - 7CB7E8617E68914B5749A06E07DC068A /* Pods-MyStudiesTests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D04DECF0CA3846FAC6BC97C65C147981 /* Pods-MyStudiesTests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7CEF2F6553C3CB7B080FA7482F13B95F /* GDTCOREndpoints.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F8EFF6ECDEDBC1C10BC83DDDAA3829C /* GDTCOREndpoints.m */; }; - 7D2961DDAF48D719A4A73A3B8C046A8F /* SDImageCacheDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = C8F83C27DF79F9E6F42D7D81AAFDE38F /* SDImageCacheDefine.m */; }; - 7D39562A9D7DC8AA960AA57E75D42BFD /* GDTCOREndpoints_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C3D532EFBC6CF4F2679AD76983A3FDC5 /* GDTCOREndpoints_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7D3DD4A8BB36733BA15868F7FB8C56CE /* Alamofire-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F944120A3E07CE8238DEE468F649D71 /* Alamofire-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7D55726D6565A2994438676C50775118 /* RLMSyncPermission.mm in Sources */ = {isa = PBXBuildFile; fileRef = 92537D6CD0B971AAAE38CA6FCA952824 /* RLMSyncPermission.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 7D729D314EA2673691A1457A79F7A98E /* FIRMessagingTokenInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = E74B565793856E2868A88EFFF929A1EB /* FIRMessagingTokenInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7D7DF06C873B648BC1571FB8138DDA48 /* ISO78164Padding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CB40D2C81289B679425DEDD1A0B1B01 /* ISO78164Padding.swift */; }; - 7E2879544827736BE7DD7E3029E19288 /* FBLPromisePrivate.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 359A536046D13F9BF9A4977AA85528F9 /* FBLPromisePrivate.h */; }; - 7E2FE531B3FF59794C398F6024DFC968 /* FIRLibrary.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F3EB1AA384BA51FBAB480339FC6F717 /* FIRLibrary.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 7E898A61F572C885289F4E188189135E /* object_store.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83561A1BE550C60222567B8DBD7B9C9E /* object_store.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 7E98F6C822C3BC874C2BBDAA21EDE6EC /* SDImageCacheConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = F8320D48C931F3AEBB83288DFE2354B5 /* SDImageCacheConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7EF5370D59E3361250644CCB1E208B81 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96CE92E5425AE24E39E7772E791A1F9F /* Foundation.framework */; }; - 7F4081329351149DB6ED185A4F19A613 /* FIRInstallationsIDController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B05AABF6DDBF7F0E609A84B3524925B /* FIRInstallationsIDController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7F706BAD57226F216A0FAAD0301FF5BC /* RLMSyncPermission.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F294EDF1531907DE680A2507F79C9FF /* RLMSyncPermission.h */; }; - 7F7EF39C14CAE8092FFF5D1168103425 /* FIRMessagingTopicOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EAB78C3EBD08B79BB29F219DA1AD708 /* FIRMessagingTopicOperation.m */; }; - 7FB3576FD619DD256294BAD7E5F83CBE /* IQTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7456C30DEABC709056E38C830B328DC4 /* IQTextView.swift */; }; - 801C634F0F633E92BDDD77AEDC52E5AA /* ActionSheetDistancePicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F994B95A81C90C0D4A20E80C3158D3B /* ActionSheetDistancePicker.m */; }; - 8093EF99E8D88C7E9DC2CC10108D073E /* RLMSyncUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = FFDB12CEC054B42EF7B0CDDAC51AEC69 /* RLMSyncUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 80B457800271ABD91E7DDB0A5BEF0D8F /* FIRInstallationsIIDTokenStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 812FF8F54A2A5C5EA9A678C56FD72EC9 /* FIRInstallationsIIDTokenStore.m */; }; - 80B9D7C293CBD8651BAD00C28766D07F /* FIRInstallationsAuthTokenResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 863D8F71CBCCAE8D6C3777B8987192B2 /* FIRInstallationsAuthTokenResult.m */; }; - 811C09CAC85C41137EFD684E7A9002E6 /* GDTCOREvent_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DA410E2E00B23764DBFA0C10549BB6FD /* GDTCOREvent_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8131DAE0F52114C1AEE72F7993B6AA70 /* FIRInstallationsItem+RegisterInstallationAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BC4753105A074D6C50C2019A0D660CB /* FIRInstallationsItem+RegisterInstallationAPI.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8146B70FAB2BF5F31B73452B2A0A4D15 /* RLMSyncUtil_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A08DA69B96F0B9F29FD22DD9358685AC /* RLMSyncUtil_Private.h */; }; - 83A6C2BCA806CC1C4A3A709553B8E6B4 /* FirebaseMessaging.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B12F578F735267B7742EB1678771172 /* FirebaseMessaging.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 83D237CB9BF0DB8B9B7AE573F65AA52D /* RLMArray_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 29F79AD601A7A8B9B79F7169D2017A7F /* RLMArray_Private.h */; }; - 8447B4C9B50331AB5953B48626AC9526 /* Scrypt.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7DD49CE3C62B9C9BF8E2B663A7CBF13 /* Scrypt.swift */; }; - 84B3C925CCA883C89A4FAF942D952371 /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C630A712DBF2F3BD10E520AC73860CC /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 850D8CCF038F541CB2B367EC9C0F90FD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96CE92E5425AE24E39E7772E791A1F9F /* Foundation.framework */; }; - 857EC95ED85C3DE68D05D2B493051AB5 /* FIRAppInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = A0A174561C82309A7D978CEB57ED4FFA /* FIRAppInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 859DE98E4A3DF8CFEE3FEBEC803D2112 /* Matchers.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5233055C26DB8D380E7619D877CFC75 /* Matchers.swift */; }; - 85A4032A88982139D3F0A5B19F9163B6 /* RLMObjectBase_Dynamic.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A8F3246E32B49855933788771B1CF10 /* RLMObjectBase_Dynamic.h */; }; - 85C53EE2F839CCDDF8B46C40821D8751 /* FIRInstallationsStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 142D1E2C1BC5FC36978E0E70A1EBC1E9 /* FIRInstallationsStatus.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 85F81FD7192839110A69883B6BF6DEA3 /* NSError+FIRMessaging.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AC02E49F7EBAC898B69CDF48AB33E95 /* NSError+FIRMessaging.m */; }; - 85FB50C8A79A473625B9BB664BCCEBBE /* SDDisplayLink.m in Sources */ = {isa = PBXBuildFile; fileRef = F96A7AA28331CFA0591F4AE02D73586F /* SDDisplayLink.m */; }; - 8601D0ED871E1186A5EC1D8CCACBFAB6 /* FIRMessagingTopicsCommon.h in Headers */ = {isa = PBXBuildFile; fileRef = DD50C7D5BF2703CA1D4D4ADF6BA5F8EB /* FIRMessagingTopicsCommon.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 86198FCF0327BC18E1437BDC1C3D0909 /* FIRDependency.h in Headers */ = {isa = PBXBuildFile; fileRef = CA242EA30CDA168E307A6D2F48DD4270 /* FIRDependency.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 864260FA11698201850FDAB0A4212F55 /* RealmCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78569820395287E24D614961947852A6 /* RealmCollection.swift */; }; - 86464C86FA4CFB66A72CCED74E021F00 /* ObjectSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1755D4550CE4A9020E5A8FABBB4F9C7 /* ObjectSchema.swift */; }; - 86488C7395299D62D524FEED908C8AC8 /* RLMObjectSchema.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 4C0B2031AC82B7BC3B12C3F628E06856 /* RLMObjectSchema.h */; }; - 866D090E89CB45DDBF4169EB7154BED0 /* FIRCurrentDateProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 23FCC2666D8D2ECD43F8C6075C24AE98 /* FIRCurrentDateProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 86C561A41EC3F10654AD322BD3CFCA86 /* RLMObject_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DFDE0D991180170E72C2CE72A8C63A /* RLMObject_Private.h */; }; - 86DEB7839281B6C1B4D2D838218822B3 /* FIRMessagingAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = FB92F49E5A82A09E0298ADFCD4A3C9B4 /* FIRMessagingAnalytics.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 870F8CC125713185231805CA5F1A3005 /* SDAnimatedImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = D97BA2185CB65E882C56229F8E664B09 /* SDAnimatedImageView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8722567F2B6B9B77588026CF467DC33B /* FIRMessagingUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E9FF6DAC13EBDD63D463D4238028831 /* FIRMessagingUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 88088975B70CE537682C5DFF4AC2A99B /* MD5.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE15D00210E6D3671055247ABC05F216 /* MD5.swift */; }; - 88304C4055E842C0094C1F1B59FEE3DF /* Combine.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA30EB748D8C3BC89AAC2548E407B000 /* Combine.swift */; }; - 88FFF338367BCC56F7C5D0148639193E /* GDTCORStorageEventSelector.h in Headers */ = {isa = PBXBuildFile; fileRef = A8362B5D872135BD70697E543AD15AF6 /* GDTCORStorageEventSelector.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 89E994F6FEFC472F96A85ED20809EEB2 /* RLMUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = CE511A10E2E27CB8CC18B9A1E433F5A4 /* RLMUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 8A68692B2D967B096E173CF5FF75F590 /* AES.Cryptors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 846E235F5DD469FF13FCB02D792DF232 /* AES.Cryptors.swift */; }; - 8AA937910F87915DE700CAB6C868689E /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7B17512A55EB4D4F2C7FB23B9359A69 /* Notifications.swift */; }; - 8B439A47AA5FDEF67AD63BDDB808AC5A /* IQUIView+Hierarchy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91D643A984E8881A3AC8233310BA5ED5 /* IQUIView+Hierarchy.swift */; }; - 8B4B131D287852548B269C8A8B549D4D /* FIRMessagingCheckinService.h in Headers */ = {isa = PBXBuildFile; fileRef = FD45B7AD3F11C76DF980F3A728053A9F /* FIRMessagingCheckinService.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8B5758DF4B13538BD14B5923B2FCF70A /* NSBezierPath+SDRoundedCorners.h in Headers */ = {isa = PBXBuildFile; fileRef = 9614F848A50E867CD86634E87419BF1E /* NSBezierPath+SDRoundedCorners.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8B62EE767E432E7E52335B5B9A376D7B /* CipherModeWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CC9746F7ACF148D70CB9F2A6FE7B209 /* CipherModeWorker.swift */; }; - 8BE32B39404EF1FABC80431C75BD153D /* FBLPromise+Do.m in Sources */ = {isa = PBXBuildFile; fileRef = E8C6F2DEC642A24F2BE7C47EB26325D8 /* FBLPromise+Do.m */; }; - 8C0467D6F35F276E1A62D7C28BD95E46 /* DistancePickerView.h in Headers */ = {isa = PBXBuildFile; fileRef = C1CCC1203C51EE52531784C112ADF8A4 /* DistancePickerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8CCED25A2C2BB2158134937FB9FB26D8 /* Padding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46FE061DB976489F4B96875AE470D5C1 /* Padding.swift */; }; - 8D34717C107EA741BEE9869A20622AFE /* SDImageTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DB26637B4C7A983E245460E1691AD12 /* SDImageTransformer.m */; }; - 8D73F702A995711B09C3AE6315D3AFFD /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = D72238DAA72639A7992C8F254A311930 /* UIImageView+HighlightedWebCache.m */; }; - 8DF7495E628A544D507BB03A16038FF4 /* GULHeartbeatDateStorageUserDefaults.h in Headers */ = {isa = PBXBuildFile; fileRef = 006EE801EF14194FBF196F3C3F777930 /* GULHeartbeatDateStorageUserDefaults.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8F069CCA5F7C7D3EC2E0115019F9E311 /* FIRMessagingPubSub.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DB460E7FFBC47ECE1095865956574CF /* FIRMessagingPubSub.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8F503167F5162EFCC3E0EA4318EE2B5E /* GDTCORPlatform.h in Headers */ = {isa = PBXBuildFile; fileRef = BC8841F311DB3A4F05874165CC946CCA /* GDTCORPlatform.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8F7479F70C3CF40F3A02EF6650171BC2 /* FBLPromise+Delay.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 2EA9CE05D1DFE28502DEBD3165F8C1E4 /* FBLPromise+Delay.h */; }; - 8F8C24D0CFAD03A5DDD4DB6534FCF113 /* RLMSyncSubscription.h in Headers */ = {isa = PBXBuildFile; fileRef = F5526109A3EFACE19B484D5620D7D1D5 /* RLMSyncSubscription.h */; }; - 907E634EEEB4AC288810AB4050988CD6 /* RLMRealm+Sync.mm in Sources */ = {isa = PBXBuildFile; fileRef = 281D8FF15A1DFFF3DAFF10BDD480737C /* RLMRealm+Sync.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 90B2CE91A693EC5F01C58E7B0DBA61B7 /* FBLPromise+Retry.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A335F797F0FB9F0EC941DFFE5B83A51 /* FBLPromise+Retry.m */; }; - 90B6F89879F8B4241403D3ED15BE2C46 /* SWActionSheet.m in Sources */ = {isa = PBXBuildFile; fileRef = 56D278275B058F795A19B8A5284AB104 /* SWActionSheet.m */; }; - 911448B2EDA2FF880108F77642797A88 /* ResponseSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9944EADD281B8543B43FC6FF7856CD2E /* ResponseSerialization.swift */; }; - 919698B67A879DF4B1D27ADEC113E4EB /* UIImage+ExtendedCacheData.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C1162B65AB5726FF65A08A5F6756D47 /* UIImage+ExtendedCacheData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 91B837CE0DCD8EDB300FCDFFA1279162 /* HTTPHeaders.swift in Sources */ = {isa = PBXBuildFile; fileRef = 041F6080E6F1B8BA523C6C2E5F0CC9D9 /* HTTPHeaders.swift */; }; - 91CB272CC3D7C0D5C1442BCFBC4F5048 /* NSButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = FFFFB607D5F07C81EB6219C82BFE0B43 /* NSButton+WebCache.m */; }; - 921430F4175FC55FE988CDEFC88DA88C /* FBLPromise+Reduce.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 07CCA0508B960E856C07AF0A9E944AEB /* FBLPromise+Reduce.h */; }; - 929E2F99085BD712BB4157CF037A2EB7 /* FIRMessagingKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A34BDC83EA597FF87030DE81208FEC1 /* FIRMessagingKeychain.m */; }; - 92D47F0311E3B44B46B3AD8D7A5C4B7B /* RLMRealmConfiguration_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = F6489F2C1EF781D870469199EB3869D6 /* RLMRealmConfiguration_Private.h */; }; - 9337ECE19A1746F1A23ADB843C09BD2D /* GULSecureCoding.h in Headers */ = {isa = PBXBuildFile; fileRef = DCA78C13257ACA07AB6DBED25A4C2BC2 /* GULSecureCoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 934A350851291541BFD22A75C146A6F1 /* SDImageGIFCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 431D6AD2AD76F92D5553A4199AB4D083 /* SDImageGIFCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 934E075DE32F67EE0220F794B35A9CBB /* FIRInstallationsStore.m in Sources */ = {isa = PBXBuildFile; fileRef = FBF8216C4BA0F5FAFCA4DF57ED6ED799 /* FIRInstallationsStore.m */; }; - 93635169967F703855CA9324A1623000 /* RLMSyncManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = C4DC6D23474A490E032C0DDF651AF66D /* RLMSyncManager.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 936429706F0382340C6EF1803ABC21E6 /* FBLPromise.h in Headers */ = {isa = PBXBuildFile; fileRef = 00F1F168B4E790840B4C3B865A1A7A9F /* FBLPromise.h */; }; - 93E0CC3C9D5184C27B9099F1A32512F9 /* Authenticator.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7AABB46B143694DA5B009C52041CBA1 /* Authenticator.swift */; }; - 93E52B4CE4C0A9445086C395DC520BB8 /* FBLPromise+Catch.h in Headers */ = {isa = PBXBuildFile; fileRef = A243B843977D3FFA06D754093DA0527F /* FBLPromise+Catch.h */; }; - 941E2DF90B0062D3EC436E8167B2D3B1 /* RealmSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 76D9841C1E68CE9361A6992FF5315C12 /* RealmSwift-dummy.m */; }; - 942DD3B86D9153FCBA8746A665EA1BD0 /* FBLPromises.h in Headers */ = {isa = PBXBuildFile; fileRef = EE15263CF4C2C2818F862152C0AD12FF /* FBLPromises.h */; }; - 9459C83E2BC5E4D41B9B935D254146F8 /* FIRCoreDiagnosticsData.h in Headers */ = {isa = PBXBuildFile; fileRef = 659E51AD14E5565FB071605E73BE2BA0 /* FIRCoreDiagnosticsData.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9488F5569F7BD4563860AB64D6DE2737 /* FIRMessagingCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F32596C6F9A5F92AFD232BC7ADBA323 /* FIRMessagingCode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 94FB2E9FBF273077002641CAC5D81724 /* PBKDF1.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAEAF8A048D5FD3079B6343723732A41 /* PBKDF1.swift */; }; - 9504088CAE8E4620226B40481A679F44 /* SDWebImageOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 2880AA96B7C50CB14B78E254DA15B460 /* SDWebImageOperation.m */; }; - 95AF8EADEF8D18098CE495AEA479A89F /* GULHeartbeatDateStorageUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = A7487C06E8DF34D80C44645115050649 /* GULHeartbeatDateStorageUserDefaults.m */; }; - 95DD2B4B561F309255D509314184B151 /* async_open_task.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DCEA8E0870E3EE66FD0DAFF6E1936593 /* async_open_task.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 96C9E9944945A70FEF8F6AC1F0782951 /* GDTCOREvent.m in Sources */ = {isa = PBXBuildFile; fileRef = D02191707B9D8374D62A8B3F4DBEA4B0 /* GDTCOREvent.m */; }; - 96E0830E29D37BFB6ACDAE6069387D06 /* FIRInteropEventNames.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FE625ABED4A4A39E0B44EF3BB1B071F /* FIRInteropEventNames.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 970A6BB5BF8D5909D1BF00E3FD0BDDE8 /* SDImageCacheDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = DBA263F2A89E6E28909F8EFD35CAC717 /* SDImageCacheDefine.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 976B8D9F1D16518DAE0929DF0CE75568 /* SecureBytes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 705407BDFC2ACF1648B6C0E3C1153880 /* SecureBytes.swift */; }; - 9792A95C0CE09E21D89C0748B228D482 /* collection_notifications.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D3A8464565A7ECC6BF1BF06174F21891 /* collection_notifications.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 97DCE693B8DD7825E26343AB98E156FD /* ObjectiveCSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F580D47F58651D2034D6C0F44074450 /* ObjectiveCSupport.swift */; }; - 97E63FB398566178EF6A94C37795FB5E /* RLMSyncSession.mm in Sources */ = {isa = PBXBuildFile; fileRef = E1A5A76B3F15AE4C2C38A8D70C56BD7A /* RLMSyncSession.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 980E5594F8DBCE362764AEDC2F086E36 /* IQToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 705A836C6E197175EA75D51A49850C63 /* IQToolbar.swift */; }; - 98574FFCDA31106ABF124F5D6C7C5177 /* URITemplate-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C5B01BAEFAEADE454A183730175997E6 /* URITemplate-dummy.m */; }; - 98B2E0859F459AB01AB265840F8CE4A6 /* FIRMessagingCheckinPreferences.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F40D4228462660CA4BE37F18082E9E5 /* FIRMessagingCheckinPreferences.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9A7902828F49BD78A454AA95FF89DAC7 /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = 13FCF797284FECE3A13B140BA7A6C5F5 /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9B1D8A7798D8A6F518FC9AF9725431D0 /* URLConvertible+URLRequestConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACD44C588D10AA6CA23A48117EE36567 /* URLConvertible+URLRequestConvertible.swift */; }; - 9B34DAD79707FD04CEB152B02585D484 /* FIRConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 7137386EE9BF38B2B6483FA9C006247E /* FIRConfiguration.m */; }; - 9B43EF1930B25F9CFF3F7FB36FE8F53C /* GDTCORPlatform.m in Sources */ = {isa = PBXBuildFile; fileRef = C21F899E0DBC32A67ADE34A66F7A2CF1 /* GDTCORPlatform.m */; }; - 9BF8AFA981F55B9CD03F35704475A164 /* FIRMessagingAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = 230C2DF16DF9C4FDA79D1828DA8465FD /* FIRMessagingAnalytics.m */; }; - 9BFF63FFEA484FC67C23A671B6E5153B /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 0ECB7740A74C8DF087CC5CCAA9845ABB /* UIImage+GIF.m */; }; - 9C7894C3E737A6906CC6B23AE202F9C9 /* FIRInstallationsIDController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DED94C46EED4DEF21674532BA1277BD /* FIRInstallationsIDController.m */; }; - 9CF920A080A921CC5580D92A5B7949B1 /* realm_coordinator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0DD279B7473F2FE464717897860B7323 /* realm_coordinator.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 9D227F3FB6A74CB6D35300133142E7DF /* UIView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 13343565055CAF3120AD802619E91FCC /* UIView+WebCache.m */; }; - 9D31BF5783A298CB85D5ABFBC868A319 /* GULNetwork.h in Headers */ = {isa = PBXBuildFile; fileRef = 251AC437E4AB28CADCAB834D92DD672D /* GULNetwork.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9D4868165D1303B34B276E46B8B44EE7 /* FIRComponentType.h in Headers */ = {isa = PBXBuildFile; fileRef = 752D9B7CAEC6F057D70938FE33E2B68B /* FIRComponentType.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9DA29F609D6EBB3A31656A0AD0DB8D91 /* RLMListBase.mm in Sources */ = {isa = PBXBuildFile; fileRef = A0A29B5CC59B0DB58210B087BC0A378C /* RLMListBase.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 9E81A61168332B4B4527A870252C25DE /* FIRMessagingTokenFetchOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 575AF376772B398A53BD47788A334E4C /* FIRMessagingTokenFetchOperation.m */; }; - 9E9017DE70A4E4CB818DCC9ABF39AE60 /* SlideMenuControllerSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E46208D1AC10E182C8188D3B8E0448BB /* SlideMenuControllerSwift-dummy.m */; }; - 9F2D718441BA031E1A0EF9DD1A16F1FF /* FIRInstallationsIIDStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 2283CDF983CC68D987E675E693EDAED0 /* FIRInstallationsIIDStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9F7EC9C2489547130F7A9EB31CF9B16E /* GULURLSessionDataResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 55120C5C5BB01A700C2FCC53926BEB24 /* GULURLSessionDataResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9FED70D1E1FBFB80E974E999EF732258 /* RetryPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47BBD24AF2DFA5C4B802260B7E1085C9 /* RetryPolicy.swift */; }; - 9FFBF180E58F87C33F09ECAA10CA6627 /* SDImageLoadersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 89A45638B734B51D38A0767EB8F60C70 /* SDImageLoadersManager.m */; }; - A014EFB9EB506400512F270752BBEBB1 /* FirebaseCoreInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 60BEA434B31D101F866115A2D1CD943E /* FirebaseCoreInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A0688D453FBE70CFC56032E1C58878A4 /* GDTCORRegistrar.h in Headers */ = {isa = PBXBuildFile; fileRef = 19508D9635DEE7FED4030772670091C6 /* GDTCORRegistrar.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A0760C7C41C66CF40E1D2860907765A9 /* NSURLSession+GULPromises.h in Headers */ = {isa = PBXBuildFile; fileRef = CBD56A4891183CE1C7A470DA751FEE3E /* NSURLSession+GULPromises.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A092D7BC5849A8F719BE24BCB5ED718B /* AES+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 162BA16DB4A07234409AF1C9FFB41A86 /* AES+Foundation.swift */; }; - A10C64E4402E96AA72E98D92FC06B334 /* ActionSheetLocalePicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 243BE1AE2BBE963CF634290AE83B0735 /* ActionSheetLocalePicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A128F49AA0C69EC677B7CBE89E876B42 /* SDWebImage.h in Headers */ = {isa = PBXBuildFile; fileRef = A19A8ACB5EB013F9E0ED63C0BF6E5A47 /* SDWebImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A1626C63DC98ECE49ADCE50F5C7F74BF /* AbstractActionSheetPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 3230D4195CC6F7787F106E4E08891CA9 /* AbstractActionSheetPicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A1958B16CCD091C60A8A3A05231A0761 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96CE92E5425AE24E39E7772E791A1F9F /* Foundation.framework */; }; - A1AD9FA0392FEE390B0AE6D3FAD31C1F /* FIRFirebaseUserAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 20B308123DA60ABFD57905575B6018BE /* FIRFirebaseUserAgent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A1CA153657BB3C689240AED52E62A088 /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = 909D5174512FBEDF2F4438425DD6C3BF /* SDWebImageCompat.m */; }; - A1FDEE02E9E4BDFD5F6395E9728DF2B8 /* Builders.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B270A963EE131B68F100CA2D61652BE /* Builders.swift */; }; - A233FC9783903408A8F2A620895DB36D /* ActionSheetMultipleStringPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B895637F6FAB3E8B7F2A656CB34EFA5 /* ActionSheetMultipleStringPicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A248DB778A9F306EE9866BF5578A4F24 /* FBLPromise+All.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F7365CA24E185DB737A0919EBE10110 /* FBLPromise+All.m */; }; - A29E511338E29F9351343660CEA5963A /* object_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B5238574F58033CB7E245705FFA55623 /* object_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - A3199CC12B338BDC13DA57D595EE0B44 /* SDWebImageDownloaderResponseModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 166606002169D53DB590DCDC2402D8D4 /* SDWebImageDownloaderResponseModifier.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A33DC9464A8B60A6B9B6C6E4E28B6E22 /* SDWebImageCacheKeyFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = F9479B7226D799C19CB6BC650C6A699A /* SDWebImageCacheKeyFilter.m */; }; - A3793BF8E8C158EE3B6D5EAF8220F49F /* RLMOptionalBase.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 0928E44AB241AA8AAB8DC0A33368B510 /* RLMOptionalBase.h */; }; - A3957E12BFFD41402737EC9CB044D96E /* SDImageCachesManagerOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = E8B462E640B9975288E437271C0C6824 /* SDImageCachesManagerOperation.h */; settings = {ATTRIBUTES = (Private, ); }; }; - A39980AAA2ACE9F4D130DA9426AF4F64 /* GDTCORUploadCoordinator.m in Sources */ = {isa = PBXBuildFile; fileRef = 03F5D2F51E06C31E2FBD08EC36CE4D2C /* GDTCORUploadCoordinator.m */; }; - A409CFAD2489671BEE79B165FA2B87CD /* GULLoggerCodes.h in Headers */ = {isa = PBXBuildFile; fileRef = E7C6B800A7EFF50A9A1DCBA6601E5E35 /* GULLoggerCodes.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A448E9A75B798B780BED3378A82F8177 /* GULLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 544C4177378510804A127246BCF8EDCF /* GULLogger.m */; }; - A4C8285E5203F6C471882FCAE61948FF /* RLMSyncUser.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 86FD6C2B4A05610AB2888A437DE632CA /* RLMSyncUser.h */; }; - A4EB89C596D01DBF9B652E276E93245A /* RLMNetworkClient.mm in Sources */ = {isa = PBXBuildFile; fileRef = E09A92565CB375B8703E40001DCD8EBD /* RLMNetworkClient.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - A5F181E0CB5960423BF1BF0CB4FC91F0 /* FIRMessagingRemoteNotificationsProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 71A11E4BE13756310BF288A29CA7CBFC /* FIRMessagingRemoteNotificationsProxy.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A603DE41248AC559FCF2D9D77F805BDC /* Mockingjay.h in Headers */ = {isa = PBXBuildFile; fileRef = 31EED164FF5843CCDDBF9C914BD41B35 /* Mockingjay.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A64AEC64280BB6214A9EBE2AFC5A927F /* object_changeset.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D75C8757814D0A31396016FFBE20DDC8 /* object_changeset.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - A667CEC22D1CBDD9B94BE515F77B65A4 /* Mockingjay-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C91DECFAA4FDF6B60D085BD99F012CFD /* Mockingjay-dummy.m */; }; - A6D62AA39E9089012B6BB2BA657BFAB2 /* pb_encode.c in Sources */ = {isa = PBXBuildFile; fileRef = 19C6D3E6DF2F6FFB52BBEC824847250F /* pb_encode.c */; settings = {COMPILER_FLAGS = "-fno-objc-arc -fno-objc-arc"; }; }; - A7164BC1D4458DF39F884C4FABD3CBAB /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 08E7515E1263611536A1E91C40BED4F4 /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A7390BF1B8D151185450902D4F855E18 /* RLMRealmConfiguration_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F6489F2C1EF781D870469199EB3869D6 /* RLMRealmConfiguration_Private.h */; }; - A80404D8B63B127D33C6EE5FDCF9E22A /* SDImageGIFCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FA40879D66F09AE16AAC8B0BA85117D /* SDImageGIFCoder.m */; }; - A89A92F1A42E55D16D68F8C61956B738 /* SDImageAPNGCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = E6B6866183DD1153A5C8570538D70487 /* SDImageAPNGCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A8C06A0F8EEDD99F979D1C5D656FB0C6 /* FIRCoreDiagnosticsInterop.h in Headers */ = {isa = PBXBuildFile; fileRef = F4EC58E5D9A8638DD7B8814580AAF685 /* FIRCoreDiagnosticsInterop.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A8C8A2C92F70DFC3E67E1CCB0A5FBDA3 /* SDDeviceHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A3EA138EB4E4D0801CB209916A3AD5C /* SDDeviceHelper.m */; }; - A8F064C66E4C4BA4A31BF7DFB02A374B /* RLMRealmConfiguration+Sync.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B664C77287C942F9E34C7D7D702F312 /* RLMRealmConfiguration+Sync.h */; }; - A9324976CCBA18CBD07F80CA82C5DF92 /* FirebaseCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BEEEF23218AACC11863C1A3E2EC98785 /* FirebaseCore.framework */; }; - A9C7B29D4878F1690BBE3F8195CF0313 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB5276B55E74AF4EB1ADDA192309AC05 /* CFNetwork.framework */; }; - A9EF99C884611DC051F54D61612701E2 /* GULSceneDelegateSwizzler.m in Sources */ = {isa = PBXBuildFile; fileRef = 49704C776C03DB5D973207C9C54D0E7A /* GULSceneDelegateSwizzler.m */; }; - AAABA6909E7E218399B8D18C8D6E5233 /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DA4FD1697C659CE1EE345AD47DF790A /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB615BA50565AD96594F58874A8D3D3A /* GDTCORTransport.m in Sources */ = {isa = PBXBuildFile; fileRef = 499EF5B8D28905B12B780B3CD61A9672 /* GDTCORTransport.m */; }; - AB94F8B9962F00B7A5C033DE27F2C1DA /* Rabbit.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBC3FCB3BA4009B9F4AD451705C16E5A /* Rabbit.swift */; }; - ABA85887A41495358C83CE3F3030EDEA /* CachedResponseHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D16CEF36A0128B3057A296A717343973 /* CachedResponseHandler.swift */; }; - ABD2E7452FCBB2F2B68D2F13E7CCF934 /* SDWebImageDownloaderResponseModifier.m in Sources */ = {isa = PBXBuildFile; fileRef = F28EC10942D0859D7E8F88348FC72073 /* SDWebImageDownloaderResponseModifier.m */; }; - AC139FED9A7DBE099B12A721A995A516 /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C27B76FAE090920E1B0DEB9129733631 /* SDWebImage-dummy.m */; }; - AC25F92038CB582CDAD8E8BF70FB4643 /* GDTCORReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = A2D23BEE13FE5ABA1847C33BA6D008CF /* GDTCORReachability.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AC96F44279E61358242F26840D4853F0 /* Reachability.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64A4F9BBFD4C2230F01C4D849748E623 /* Reachability.swift */; }; - ACB0327231225EC2DCB37FDAF00AD0BA /* FIRMessagingTokenDeleteOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = F3AAD3CA55A5155C99A46096C20D0021 /* FIRMessagingTokenDeleteOperation.m */; }; - ACFB6A0EC19A7AB36CC18691BCD6B9CF /* BatchedCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = F835DF26614D9FC25363DB3CAEADF866 /* BatchedCollection.swift */; }; - AD0A33625275683C2658F7C34B410BCB /* UIImage+MemoryCacheCost.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E74C7F8E5CCF7349E76351E910A69CC /* UIImage+MemoryCacheCost.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AD10A2B8CAD9EAC4B3DAF1E710CA5979 /* FIRDependency.h in Headers */ = {isa = PBXBuildFile; fileRef = 864748984B96DE752B03C28D80A1CC88 /* FIRDependency.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ADA69A6A8E7776C0DED6858309561E16 /* FBLPromise+All.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 25FCF1FC11F99F41CC8FE1C400879559 /* FBLPromise+All.h */; }; - ADAAA1190AC1ACD8C1ABA3B9CF80E21B /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D7D14929A15F9D5B0176E9CDE24C9F0 /* Utils.swift */; }; - ADC8686B329FB25C367A09CCCF2024D3 /* FIRInstallationsErrorUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = E247D250D6F8A9B7176B64B470594FFF /* FIRInstallationsErrorUtil.m */; }; - ADDF98A85600FE7C46F0B5DE60403BFD /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 237A0819F1D8DA8DB03588A5BF8CE083 /* UIView+WebCacheOperation.m */; }; - AE3B246482DCD60BA846EA3CE983A1FB /* IQUIView+IQKeyboardToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63053457BC7A712B1D849DA362C66A2C /* IQUIView+IQKeyboardToolbar.swift */; }; - AE950A6E392E01E728AAE5D5D7997D60 /* NSImage+Compatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 05827744B1F4135B099BA652B9220212 /* NSImage+Compatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AE9A894C45B1F40A0585B51D241DD2A6 /* SDInternalMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = C2EA805BD42842ADC7097DF27FAB316F /* SDInternalMacros.h */; settings = {ATTRIBUTES = (Private, ); }; }; - AEA085678E919A6450BC8C7E76AEF0BB /* FirebaseInstallations-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E18BE96E6BDE6F7BDC1D2E7BE8055B12 /* FirebaseInstallations-dummy.m */; }; - AEC94C095729BAD0B05C0C7D08BDF8E7 /* collection_change_builder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9BD464934D26FE23FC6D96831569C15 /* collection_change_builder.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - AF53A33BD366AF9440C89CBC9ACB0A4C /* Bit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68C898D63E58A393745FD6648B352DE9 /* Bit.swift */; }; - AF542701F5DEB1C20076CECCCB774FB4 /* GDTCORTransformer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F3580C2F14133C643FE100409FF6EC1E /* GDTCORTransformer_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AF7A83643AA716EFD8F47A010C48FD02 /* sync_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 121C26A0E874B9D6FF380F044C384B99 /* sync_manager.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - AF7F468786F1C39BF5818929BE61385C /* RLMSyncConfiguration.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 2AD7C113B557EE5995A197AEC9EF624A /* RLMSyncConfiguration.h */; }; - AF855A5EDCAEFF0EFCD1F6AC49D664B5 /* SDAsyncBlockOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = C5FFEDFF1E3CCAEC18F6F42115674B81 /* SDAsyncBlockOperation.m */; }; - AFE3D356D8740816BC98243041D0A5BD /* pb.h in Headers */ = {isa = PBXBuildFile; fileRef = 5697BCE5F0F65CCD7FFCBCAE48D4A8DA /* pb.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B079158A2D911929C36CF73B30595926 /* FIRInstallationsBackoffController.h in Headers */ = {isa = PBXBuildFile; fileRef = DF9650B678A6570B0750ACA9453F0CD8 /* FIRInstallationsBackoffController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B13000184102BC002BDF251521D52FBE /* SDmetamacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 13A31AF4024C5C2FB927ED925C18222E /* SDmetamacros.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B13BBBCD3717FAA96288556959C8BDAF /* sync_file.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E7087108465B18382AFFFBCCB2245FC0 /* sync_file.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - B1DB99789806C0441B342B5E9DC53B51 /* SDImageCoderHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = D931A50A8313166A033DE88D54656573 /* SDImageCoderHelper.m */; }; - B26F156640ED2B61B7660159B09C4C84 /* FIRLibrary.h in Headers */ = {isa = PBXBuildFile; fileRef = 43D9E69C9DB48743E32D1CED03F575B4 /* FIRLibrary.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B28E8E6D643AC048084D4EAB3D530857 /* FIRInstallationsBackoffController.m in Sources */ = {isa = PBXBuildFile; fileRef = 83EABF76579C3D6648BFE7A01EE7E49A /* FIRInstallationsBackoffController.m */; }; - B29CA6E05D3A08BE9CE19200717E635F /* RLMResults_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 1AC288358E204E7C81EA626BDC43C342 /* RLMResults_Private.h */; }; - B303A74A554AE72EBBDD6A8B3E4274A2 /* RLMSyncConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AD7C113B557EE5995A197AEC9EF624A /* RLMSyncConfiguration.h */; }; - B343599BD16628F4496E2E2F7ABD40A4 /* RLMListBase.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 948ECC9052D503C98FAC88A033F93ED8 /* RLMListBase.h */; }; - B3750289C10AD65DFE5F79C135CDC02D /* SDImageFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = E23B01E1DC88EA5F9AE33163E889BDBF /* SDImageFrame.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B37F65A535A43A4273A635A1E883E3DF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96CE92E5425AE24E39E7772E791A1F9F /* Foundation.framework */; }; - B3A68A641702DF832A66B0B20DA33DB2 /* FIRMessagingExtensionHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = AD2A290D30BC155AF1CBC178D4BDF8C6 /* FIRMessagingExtensionHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B3C3A40D413995E1012EBA0BFA87C125 /* FIRInstallationsIIDStore.m in Sources */ = {isa = PBXBuildFile; fileRef = C5AF7B034A2F64A782B231CA1A6AB8E9 /* FIRInstallationsIIDStore.m */; }; - B3FEF06F8ED5C55909CD99FF6A529DAD /* FIRInstallationsStoredItem.h in Headers */ = {isa = PBXBuildFile; fileRef = E7FF5F7015E1BE438F1EACEB0519506D /* FIRInstallationsStoredItem.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B412BE78A6266B187FD49C728A32B49E /* FIRMessagingBackupExcludedPlist.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FE9D4DD0EE5BEAA6BE3E7E4956A5697 /* FIRMessagingBackupExcludedPlist.m */; }; - B4852CA715C69CA4E647C880A65BC460 /* Pods-MyStudies-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B655AFFE819E391100EDCEFCD6E138E5 /* Pods-MyStudies-dummy.m */; }; - B5100B423F78B1CF2EA5B47DB9D503D5 /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E426A0418D1F71A0ACAE7FE5185949C /* SDWebImageDownloaderOperation.m */; }; - B544C14FBC64FA191A718D0994398BE2 /* GULNetworkInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EDEDEB38B59652322819840B7D510F4 /* GULNetworkInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B5D6F3E34540D26973E78445BC8667CF /* SDImageHEICCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 773D5FAFA8378E3C7770F04F77B21883 /* SDImageHEICCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B66105101971D716385568E5DD94AA2B /* GULMutableDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = BBF4B7A90623E68E7C9CD3CC24437F98 /* GULMutableDictionary.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B6716D02337017074C75E884182D06EB /* FIRMessagingCheckinPreferences.m in Sources */ = {isa = PBXBuildFile; fileRef = CBE96F3DD76CAD0C686276C339434CEA /* FIRMessagingCheckinPreferences.m */; }; - B74F4E473F8A8EE8922DE009ADBA3AB0 /* SDAnimatedImageRep.h in Headers */ = {isa = PBXBuildFile; fileRef = 480AAB33A312CA82AE61F505F0AEF9B1 /* SDAnimatedImageRep.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B7AB394684DCBE0A005A40A85FC837D8 /* RLMUpdateChecker.mm in Sources */ = {isa = PBXBuildFile; fileRef = 053AB860E5634039BAF88BD7E0FC5BE0 /* RLMUpdateChecker.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - B7E17DB82CEFFEE5D3EF0327A919FC57 /* SDGraphicsImageRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = A7301257D3F72AC8BA18FAED3CEF641D /* SDGraphicsImageRenderer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B7FFB7F10C918E1F318B7D5668BDE0C9 /* Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7724FA1AEF17D65AE7D26CF86894844 /* Operators.swift */; }; - B80CAAC6DC6ACB98AFA2D5FED2D71682 /* RLMCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = D0671CDE367305EC8D3EAA017AE75ECD /* RLMCollection.h */; }; - B817EC1870B352D890AEA691DE49F608 /* FirebaseMessaging.h in Headers */ = {isa = PBXBuildFile; fileRef = EE6BF39133A61032FF73A6916EC58D0F /* FirebaseMessaging.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B87533EEF47332857C250651B14F8707 /* network_reachability_observer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4727D23BEFA427118D70B96364985397 /* network_reachability_observer.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - B8D301219688D37DF2DD382916003419 /* FBLPromise+Race.h in Headers */ = {isa = PBXBuildFile; fileRef = 05BFE78A90925045A780B3A8EB1F21DE /* FBLPromise+Race.h */; }; - B964F75E0BEC223C3DDD199C6342AE0F /* SDWebImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D61EAA7BA118557928346B039256C36 /* SDWebImage-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B98378C55379E1B92897F11A22E38443 /* IQKeyboardManagerSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AF45B79E4B0FBA86E0B6467CBD42CEE1 /* IQKeyboardManagerSwift-dummy.m */; }; - B9D6FB91391DAD19DB3AEE9A4B94D17C /* FirebaseMessaging-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7EF8CE9BA5ABA56D54A2F16B7A2FCC06 /* FirebaseMessaging-dummy.m */; }; - BA530F0C097D606E5159955512062F0B /* FBLPromise+Testing.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 939E77A1AA3787216ED5F1749D86D0B5 /* FBLPromise+Testing.h */; }; - BA9855A8748C7A5268A26B7C1FE6C6E3 /* FIRInstallationsStoredItem.m in Sources */ = {isa = PBXBuildFile; fileRef = DB293053A331C555C618D86A7678ECD5 /* FIRInstallationsStoredItem.m */; }; - BAAF14E52869F9E47F5CAAB4AE02427A /* FBLPromise+Async.h in Headers */ = {isa = PBXBuildFile; fileRef = 66FF5C7177402EF69F9E032898006650 /* FBLPromise+Async.h */; }; - BB2571FA2B908271A1D755389260AAE4 /* FIRComponentType.m in Sources */ = {isa = PBXBuildFile; fileRef = FC5B6663F427A9E4FB041ADD91EE9D06 /* FIRComponentType.m */; }; - BB5F6E268F138999CD9B5A3A34957FFF /* FBLPromise+Do.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A75C31C67E549259D25BDE159CEA0FE /* FBLPromise+Do.h */; }; - BBD6D52922E9F850D24D66704634C001 /* RLMSyncSession.h in Headers */ = {isa = PBXBuildFile; fileRef = CD9BCE9E2C02D1D7013DDBFA6CAE016A /* RLMSyncSession.h */; }; - BCCA9A17578C2ADF025AEC53F4B87CCA /* FIRComponentType.h in Headers */ = {isa = PBXBuildFile; fileRef = 9463D860456FB689C22804BED88D0803 /* FIRComponentType.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BD2E6AF833ED00606D4FBB882E06A433 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 13B1AA9A64AEFCDE68FEBB56B60AE309 /* CoreTelephony.framework */; }; - BD5052A96DB97C77C4AFA67B875AB50C /* RLMThreadSafeReference.mm in Sources */ = {isa = PBXBuildFile; fileRef = 407C0EA82D2794AFA141886522441A57 /* RLMThreadSafeReference.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - BD7A46AA243F4CB8E9BBEA4A90BD7136 /* FBLPromiseError.m in Sources */ = {isa = PBXBuildFile; fileRef = 501AD06683AD4E27FF53EDDA150AD86C /* FBLPromiseError.m */; }; - BD7FB260F9823A15C481A5B35C1636CC /* ActionSheetLocalePicker.m in Sources */ = {isa = PBXBuildFile; fileRef = A93792CA49A4BE392FE79EEB74008676 /* ActionSheetLocalePicker.m */; }; - BD8E2EDAA9631CEF3CDEECF1254AAA23 /* SDImageCachesManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 314252F48F4713320A94CD62EFC62116 /* SDImageCachesManager.m */; }; - BE357CD131EB2659A5CA41EB0BCD624F /* Utils+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 691DA74C687A632003A5B9CE2E69CA14 /* Utils+Foundation.swift */; }; - BE53AAB411FB81808F00AC52DEB8E05D /* FIRHeartbeatInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 7783CE513EA70BA02007C2F7034279D8 /* FIRHeartbeatInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BE61A71892E0D8DEA0A986A2BEEEF6DA /* FIRMessagingRemoteNotificationsProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 26686002C9D8C8EFE805D254868E0A1A /* FIRMessagingRemoteNotificationsProxy.m */; }; - BF6EF2858D7A812CB13F357B45FFC9A9 /* FirebaseInstallationsInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 042704367765D9F013F4E111BBB4D52A /* FirebaseInstallationsInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C02773AB7B368C1099A90E45AE575AAD /* FBLPromise.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B3479AC1BAC595E7B95332DB343B33 /* FBLPromise.m */; }; - C02A1FF4C9FD5947E76E203B2E3F30FD /* GDTCORRegistrar.m in Sources */ = {isa = PBXBuildFile; fileRef = 294ADF7051FB25145BD211B8BB8823A8 /* GDTCORRegistrar.m */; }; - C04C5F1F1D6B337F87E157B55A747E41 /* IQKeyboardManagerConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20C948E606D5CE44AD03A5C7366A9B1B /* IQKeyboardManagerConstants.swift */; }; - C08339DB44B4C8BA6831AF1025CB516F /* RLMRealm.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = C37A25646D2E45AE830BC18C39804542 /* RLMRealm.h */; }; - C0EB3776478AB80676E488BC9C9CDA3C /* IQUIScrollView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92ED901BD940887D5EECCE82872D08FE /* IQUIScrollView+Additions.swift */; }; - C175D4AF9FDD1EAD5793CA2AEF5D7BA3 /* FBLPromise+Any.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 800E0C9B7CB1B577C7812930D92BA0CF /* FBLPromise+Any.h */; }; - C179CB663E8AFAE06C417D0AC1152FC5 /* FIRComponentType.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E3EC9425FDB95292D63B027016260EE /* FIRComponentType.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C181B4472841A084DB5842737D1EB48B /* FBLPromise+Catch.m in Sources */ = {isa = PBXBuildFile; fileRef = E1E28F40CBE6494D99DA31DC36109A39 /* FBLPromise+Catch.m */; }; - C19BD89E1869A4B5347D4F71CFAB85F5 /* NSError+RLMSync.m in Sources */ = {isa = PBXBuildFile; fileRef = F1C1F992D547B3D1C656477FD164A8CB /* NSError+RLMSync.m */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - C1BAA07809357F6529E42BB03E129FDD /* FIRAppAssociationRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = 8557C3098119DEB8E40364362615D661 /* FIRAppAssociationRegistration.m */; }; - C1C5B050B55C15103ABC81769551A283 /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = 626528A463AED29883E476C13F15A539 /* Response.swift */; }; - C1DED19C51EBD7400D401BF04D2C43DB /* GULLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = F1DBB638F494D88CBE86A646A5978997 /* GULLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C1F1DB6A9CBDE584D09BA1613AAD4F9D /* Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7683C233198F76119B2913778EDC888 /* Alamofire.swift */; }; - C237BF7CC4251B70879620EDB8ECB238 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 407B19389CE8A310DD46D01A3D6C6823 /* UIImageView+WebCache.m */; }; - C26CC83F0D4DC5A95E3684E15713A93D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96CE92E5425AE24E39E7772E791A1F9F /* Foundation.framework */; }; - C291089ABC2480FF25CDBA76E2B65976 /* pb_common.h in Headers */ = {isa = PBXBuildFile; fileRef = 06BFCF2C6211AF4CCCCCF67A9C4536E6 /* pb_common.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C30559DFA8C102425C0D1DA1D2FD9F58 /* FirebaseInstallationsInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B69A6CBE35A2F01D911572A4A3974A1 /* FirebaseInstallationsInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C311E505311BAEA04C896AD42725298D /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = B7BDDC4ACE32101054FA8B7FE53B8844 /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C31A1EC6B8C14C595A14E46A9C8A34DB /* ActionSheetPicker-3.0-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F4B3DED2C5B8E55CEE4D4809A4D0F342 /* ActionSheetPicker-3.0-dummy.m */; }; - C35DCE97EB77150C41E735DB57BD6616 /* IQTitleBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD7E50B111AC009DB830CA127E155DE3 /* IQTitleBarButtonItem.swift */; }; - C4B33C55F1B345E6A6108E2B2118A179 /* GULKeychainStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 170BF41F3D80EC5965A6679E24A00F04 /* GULKeychainStorage.m */; }; - C5463F67C1CABB160D29A58E0FE0FB30 /* GDTCORConsoleLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 864038E8150C2C4AD1491AD1F3A1B980 /* GDTCORConsoleLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C5A96F960FBC6CC9EFC9E500253DF39E /* pb_encode.h in Headers */ = {isa = PBXBuildFile; fileRef = 684B1C7C88075B9B348E69A61640F129 /* pb_encode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C5E75553E150D75C05DDFF6A1F937B2D /* SDImageIOAnimatedCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A0610993BF3A21BEDC0331AC74BCF08 /* SDImageIOAnimatedCoder.m */; }; - C63FB727C9C81148C0389293D59D8385 /* FIRComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 0CD3BC32129764C7CA355D1BF01A99ED /* FIRComponent.m */; }; - C6718FC8DA44E15B8F7F022FC42B06B6 /* FIROptionsInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = DB7A084B224E3CDC6293F2BA5141818B /* FIROptionsInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C6D5A4B4028B2C43380C9FA58BD5C8CA /* Alamofire-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B0F4AC7BB8AE303CA3DF523F14B53F81 /* Alamofire-dummy.m */; }; - C6D97F468A3E94FFF3BD3AFF809936E0 /* SlideMenuController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A83DD4F2C208EB2E9B9F9B982ABA86AA /* SlideMenuController.swift */; }; - C6FF07461DB95FD96B47723C123B36BB /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = 03E01B4F8255ECB27B91A7290C2C0581 /* NSData+ImageContentType.m */; }; - C71059E76FE73E031E4E146697D84ABD /* schema.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CFFCB7D60C7B1F28BFBB156C93EF4FC /* schema.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - C7452EED9D42BCD77E43AFF8A13014F7 /* FBLPromise+Validate.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A2E811D849E65D02560B4FD80EEBDD6 /* FBLPromise+Validate.h */; }; - C76B0E50CBC62A5D037B6A194E087E74 /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 846A54F6F1F1C1229CDE012D56ECA7D2 /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C7860C4C8C9CAA4A184CA26A94AB672E /* FBLPromises.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 474FDBF5FF8966AFDB911BACA2C5BA7F /* FBLPromises.framework */; }; - C7F50EDBB22A2456909CD13BF0986354 /* SDWebImageError.m in Sources */ = {isa = PBXBuildFile; fileRef = CC7C9A39C665AEC6CCD0D9A5443E1140 /* SDWebImageError.m */; }; - C84517532E67DDDC8A5CBB8489F15EC8 /* FBLPromise+Then.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 1451B052EDF69823983D38AE91B6D78A /* FBLPromise+Then.h */; }; - C88C6F244B1A9918EE160C0872EF7144 /* external_commit_helper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D72A32FF1E0AF7C9E1CA525F6558B163 /* external_commit_helper.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - C8BECE475FFE148E70377A8E17DB1A15 /* CCM.swift in Sources */ = {isa = PBXBuildFile; fileRef = F09822678CB10BD1A74A26920FFC83A1 /* CCM.swift */; }; - C8F21C659FE5CEA7C0670332E8D611B6 /* RLMSyncCredentials.m in Sources */ = {isa = PBXBuildFile; fileRef = BB077B82D2A9A57FA42DC5C08DF91220 /* RLMSyncCredentials.m */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - C9563AD909C90C311FEBB6F1B9ED3A0D /* FBLPromise+Catch.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = A243B843977D3FFA06D754093DA0527F /* FBLPromise+Catch.h */; }; - C95D091FC52554ECE223F92C4A5BCBF6 /* SWActionSheet.h in Headers */ = {isa = PBXBuildFile; fileRef = ECC4A99F4EA0D649D04F060078261415 /* SWActionSheet.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C9CBE7DEF58D8A5809D0EB194C36819B /* FBLPromise+Validate.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C94965A419B71F22543CCAA2917B6D9 /* FBLPromise+Validate.m */; }; - C9CF0C80969998C8B7F8F287BCC09484 /* FIRInstallationsStoredAuthToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A3C712F0F9555A673A9FF81CBA60997 /* FIRInstallationsStoredAuthToken.m */; }; - CB32C609B5CE4EC09F7E2704F669189F /* FIRMessagingAuthService.h in Headers */ = {isa = PBXBuildFile; fileRef = 64B1C31A45C7B0ECA9401EC03254CC0B /* FIRMessagingAuthService.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CB357F57EFED387F82535E88B5CD7662 /* RLMResults.mm in Sources */ = {isa = PBXBuildFile; fileRef = E07D31F71C77F24C8582889686041795 /* RLMResults.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - CBBEB3ECDF849F094EAB5EEE2C98A402 /* FIRMessagingTokenManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 53BFA135230FC31D40245189AF5E0C59 /* FIRMessagingTokenManager.m */; }; - CBE05DE863E3403BD5BA21D6B7735A25 /* FIRInstallationsItem+RegisterInstallationAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = B090FEA8747328B3DC039D31125AE528 /* FIRInstallationsItem+RegisterInstallationAPI.m */; }; - CBFE710FC8E896C221DA2DB69B2B0DCF /* FIRMessagingDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = B7170B949773D5A043AE9A197C1B8788 /* FIRMessagingDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CC198E7E5F2ED16B38BE86D1773DFE0E /* GDTCOREndpoints.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D6A51F40E2E8F7B9FC79A9D96C40795 /* GDTCOREndpoints.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CC1E29A6A0086A77A6CA0DAE1F5BBF1A /* FIRComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A918DA9646862A213968C27CC812379 /* FIRComponent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CC71580C36A881BAAD8005CD96E1135B /* FIRInstallationsLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = A9798CF1901066462B184EED06FA1D80 /* FIRInstallationsLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CC81204D03046B2432A1D9687468DC8B /* CryptoSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 82668E620DA82196DB6D63532C0190DA /* CryptoSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CCE908BC864E54CC218088E55CA4DE38 /* RLMSyncUser.h in Headers */ = {isa = PBXBuildFile; fileRef = 86FD6C2B4A05610AB2888A437DE632CA /* RLMSyncUser.h */; }; - CD1D7BEABD3A65D69AC665F84D2C0EE5 /* RLMOptionalBase.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 0928E44AB241AA8AAB8DC0A33368B510 /* RLMOptionalBase.h */; }; - CD73E7564F8EA01D0A4548F09CB55204 /* GDTCOREvent+GDTCCTSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 63C619DE9BE3CCD0A0812566278340C4 /* GDTCOREvent+GDTCCTSupport.m */; }; - CDDE37ADFE43DE1677A75C6532214557 /* ZeroPadding.swift in Sources */ = {isa = PBXBuildFile; fileRef = B323C54A939899E339EAC33ECA8E6DAC /* ZeroPadding.swift */; }; - CE0E4942AD3BA8B5AD41B08524DBE718 /* GULSceneDelegateSwizzler_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 105F0F4818FB674A5888D58E8BBCD69E /* GULSceneDelegateSwizzler_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CEC7B709885BA67EBAF2846CAC2D83E8 /* GDTCORFlatFileStorage+Promises.m in Sources */ = {isa = PBXBuildFile; fileRef = EDDF42B19D39219577B569C1A69CCEE0 /* GDTCORFlatFileStorage+Promises.m */; }; - CEE39451D2648F560E415CEE64855EEF /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BE6DA74B44F1046517C807B43528A27 /* SDWebImagePrefetcher.m */; }; - CF2AC5461B991D1E18D0E47C50FCB3FC /* FBLPromise+Testing.h in Headers */ = {isa = PBXBuildFile; fileRef = 939E77A1AA3787216ED5F1749D86D0B5 /* FBLPromise+Testing.h */; }; - CFCEE27B4FD86C55B5A923D3FAD919DB /* GDTCORRegistrar_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D8202D3E060630CBB2F0B8F6D1E5BB78 /* GDTCORRegistrar_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D03F1F02DE8606E6057D57866611BEBF /* MultipartUpload.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A9141B5DBAFD79279A115AFCA1750D9 /* MultipartUpload.swift */; }; - D05F84A586D1CB0191FC0CE5F6FD5C6B /* HMAC+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D1223B53F45937C2D8E549F844CE896 /* HMAC+Foundation.swift */; }; - D06DD64C3EAA181EF4FDC9A8A3FF66FC /* GULAppEnvironmentUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EE2A87672FBAC31E7864C137E9CFFDE /* GULAppEnvironmentUtil.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0D2DE8A288C5BB1E66C1ACC5E0B3313 /* FIRAppInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D864C8C01CC51B7F19D672BC99E2D5F /* FIRAppInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - D0DD1B84477FCFB3338CD59D4E0C0308 /* FIRMessagingAuthKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = 21EDB470C1B431BF3502D1AE1E257E30 /* FIRMessagingAuthKeychain.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D11F694EEE8807273043D886A11DAE18 /* FIRInstallations.h in Headers */ = {isa = PBXBuildFile; fileRef = E45899A00B8576F7513A7D0256223DF9 /* FIRInstallations.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D14066FAE94E304798E43651E5886D13 /* ParameterEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = D89A4E1938B16D8F672779FD42648F62 /* ParameterEncoding.swift */; }; - D1750DE36EE5BC8B40D828262ED69047 /* FIRMessagingPersistentSyncMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = 89447C893828D75B9A945EDDC78BA278 /* FIRMessagingPersistentSyncMessage.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D178E7A915C804DC54F57BE6050E2CFE /* SDWebImageTransitionInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E2758BCC92D424062539F9E983F9F56 /* SDWebImageTransitionInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - D196D8C0815BEC987C7101B188B3F6CE /* GDTCORUploadCoordinator.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FDD5E1FCA6A592C9E96544E56D90D93 /* GDTCORUploadCoordinator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D1F37DF2D3CA50FE7E74B56642705B5B /* RLMListBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 948ECC9052D503C98FAC88A033F93ED8 /* RLMListBase.h */; }; - D209BE0816237DA14EB1D939314389F7 /* UInt32+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = B22D89A31859FC1C4911D8263FA0E866 /* UInt32+Extension.swift */; }; - D21E35FFC200B76A5078C2A6FDD25834 /* RLMSchema_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = B8EEE29B6D21F196FF2BC12DD5DD9D57 /* RLMSchema_Private.h */; }; - D2CDB2227FC185093565DD8CAC32AB5D /* GULNetworkURLSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 01904FF8D07C58EFF3F7DC7B38664C95 /* GULNetworkURLSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D312CE482F7AD12D95BFC5E94DDA53D6 /* FBLPromiseError.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = BD71CCA7604C663CE9211AF74D84BE11 /* FBLPromiseError.h */; }; - D31FC7FDD450C4CDD633ECBAD27C6221 /* URLEncodedFormEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4345FCEF681F59EF390184CE72D0E6CC /* URLEncodedFormEncoder.swift */; }; - D3248707F2E64484B63112751F8EAE4B /* RLMResults_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AC288358E204E7C81EA626BDC43C342 /* RLMResults_Private.h */; }; - D3D77BEE08C25095BC183D9443A81B05 /* FIRMessagingTokenFetchOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B11B517153CB418E80BD4DB887FF43C /* FIRMessagingTokenFetchOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D4247D4E1F33160C398B3C13832B0539 /* Cipher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56CD4BBC18CE67C39A7CF12B8605C90C /* Cipher.swift */; }; - D44428DB2C843DA42DFAD6D6CC333B18 /* Generics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 608C19CDF5F7F340220D2718615D51E2 /* Generics.swift */; }; - D465C8CCF79D14CB3CF922BF60DC444C /* FBLPromise+Reduce.h in Headers */ = {isa = PBXBuildFile; fileRef = 07CCA0508B960E856C07AF0A9E944AEB /* FBLPromise+Reduce.h */; }; - D4D4466507E46650DAB4FD9719D7B8B2 /* RLMRealm_Dynamic.h in Headers */ = {isa = PBXBuildFile; fileRef = 38BEFC79FC0B3038FC08CEAE376D479A /* RLMRealm_Dynamic.h */; }; - D53FB1F0EDA7C2473AC2F6B5D2C6DD6E /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1BAA874222D307237209F71090049BE3 /* Security.framework */; }; - D595CC3952ACA3D447CE1D36F7AFA8B2 /* URITemplate-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A3AFEA306C07447240F9D4673A276EB /* URITemplate-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D5EAAFB6FAD77A8F0699345149BA3CBB /* URLRequest+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71492E04EE0DDE32FA529F56DBAD25D9 /* URLRequest+Alamofire.swift */; }; - D66624350E8CB7C35B57C939973778F0 /* FIRAnalyticsInteropListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 59BDAB41DB8A613F0C4A6D23D4D0DE29 /* FIRAnalyticsInteropListener.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D671837C30530F9EE635650C75D7C522 /* GULKeychainUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 547E0F0E9C3FD84B7310D70A66C3C2B7 /* GULKeychainUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D6E9170631C6F926E40DB284A36829D4 /* GoogleUtilities-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 991A5EC838D809DC10D814B9E8DEC3BF /* GoogleUtilities-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D6F77BCA984B47F856D80E231AC5BA7F /* Schema.swift in Sources */ = {isa = PBXBuildFile; fileRef = 497B1E09724BEF3FF7FD7EBC64ACAB21 /* Schema.swift */; }; - D70D3A2B11DD4A323F1ECEC322EE4078 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 06AFDF03F9C1D8B9F4CF9B8D0016C73C /* SystemConfiguration.framework */; }; - D75669AE1AD800428598846D24193E8A /* PBKDF2.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79ADDA42485AB4FD68719AC8787415E6 /* PBKDF2.swift */; }; - D8D3971B1E3EF334029CF9139D4434A5 /* GULApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F2621FB242E5BE194D8ED62819185E /* GULApplication.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D8F61F11DD352FF0DF8320F8EE5139D5 /* GULAppDelegateSwizzler.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E38033C3311FDBF035B7AC4D172C929 /* GULAppDelegateSwizzler.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D91024E2275D2B62BB8CDFAADDA9F999 /* SDAnimatedImagePlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 77A3D392E38E05B93A51C3C29F75430E /* SDAnimatedImagePlayer.m */; }; - D91C6F1B091A81D5910ABAFEAA892E60 /* FBLPromise+Always.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = BF3494D42C82FB5E482271BDF58BC576 /* FBLPromise+Always.h */; }; - D97B824F85F171A756C600DBCA097F25 /* FIRMessaging.m in Sources */ = {isa = PBXBuildFile; fileRef = 25CF384AECDAD25EED31BF97E9023453 /* FIRMessaging.m */; }; - DA0747FF6F30BABFC2AE24586B30A3D7 /* CryptoSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AED399ECD30AC6CD7939977E47D59C39 /* CryptoSwift-dummy.m */; }; - DA1BE65148BE8A83B24F7F47C63F239A /* FIRMessagingSyncMessageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E25CF9E464B86FF2C956FB7C8DD9861 /* FIRMessagingSyncMessageManager.m */; }; - DA6895F97E7A188A1086A604D704181B /* SDWebImageIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = E165E9F585FFB415E83EE2C519002B48 /* SDWebImageIndicator.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DB3B6C51F231FFDFADC910A146771A28 /* cct.nanopb.c in Sources */ = {isa = PBXBuildFile; fileRef = 738E1CDDE859CBEA8F97C5B308F73477 /* cct.nanopb.c */; }; - DB852F56F226F428044F9DFA8174B43E /* GDTCORTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6AE495A6DE9D91B2470DDB5F5798382C /* GDTCORTransformer.m */; }; - DC627AFC5B585686898B014184AFCABD /* AuthenticationInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 418077CEAAD453A2CE0566D5E5509F1F /* AuthenticationInterceptor.swift */; }; - DCEB38EC67715951D97961847005DED8 /* GULAppEnvironmentUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 60D0436CE6406CD207DCA38E5AD38946 /* GULAppEnvironmentUtil.m */; }; - DDABCEDA1455A7213CC6411BEE294CCB /* SDAnimatedImagePlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 23B0AC2796C0D9DC98FF91206D3981DA /* SDAnimatedImagePlayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DDAE4BCED7BE239C249141CBBB8F9498 /* RLMMigration.h in Headers */ = {isa = PBXBuildFile; fileRef = AF0F699C939997A311DBF5CAC1FB2BE3 /* RLMMigration.h */; }; - DDBA6F9E901A91BC23E33A3091D5A1C6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96CE92E5425AE24E39E7772E791A1F9F /* Foundation.framework */; }; - DDE417BA9D13D2BB98316DF0512A1944 /* IQBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF44CDB03A657F06858912B8ADE089A7 /* IQBarButtonItem.swift */; }; - DEC6A6441AE4219BC277A8B0954A68AD /* GDTCORUploadBatch.h in Headers */ = {isa = PBXBuildFile; fileRef = 886BC41C8712FF81292C4ADB9E0AF2EB /* GDTCORUploadBatch.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DF1B326BA50D2A86E599DBC375E11363 /* FBLPromises.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 474FDBF5FF8966AFDB911BACA2C5BA7F /* FBLPromises.framework */; }; - DF29C18AEB2B2A942206C18DBF5833BF /* FBLPromise+Await.m in Sources */ = {isa = PBXBuildFile; fileRef = CE7ECEC0012DED25A293A50764593460 /* FBLPromise+Await.m */; }; - DF30402C4352CEF575DBEB20BB0D0C35 /* RLMObjectSchema_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = BBA081D88B3A8E08ADBD5DA995E2ABDF /* RLMObjectSchema_Private.h */; }; - DF32AA01A71E3AAAF2F476873A472838 /* SDDisplayLink.h in Headers */ = {isa = PBXBuildFile; fileRef = C892B08EBE0C88B8F83C715610FE8093 /* SDDisplayLink.h */; settings = {ATTRIBUTES = (Private, ); }; }; - DF466DB5280164C8A71DCEBF497739F1 /* RLMProperty.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 928FE213F6BABD395070DBED6D711737 /* RLMProperty.h */; }; - DF4B65322F06C08D16BB0A774DB901EB /* FBLPromise+Timeout.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 1318DAFB39FE3FA5EE1408916E5334B5 /* FBLPromise+Timeout.h */; }; - DF5097AC574AB484A1F7B8740CBC50E9 /* FIRMessagingConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 89EB908E14258DC16339D5FBA1E70EA4 /* FIRMessagingConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E056AC81CC47414BEE81655CBF0D55FF /* GULSceneDelegateSwizzler.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EF6C70D9C692FDA7EF6AFFE0C205737 /* GULSceneDelegateSwizzler.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E151113651DC9FB98E501328D0AC5033 /* GoogleDataTransport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 94EEDDE0868EDDF2409DB678DFA0047C /* GoogleDataTransport.framework */; }; - E16C9A62836ED1941E089352A55B42EC /* partial_sync.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 70739CE1C376A131C345089D41F7F08B /* partial_sync.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - E1731CAB8234CC5036FCAFE902640E2F /* UInt16+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E311DBAB691A7D9C9279F13385CA37A /* UInt16+Extension.swift */; }; - E19B56D9B47F6F81198C6D4B487CF99D /* Int+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2BAD63827AE0F6727E7562A0BCBCD7B /* Int+Extension.swift */; }; - E2C30AB4979AA3406CD76F15EF1D428E /* FIRInstallationsSingleOperationPromiseCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 95E296B84D8CD03DCC39216A74A4C74C /* FIRInstallationsSingleOperationPromiseCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E30AFF09BE355906C38B27B0CD35F806 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8ADD59B7A4F54D4DDA367047E513B60A /* QuartzCore.framework */; }; - E31EA64574CD3A75445A4125174F0E03 /* RLMRealm.mm in Sources */ = {isa = PBXBuildFile; fileRef = E3564D13907EDB487F2B041F734DCFD6 /* RLMRealm.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - E3475B49ECABE351E951BF085877D01E /* FirebaseCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E2746E1C1EDE65A483F8029C2CFC1C01 /* FirebaseCore-dummy.m */; }; - E3AD1B6FF0BF54B41110C1774F22879C /* pb_decode.c in Sources */ = {isa = PBXBuildFile; fileRef = EC1B4799178433D78A075EB95D9D91AB /* pb_decode.c */; settings = {COMPILER_FLAGS = "-fno-objc-arc -fno-objc-arc"; }; }; - E3C7DC809034DACD9D1FF1856DAD3ED2 /* SDAnimatedImageRep.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E2C40842B6E4C39E180D9207F1E17FB /* SDAnimatedImageRep.m */; }; - E3F51CB54A45249F79A9C49F02039CC5 /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C4C97B3D1D21A8E09EDE223D2A7ABCC /* SDImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E419D0678D7215838F870AFE6887B61C /* FBLPromise+Then.m in Sources */ = {isa = PBXBuildFile; fileRef = DF89BA78D547469131E7663EF33DEFC2 /* FBLPromise+Then.m */; }; - E4C431B7EFEE77D030DE76DD5342CFDD /* FirebaseCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BEEEF23218AACC11863C1A3E2EC98785 /* FirebaseCore.framework */; }; - E4E1FA42EF47413EBEB0D1E5827C21E5 /* SDGraphicsImageRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A81D9BB1CDD86F8D47F1BCAE80233CB /* SDGraphicsImageRenderer.m */; }; - E4FBECD1B083212C65743404CDF134DA /* Blowfish+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36D3CBD2B108BFD3BE648EA9CC38ABDD /* Blowfish+Foundation.swift */; }; - E57482DCBAB73E4AC9A8EB0816998D8F /* SDAnimatedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D4EA0A339B4C02E0528360927CE1AA7 /* SDAnimatedImageView.m */; }; - E589A3BD933873AFC6CC5EE60C2ACF85 /* FIRLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = A5F58FBAF73CE2803158A5F029EC0585 /* FIRLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E5DD7F8E97DC431FE7A82438A946A12A /* GoogleUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 660A5577CA9AAF26647707D912A886CC /* GoogleUtilities.framework */; }; - E5F6ACACDF29D937A21E7DEC85A13E3E /* ReachabilitySwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7BF688785C15162B30AA934AF388B86D /* ReachabilitySwift-dummy.m */; }; - E6E1630857625BE80CE8F00719907500 /* FIRInstallationsHTTPError.h in Headers */ = {isa = PBXBuildFile; fileRef = B49AE6925612C4F7233E1FDC00585F58 /* FIRInstallationsHTTPError.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E72D0A25D5EB3E3DF6512173544AE660 /* pb_common.c in Sources */ = {isa = PBXBuildFile; fileRef = B43991BF814E2ED59BC3F25D772B175E /* pb_common.c */; settings = {COMPILER_FLAGS = "-fno-objc-arc -fno-objc-arc -fno-objc-arc"; }; }; - E75F619D474EE4F58A20CD637546B782 /* PKCS7Padding.swift in Sources */ = {isa = PBXBuildFile; fileRef = A23F193AB67028E114671FED528F7A89 /* PKCS7Padding.swift */; }; - E7EBB84430CDC4C2D8E476583E16ACB1 /* FIRMessagingPendingTopicsList.m in Sources */ = {isa = PBXBuildFile; fileRef = 00CF16A360EEF1313C99FDF5AA421CBE /* FIRMessagingPendingTopicsList.m */; }; - E828E46FC6D91DD36D6F3AA39EE093C3 /* HKDF.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24557FF343160ADBDAA497CA5CFB282E /* HKDF.swift */; }; - E8D406A0517AB2F43F8CA6D3CEDE499E /* GULNetworkURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F0E0BBFEFA9A057DD473421975D6133 /* GULNetworkURLSession.m */; }; - E9E09BA9C8A0F5FA7BBC96B2C705C4E1 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D9DCAB1A8C069E91446710E04970738 /* XCTest.framework */; }; - E9ED9388D407E53D8DCEBF43C8E7A979 /* FIRAnalyticsConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = AE6D0A0E31FB692C3F70C8121F2B7916 /* FIRAnalyticsConfiguration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EA4FA9DF2A9DC9ABFAD947E564E4137C /* FIRComponentContainerInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 857BCF93020CA518DE9EA34BD596A194 /* FIRComponentContainerInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EA679976974CDF7D44D1A647074BDAB1 /* RLMSyncManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 32EDBEAFA27BF7105E9222E0C4C56E47 /* RLMSyncManager.h */; }; - EA6B455A9DB2D04909EE1FF50C51A57D /* FIRMessagingAPNSInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = F38C3E4D7A601EF763EBC6B1E2BAE42E /* FIRMessagingAPNSInfo.m */; }; - EA8E5EEACB10A346D487E8E0DE0674A9 /* GDTCCTUploadOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = B2FA33A54180E95615EF33A92C531DE9 /* GDTCCTUploadOperation.m */; }; - EB08B35698F3C829EBAECCE30D5F9FB2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96CE92E5425AE24E39E7772E791A1F9F /* Foundation.framework */; }; - EB7A74BAAEF34C9D56288F3C724F1964 /* RLMRealmConfiguration.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 2310F918A6725456B3386150ED5D4DA3 /* RLMRealmConfiguration.h */; }; - ED3E4A56A9E8AB0D75CDD7D45E29F6C5 /* FIRMessagingAuthService.m in Sources */ = {isa = PBXBuildFile; fileRef = A52128AC7228CCA3280934D0B65C9672 /* FIRMessagingAuthService.m */; }; - ED6BCBEAC9A00260C831EAE986178988 /* RLMAnalytics.mm in Sources */ = {isa = PBXBuildFile; fileRef = 977B590CCBC383328EA42E97EC53B6C9 /* RLMAnalytics.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - ED92EA1BBD1E8F0EB8E2DBEC4AF416C6 /* NSError+RLMSync.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = FD4ACED2DB8A4A140AB9A04983A6CAA3 /* NSError+RLMSync.h */; }; - EDC93BD7B9262119AE145E4C7A9D0212 /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36F9D0013D1BED072F46FB7E4D1C6081 /* Request.swift */; }; - EDCBD73A38CDEB9D5692E573237FA8D6 /* FIRMessagingRmqManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 079BC76CDD3EA7B0E6EC6D0537065173 /* FIRMessagingRmqManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EDE0907FA6F81F338BACD6BCDA48E6C5 /* RLMRealm+Sync.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 155B23A4872917ACBE28F725DFF6F659 /* RLMRealm+Sync.h */; }; - EE5C04201171435EDE74B3C60532FB8F /* GDTCORAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = 581C0DABC4484037C6A839C72F26F953 /* GDTCORAssert.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EEC5644157CAB9372198988D470620D4 /* RLMRealm.h in Headers */ = {isa = PBXBuildFile; fileRef = C37A25646D2E45AE830BC18C39804542 /* RLMRealm.h */; }; - EEF066616EFE6EBC57541C1B92C6770A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96CE92E5425AE24E39E7772E791A1F9F /* Foundation.framework */; }; - EEF76237AE90C7AE31343705FCAEDE79 /* Poly1305.swift in Sources */ = {isa = PBXBuildFile; fileRef = 884820B0ECC534A66736999395266BB4 /* Poly1305.swift */; }; - EF551337C42E5845870F503B2A262B03 /* FIRMessagingTokenDeleteOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 090684D3599570B96499EBE901EAB822 /* FIRMessagingTokenDeleteOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EF64912DE4515E17FD4016AC72E0F8D1 /* FBLPromise+Delay.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EA9CE05D1DFE28502DEBD3165F8C1E4 /* FBLPromise+Delay.h */; }; - EF8FCB0A98D690A3304EA72DFA7D092E /* RLMThreadSafeReference.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C46201584D8E0A2D22CBC11EB255C9A /* RLMThreadSafeReference.h */; }; - EF95F1E045CFB26512F5606AD14410B3 /* FIRComponentContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AD747B1B145F396CB866F7DEE0ACAFE /* FIRComponentContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F00615AF2747EBC80993096F43808951 /* SDImageFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = BD67DCAA71CC35D1A4923924D76A0B7F /* SDImageFrame.m */; }; - F00FB4E8F58BA0B1C435816038C710E7 /* FIRComponentContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 133E546169AAE20A35B5BCC1520D9AE8 /* FIRComponentContainer.m */; }; - F036534EAC3FDC369D7C96C89D9F6C5D /* FIRCoreDiagnosticsData.h in Headers */ = {isa = PBXBuildFile; fileRef = 800E574A332A80D110655753B116A778 /* FIRCoreDiagnosticsData.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F0F3224FF592F9BA2A044A2FC2BD4CCD /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 969774418A140466BFBA6A018E612159 /* Validation.swift */; }; - F12BBB8151ED1C4F3D65F0BBFE8C8C07 /* FIROptions.m in Sources */ = {isa = PBXBuildFile; fileRef = BB056D1BBDE11A544E29B87D799147D0 /* FIROptions.m */; }; - F1552D9EDD43552BD1064A1AA49A2D5D /* FIRApp.m in Sources */ = {isa = PBXBuildFile; fileRef = F03D10A08DA8315D03CC490CDA425E58 /* FIRApp.m */; }; - F180268EC24019B2DBE4FD8FEB6FC3F2 /* Realm-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 947B7AB29E527E934E6960DB9EDB8202 /* Realm-dummy.m */; }; - F1B8557390B3D8D45864E9DE8EE16F30 /* GDTCOREvent.h in Headers */ = {isa = PBXBuildFile; fileRef = A14220984AA9BFDD5349A39D88DDB703 /* GDTCOREvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F1D31101E2475D6199388A2B5C96841D /* UIImage+Transform.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F1872D9097E8397C20B5A8D6DA18E50 /* UIImage+Transform.m */; }; - F1E902DA76C4E04667ECA17644EF4BAB /* FIRHeartbeatInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = CDD52A7DF25E26DB48D7675A512D9F23 /* FIRHeartbeatInfo.m */; }; - F21A2C7E1C435B7E378F3BE66102B83D /* RLMSyncConfiguration.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2F26DBA70E2E7C4A161BDFA9A7F9FD52 /* RLMSyncConfiguration.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - F2C132485B09F269B735E35AE713B7C2 /* FBLPromise+Wrap.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A16F5E77A8F00736FC7EC916B21494D /* FBLPromise+Wrap.h */; }; - F3928A33E3BA8E361B7287528F88ABB4 /* UIImage+ExtendedCacheData.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BFA7B313874095AEA0F1CBBBCE6C7EF /* UIImage+ExtendedCacheData.m */; }; - F3D5AAC4AA228C421CF38CD4069EBAAB /* FirebaseInstallations.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3E4A7C20A6E2E91AB1AB49340B5A6FFB /* FirebaseInstallations.framework */; }; - F3DCB1E7F01ED98F9F2B6BDA4A456B92 /* RLMObject.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = C4A819A148B06A23D2615A4002E7B793 /* RLMObject.h */; }; - F3F1E68D641B571814463C6224C4EBD5 /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 424CC92A1DFE45CCE02FDA04EC73916F /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F4006D1332BC060D0D7F5B39A665CCEE /* GDTCCTUploader.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B228E650F649CAA162CFDF44D7B78E7 /* GDTCCTUploader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F430332762627D34874BE3357367E8FF /* RLMPlatform.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AF076A07B131408F8B113F5691D6D4A /* RLMPlatform.h */; }; - F49D9880A385F25FCDBCF8F741F71CBE /* GDTCORAssert.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E1130D1E08F12920F389C2C21B1A69B /* GDTCORAssert.m */; }; - F52E84524CC4E70324993077865130AB /* RLMSyncConfiguration_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = DE20DC127752ABD579380CDFB7DE2F89 /* RLMSyncConfiguration_Private.h */; }; - F571858981D99CD6A07A37EFDC845FC4 /* GULNSData+zlib.m in Sources */ = {isa = PBXBuildFile; fileRef = 958A521B7187AF658E3D39DBCF912ACF /* GULNSData+zlib.m */; }; - F5B2194F8954EB26405AC5EE15D4B673 /* SDImageAssetManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CA3726D07BC30180D2666191E4C541F /* SDImageAssetManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; - F5EEA46FA461EBE1BA796BBECDECCCC2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96CE92E5425AE24E39E7772E791A1F9F /* Foundation.framework */; }; - F60AF9A3D29BBA06D5FD05C15B90CB84 /* RLMRealmUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = 75D51599F64B9F4B2FD70F5E0D42708A /* RLMRealmUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - F6739D5BCAC5562B25E39404E35B4257 /* FIROptionsInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 30B223C026C0CB3A27990245026E7451 /* FIROptionsInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F6B0A57A52FEDB44EA3835D93ED54165 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96CE92E5425AE24E39E7772E791A1F9F /* Foundation.framework */; }; - F70EF854395CDE981A8336E4FF0310FE /* URLSessionConfiguration+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D8933C06F028BDDEECF70B616763139 /* URLSessionConfiguration+Alamofire.swift */; }; - F72F47B3755CE00EFEFB8568DB01953B /* RLMProperty_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 8CA0655A438232106484BF42EB014143 /* RLMProperty_Private.h */; }; - F7425341829DF6D4D5D48298E7001981 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 467B20320803E6118AFD4D450CCA3CBB /* UIImage+MultiFormat.m */; }; - F74F16BB167E342E92415FBB1C4ED984 /* FIRInstallationsAPIService.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BDB3002AF727D595FE3C32DF44492E3 /* FIRInstallationsAPIService.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F7833A1501240CBE423074476953FAC9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96CE92E5425AE24E39E7772E791A1F9F /* Foundation.framework */; }; - F80E6BF205E403BAEF1F059D66848FB3 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 06AFDF03F9C1D8B9F4CF9B8D0016C73C /* SystemConfiguration.framework */; }; - F88A18D103EA114FFAE58D8001427A8A /* GDTCORTransport.h in Headers */ = {isa = PBXBuildFile; fileRef = ACF39C778BE0B215EB6502F2D61801BD /* GDTCORTransport.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F8C32F37DC56462D29CA113B078ADF99 /* SDImageGraphics.h in Headers */ = {isa = PBXBuildFile; fileRef = ED13BC6550F444112F0A9CFFAAFF7B91 /* SDImageGraphics.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F92212F212AFD1B0BCC5D9C00D309E56 /* MockingjayProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA34BF97FF7FDABA9337BB0A8A9589F0 /* MockingjayProtocol.swift */; }; - F9B9D0B4A16EC1CADBCFE8533E849AF6 /* SDWebImageTransition.m in Sources */ = {isa = PBXBuildFile; fileRef = C4DCA0FCD3B91F7E34D6AF3F5D59750C /* SDWebImageTransition.m */; }; - FABF0DA1F6655382EADD4865E77642EC /* GULKeychainUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D556045E6E9E35001A9C8A2403A666A /* GULKeychainUtils.m */; }; - FB0D991F9D9C7BD64FCF7615BE36BF36 /* GULNetworkConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = DD11869F2347D7B0B5470D14832F092C /* GULNetworkConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FBA5A1C56BC8B78B2BBF7E18BD121CFF /* GDTCORReachability_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 22F949F50295F4910C96683F61136A58 /* GDTCORReachability_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FBB70918C8FF95B9BD66EED715D66C94 /* FIRAppAssociationRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = EAB7611EE3E28B26836A61E16106C1F3 /* FIRAppAssociationRegistration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FBBAB81966EE63F5BC980FD1A58EF4FF /* RLMListBase.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 948ECC9052D503C98FAC88A033F93ED8 /* RLMListBase.h */; }; - FC0AB702D6C9E665293C6CA89B0FF40D /* RLMObjectSchema.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C0B2031AC82B7BC3B12C3F628E06856 /* RLMObjectSchema.h */; }; - FC0C43680427806DB063A89FF2F48587 /* FBLPromise+Async.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 66FF5C7177402EF69F9E032898006650 /* FBLPromise+Async.h */; }; - FC11CB293FD67798FB2652025C98C9EA /* GDTCORDirectorySizeTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 20857C9639D0B60308972014193BE7B4 /* GDTCORDirectorySizeTracker.m */; }; - FC147114B3C83044A2193E1684C16A2A /* GDTCORReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 9784D0880A821330DCF9CAA43952714F /* GDTCORReachability.m */; }; - FC959A2B60814107144EA59FE92D3748 /* ActionSheetCustomPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 567E7701F9C7D5D0CAFBC3BFFB405157 /* ActionSheetCustomPicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FCB195C37285D2114148870D88D2973C /* SDImageCacheConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 7536B41CECCD77067EA9E061097DD791 /* SDImageCacheConfig.m */; }; - FCDCD7CAB9B9733CE9DA62BAE23BBB81 /* RLMObjectBase.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 8478BAB89219A419FF39EA29EA9E3DDB /* RLMObjectBase.h */; }; - FCE4B93B3ACF7D9349F4604EB0BFA2A7 /* SDImageIOCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = EF0F7CD5348758F4B3EB9FA1057F6796 /* SDImageIOCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FD1182FBA08843D918BC5CCEF5BD0A60 /* GDTCOREvent+GDTCCTSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = BC236C6E6F5BC7F453349B57E5CEBE51 /* GDTCOREvent+GDTCCTSupport.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FD1F18FE6AAD35F2D15401CA33832C19 /* FIRInstallationsSingleOperationPromiseCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CDE7329D9840C6731AA3C68D1D35C55 /* FIRInstallationsSingleOperationPromiseCache.m */; }; - FD274400A1A1FCCD4D8AD7D1CC89D45B /* FIRComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = D29AD7CD2C0FE30DDE37C4CB8E6686D2 /* FIRComponent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FD4205DB117EE5D69B3FE438F64F4126 /* FIRMessagingPersistentSyncMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = B08293C9E9F18CD8FE18653AE3C758FA /* FIRMessagingPersistentSyncMessage.m */; }; - FD4A2585FF8A0985EBF8B4CF2C7500BC /* RLMSyncUser.mm in Sources */ = {isa = PBXBuildFile; fileRef = F721BF0B8B5CB6392AB9A455233EA7D1 /* RLMSyncUser.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - FD603DABECC06352533EFACD2D8D5BB3 /* GDTCORTargets.h in Headers */ = {isa = PBXBuildFile; fileRef = 79DC8F114A5797B8935C230E82661D3A /* GDTCORTargets.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FDBFD9343B51CAB4336B0EE6A9EA87FB /* FIRMessagingExtensionHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = AD03EAA7D8BF50D4963B73B1E429DEFE /* FIRMessagingExtensionHelper.m */; }; - FDF381C3C44CEB95B443FD843151DC5B /* GDTCORFlatFileStorage+Promises.h in Headers */ = {isa = PBXBuildFile; fileRef = 26D37C2815447D36E1833F62298C1C75 /* GDTCORFlatFileStorage+Promises.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FE02FFBAA9B8711F4CF3E86AFC68D04E /* FIRMessagingInterop.h in Headers */ = {isa = PBXBuildFile; fileRef = BCC6D767E6AE84663104104B59CC4D84 /* FIRMessagingInterop.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FE3DA5677D1F398C686BF698344DFAC2 /* UIColor+SDHexString.h in Headers */ = {isa = PBXBuildFile; fileRef = 84FC29A540131AA60C7DCC83CC678DD2 /* UIColor+SDHexString.h */; settings = {ATTRIBUTES = (Private, ); }; }; - FE46F700FA04420FA9ED8817BB9830E0 /* RLMConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 47043D749809A5D228A9CD83F859E4C4 /* RLMConstants.m */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - FE5A6D257F08E9C20139B7F793D24C69 /* RLMSchema.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = CEC0D8039B3C2C47ADAA62D10C906653 /* RLMSchema.h */; }; - FE7C63F7B90A7592723638EE7EFB96C4 /* FBLPromise+Retry.h in Headers */ = {isa = PBXBuildFile; fileRef = 2685CB813C038E116759E794136F7D7F /* FBLPromise+Retry.h */; }; - FEAA5B00379BB0D24902ACDA68EC84FD /* system_configuration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FEAE647E23B4B371510DE30A50F20F7F /* system_configuration.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - FEC7A713760708215B21D1DC83D0E3C8 /* AEAD.swift in Sources */ = {isa = PBXBuildFile; fileRef = C73114023681C538F3827D2AF9603BB7 /* AEAD.swift */; }; - FF3C3F90549C6EC68C76D85ED74FE4F3 /* URITemplate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C19E2A60F3775C60A9664BA403F4135 /* URITemplate.swift */; }; - FF798D8A4E72564785D4FFB3D474EDA7 /* SDWebImageError.h in Headers */ = {isa = PBXBuildFile; fileRef = 45D8C0D80BD6AED0DF166BCD8BC0302F /* SDWebImageError.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FFAFA85A6E470FF29C6F4B433762E61C /* SDWebImageDownloaderDecryptor.h in Headers */ = {isa = PBXBuildFile; fileRef = B04E0C77E5DD2FA7CCF40974C841BBCD /* SDWebImageDownloaderDecryptor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FFF6C109252E67C84593E820CE873CEC /* UInt8+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A29068EA38DE61C3E2D666A647F2BE4 /* UInt8+Extension.swift */; }; + 004F9820215FA800150286D89A4D044E /* RLMObjectStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 52B81E9570B59806F994DD9A65C241A3 /* RLMObjectStore.h */; }; + 005B319B494ED2DAA239B9939A504DFC /* Alamofire-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C1B146413DC8F16AF335703ECC6F54BD /* Alamofire-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0064D372D96A53E5C7173A6DF531097B /* BlockEncryptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F6FFE14F792DE9044A5F38021BA5B6A /* BlockEncryptor.swift */; }; + 007F57C0030B0CA201A359FD816A3CE1 /* SDImageFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 72A503470E248385EB0444FE80D5889C /* SDImageFrame.m */; }; + 0091E4134A0D7F54CCE654E1EFB490BE /* DistancePickerView.h in Headers */ = {isa = PBXBuildFile; fileRef = BD07A2135989221B678D6CCE9AF6679C /* DistancePickerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 009B6BA1A00E96A1CFE991E831DBC433 /* GULNetworkURLSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B95E2BBA62EB0149FD16A87340BAB1F /* GULNetworkURLSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 00BBA4140A0360CA9D4C316A58E314AC /* GDTCORDirectorySizeTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = EBBA7C0F72C12D0E9174320C669E0D06 /* GDTCORDirectorySizeTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 00E0A75C2F3E004FD091E92803539250 /* Mockingjay.swift in Sources */ = {isa = PBXBuildFile; fileRef = B38B99FAC7C60C3A7CA866B17FF061E7 /* Mockingjay.swift */; }; + 010D4D36661F4985CA5402EEBBC565AF /* transact_log_handler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0997C58D4DA7E95BDB868EB045E2BAE /* transact_log_handler.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 0129B78C065443890C1194E8D15482D7 /* FIRMessagingLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = B66DA96036A788D918F1123C8EADBB18 /* FIRMessagingLogger.m */; }; + 01904530FAEB2C422B3382B9E93524A8 /* RealmSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 458788B0053BA4922324B24001F1BFCE /* RealmSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0195A9A9DF94BC229A9DDB438154AE4E /* Sync.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FD7CDFFB7B9502E730382217BEED0F7 /* Sync.swift */; }; + 02015E32C1E060B9432843635FAAD128 /* ISO78164Padding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D9DF334AD742E96E98ACD959F55F76E /* ISO78164Padding.swift */; }; + 02E0BE6822962CCD5D79B85BA9C6AB21 /* GDTCORUploadBatch.m in Sources */ = {isa = PBXBuildFile; fileRef = 7439F217070FB579B7E2900147758F09 /* GDTCORUploadBatch.m */; }; + 0311D5903A8C13AE6158796BC69AD994 /* SDWebImageTransition.h in Headers */ = {isa = PBXBuildFile; fileRef = E3FD1DF521E0D20B96890E50642F08A4 /* SDWebImageTransition.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 04117C1A2868236093CEE87C003D9190 /* FIRDependency.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AC980C3C48910AE631078552DF53515 /* FIRDependency.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 041B655D7F5932F03A65C154BC02BDAA /* IQInvocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39685141D196933DC50441D7F8CC70C6 /* IQInvocation.swift */; }; + 04380BADE8531FB55CBD6D9719B494D8 /* weak_realm_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EC89F8CE186B9940D2CBFF1F41145481 /* weak_realm_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 045DE6EBF9B2F63F60F5BE60C1198E06 /* RedirectHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AFAA3F4BCBF5CAF1ED6A01A0CF001EB /* RedirectHandler.swift */; }; + 04781A4F03AC18B7754685B3F1095341 /* RLMRealm_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = C8B18A0570D7BAC0A8F837133E2DDFD1 /* RLMRealm_Private.h */; }; + 04A896288CE3A59B530250337A5F8362 /* Result+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89B62DF893489A8ABB7DBF594E70E36B /* Result+Alamofire.swift */; }; + 04B0884964D9592302CA654E0B67E80E /* IQUIView+Hierarchy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C093E21AEEC109D6569BE9FC473A434 /* IQUIView+Hierarchy.swift */; }; + 04EB2F7B4D837C671547DB9313BEDEA3 /* FIRAnalyticsConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 15A0BCF2B12B2799651BFAC082027F15 /* FIRAnalyticsConfiguration.m */; }; + 05102BD9E7BCB80DC7B64A34D0E7850B /* SDWebImageCacheSerializer.m in Sources */ = {isa = PBXBuildFile; fileRef = D6B7D958DC835D1AFDBE8FFABB896EC1 /* SDWebImageCacheSerializer.m */; }; + 05B2E6001D7D7C1F0C84A8485A67E715 /* SlideMenuControllerSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 47A0852693BEB55945FE14612DB17444 /* SlideMenuControllerSwift-dummy.m */; }; + 05D76FA82DD3C37B76FFC1689CEF9981 /* SDWebImageDownloaderDecryptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 57ACF0797DFDA079729F8AD264A1761F /* SDWebImageDownloaderDecryptor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 05ED6AEA5F905BDA3C631E85A9C77B63 /* FIRMessagingDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C25ACBE0B3675BFAFFAB56CCF6B89CC /* FIRMessagingDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 062BFDE7F34E06051F74A9745B988E1B /* RLMSyncUser.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FBBD10AFE907DF8B70531381BA8CEE0 /* RLMSyncUser.h */; }; + 06319451171B5365F1287A8FFCC3D63A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3263CAA0BC54D21B0E4A6596E847B597 /* Foundation.framework */; }; + 06D1E17D4DC34EEECABD81BFF27BC0C6 /* FIROptionsInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = DBE6B60D6F4050CC31082057F8AA4CB3 /* FIROptionsInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 0767F93019D330277305B01FDF401F88 /* partial_sync.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C3869804421B279168DA26F3CF23A098 /* partial_sync.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 078C9C2D13F201165254169ABA275FEF /* RLMObjectBase_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 034E8659175E77FD8858B78104CBDDD2 /* RLMObjectBase_Private.h */; }; + 07A41F67B40B3C6C6C3DB862F1F633F8 /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E6793ABEE4BCA72BFF1F256D49A61CC /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0865316AE04C0482055E9EF55724B075 /* GDTCOREvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 05A65261C9148BCCE7C935337988C5C5 /* GDTCOREvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 08A4733A23A71DC2B937F173F76B4BAD /* FIROptions.h in Headers */ = {isa = PBXBuildFile; fileRef = C48DB19EEC7823E486CE4E5F512CB1E5 /* FIROptions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 08B185E08278AE7EC55F8BBB19693AC5 /* IQKeyboardManager+OrientationNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = A54711595F78D8E4A4C98B920C25EE07 /* IQKeyboardManager+OrientationNotification.swift */; }; + 08E9DACA0781806558F4647721E2204B /* GDTCORTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = CF4B25A7B37315886FEB08C03BD077FD /* GDTCORTransformer.m */; }; + 090C028B2EAF044880820DF73FCA845D /* RLMObjectSchema_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5ED3FF30321054D07F68F68444603A7E /* RLMObjectSchema_Private.h */; }; + 0922CA046CA2754693C83ECA8B163829 /* FIRInstallationsItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 846EE9201BAD3CE3317DFAD5D53A3E48 /* FIRInstallationsItem.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0933E9216A313795C94BEC005FD9DDE1 /* Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0212D03CB4042D2280F3D688437E37C9 /* Operators.swift */; }; + 0978F895CC1F3CEC1FE03362DA4B35D7 /* GDTCORAssert.m in Sources */ = {isa = PBXBuildFile; fileRef = C4F2EEAC8E682AF81649EDB99F4871B7 /* GDTCORAssert.m */; }; + 098FED5CD72233AA22FDFBD9FE9F15E9 /* RLMRealmConfiguration_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF11280898471488315C7ABEC946BCE /* RLMRealmConfiguration_Private.h */; }; + 0992756A8122762086372511C566F517 /* index_set.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E43D6407F194F3198F56B37230D7DF3 /* index_set.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 0A696EDC71A570E6891C28C157D8C08F /* object_store.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F0F6E8E48DF5FB4A3D79201C07F72644 /* object_store.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 0AC5BBDF61BA26492AA56E53C7EFB77B /* GULMutableDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CBF26F21FA8038EDEFBA83395CE9299 /* GULMutableDictionary.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0B9AD4D8866661F2755734FC15964145 /* RLMRealmUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2C96889F60BFA511A54235EF1F4EFF20 /* RLMRealmUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 0BBE8EF207B633F9DEEB7A6CE93B7DA2 /* Poly1305.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5302DDB3EACA02979C5ED891D0C1779C /* Poly1305.swift */; }; + 0BFA90EFCD3407716FFC60D140325188 /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 07428F5C2C886973860D0B1E10A12457 /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0C76BA74E22A5CFD8207C10026401D80 /* SDAnimatedImagePlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 57BD84FC5F011F36F49EAB98F3D2932B /* SDAnimatedImagePlayer.m */; }; + 0D0AF4DF934B7BE39EC6E287B003BBA6 /* SDMemoryCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 76F434687E06090E9A0FD34A8D4F5404 /* SDMemoryCache.m */; }; + 0D12E07406535ED98F1254B1C3117617 /* firebasecore.nanopb.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BFD24E56E59506609D86F9ABBC6858F /* firebasecore.nanopb.c */; }; + 0D2B3D451D64A5A0AE5CE51E975D7494 /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = FF3AB2F574DB3AEC4222D125304A1EB0 /* SDImageCache.m */; }; + 0DEECB4887F8ED8A8304156D1C440639 /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 03C3BF23D82E8C0C06EBB0DAD4BD8D07 /* SDWebImage-dummy.m */; }; + 0DF46FC20B149F5A9A560302A31E9365 /* RLMArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 4240A99561484EA9DEEF9707AAB5FA0F /* RLMArray.h */; }; + 0E74D33A20B4225CFF96FDE00FC5A43B /* FIRConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = FC0EFDB5042C20A87E201DF6789DE66A /* FIRConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0EA17AA3C56E498D2338C52B9AE5AAB1 /* FIRInstallationsErrors.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C708CC7FEEA0AFC0ECF4BC6F05C2EA8 /* FIRInstallationsErrors.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0F4037DBF307AC8058BD0A3D35C7E7E9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3263CAA0BC54D21B0E4A6596E847B597 /* Foundation.framework */; }; + 0F4322740A001E3D7BFD2C333BCF907D /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = CF301A5BEEBB2096296125C2BA9D4103 /* SDImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0F94B2449CA1ADA76AE79C0BF6A08549 /* IQKeyboardManagerConstantsInternal.swift in Sources */ = {isa = PBXBuildFile; fileRef = B662C14AA32764258248147132467EA1 /* IQKeyboardManagerConstantsInternal.swift */; }; + 0FC023279EE129DB7826EC92B6810C8D /* ActionSheetPicker-3.0-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 756597C91955E64CC985D9E555E4356F /* ActionSheetPicker-3.0-dummy.m */; }; + 0FFA0C960F26666918569059FB8E92BC /* SDImageCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = AB9D58C883C7F638EEA3C2A49B4A8F49 /* SDImageCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1030529ED3EDBDFFD347E68F799E179A /* FBLPromise+Recover.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 2285C7BF5AA76D4D7094E6431B2FCC58 /* FBLPromise+Recover.h */; }; + 10BEA734D6C46D97D09CFCEE7F7135C5 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F9EEAD2CCB06E3D9F37D73E7DCA7FA4 /* Security.framework */; }; + 10E9E4249C8C22A571EBFECF3C0676CC /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C80393FBAA2987B924AA1F484CD95D8 /* UIImageView+WebCache.m */; }; + 10F2108138B0493998B59F6AB456E31E /* RLMAccessor.mm in Sources */ = {isa = PBXBuildFile; fileRef = E5FCBC73AD8F633E9B0216936F43D60C /* RLMAccessor.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 115B6FF8F130E798038B3309070A885C /* FirebaseCoreDiagnostics-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BDA2BFE10781E02461A0CD7490313A84 /* FirebaseCoreDiagnostics-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 11C4F8AE3CAD4E055F04EE68BA6602B4 /* RLMListBase.mm in Sources */ = {isa = PBXBuildFile; fileRef = F1A3E524613CC50486ED48E109A2CC48 /* RLMListBase.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 11E79385CD0DA86166E63D21E7E078E9 /* SDImageIOAnimatedCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A0E033642613D92472CEECA180C86ED /* SDImageIOAnimatedCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 11EA2C9D241AB9B6E1EE8B5E1B9DA27F /* HKDF.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1A4A273996819FA4A366938FC3CFE06 /* HKDF.swift */; }; + 11F027107AFC7EE7637F23DB902F689D /* FIRAppInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = A29E0AEB7A9DFCB7DCB70CD1139E55AF /* FIRAppInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 121D13CC663EE7667BD89122577F613D /* FIRMessagingKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = 32C6AE4A06A83AFB21F4D6A5445F5089 /* FIRMessagingKeychain.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1263142A680084136E180B7178F40225 /* FIRMessagingLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = E911E1512DC1789EF12C0939FAA54077 /* FIRMessagingLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 12665864A3ED3832F5E422A0B418F947 /* FIRMessagingTokenInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = CD28F8B929445CB1D1D34E472D7292B8 /* FIRMessagingTokenInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 128D64EB284413FA765E28172E87091E /* schema.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9CF4D0FD634A5A19AE5A39FB167DC6B /* schema.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 12C96BC78642460573A68F5985031D24 /* RLMRealm+Sync.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 8D321850BFB472987C8920DDD847B563 /* RLMRealm+Sync.h */; }; + 12EB4EBF4807E214A73870408440963A /* FIRInstallationsIIDStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C4BAD4FBF7AABC17A63713E4D8A60E2 /* FIRInstallationsIIDStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 12FA8AB2ACBB820E7EC413726F9D56BC /* AbstractActionSheetPicker.m in Sources */ = {isa = PBXBuildFile; fileRef = AD98C0B6BE9A80826D248CA211DE379D /* AbstractActionSheetPicker.m */; }; + 131782336E42CEA618F4F8B5B3C70AFE /* GULLoggerCodes.h in Headers */ = {isa = PBXBuildFile; fileRef = 2253712B6523B037EEA43A5E861FD0F3 /* GULLoggerCodes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 131D5923843E94CF395F1FA0AB5E694B /* FIRInstallationsErrorUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = BA3D5F08617F4431081E3A2BA17C9571 /* FIRInstallationsErrorUtil.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 138DFC533930F784B55D9BB8AACC0E06 /* SDImageCacheDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = E65BA7C811211DAE0BE2469448A0706D /* SDImageCacheDefine.m */; }; + 1403A336EB65ED3055D82D04E2D0B606 /* list_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 81E7276C2FC19FC4571F27F8AA8D0F2E /* list_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 148B50A8A437CB18B556826943889F16 /* GULSceneDelegateSwizzler_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B7A9F439CF96B7082986ECD26D018409 /* GULSceneDelegateSwizzler_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 148F21F597BB0B232859EE95ABC5B1DC /* FIRApp.h in Headers */ = {isa = PBXBuildFile; fileRef = 61561838FE4384FD4971B7FBC488CCBC /* FIRApp.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 14AEBAB86A8510903C72891BD20841C7 /* ObjectSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6896074E62F776B5D9C75C5B86435842 /* ObjectSchema.swift */; }; + 159AB2114C129E29B07C402CCFC36D3F /* RLMSyncUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = B099F852040462F40FA3A9723F46B9A6 /* RLMSyncUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 15DBCC0CC1957BDBB3D2C8D7C636A338 /* FIRLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = A03E41D63456BE46AA54BC5B6EC02C84 /* FIRLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 15FB8AF4F23EB2DB472AC213328F32F9 /* uuid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1653080FEEAAFCDA6FDE565F7B16BED /* uuid.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 16359F8D0C922D3FC1BE34C48CBA9B32 /* XCTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0366AD7267CA6B0B8AE7BF6854BC334 /* XCTest.swift */; }; + 164DEB7B33A09DD8663942511488AD16 /* SDImageGIFCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = C8D587F795ADDA42E4AC9885CB957E2A /* SDImageGIFCoder.m */; }; + 168AB5EA0EBEB75D0434B55D0B97AD47 /* SDImageIOAnimatedCoderInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = BCAF6B0A1E45F7C95E5CA2DCDDE82795 /* SDImageIOAnimatedCoderInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 16CCFF6A9BFAC7CDDE4E6A7FA2463515 /* FBLPromise.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 1F3F4BE17084ED51B2F66919D5AA3314 /* FBLPromise.h */; }; + 1705AD77D440D12CED6C70A614B6BACF /* keychain_helper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9E2E660D7A08202AC7308B44862A5EF2 /* keychain_helper.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 170789FA2CF4B22FD3B014A06A181983 /* RLMProperty.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 24F449C44B57967C5D754656FF206DCC /* RLMProperty.h */; }; + 170D2316A93EA14308ED98CD13722CF0 /* pb_common.c in Sources */ = {isa = PBXBuildFile; fileRef = 32647D8C004CBADF70621F2769336BBD /* pb_common.c */; settings = {COMPILER_FLAGS = "-fno-objc-arc -fno-objc-arc -fno-objc-arc"; }; }; + 17329FEE1906AB6D6422311C6107458E /* RLMOptionalBase.mm in Sources */ = {isa = PBXBuildFile; fileRef = 607E6499DE7AF4C3172D4FE3A794E676 /* RLMOptionalBase.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 1740CBB33D469AEDD5D7291A9268FA97 /* IQToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2516768042410629379B76D78BCDABF0 /* IQToolbar.swift */; }; + 1769CFA2DB5E0CF635CAFDAF134CFFD0 /* ZeroPadding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18D5BEA6637B5DE87ADD67760EF53F32 /* ZeroPadding.swift */; }; + 17D5DC913572AE36E04F533ADDD56B4B /* FIRInstallationsSingleOperationPromiseCache.h in Headers */ = {isa = PBXBuildFile; fileRef = FF08565BA8FF4FB2B2B6087526AD6184 /* FIRInstallationsSingleOperationPromiseCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 17D8D0248FE7067505351521D2100C7F /* NSError+RLMSync.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BBBCA1BF6A934EAEC5F09C4902D0494 /* NSError+RLMSync.h */; }; + 17DE87344CAD319DE6AA0F7BE1BA10C7 /* ReachabilitySwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E0DCBFDA516CDEF5881AEFE5AD280BAD /* ReachabilitySwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 17E5507F92F0DF1DD5C3AB12E53F559F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3263CAA0BC54D21B0E4A6596E847B597 /* Foundation.framework */; }; + 181F90B9A9AB68AE755A9B5A07992A52 /* GoogleUtilities-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C26472FC5991B2348E55D270AB4FD33D /* GoogleUtilities-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 18303B692A81A7D708973A6B9CBA75D8 /* SDAsyncBlockOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EC9452D77ED1A96835CD67A80DF2F64 /* SDAsyncBlockOperation.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 1895D0230B557364AF8E4225FB4C4ABB /* Array+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0836FBB35B723CA60E57A757D6ECC880 /* Array+Extension.swift */; }; + 19087B7C41C929B099F9342FBCA1933F /* RLMArray_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C1547CA6C4A8C554D1BFBE94CF789B7D /* RLMArray_Private.h */; }; + 19767DBA2980A1DF8DD78E2CC681C627 /* ActionSheetStringPicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0A3C2C50C122450267C4D688CF97D5 /* ActionSheetStringPicker.m */; }; + 1976BB7D7E26A12E29283E71154B63B3 /* SessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8C941EB3FA2CF7213B1962768178721 /* SessionDelegate.swift */; }; + 19B4EE289C70BEB3AEB308F18DD7624D /* GULUserDefaults.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CB9BB423AEB03FB77FD41865F954DEC /* GULUserDefaults.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 19D5EECA37E4C116563B4470C5DBB754 /* FBLPromise+Then.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 7DE11A9D7AB89D3949A1741497809A5F /* FBLPromise+Then.h */; }; + 1A471C777497006B86E3C53A601F23B9 /* RLMListBase.h in Headers */ = {isa = PBXBuildFile; fileRef = AAE233D5B3FE1F32D73E6A2778EFD329 /* RLMListBase.h */; }; + 1A49238A6013B73A8A9E9ECEF8CCAA48 /* GDTCOREvent+GDTCCTSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 433AB0250C2751F438843DC418BFACEF /* GDTCOREvent+GDTCCTSupport.m */; }; + 1A643B2FCDEC80489C892D9F78DDC815 /* FIRMessagingCode.h in Headers */ = {isa = PBXBuildFile; fileRef = A1E81D9668A99EB28F6B452A37B91FD5 /* FIRMessagingCode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1A76A2F2998719605A162BAC0AC064A4 /* FBLPromisePrivate.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 41A20FC27E05100D81B5873C6766049B /* FBLPromisePrivate.h */; }; + 1A9B9579E46EFBA63C5F57A6B17B5ECA /* IQKeyboardManagerSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CD14704836DFBBAA2A320D727DC5654 /* IQKeyboardManagerSwift-dummy.m */; }; + 1B6D74056AEA0DFDA3EF13A0AA7C05B0 /* FIRInstallationsAuthTokenResult.h in Headers */ = {isa = PBXBuildFile; fileRef = FE4CA524C28F954B2FFA2843A010E3EE /* FIRInstallationsAuthTokenResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1C327C94BF8B90E95F4AD0C040F6AFA9 /* RLMRealm_Dynamic.h in Headers */ = {isa = PBXBuildFile; fileRef = F17EA4C0B097766DF4F4E4C353515C96 /* RLMRealm_Dynamic.h */; }; + 1C69EAC3F56DA086FD3A08EA63ADF06F /* BatchedCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6536FA0E22574FA5AA6C1BCB88DF3449 /* BatchedCollection.swift */; }; + 1CEAE810DD2F12797F715DE23EDD790A /* FIRInstallationsStoredItem.h in Headers */ = {isa = PBXBuildFile; fileRef = A3F5694700CDE9DBBBBCA7EC5A96B1DB /* FIRInstallationsStoredItem.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1D691C9D33B859BCF205B302404CF87E /* Collection+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6CFEA59AEA739790CFBD265E0D8B68D /* Collection+Extension.swift */; }; + 1D7A1CECC497E14EB8449EB7DEEA0B42 /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7095FDE29741CCD0A3ACA5F104C904A8 /* Error.swift */; }; + 1D8031C86A94D32E00ED55B80428A0F3 /* IQKeyboardManager+Toolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EE659580816A7DD04738971D08C481D /* IQKeyboardManager+Toolbar.swift */; }; + 1D9DC5D979C9A640EBCFF6F15A2E839F /* FIRInstallations.h in Headers */ = {isa = PBXBuildFile; fileRef = C74AC6F44145A1174ADC3524004ECB59 /* FIRInstallations.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1DB7E18AAFEAE99D1C291F36481FBC8A /* placeholder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5CF55EE1E62635B4548DA43FFC36D7A1 /* placeholder.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 1DC21DF083C4465566F03BF5CAB29AB1 /* GDTCORConsoleLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 35350DE1440D129F75DD619CFA52EEFC /* GDTCORConsoleLogger.m */; }; + 1DE2FF51BBCAFABCE7180F2F6E0BCA0D /* GULNetworkMessageCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 768E1282EC4221F70894BA62C11481BF /* GULNetworkMessageCode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1DF48DE01868B007A415E0F7582B5ADD /* GDTCORClock.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D344218986461A48E21BA64D17721FC /* GDTCORClock.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1E42234523CADF3435C47FFE755FAD55 /* pb_encode.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F2EAE1C713FC99BDC19E819DF65833E /* pb_encode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1EAA059A5418E46DDC135F34A9738744 /* FIRMessagingRmqManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 78A42D640A81DECF0F463A71FA26E6EB /* FIRMessagingRmqManager.m */; }; + 1EE44196E7BCE57AD96A2C751651EF40 /* AlamofireExtended.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D86C8CBCE4B0E7F64C1D31B2DAC6DF8 /* AlamofireExtended.swift */; }; + 1F6BC4C496EC88B19D3D8C46147045DE /* RLMCollection_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 76A7BEE9490C63F4A43F4C083A2314F6 /* RLMCollection_Private.h */; }; + 1F77D168B69FEA1F9E60CB2AE6B16F7B /* Realm.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = E41E301F92647C576F44D654E1304912 /* Realm.h */; }; + 20004B99F5050F59E747AB8DFAD7E891 /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = AE446C7E78D05F2B464DCADAE0114EC6 /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 20616A47873318F80BFFEABAC9730122 /* IQTitleBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C5EAE6515A98F6798C3877BE70EC989 /* IQTitleBarButtonItem.swift */; }; + 2084D75E97F44D8DAE091C7739B06E01 /* CBC.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBFFE86F79B3B7EE6D8884D80F71A42B /* CBC.swift */; }; + 208DBE44AB593CDED5BAD48E4F6419A6 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3953AE17C7700CC8842FB26A55BF9B76 /* CoreTelephony.framework */; }; + 20B46048A49C3DD9704C96BCA4565A64 /* Checksum.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07B1E0E662005D9C75ADC6BA4A8DBF71 /* Checksum.swift */; }; + 21024210611944A5526024611AE6D305 /* RLMObjectBase.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 5E5A813886535DAFDAFD5ED2DC4A2063 /* RLMObjectBase.h */; }; + 210DD290122BB0C7A0E83DC5148D724E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3263CAA0BC54D21B0E4A6596E847B597 /* Foundation.framework */; }; + 21BB67CBAC7B7033CD84EFE59814A6B3 /* FBLPromise+Retry.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 0CEF5D5C68FF22FC04888630F0CF74A7 /* FBLPromise+Retry.h */; }; + 21D05279AA20EE7A1707A76C11BBCC00 /* NSBezierPath+SDRoundedCorners.m in Sources */ = {isa = PBXBuildFile; fileRef = C09AEF4A253EC803FEFEC7FE6A822F15 /* NSBezierPath+SDRoundedCorners.m */; }; + 2218A32DE5A9C6A8C2E344B41B1E3040 /* RLMObject.mm in Sources */ = {isa = PBXBuildFile; fileRef = B0330C8A000DC358C098C10096A52674 /* RLMObject.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 22B4A919F838CB8354864D3520925414 /* FBLPromise+Timeout.h in Headers */ = {isa = PBXBuildFile; fileRef = 850E31E97C95396F711505AA41F39D3E /* FBLPromise+Timeout.h */; }; + 22CA25A7175111ED7235F4F78D66ED81 /* GDTCOREndpoints_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 677F023889847F06D08B9418023C07D4 /* GDTCOREndpoints_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 22EA86F3D0F602D6EC406916D61B2400 /* FIRMessagingExtensionHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 1239C333B57CA601FFCCDE649028999A /* FIRMessagingExtensionHelper.m */; }; + 232389C507070EFB94E7263DE411AA08 /* RLMAnalytics.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8EBC005486B3ABDD3CDB504FF5E0639E /* RLMAnalytics.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 2369B4DD571509A92E8C316474AFCF34 /* MockingjayURLSessionConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B0023AE6FB4975A029EE2A42CA165FF /* MockingjayURLSessionConfiguration.m */; }; + 237478E12F838A88D98175FBBEEACD30 /* FIRMessagingTokenFetchOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DE6A3C9B720D73EA03AA3BE4D3B9F02 /* FIRMessagingTokenFetchOperation.m */; }; + 23845E588BE52974DCE35EA857812D17 /* Cryptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93427A736E77B72D9C425FBF565D7090 /* Cryptor.swift */; }; + 239DB23B7937FAD6DD5E43DB92D3AAC1 /* GDTCORFlatFileStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 66CC2499398F88BBC4623E0C724E9441 /* GDTCORFlatFileStorage.m */; }; + 23F2594C8B2A5AF793655618C7B7F985 /* RLMObject_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = E0436201DA1D5CD87F67AF22447954AC /* RLMObject_Private.h */; }; + 2402753327A88FCFBBA79809A123F324 /* CCM.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBD427BAD65E05CBFEE7AAD318686E4A /* CCM.swift */; }; + 244C5E3CCCEFA5C3612F51F614B7FDF1 /* GULLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A269D3541CAC22B2C1EF187F11CE357 /* GULLogger.m */; }; + 248F118A0101075FF33C0CADDDB10EBB /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F9EEAD2CCB06E3D9F37D73E7DCA7FA4 /* Security.framework */; }; + 24DA814C2F7EA7C4187E2BF0B6466E9A /* SDAnimatedImageRep.m in Sources */ = {isa = PBXBuildFile; fileRef = DC5330AA32F04680A63A134AE981E995 /* SDAnimatedImageRep.m */; }; + 24EC44FF102C2635A476CEF7567F89DA /* IQPreviousNextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 652B9C49262C1D41786BA997BB665585 /* IQPreviousNextView.swift */; }; + 24FEFF1E340500CEF776607FAF31F9E8 /* FIRAnalyticsConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 9217E55EEAC79CDDFFA16D67DC738B35 /* FIRAnalyticsConfiguration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 25F940187B693B142ADE471F82C4C3EF /* FIRLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = E9AE0074EF4226A0D021C823A296A9AB /* FIRLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2647AE584D61722690737AB21AA9E27C /* RLMProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 24F449C44B57967C5D754656FF206DCC /* RLMProperty.h */; }; + 266E9F57919399FE31DD05BF2055C2E5 /* GULReachabilityChecker.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AE5A5DC96C77E5E7DE1F09EC7910E4A /* GULReachabilityChecker.m */; }; + 26802F527B0AA12FA4F9BB6EDB7460F7 /* FBLPromises.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 03EECABE8B2F2144165610F1A3B26DEE /* FBLPromises.h */; }; + 2687A6EB9C99DAA8A0FED7659089E350 /* FIRMessagingAuthService.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B44FFC9B7D2F052D2EBFBA30D60EC31 /* FIRMessagingAuthService.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 26BF15D648EFA59FCA18AE285AC5B2A1 /* UIImage+MemoryCacheCost.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B136F9C45BAE3737E765F915F354D86 /* UIImage+MemoryCacheCost.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 26FE7FFC181A4B5270F19771DE8923F9 /* FBLPromise+Testing.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = B82C9BBA02B896199E357FD3CF478B94 /* FBLPromise+Testing.h */; }; + 275F99E74511043432C892810081DCAF /* SDDiskCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CFF9B6EC3E61D2BEDFA053704DA00CA /* SDDiskCache.m */; }; + 2766B3C02382FEDD5FC31E0FD9EED908 /* FirebaseInstallationsInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = ED42773EC3BCF7A2482F486D028126CC /* FirebaseInstallationsInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 276CC227966843C2742BB4BECEE4CE6D /* FBLPromise+Validate.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 9DD22208761570BF96A5E1CD1729794E /* FBLPromise+Validate.h */; }; + 278F5B2C01E923AA0C691D79BD0F321F /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 21CD99DC88689CA38D69CB3C08DF3DE1 /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 281A1043543B7C94B83DCF262E69AA9E /* me.nanopb.c in Sources */ = {isa = PBXBuildFile; fileRef = 66116F7F66CD6891D2B68144F8DE2337 /* me.nanopb.c */; }; + 28532908E40E423052AA43B0000028BF /* UIImage+Metadata.m in Sources */ = {isa = PBXBuildFile; fileRef = 20FAD7748BD61979750F439CC076A93A /* UIImage+Metadata.m */; }; + 2857C12D41243A71C3972DE5CF012ADE /* collection_notifications.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FD525848D54648A0C5B39BE590CFB9C8 /* collection_notifications.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 29CEED3F765AAF5EA85A27AE6D4BC10F /* GULSecureCoding.h in Headers */ = {isa = PBXBuildFile; fileRef = 35772521BDF8213DF50045F39ADA084A /* GULSecureCoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 29EB7FC5FCB017B10C7A56EEC67B6C87 /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42DD581DCCF8F255485F1C1C6F091196 /* Utils.swift */; }; + 29EBEF45DCEC1D6568413032FA8FB2DB /* BlockCipher.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFF5F6B7C7BCE54E0FCEF94864CD4E20 /* BlockCipher.swift */; }; + 2A0F2EA07B0925C976B4E82084BE6322 /* FBLPromises.h in Headers */ = {isa = PBXBuildFile; fileRef = 03EECABE8B2F2144165610F1A3B26DEE /* FBLPromises.h */; }; + 2A389D9D1BC1EA338C7247C8B37720CF /* FIRMessagingRemoteNotificationsProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = D1264FF1CA23F00AA866F75C63C8A243 /* FIRMessagingRemoteNotificationsProxy.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2A454A60CA430740DA92535023731BC2 /* RLMSyncCredentials.h in Headers */ = {isa = PBXBuildFile; fileRef = 261D533A9D09F851E4D6C4705A6BEC5A /* RLMSyncCredentials.h */; }; + 2AB8DEF2845DA08DAEC0841831B300F0 /* RLMSyncConfiguration_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B21C3FFB257241762DEF4BBE0D8E1A0B /* RLMSyncConfiguration_Private.h */; }; + 2ABCE2D794F54E42CB36B7335FDFD49D /* GDTCORTransport_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1510CC3127861D6044166660206EA1E4 /* GDTCORTransport_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2C224BC579A71FE1C15030047144A128 /* FIRInstallationsIDController.h in Headers */ = {isa = PBXBuildFile; fileRef = D57B019B8248B7C05431DA8D1173BC10 /* FIRInstallationsIDController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2C3397B146B5DAFBF5973518F40CC80E /* FIRInteropParameterNames.h in Headers */ = {isa = PBXBuildFile; fileRef = 3916E6195CD4C68739B781772014C7E2 /* FIRInteropParameterNames.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2C37FBC9EED53CBC85A8BEF61F0FAB8A /* Matchers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D168336F30C0E2A406284B659F0568FF /* Matchers.swift */; }; + 2C762E5C654B718C19CC98FEB27C2DA4 /* SDFileAttributeHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 12AE4111ACF34FAD59B19E2997E3D7FD /* SDFileAttributeHelper.m */; }; + 2C88653A4099608CB83382B451E50F79 /* FIRComponentType.h in Headers */ = {isa = PBXBuildFile; fileRef = A5AF03F87480F24C4F0E615FFB805B95 /* FIRComponentType.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 2CA0B3B43A972DF3AD79F58092E3403E /* IQKeyboardManager+Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D844984E98E7424570911761BD9B9B7 /* IQKeyboardManager+Internal.swift */; }; + 2CB80C0AB5440BDDA4AC72963E4B7677 /* GULKeychainUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = CFE717064F57B1216E27616F620D2A41 /* GULKeychainUtils.m */; }; + 2CBE3651CA006E19F5D64A2DE9B9A028 /* CachedResponseHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA7703C45051BFA79C1F4BAF925BA1A8 /* CachedResponseHandler.swift */; }; + 2CCD13099063CD560E3067BD132914FA /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = F53088E8E52B8063C9F30147F3CF6256 /* Notifications.swift */; }; + 2CEE4BF55F76FAE36127882ECB9224DC /* NSDictionary+FIRMessaging.h in Headers */ = {isa = PBXBuildFile; fileRef = 0ACCA20C360D7CEB7B79938097F776FF /* NSDictionary+FIRMessaging.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2D6BDED3EF02886757CC1D166C9E27CF /* pb_common.h in Headers */ = {isa = PBXBuildFile; fileRef = A00EEF8B7B1B90E3F6C2667815AE35BC /* pb_common.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2D7E7D5F025A1006C0D373B5884B6E52 /* SDWebImageDownloaderResponseModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DE5E0BE7EB7E86E441E7F282B5C3B69 /* SDWebImageDownloaderResponseModifier.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2DEEECC278356273A202A4866598938F /* NSError+FIRMessaging.h in Headers */ = {isa = PBXBuildFile; fileRef = 36E86EA86E30E46E397612FA984D6EDB /* NSError+FIRMessaging.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2E5138271A6C79BDA3C0835F2596219B /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A14D461519705DCA765D901C9DF2124A /* UIKit.framework */; }; + 2E59E507E7081930F680F579B3210D15 /* GDTCORPlatform.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EA46C16911E09AA35F596EB0ECD3431 /* GDTCORPlatform.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2EC96162DD6740ECE67FF38B8400A7C5 /* IQKeyboardManager+Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = C847101AD300EFAFC10F780ADCA9E593 /* IQKeyboardManager+Debug.swift */; }; + 2EE07C0D021FD879F6FEE00AB915830E /* FBLPromise+Async.m in Sources */ = {isa = PBXBuildFile; fileRef = 53798DB9DC96F928D599839DA469095B /* FBLPromise+Async.m */; }; + 2EF5C6A10700B5ACBD45F9D0461389A5 /* OFB.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89C4C88114FFBC5E889FE474846974B8 /* OFB.swift */; }; + 2F85FF5597762E2E3C6961C6DD690A60 /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 24D52884ECAFD090E5D42AB429DBBFEF /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2FCC2C2EE5BA2372F3CCF70DAA028085 /* PKCS5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BCF93BF622E68DD91D8085EDA79E224 /* PKCS5.swift */; }; + 2FD4B64A2DC9E026987C6877EE8B4C24 /* FirebaseCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B6FA7B9BF5B0983846E6E5E452BB8A81 /* FirebaseCore-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3015C91C523C5133A639F57DE0425100 /* SDImageAssetManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 44A3FB7C2F5B735151330F798B0B6DD1 /* SDImageAssetManager.m */; }; + 30887A82BA2F5660DA1B784A405EA7F8 /* FIRApp.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F4E01FCAD0DC75A625B94AECD417659 /* FIRApp.m */; }; + 30B9706BE643B5F0A0530D55403692A2 /* ActionSheetPicker-3.0-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 57061E940006E9984AD984E51EA242F0 /* ActionSheetPicker-3.0-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 31063283AE72D1D94208272CCB778752 /* GDTCOREvent_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = AFE7068B91963A64D7C4128874DDB6F7 /* GDTCOREvent_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 311C91C6CCDB0E1AEB0FF8BE631BA064 /* FIRMessaging_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 61AA70F5CAA013CA9CB376BC0007F3D0 /* FIRMessaging_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3129288434531A0A5972F29CBB967188 /* FBLPromise+Testing.m in Sources */ = {isa = PBXBuildFile; fileRef = 81FE6F8FEE6CBEA03755FA07E116C399 /* FBLPromise+Testing.m */; }; + 3167565AD7A11B9B78E40490FC5674C8 /* RLMThreadSafeReference.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 13F17F6A453303FFFBABD0E97C75036A /* RLMThreadSafeReference.h */; }; + 316C8C4BCD97A1391148A07CF967495D /* FIRHeartbeatInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B141D56D9E09D8D0EAC98D26ACC4FCD /* FIRHeartbeatInfo.m */; }; + 31EFF7DC4D279860D9D7B9154EF7E8B3 /* RLMPredicateUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1F75ED21D56BA218674B25FE4E05FA63 /* RLMPredicateUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 3228EF9BB4197B00304ACEBEC57BDA5E /* SWActionSheet.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DA9B4A60A50F7D770689F1613B2ADDD /* SWActionSheet.m */; }; + 32498B0F721AFB58BD7750DDECF35AB9 /* RLMObjectSchema.mm in Sources */ = {isa = PBXBuildFile; fileRef = 113F1B2DA7303DC2420D6440869234DA /* RLMObjectSchema.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 325323AD93DEFA1B863E377C129FE430 /* FIRLibrary.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B8815694B91A8617C4797DE51CD3540 /* FIRLibrary.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 32DF053AF55490DBBCC8F5A4135E7A48 /* CryptoSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 76D8E80C21A4CAF1EE2ABFE3F2506EF7 /* CryptoSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 334D28B6349CDD6C4851C6ED56DFF411 /* Rabbit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72B83333C0AFB4A6E78AE7028737B54F /* Rabbit.swift */; }; + 336BA7F271A33087B951BA4C6C6B2C6F /* SDImageAssetManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E99E7B8DC9F776A9425E9DFED7F2273D /* SDImageAssetManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 3388EA2FE529BC06656FC184393B19AB /* FBLPromise+Always.m in Sources */ = {isa = PBXBuildFile; fileRef = 76B5DB2ADB6FFC91F27CB3037F369EAC /* FBLPromise+Always.m */; }; + 3396F2363F71E303CA8E782F93F059AE /* SwiftVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AD526A021FFB96406ED14530104D96C /* SwiftVersion.swift */; }; + 33A7D0F2D03004CE256A75E03DF33C70 /* RetryPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = A29417FE62A3FC70235F1062E62971E1 /* RetryPolicy.swift */; }; + 33C0E2EFD1C8046A2020D25FD1F1611F /* SDImageAWebPCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 341D3D7FF38A52056B04B400FDA3A053 /* SDImageAWebPCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3412222C713342515C09C76ACD063552 /* ObjectiveCSupport+Sync.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ED122F473D59CA33CE6B81ED4B9F82A /* ObjectiveCSupport+Sync.swift */; }; + 343B53EB998CC5B609B8DE84BAD882E0 /* SDWebImageIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C9DD17F7C6B6BFEE7352EE052C6EE7A /* SDWebImageIndicator.m */; }; + 34C39BDBFE7A2CC585787F5AFCA39FDE /* IQUIView+IQKeyboardToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CD46BAE712C73065009FCB58F13B4F2 /* IQUIView+IQKeyboardToolbar.swift */; }; + 353721D2B910AE4F9B8196D7277242ED /* Data+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2496EF29FE53B89A69CEAC97C243516 /* Data+Extension.swift */; }; + 36E5E663265DE9296BA7EBFBF325CAC9 /* FIRComponentContainerInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = E8995ADD90CF0D3B446C426A30A79B9E /* FIRComponentContainerInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 36F35669F3AFF65477B2366FC09A1B3F /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D528F0D8937E74B679CDBEB2E38580D /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3717882DCBD1310DA525FEC8AFFDD802 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3263CAA0BC54D21B0E4A6596E847B597 /* Foundation.framework */; }; + 3789D81FC4EEF2A1AF6BDFE1269A7B94 /* RLMProperty_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 66335C8A5AF18D0C031D33F089435222 /* RLMProperty_Private.h */; }; + 379331597F530A4E49B5FE32665E9F0F /* GDTCCTUploader.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F7EB1F9ECCD5AE03E5F10FCE68FF1BE /* GDTCCTUploader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3795AB02403CE995C3680532D4FFA4A6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3263CAA0BC54D21B0E4A6596E847B597 /* Foundation.framework */; }; + 37E3C820BC838123661E1391BEAF8092 /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = FDCC4D1C12012DC0E1893B12D60724AB /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 382F0AE73D998A96BF1C4F3026E57016 /* FBLPromise+Do.m in Sources */ = {isa = PBXBuildFile; fileRef = 49B3813670594A60E4ACE3E5CE4BA3F4 /* FBLPromise+Do.m */; }; + 385D912FDB955C03F1D1958FD1DA49A6 /* FIRComponentContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 11B2F1350462148ECF81B6564429DC5C /* FIRComponentContainer.m */; }; + 3863C639EE9B5740DFB759E44AB719D0 /* binding_callback_thread_observer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A3F99181DAF40B6CF938E94C407F7C37 /* binding_callback_thread_observer.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 38CF7D5EE6C28780FE3F9C1E63CFF3D4 /* SDAnimatedImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 22805B2E34D9DF8AA6F023CE27EE5621 /* SDAnimatedImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3903D867E1B04DF17B5ACB08E4D496F5 /* PBKDF1.swift in Sources */ = {isa = PBXBuildFile; fileRef = 095AB0EBBCEB9C57CE1EB42C47F03E22 /* PBKDF1.swift */; }; + 39A97C81141042C0051269857044D285 /* RLMConstants.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 1D0A126A6DC0299326169F5255EEC33C /* RLMConstants.h */; }; + 39D786449B03A4F5ED2D73E723C51EA3 /* FIRInstallationsStore.m in Sources */ = {isa = PBXBuildFile; fileRef = B8B924018F65BFB3F44814382A590837 /* FIRInstallationsStore.m */; }; + 3A03E128E6500F41492132965CE5E11A /* FBLPromise+Async.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = F8FE1F84EE49BEEA3719D1D44CF09511 /* FBLPromise+Async.h */; }; + 3AC51F11AAE70DC14A6D237F26C04F11 /* GULNetworkURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DC690A50A8FC6E3664DCCA6A2F66E78 /* GULNetworkURLSession.m */; }; + 3AD1A8DE05F757C38D78E9AF67EB0887 /* FBLPromise+Reduce.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 28FE13834F2A78F2B96F8D97F12B7CDA /* FBLPromise+Reduce.h */; }; + 3AEE7FF1DEA647530832FC8AA3D41A78 /* FIRMessagingTokenOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = D91BE1E22894A3B5977054DB74BC9DBE /* FIRMessagingTokenOperation.m */; }; + 3B23B464E145E2B7E69CBE5E1561CA96 /* RLMConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D0A126A6DC0299326169F5255EEC33C /* RLMConstants.h */; }; + 3B72C235C1AB8944333C2322F08B6B46 /* SDWebImageTransition.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B96F13690D2203E934030C0A77D2E09 /* SDWebImageTransition.m */; }; + 3BF80B98213E4900761B8E9C6FD57947 /* ISO10126Padding.swift in Sources */ = {isa = PBXBuildFile; fileRef = A446D9F1EC72D5F0E00297AD2CD54B08 /* ISO10126Padding.swift */; }; + 3C4059621E23842C19D4EB5D35B41989 /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ED80882A44DDDA71D422827D3E6CC66 /* Validation.swift */; }; + 3CBB4B4C13FB6375FDD851A947B9797A /* RLMObjectSchema.h in Headers */ = {isa = PBXBuildFile; fileRef = FB1FD42E76E8060BE354FA1F8E647706 /* RLMObjectSchema.h */; }; + 3CD5FF4405400BBF79AB8266A86C927F /* RLMRealm.h in Headers */ = {isa = PBXBuildFile; fileRef = E68AEF1534C586A35CD176A466EDD12C /* RLMRealm.h */; }; + 3E11E701FBE0271ABFA5E290595A03A8 /* RLMRealm.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = E68AEF1534C586A35CD176A466EDD12C /* RLMRealm.h */; }; + 3E1A63A33EB09F59D4EB962C66320832 /* LinkingObjects.swift in Sources */ = {isa = PBXBuildFile; fileRef = 314C749436D4A87B600D47700AE7BCF3 /* LinkingObjects.swift */; }; + 3E20ACBD443C2D7BBF17DBE83CBC521F /* ActionSheetLocalePicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 525B65287859DDD7112EBF6E0F802636 /* ActionSheetLocalePicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3EAF47EA6C257259EE0E0C68952F7A59 /* RLMClassInfo.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3CD68B8EFC8D06054D1FDB35C873FBD6 /* RLMClassInfo.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 3F01EED6380B596E1D0C1497CBCF9B95 /* IQUITextFieldView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F05DD265455B69C332AAEE9DE02AE04 /* IQUITextFieldView+Additions.swift */; }; + 3F173B5C7863A05E06C08380C17E4C48 /* RLMSyncUser.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 8FBBD10AFE907DF8B70531381BA8CEE0 /* RLMSyncUser.h */; }; + 3F567CE353442AE137B71B258409F5DA /* SDImageLoadersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 62E2A196FA7C8AA84EFEBA4E419F2ACE /* SDImageLoadersManager.m */; }; + 3F63D5EF8485315BB40D599D3E1CBF8B /* FIRAppInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C6A257FF276CE5534AD997BCB16EB70 /* FIRAppInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 3FB00B6187FADACF9F2E2463C6CB37D3 /* ActionSheetCustomPickerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 80733B1467ECCE8ECCA96788C8D79917 /* ActionSheetCustomPickerDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4007288570A129B4E922875A51663243 /* SWActionSheet.h in Headers */ = {isa = PBXBuildFile; fileRef = B905FF11B41659CD1D66780ED7574A5B /* SWActionSheet.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4075297FF5A21C84EF513521FD7B34EF /* SDWeakProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = DA0AD2CDEE830266358B1DBFBAC8D0F7 /* SDWeakProxy.m */; }; + 41082441C0BD0EBC88912A0AD81CC2CA /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7C99E6FBF6014D74F7365E1B7DCBD57D /* SystemConfiguration.framework */; }; + 412EE262DCED176A73591124DBDBA97C /* UIImage+MemoryCacheCost.m in Sources */ = {isa = PBXBuildFile; fileRef = BAB318868EBA2F88A56A244FDF436352 /* UIImage+MemoryCacheCost.m */; }; + 41CD40F5713CD71AD5AB1471E81C97E1 /* IQBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1271A1543FC34B052F555BCCB28A5380 /* IQBarButtonItem.swift */; }; + 421CF086D6FD34D2171764E280FF2771 /* GULAppEnvironmentUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 1653E6C2BE2B7BEBEB61883E847EF596 /* GULAppEnvironmentUtil.m */; }; + 42822E48A1441AD8E0011D37C1625B36 /* SDAnimatedImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = B771BA82C835F9C542044F7B93F2A464 /* SDAnimatedImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 429E5CC928985357D07058FDEE8069FA /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = FEA870B2BD2C2D79F7B2D94ED6215772 /* UIView+WebCacheOperation.m */; }; + 438F7B08566C75A89400AC8FC49F11B0 /* sync_session.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9D8DAE703C91F108652E2315F02D5E54 /* sync_session.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 43A12D4192BBA5BE8BC7CB980F98ACDB /* sync_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A0F76F81C970B6D1BDCCA4917FF7EE58 /* sync_manager.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 4412A2326DF9D3E8FBC69F331A216568 /* collection_change_builder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F373BB4DE52C0FBA6E91C75650D68641 /* collection_change_builder.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 442567AA3729CE290823E6890EA3EF05 /* RLMConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = BBCFB94BDDF9E2EF2D3775D8B0149F4F /* RLMConstants.m */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 445AD3633961BD376EE09B02307B088B /* URITemplate-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 803DDA4CB2AE4EBEA523C42066CE8E10 /* URITemplate-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4479869DCE2FE4B8514072179B58E29A /* GULNetworkLoggerProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FB10D3D2C3AB2BB11550F7F1F9C46C1 /* GULNetworkLoggerProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4482EC007A9C73515CB5B1469AB8316A /* FIRMessagingTokenOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = E35DFA92475BBC4A08C692D9EE7295DA /* FIRMessagingTokenOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 44A337C99C192862AC3E83D633178550 /* Generics.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFED1FF6E72598E3090E9F6F4496DB84 /* Generics.swift */; }; + 44AD17B9DF9FCA7F17CE76A047AB8112 /* GDTCCTCompressionHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EF0F8E949D61223B76B4D795E8D9010 /* GDTCCTCompressionHelper.m */; }; + 44D57DDCE3471403FF0B837C1E5CF9FA /* FIRMessagingTopicsCommon.h in Headers */ = {isa = PBXBuildFile; fileRef = C6A53FDACACA43B7CDF53D66D6334763 /* FIRMessagingTopicsCommon.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 44FF9B46629AFDA304297D85D59A1B50 /* FirebaseInstallations-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 464D09382F45B4B64C6452662549CE4D /* FirebaseInstallations-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 450FE477EEFDDBC71D6EACA2EAF3365A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3263CAA0BC54D21B0E4A6596E847B597 /* Foundation.framework */; }; + 455293CB3237E60314F28FC940E2E19E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3263CAA0BC54D21B0E4A6596E847B597 /* Foundation.framework */; }; + 45670E07AAFDE8877911FA0FA180E8C8 /* AEADChaCha20Poly1305.swift in Sources */ = {isa = PBXBuildFile; fileRef = E82BAD2A000A217297075BCC2AA48367 /* AEADChaCha20Poly1305.swift */; }; + 457C874CB5D21412C881FA4A6D5D2460 /* GDTCORFlatFileStorage+Promises.m in Sources */ = {isa = PBXBuildFile; fileRef = F0661C4F83EA9E4497F47E235880FA6A /* GDTCORFlatFileStorage+Promises.m */; }; + 4623448C58E0E271F0DF5F4CC6CAFD0D /* SDImageCachesManager.m in Sources */ = {isa = PBXBuildFile; fileRef = AEC5B4958AD92A73442C6946F45E74A2 /* SDImageCachesManager.m */; }; + 46A64A43AFA057B6B63C8F0C12F509B4 /* Combine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C3797347C2210AC6AB2BA4B8874341F /* Combine.swift */; }; + 46F3DB022D4FB35592EF44D97D163537 /* FIRMessagingAuthKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = 272291D466318A926383BA802F3FAA26 /* FIRMessagingAuthKeychain.m */; }; + 474043C742E4B1000E746075D3FC7E83 /* FBLPromise+Any.m in Sources */ = {isa = PBXBuildFile; fileRef = A50E7F631CDE15C236E4196C87BE523E /* FBLPromise+Any.m */; }; + 4740D7B2BB0018454E64D11B7F7888BD /* FIROptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 0EC6C19B7F3FAD3D16CA4E97360D0E5D /* FIROptions.m */; }; + 474163E6CF20CA1AC3698759F2B6D51B /* NSButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 152CA9F9887265F3C621276390D41295 /* NSButton+WebCache.m */; }; + 4764DB91CAEF26CA6EED99CB71389637 /* AES+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 634D852EB52F1539A9522067358D2E32 /* AES+Foundation.swift */; }; + 4788461CD9B764A0C5E1E8A7E7304C6D /* BlockModeOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17556347F56716DD69265DF5CE773998 /* BlockModeOptions.swift */; }; + 48011BD30580A5EAC315CCB2A38ACCB7 /* FBLPromise+All.h in Headers */ = {isa = PBXBuildFile; fileRef = 49FCAC0C133618FAE480D2B7371BDFB2 /* FBLPromise+All.h */; }; + 48920AFFC7C0E2FEA632DAA2BD63287D /* SDWebImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D7B6359FA6FE4D1A19A2173369B213A1 /* SDWebImage-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 49183DA3D9248B07DE19CA294D5C7824 /* FBLPromise+Do.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 50EAE3FD2BD1CB163C45B1B82C934B30 /* FBLPromise+Do.h */; }; + 498AB54D6531F0B57EAAD113AA0CF0F9 /* SDAsyncBlockOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E539DBB7888BE07E510D1839D688276 /* SDAsyncBlockOperation.m */; }; + 49AF57614D7F6743DC1006C87FFA0212 /* FBLPromise+Timeout.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 850E31E97C95396F711505AA41F39D3E /* FBLPromise+Timeout.h */; }; + 49F97D8BA4E81A5E0EF866A293392AF2 /* SDWebImageDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9553704372BF90F3BE448C1C9E2DA6 /* SDWebImageDefine.m */; }; + 4A27F890C33243C4548A25318264B375 /* UIImage+ForceDecode.h in Headers */ = {isa = PBXBuildFile; fileRef = 95BD75675CC5BA6799129F1026664498 /* UIImage+ForceDecode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4B351391A67289500CCE3095528A30EC /* RLMSchema_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = EE22EC02A207B236C60B52B786AA9813 /* RLMSchema_Private.h */; }; + 4BBDAE80B2577F2F7312A6EC1FA23A30 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3263CAA0BC54D21B0E4A6596E847B597 /* Foundation.framework */; }; + 4C59694CFB1E77C1D6B67663A8F862FB /* FIRMessagingTokenDeleteOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 846A0AACA1227CFD7093B653A9CB28BB /* FIRMessagingTokenDeleteOperation.m */; }; + 4C7AABE17C583A37959B333DC2D47F80 /* RLMSchema.h in Headers */ = {isa = PBXBuildFile; fileRef = 040493368318D4DC8040E4115DE6D10A /* RLMSchema.h */; }; + 4C8B71FCBD6EF8ECDCF98ACF8D0A320E /* FIROptionsInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = CBFF1C771F5481B750F48730721180DA /* FIROptionsInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4CE41F07696AA12AA1E674F84B2F6053 /* RLMSyncSubscription.mm in Sources */ = {isa = PBXBuildFile; fileRef = 12879C29FF49723AA1A8917275D96091 /* RLMSyncSubscription.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 4D0EF054B7A90456C712857D9D17658A /* sync_user.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A766B91C855FE70C180EBF007FFE216A /* sync_user.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 4D137099178F3E0AEA487ABD4361F1BB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3263CAA0BC54D21B0E4A6596E847B597 /* Foundation.framework */; }; + 4D140032010AB7B75D39B82D6CE63ACF /* Builders.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE37874066F59D4F4D263C0897CECD42 /* Builders.swift */; }; + 4D2C49758C5F0EF70697FCA49FB3FB75 /* Object.swift in Sources */ = {isa = PBXBuildFile; fileRef = 710A260513A82DD95EE9C188BF553F35 /* Object.swift */; }; + 4D8EAD4297B6BB2DA8AA5C61550EB6E0 /* FIRBundleUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 586F8346074F0F8A9D76F6CC518E2807 /* FIRBundleUtil.m */; }; + 4DB5E1104244D37AE4795F8A12C6535E /* FIRInstallationsAPIService.m in Sources */ = {isa = PBXBuildFile; fileRef = 63602BB28A0255038A646BEEC0159C32 /* FIRInstallationsAPIService.m */; }; + 4DC4BB83E813D197C5B61E800D2577EC /* object_schema.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C6C4BA0487C33053C0FF67C5E65978B /* object_schema.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 4E088DB1749C12BA9883CE8DAFA013AB /* FIRAppAssociationRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = DCB67F419572AC3ABBE0EF5A1B764982 /* FIRAppAssociationRegistration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4E0A419C441256D2E03CB51477F13B23 /* FIRMessagingTokenManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 203B166F25E8E0184A8F9013523E33F9 /* FIRMessagingTokenManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4E125E593475BE3851EFE18C1609675B /* FirebaseMessaging.h in Headers */ = {isa = PBXBuildFile; fileRef = EE095E6BA8261824ED1F0EED91B5244C /* FirebaseMessaging.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4E310A75C4695113195A462EDE224621 /* FIRMessagingPersistentSyncMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 7BC0A720AAEF2D2E2A4E1C61BC6E01F6 /* FIRMessagingPersistentSyncMessage.m */; }; + 4E7A04121E7DC08686D4B74F5A2271A2 /* FIRMessagingAPNSInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 796764380BCCDD2B7C8B0AA3E307B0E3 /* FIRMessagingAPNSInfo.m */; }; + 4E82D0BA2ED598584CA74A7F044BBFE6 /* FIRMessagingPendingTopicsList.m in Sources */ = {isa = PBXBuildFile; fileRef = ADF9919489D1F7C1769E3E295E87533E /* FIRMessagingPendingTopicsList.m */; }; + 4F5982101CB9FB68613E826F137B5E95 /* SDAssociatedObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C0ED09D78C79C0AB48BC0AD1372A340 /* SDAssociatedObject.m */; }; + 4FB353F2B2E7D7AE0811D7C538DA2B36 /* SDAnimatedImageRep.h in Headers */ = {isa = PBXBuildFile; fileRef = CDE768EE370DFB9FFDDEF213EF4ED391 /* SDAnimatedImageRep.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4FE825E3C109DBDB1E67A6BA64531C4D /* FIRInstallationsStoredAuthToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 72A9B93B24EAB754E87D4959978F5193 /* FIRInstallationsStoredAuthToken.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5041DE7DB5D7C97ED3EC57A773186F2C /* GULNetwork.m in Sources */ = {isa = PBXBuildFile; fileRef = E81B6ED242E2EE14683340BFB2B3DAD8 /* GULNetwork.m */; }; + 5044520D66564D15A6791711F8D0B814 /* object.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 345358275926E6904CA8446BB1CA1700 /* object.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 50E7DFD17F3242D4B733F2279869666A /* FIRComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = EC0D95CF0909041AD56E36B0770F241B /* FIRComponent.m */; }; + 50EDFC88D8E5515FEA35B2CD43715CAA /* ActionSheetDatePicker.m in Sources */ = {isa = PBXBuildFile; fileRef = E750C0538DA22CCA0E7F5C46F37F78CF /* ActionSheetDatePicker.m */; }; + 50FCC3C44B374B848F710065239F1C1E /* FIRCoreDiagnostics.h in Headers */ = {isa = PBXBuildFile; fileRef = 43BDEB2895894AC4536960C7B57CD0C4 /* FIRCoreDiagnostics.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 518AC1F883F916217AAD67980057E512 /* RLMSyncConfiguration.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 0F9A122A32FAC4BB79A362A9E767BE5B /* RLMSyncConfiguration.h */; }; + 519B33DCAE0FB73CC313A2C2AD434449 /* SDImageCoderHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = EE5008516CEC8B41C429A3858D113055 /* SDImageCoderHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 519EA55DB73A4DE25817A0BE00249A85 /* FIRDependency.h in Headers */ = {isa = PBXBuildFile; fileRef = AA1D8BC52D6CD4E6CFDC496B1E99AB26 /* FIRDependency.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 51F891EA712D8F14CF1DD77BF20B62A9 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 47E509C5408A326D4B97130D8CBDF654 /* ImageIO.framework */; }; + 522EEA502D440303F3965864EFE88117 /* FBLPromise+All.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 49FCAC0C133618FAE480D2B7371BDFB2 /* FBLPromise+All.h */; }; + 523861A018452CE8BB166B59A7872BDA /* SDImageFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 554B24F16943C1AD775CD7B8B7E95C84 /* SDImageFrame.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5240A27C4248AE08E365122807886E96 /* RLMCollection_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 76A7BEE9490C63F4A43F4C083A2314F6 /* RLMCollection_Private.h */; }; + 52E45ED889A5BC35A292562D69EB7549 /* RLMSyncPermission.mm in Sources */ = {isa = PBXBuildFile; fileRef = D852FDBB41DE1D0A11B390F7E54C6A22 /* RLMSyncPermission.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 52EE94C5E58E2EB448C2092E05E46BCB /* GDTCORUploadCoordinator.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EC53384D4743591FB5FE0E9F8D0F85A /* GDTCORUploadCoordinator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 53042D9D194CD8BE861A5DD3781EF261 /* BlockDecryptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC345F039C5725079705F6A9271A9470 /* BlockDecryptor.swift */; }; + 53484A3512CFDCFF407CBDBC174B7680 /* FIRComponentType.h in Headers */ = {isa = PBXBuildFile; fileRef = A43B584962FB87A9150DED9737AE77DD /* FIRComponentType.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 536E9C0D3855A6AF7CADCB9FBAFC613D /* SDImageIOCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 75FAA4A6DC235A402EAAD747DAF61360 /* SDImageIOCoder.m */; }; + 538487A72C96D8607E850330240E1428 /* shared_realm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CE54066211663F8BA2F9D0AFF6BCE789 /* shared_realm.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 53BF0FE77A91BC99F2CBA559D91F105F /* PBKDF2.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF1CB46179AE6BDB8AAA002E621C3BD6 /* PBKDF2.swift */; }; + 53CF1799D7B8D29AD1017B6713F19698 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7C99E6FBF6014D74F7365E1B7DCBD57D /* SystemConfiguration.framework */; }; + 541A7BB28AFAE0B25113844FCC938679 /* RLMResults.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 73605EA91DA311A4558468B17EF9A149 /* RLMResults.h */; }; + 542C9E8C1561679C2B9596C7653D375E /* SHA2.swift in Sources */ = {isa = PBXBuildFile; fileRef = A67F1ACB5315422C34CB97BBDE734FEA /* SHA2.swift */; }; + 5433D9B1A7004CEBF4CA2F1FEEBCAB38 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3953AE17C7700CC8842FB26A55BF9B76 /* CoreTelephony.framework */; }; + 54BA876EB44EBB4D2F7C9E976E1B8CCC /* NSError+FIRMessaging.m in Sources */ = {isa = PBXBuildFile; fileRef = FF5EC48B116F6235D035340B55229B2A /* NSError+FIRMessaging.m */; }; + 55018C7112A943BE15FB9735839CB8AE /* Int+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8530C6A9835A439D33DDD56BCB777CBD /* Int+Extension.swift */; }; + 55182D1853881A344A45E3130F583E1D /* FIRMessagingRmqManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 078782FFD727F30FE3A92A32B64A9C35 /* FIRMessagingRmqManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 558986D0D52FC340DE534D4F38CA8D3B /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A14D461519705DCA765D901C9DF2124A /* UIKit.framework */; }; + 55AABB1FB38F61A3369ACC555FF3046D /* Alamofire-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D8EA477F672052BB6D97EC482EC0DC84 /* Alamofire-dummy.m */; }; + 55C070AD816ECA92658A0AF9024AA764 /* FBLPromise+Delay.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 92C6D0B54C4429D514530F47D7C856B3 /* FBLPromise+Delay.h */; }; + 56322B4562A5B096C72F1E5BE1EDA721 /* GDTCORTargets.h in Headers */ = {isa = PBXBuildFile; fileRef = 5828C1BB14128916DE0B5C809ACDA0BD /* GDTCORTargets.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 56706731EFD3AF6092CDAF8359B039B8 /* CipherModeWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D268FD4D7E49BAE640C9BD4FF78947 /* CipherModeWorker.swift */; }; + 567A460C2060450EB27B03995D420F5F /* FIRComponentContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = D520C9C73C22B14CE2B603ABC839F4EA /* FIRComponentContainer.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 5699B37B549720D9DDD03458842BCB23 /* FBLPromise+Await.m in Sources */ = {isa = PBXBuildFile; fileRef = 1455DB1506413AD7F20DB8A3C93B6AF8 /* FBLPromise+Await.m */; }; + 56B580DCBF9C7128ED0F35EA385157AE /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7C99E6FBF6014D74F7365E1B7DCBD57D /* SystemConfiguration.framework */; }; + 56C147D365D58C471BB777C26600CB35 /* FIRDiagnosticsData.h in Headers */ = {isa = PBXBuildFile; fileRef = F741AEFF3E6C1F082229C1D03F778740 /* FIRDiagnosticsData.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 575C37A0158B2CAC145109F6CB87DE8C /* GDTCORTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = A6B262D269D710E9578DA2177B9B1F07 /* GDTCORTransformer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 578E26936012EF18408E3B9F4EA54420 /* scheduler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A38538CC04BC57EB74D2370BF048CF9A /* scheduler.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 57ADF70F76685EBBCB417076520B4E84 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3263CAA0BC54D21B0E4A6596E847B597 /* Foundation.framework */; }; + 57DB22620729A391CD1D4820E8A25B72 /* FIRInstallationsLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B4BB533058FE937737E9954037611C7 /* FIRInstallationsLogger.m */; }; + 57E1C476BA5F8DD1ED740FE8DBC05D8A /* SDAnimatedImagePlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 689DE646188A608CD070FE34CEEFB3DD /* SDAnimatedImagePlayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 584042F6D9AA59C339EE233C4F6676CF /* FIRVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = 69BB52D815D0D5F759691A96723B1F1B /* FIRVersion.m */; }; + 58A43BDCCF03008ECE769C6B0E17C5C6 /* GULSceneDelegateSwizzler.m in Sources */ = {isa = PBXBuildFile; fileRef = 768AC73937772D944868FE8781922FA6 /* GULSceneDelegateSwizzler.m */; }; + 58BD68C61B4FA5D471C46A5F605DE194 /* FIRComponentType.m in Sources */ = {isa = PBXBuildFile; fileRef = 005415C2416F043F336BC633C2E71162 /* FIRComponentType.m */; }; + 58FAE3A59FBE896EBBDACB0808067CA5 /* SDDeviceHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 03F9E1C9D345AFD0ACD2C0F00A77B859 /* SDDeviceHelper.m */; }; + 5905338F8CB8887351F03AFDCB899AC5 /* FIRHeartbeatInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = B8990846A8D29A5EBB6B8242841A362A /* FIRHeartbeatInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 59E01E666184A267CD9EEEE421D3AE82 /* FIRComponentContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = FF9C9DB3A1C9B1BFAB04DCBEB5314BF6 /* FIRComponentContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5A3E5B854E8188DDF4E958BBC9198600 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3263CAA0BC54D21B0E4A6596E847B597 /* Foundation.framework */; }; + 5AD9B64367EA8E2FD8E825AB5A95C064 /* Aliases.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17F0DE74F11971DCF93741D2AE964BAD /* Aliases.swift */; }; + 5B3271A67137276C4B2CD554BAB9F4DA /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = B3BC31858C019AA80EDBF19684DA6A4E /* UIImage+MultiFormat.m */; }; + 5B69919844A3BD774BAABB186D6A524F /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = E4EECA729804FE1A1D527714244ABF47 /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5BA16F2BD795988806B4C93E14182AE7 /* RLMRealmConfiguration+Sync.mm in Sources */ = {isa = PBXBuildFile; fileRef = 24CD7F1F6A9EFAC4207F37E6A723C3F0 /* RLMRealmConfiguration+Sync.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 5BBE7719912593F1DEFF8E763EAD4ED6 /* SDImageCacheDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = 521B61126D3583D4E3C48185CA518C2D /* SDImageCacheDefine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5CD4BB9F47C0150E44BBEEA92B0C2270 /* work_queue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4E09113C715CD978820B9D409361614A /* work_queue.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 5D80C1E180B51D2E4BB51E93F6899D86 /* GULAppDelegateSwizzler.m in Sources */ = {isa = PBXBuildFile; fileRef = 690C59EC5F552947A705CD99FC9C2708 /* GULAppDelegateSwizzler.m */; }; + 5D8DEDBC157D9DE8BCBB49C9E3EF4DB1 /* RLMProperty.mm in Sources */ = {isa = PBXBuildFile; fileRef = C3C0FDDE8C3A29D14795B0CCDE8A64CE /* RLMProperty.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 5D924D51FD5DB39A62A16D0A476D81E2 /* DigestType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A392146091E5BE7082F5B1F808838BF /* DigestType.swift */; }; + 5D9B22D83F739FD4419F2EF16D0E340A /* GULAppDelegateSwizzler_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 34929893181926D54E74552494C67DD8 /* GULAppDelegateSwizzler_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5DE956102DD77D4F8A06F420FAB910CF /* GULSwizzler.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D37BB179447B790A4451862B6AA9763 /* GULSwizzler.m */; }; + 5E75A0D446BBDCE52B65DFAC14382840 /* FIRInstallations.m in Sources */ = {isa = PBXBuildFile; fileRef = 602237D7A9DA1D545D0DF0DF8D21C58F /* FIRInstallations.m */; }; + 5ED8F5A7087CB6ABC1D1261752BA4D77 /* ActionSheetDatePicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A7056C0B785C11028021B59CECD0E6E /* ActionSheetDatePicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5EEB85730244814F4A58FC258568C9D4 /* String+FoundationExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A8A2F06F0D82F51910105C8D83FB48A /* String+FoundationExtension.swift */; }; + 5EFEFF466AB8AA7027C9513CA8FEC86A /* GDTCCTNanopbHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = D105C584FD61CDFBEBF928E7D917BAAC /* GDTCCTNanopbHelpers.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5F49C3C9A3733CD50642E0B57D405D44 /* SDWebImageError.m in Sources */ = {isa = PBXBuildFile; fileRef = C43D411B9DEA0E0E2EB27503351C98F3 /* SDWebImageError.m */; }; + 5F5558766C37635AE2A3C63BD2926FAF /* GDTCORFlatFileStorage+Promises.h in Headers */ = {isa = PBXBuildFile; fileRef = 173BB89C74EDF388533011E15206D618 /* GDTCORFlatFileStorage+Promises.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5F9A52091616FD9C66D6CD21B40742CE /* FBLPromise+Retry.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CEF5D5C68FF22FC04888630F0CF74A7 /* FBLPromise+Retry.h */; }; + 6099BB3284030D931E1B2A6AF1FD8589 /* RLMPlatform.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 7FD95F6236A4C815A5460B7EA152E296 /* RLMPlatform.h */; }; + 60C6606FF8176EE5A38870CFD9F649C8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3263CAA0BC54D21B0E4A6596E847B597 /* Foundation.framework */; }; + 61AFA71D5ECCF93F2B7F2E177E6C4DA6 /* SHA3.swift in Sources */ = {isa = PBXBuildFile; fileRef = 916A614848833BFE81FD69ABD5E9ADFD /* SHA3.swift */; }; + 61CD5A24511DC980EFF397CF57AC50F5 /* SDInternalMacros.m in Sources */ = {isa = PBXBuildFile; fileRef = E45C1A9E6A45E344F40EB2AFB6EC4BE7 /* SDInternalMacros.m */; }; + 61D81F9731D0F739A57665F93FF17A7F /* RLMRealmConfiguration+Sync.h in Headers */ = {isa = PBXBuildFile; fileRef = A0499A35DE68EEA7918378FB24898A52 /* RLMRealmConfiguration+Sync.h */; }; + 62A22A4C10675F9B65C7677CFD6C4676 /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = B02937B0837E2477E5DDA9949D0523B0 /* SDWebImagePrefetcher.m */; }; + 63859E7192CE60721388CECD3BA9F216 /* RLMObjectStore.mm in Sources */ = {isa = PBXBuildFile; fileRef = D767348B7F76EF759DDB0A61E182E508 /* RLMObjectStore.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 6400D521667A6DE758C821E3ED5B2694 /* HMAC.swift in Sources */ = {isa = PBXBuildFile; fileRef = E63D476F2C4C7D46C359BE02D399BCF8 /* HMAC.swift */; }; + 64CDB33E49BDBE16653C88756E26B8CB /* SDImageCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = E52317FBFA44FA01BB15E1E1683B7FC3 /* SDImageCoder.m */; }; + 665964C5782D23DD55BD1D2B807E4740 /* SecureBytes.swift in Sources */ = {isa = PBXBuildFile; fileRef = C491DCC040BC52B90FB6568173F80167 /* SecureBytes.swift */; }; + 67B0CAAD8E88B9A2357C41E73EA2EB48 /* SDWebImageCacheKeyFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = F16E1A43F7F1E4B2E21C5C8768D933A1 /* SDWebImageCacheKeyFilter.m */; }; + 67B3DCBA30FDEDA18E0D4E3B2C16C911 /* SDImageLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 289B40B5569980B9DA8326D6E99F392E /* SDImageLoader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 67B9CFE3CF6988B42AAF494A2D813ADF /* RLMObject_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E0436201DA1D5CD87F67AF22447954AC /* RLMObject_Private.h */; }; + 67D188B129FB5B5A69E4164E76C50E10 /* GULReachabilityChecker.h in Headers */ = {isa = PBXBuildFile; fileRef = 38DFB1BF9513F31663E962AFBFB94CEE /* GULReachabilityChecker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 67DEA6DFEA5489223F863F8B88CC72FE /* FIRMessagingPendingTopicsList.h in Headers */ = {isa = PBXBuildFile; fileRef = BEA243B61ECA424A61B75B0A11B5CEAC /* FIRMessagingPendingTopicsList.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6837CB930DDB3831690BA72BC4789B7D /* GoogleDataTransport-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C10F452D45F2FEEC2ACB7F3906C0A2A3 /* GoogleDataTransport-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 68A8BEA694A5A6BD92DF2C220AAC80B3 /* GDTCCTUploadOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 02A3D844B9131010E4CE4782112088B1 /* GDTCCTUploadOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 68BBB9AAAEDA32D83F54C7164626B56B /* RLMSyncConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F9A122A32FAC4BB79A362A9E767BE5B /* RLMSyncConfiguration.h */; }; + 68FB2DCB4C77DBCAF9A6037E470F2BDE /* ParameterEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = B60E3053144A8B4C5BD31849BFA16CF6 /* ParameterEncoding.swift */; }; + 69504476CD5EC345627198FBF32DD88F /* RLMListBase.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = AAE233D5B3FE1F32D73E6A2778EFD329 /* RLMListBase.h */; }; + 6972826D6563D3D59FB46C44A388C657 /* URITemplate-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EC7E8B0D91F46695CBA9D35CE1FCD24D /* URITemplate-dummy.m */; }; + 697D4305956CC10256194F5777C43843 /* FIRInstallationsItem+RegisterInstallationAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = FDEA2897F27B3332B9757D887FFD9C38 /* FIRInstallationsItem+RegisterInstallationAPI.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 69D1773C1F032FAA1618E8E9C782A7E3 /* NSError+RLMSync.m in Sources */ = {isa = PBXBuildFile; fileRef = 796BB9D72FDB0293F6C2B7CDB92B60AB /* NSError+RLMSync.m */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 6AE7C13634E07A7D4DAD613EA245A470 /* ActionSheetDistancePicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 7847BF5210321D030D694AD9BC21EEFF /* ActionSheetDistancePicker.m */; }; + 6B06932C623D4C5053889F764067E3BC /* pb_decode.h in Headers */ = {isa = PBXBuildFile; fileRef = F11BA822A1B643B68EA1984341AE510D /* pb_decode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6B1C76015C3F1D20665E807BA26E8DBF /* FIRLibrary.h in Headers */ = {isa = PBXBuildFile; fileRef = B31A25F13A5D459B1F14D725B54383F9 /* FIRLibrary.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 6B98A32D807A7E5C15512A0B96C7570D /* GDTCORFlatFileStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = D2ED4DE994D2B160D38E58A958983D1C /* GDTCORFlatFileStorage.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6BAD42BE9B5129F576C4217EB38DB3A3 /* FIRInstallationsAPIService.h in Headers */ = {isa = PBXBuildFile; fileRef = DFA827099EF53464E4AB2AF1FCFE736A /* FIRInstallationsAPIService.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6BBD6A841631C2748BEFB50475BD9EEF /* FBLPromise+Wrap.h in Headers */ = {isa = PBXBuildFile; fileRef = ED96B31B8F8C2BAF6896F2D27FBC5C3B /* FBLPromise+Wrap.h */; }; + 6BD9A2F6B4B67796CEE5EED2585065EB /* RLMMigration.mm in Sources */ = {isa = PBXBuildFile; fileRef = D982878987DD1C6E5FC780F4C4DBB4FB /* RLMMigration.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 6BE018A3D326FA19E00A647C9C2AD547 /* GULNSData+zlib.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D87293269F3DB091255FFC22359A44A /* GULNSData+zlib.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6BEBB9F7819614C8DBB686D19050CA7A /* UInt32+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8845D079BF4E1D468B7FE8D56D5618D1 /* UInt32+Extension.swift */; }; + 6C93ABDF963DDA7C78AADD9F22CD5CB1 /* NSBezierPath+SDRoundedCorners.h in Headers */ = {isa = PBXBuildFile; fileRef = FA75A6C30A9FCB9AF32B30600E4521EB /* NSBezierPath+SDRoundedCorners.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 6CA86EDC7D1F43938DEBE440CE927130 /* FBLPromise.m in Sources */ = {isa = PBXBuildFile; fileRef = 863408B2E7182025F57F38D290871626 /* FBLPromise.m */; }; + 6CCA055AE1F2015447DE2CD4AC0980AE /* HMAC+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2277B5E5A01B117A4AD52D5ED613704 /* HMAC+Foundation.swift */; }; + 6DF9B2C51AF97E90EACC51B3A2F0C540 /* FirebaseInstallationsInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FA13C0279C883576F45A9BF6C23D2C4 /* FirebaseInstallationsInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6DFA70326D4C540DC43BD455F5A4A658 /* Toast-Swift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CA71DBDD2BE853B0EA3B8ECDA9BA6EF /* Toast-Swift-dummy.m */; }; + 6E62B8DE17958275015A65B59107D442 /* GULAppDelegateSwizzler.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C6AF795D9AC7D35E093860A3B278048 /* GULAppDelegateSwizzler.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6E9BBDA8435DAE3202479D6A3017A210 /* FIRBundleUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 087EA6523FE31CCFA6065FE327F8C347 /* FIRBundleUtil.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6EFD6CAA2430FCC24D44C8F00BBBCFF5 /* StreamEncryptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB7BF5B8A6859B6CD7367007310BDD3E /* StreamEncryptor.swift */; }; + 6F2790CB7916ABC802F06AB26773172C /* RLMSyncManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 92A0DE7613A69DC7D76C1949596CE01E /* RLMSyncManager.h */; }; + 6F33CDF659744D4E0351AAD83A17A8F8 /* FIRCoreDiagnosticsConnector.h in Headers */ = {isa = PBXBuildFile; fileRef = EA54B28C4D4E52C16DC958F270EB7AA2 /* FIRCoreDiagnosticsConnector.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6F4B172730B7293C1D988FBE34B45E20 /* SDWebImageOptionsProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 85FE598E63B7634CB66D13C64741E67F /* SDWebImageOptionsProcessor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6FA080986CB1CA05904B19B7C5F30577 /* pb.h in Headers */ = {isa = PBXBuildFile; fileRef = A3A8AAE72354973FC10658F51CB5666B /* pb.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6FA0EF29F4147999331046B9E2BF0192 /* RLMSchema_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EE22EC02A207B236C60B52B786AA9813 /* RLMSchema_Private.h */; }; + 7118F4C87A47F1E69872CE63F6454CC4 /* RealmCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2976707D92DC19E2837FD3A16CFCAEB0 /* RealmCollection.swift */; }; + 717725C005C2D6B27174A47F7D064783 /* FIRMessagingCheckinService.h in Headers */ = {isa = PBXBuildFile; fileRef = EADDA360B6A9E5F06A4CDD630963309F /* FIRMessagingCheckinService.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 71B830963046ED71045ACEAB0938937E /* RLMSyncSubscription.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 82C9A158D68EC8F991990F707AEA42E3 /* RLMSyncSubscription.h */; }; + 71FDD399101DB9561E8B7C543FD5C177 /* GDTCOREventDataObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DA9B39A2B90F367E7A6BC98125FC30C /* GDTCOREventDataObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 72DC3D4ABADFF479B4262B4EC1B6D4D0 /* RLMOptionalBase.h in Headers */ = {isa = PBXBuildFile; fileRef = BD6F5B92CA889A858AD40E373381079A /* RLMOptionalBase.h */; }; + 7316B1250EB6CC0B060CDD8C6039B409 /* RLMSyncManager.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 92A0DE7613A69DC7D76C1949596CE01E /* RLMSyncManager.h */; }; + 7344F763404179B188FBD4F1C87847E1 /* FBLPromise+Catch.m in Sources */ = {isa = PBXBuildFile; fileRef = D3D909E3385713D218F8803B4B7AD478 /* FBLPromise+Catch.m */; }; + 73925E8E5302441C4ACB88A741FEC501 /* Mockingjay-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D46CABB6AA5C975EAD3BAB5B83B1DE48 /* Mockingjay-dummy.m */; }; + 73D6FC5DEB0EA061396193EC02FFF449 /* GDTCCTUploadOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BBFBE048CC7616F01FCDFD89F2EC8FD /* GDTCCTUploadOperation.m */; }; + 73F2DE8B48DC2F7C87529AB3901B9E94 /* UIImage+Metadata.h in Headers */ = {isa = PBXBuildFile; fileRef = A3411950D357EFDC7A1CCDB6429E6AFF /* UIImage+Metadata.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 740428CF593D2EFC7C536FB684255CD1 /* Cryptors.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07AD83391CECE97E4B09275D8F81FCE /* Cryptors.swift */; }; + 7473A506F7F3A235D9A7945DCE9D09C6 /* Pods-MyStudies-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 88D9B81D709F1B6DC318C3DF8E784B2C /* Pods-MyStudies-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7483C62161DBDEA32014FD91EBEBBDF8 /* Util.swift in Sources */ = {isa = PBXBuildFile; fileRef = 639712B03B02179C165E44277C5453F4 /* Util.swift */; }; + 7483E5327027263F7E4B94A2997191C4 /* AuthenticationInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C0E6F5235C42D703058437E93A25F4A /* AuthenticationInterceptor.swift */; }; + 748465EBF7C7458C9935BFEA1179E11F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3263CAA0BC54D21B0E4A6596E847B597 /* Foundation.framework */; }; + 75966A9262648D4647D764E3E76BC6AC /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC1DA9799D80B61CC9A00C151FABD1B3 /* Response.swift */; }; + 75D390E13DBF964D209460FE9823C8A8 /* CompactMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF1539083D412B0D78A9D7356FBB71D0 /* CompactMap.swift */; }; + 75E3F368A8766A504C0126FA8069724D /* FIRMessagingExtensionHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C8177666E8FD739690B4689F89755B3 /* FIRMessagingExtensionHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 75F032FDBB6348F7E3FBEAB0E7B83CD5 /* Pods-MyStudiesTests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D04DECF0CA3846FAC6BC97C65C147981 /* Pods-MyStudiesTests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 763DF38F8CBC5685429B850C62CFF751 /* FIRMessagingAuthKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = 8959290D65E52B6963D787F477D0D833 /* FIRMessagingAuthKeychain.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 76B7570A72547019BE15F3F6F784F51C /* RLMSchema.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0578D8EEFBD28A2BEF6C79D840F382D0 /* RLMSchema.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 770635827551A8B7C42C7BC958A55138 /* MD5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30941BDA5284148664051626E909A984 /* MD5.swift */; }; + 777E977F2C1ED28B2CBFC455C41243B3 /* SHA1.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF16163B647DB5CE463AB1C6E51B7FA7 /* SHA1.swift */; }; + 77FA7EBCFC035EE27EE725DEF5A26726 /* FBLPromise+Always.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C51CF7B3A80351134D238F3608ADD8D /* FBLPromise+Always.h */; }; + 780BAF2630A38446807CB0DE55E4FE4F /* FIRMessagingSyncMessageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DAC769F049E891C0AE5F6BC853550FE3 /* FIRMessagingSyncMessageManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 784F2E1DCB636DD130DBB41B26EB6F20 /* FIRMessagingCheckinPreferences.h in Headers */ = {isa = PBXBuildFile; fileRef = AC8CCE125405EC4F83D00EF1265C3E50 /* FIRMessagingCheckinPreferences.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 785EB92BED63AA0577F5CD8C0A3DA0F7 /* RLMMigration.h in Headers */ = {isa = PBXBuildFile; fileRef = 45C43C2847EAAB5879230B469A3C0E62 /* RLMMigration.h */; }; + 786C82403C9A90AD1743AE51DD68DA2F /* NSError+RLMSync.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 8BBBCA1BF6A934EAEC5F09C4902D0494 /* NSError+RLMSync.h */; }; + 789945CFBDA7F0E917029A5F2AFD5F0E /* FirebaseCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 026726DB5A61D8558D133CAD606BD6EF /* FirebaseCore.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 78AE96580BD551EB905F72C21AB81E97 /* SDImageCachesManagerOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 55644CD902425893359FD8B06036045B /* SDImageCachesManagerOperation.m */; }; + 79070C529D7E514DAEAD35398DD21A7D /* FIRMessagingAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = 03953057E81A4640AB065537BFE27DB6 /* FIRMessagingAnalytics.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7930C94414B4C661867AC4FBE82E996C /* URLEncodedFormEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = B521232F1F5112AE975E3B5195386F76 /* URLEncodedFormEncoder.swift */; }; + 797091C0936A23C98342C2BA50464378 /* RLMSyncSubscription.h in Headers */ = {isa = PBXBuildFile; fileRef = 82C9A158D68EC8F991990F707AEA42E3 /* RLMSyncSubscription.h */; }; + 799B031A889B3572A433D8DAF6F4B263 /* GDTCORReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 4AA20EA1311ADE78FD1CF8BB0EA8276D /* GDTCORReachability.m */; }; + 79E9C62F76E4368E8C4DBBF9F291D00A /* RLMArray.mm in Sources */ = {isa = PBXBuildFile; fileRef = 186522BBE623AD946669C9A507583BD7 /* RLMArray.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 7A424FED21A399FE2610DCB710A4A3FB /* SDWebImageOptionsProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = A9448AB1CF2D1DDD1ADD7DDB32FE8C0C /* SDWebImageOptionsProcessor.m */; }; + 7A7C604B013C43E17ABA8932E36CD661 /* RLMManagedArray.mm in Sources */ = {isa = PBXBuildFile; fileRef = 02753C69DF0810D06A54AF6D39AAADAF /* RLMManagedArray.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 7AC995F567A776FC1A80A9FA0733F3D1 /* IQNSArray+Sort.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0CFAB0F316EAABE8BB39B89FB37A86E /* IQNSArray+Sort.swift */; }; + 7ADF5825BBDFF7761A365233F963812E /* GDTCORPlatform.m in Sources */ = {isa = PBXBuildFile; fileRef = E9EFA400AF46093F84CD72A36C3DFF13 /* GDTCORPlatform.m */; }; + 7AF2A77E60099EEF04833B4096AD0AE8 /* FIRCoreDiagnosticsInterop.h in Headers */ = {isa = PBXBuildFile; fileRef = 0982B24C7A90D05306A76DDAF3CA0F61 /* FIRCoreDiagnosticsInterop.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7B068137A8925891446203B5D3D6A4ED /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DACDA66527627D9FC31F1B27F691ADF /* CFNetwork.framework */; }; + 7B09185F5277D35ECFB0ED000FD9CBF7 /* GoogleDataTransport-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 67ED919753BA2A8CF8C1870264A7BEE7 /* GoogleDataTransport-dummy.m */; }; + 7B37AC1CD558C3E2B4837514882308B7 /* RLMObjectSchema.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = FB1FD42E76E8060BE354FA1F8E647706 /* RLMObjectSchema.h */; }; + 7D9E8F8A5D02148FCC2DBD6319BCC3D1 /* SDWebImageDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = 74043E5CD70DD7C95FEF16DF6B47EBED /* SDWebImageDefine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7DBF74CC6DB4FDF2D7E338E942789CE7 /* FIRMessagingBackupExcludedPlist.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DF1AF5E3CE3DE0779B0610F7BF31A85 /* FIRMessagingBackupExcludedPlist.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7DD3BBBF4DBF7B25F450B3B898EFF06F /* FIRMessagingAuthService.m in Sources */ = {isa = PBXBuildFile; fileRef = C03112501E2BA6502535F88382C5DC1A /* FIRMessagingAuthService.m */; }; + 7E02F5B62BE00E97847DF549FFED2490 /* HTTPHeaders.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50CBD6F7E1D609D0EEB6BE8CA7CA85D7 /* HTTPHeaders.swift */; }; + 7E18D2C96A7502BD933CAF8F69726BD7 /* FBLPromise+Validate.m in Sources */ = {isa = PBXBuildFile; fileRef = F8C936FB15241989F2EF0BEC74137ACA /* FBLPromise+Validate.m */; }; + 7E3D9D10B3F1BA51A1803A62A7654C35 /* GDTCCTNanopbHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = FF7103830A0D8D42D9760A4ED44A2F83 /* GDTCCTNanopbHelpers.m */; }; + 7E55502F0987E7318FF739C9DDAC7387 /* GCM.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA43C8631C77A49C3E363430C3B9D128 /* GCM.swift */; }; + 7E6862A73246BB1A0E7BCEBAF50FFBE1 /* NSButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = D1978F49003D9C0015DD1D0166EFB2B5 /* NSButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7E6E83B17195F70A23074795A2A70845 /* FIRMessagingPubSub.m in Sources */ = {isa = PBXBuildFile; fileRef = C829701F6F289FF8547E6C5F0CA34690 /* FIRMessagingPubSub.m */; }; + 7F07E2CDB62E07F36F5E540BA025DCA7 /* RLMRealmConfiguration.mm in Sources */ = {isa = PBXBuildFile; fileRef = C036979652C1AA82DE35436C76112BC8 /* RLMRealmConfiguration.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 7F1BB526AAE3ECDCE90127D9D0E10261 /* StringEncoding+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = A54EA876A39ACED7DC664C709B462662 /* StringEncoding+Alamofire.swift */; }; + 7F55E97FF705354B6E01ED233427A0BD /* RLMObservation.mm in Sources */ = {isa = PBXBuildFile; fileRef = F599FFC13E086A2315101A6ECEF8CDD7 /* RLMObservation.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 7FE695DA8EE7FF1286556E06B692009B /* MultipartFormData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A142289F8D7C9C05BA9D87FF751F846 /* MultipartFormData.swift */; }; + 80131B99D2012C4D8F100C271C1E418C /* NSURLSessionConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53DB3472CB9FE8166030C604EB73A270 /* NSURLSessionConfiguration.swift */; }; + 803FE98FDB2E616670DFB5A93885F57D /* RLMSyncSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 1048324F727445AC178416B6259CDC24 /* RLMSyncSession.h */; }; + 804059882A1C76A538EAED6E464A7DCE /* ECB.swift in Sources */ = {isa = PBXBuildFile; fileRef = 636C461F716423711BC21B884F3588B8 /* ECB.swift */; }; + 80611FBCA5BF80AB784BC760B6F2A061 /* RLMResults_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 8413BC54D9D681E1EA2B3A8CEABA7DCB /* RLMResults_Private.h */; }; + 808C960C82D708FC1A42C581D6CB4940 /* URLSessionConfiguration+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96EE22ACD1B156368FD85BEFB2860D8B /* URLSessionConfiguration+Alamofire.swift */; }; + 809A09224ABB6A00BEF6B72EFAB30B4E /* SDImageAPNGCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 84646ED7C395057C75C29BA382B9A62F /* SDImageAPNGCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 80D4A72C26C2EF865F9DCA400D2F1E70 /* SDImageGraphics.h in Headers */ = {isa = PBXBuildFile; fileRef = DE9409EC623C435E876DA13DADCA40D8 /* SDImageGraphics.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 80E6CCD552151D41C4ADFA2502B355BE /* FBLPromise+Any.h in Headers */ = {isa = PBXBuildFile; fileRef = EA76E4E1C7AE825FF51F1BEF26F1BC5D /* FBLPromise+Any.h */; }; + 814FC41A64F4380C153C886EC733E349 /* FIRFirebaseUserAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 784D1561B788F0DCA445E4B459D70610 /* FIRFirebaseUserAgent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 81B8D2B7CEB25C2448B0BC9B33591A65 /* Session.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64C77D75F4599EB7A0286913B20C5E12 /* Session.swift */; }; + 81EB697C14A3E0E14F739BA40586EE05 /* FIRMessagingTokenFetchOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 18C80A43EB44F0E62A207FA78C04C3C3 /* FIRMessagingTokenFetchOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8205CC15C5F8857E097431E553FF177E /* RLMArray_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = C1547CA6C4A8C554D1BFBE94CF789B7D /* RLMArray_Private.h */; }; + 824D816B1EE404F2DD400EE678695CBE /* ResponseSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD6E9C9CDC2181BB7F255FEBE0C1FD90 /* ResponseSerialization.swift */; }; + 8278054391F8B350CE9EF1DEDCAE2AB7 /* FBLPromise+Always.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 6C51CF7B3A80351134D238F3608ADD8D /* FBLPromise+Always.h */; }; + 83324B09F2BF212B212D9E2883E6FE00 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DDFECB516E488E30B43E119CA8BDC97E /* XCTest.framework */; }; + 83C60CA008AD91AE0407500C0CB5EDD9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3263CAA0BC54D21B0E4A6596E847B597 /* Foundation.framework */; }; + 84107A97BB366621B15BF05AA377964B /* GDTCORTransport.m in Sources */ = {isa = PBXBuildFile; fileRef = C741CCA4ABA26F960A72AF9FB64BD97A /* GDTCORTransport.m */; }; + 842591E5C67715C678A8963865537C8B /* RLMRealm+Sync.mm in Sources */ = {isa = PBXBuildFile; fileRef = 479E153B1350EF15C02E6FC76272FDCA /* RLMRealm+Sync.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 8433F353F3016EFF0316F48188D6B651 /* SDInternalMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 6867281FD3DED3B1B74A7A631FC9AA08 /* SDInternalMacros.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84B624227D73D3746CEFD48E49D74635 /* SDAssociatedObject.h in Headers */ = {isa = PBXBuildFile; fileRef = E78D3D6738AD9F6C8DE839EA6F9E8257 /* SDAssociatedObject.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 84CF1EF84AAF0299AA9C942B078BD1FF /* RLMRealm_Dynamic.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = F17EA4C0B097766DF4F4E4C353515C96 /* RLMRealm_Dynamic.h */; }; + 84CF908A7C0FB163379EDC5657A9E922 /* GULApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = A8B54622D63E605A4B7FEC20FE38F5D0 /* GULApplication.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 854D7A4A2872566E4D06870518053225 /* SDImageAPNGCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BEE9BC20EAC927F80208F041F3D1BFA /* SDImageAPNGCoder.m */; }; + 8566882ADFEF2D272B1F7708313717DF /* RLMOptionalBase.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = BD6F5B92CA889A858AD40E373381079A /* RLMOptionalBase.h */; }; + 858B198D89911941FAF729FF983CB01A /* Pods-MyStudiesTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A84F08203C9AAC88EAE546EA369A5E7D /* Pods-MyStudiesTests-dummy.m */; }; + 85F13B069B06ADF2B6DCA622E4645110 /* IQKeyboardManagerConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADBF783F176F3612588EA416FDD05F2F /* IQKeyboardManagerConstants.swift */; }; + 861350B95FEE937A58FDA76A7CA19404 /* results_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6E865C5F4D351F90D3D88FF2CD01C211 /* results_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 869F7CDAC31D0F5ABAA03072768775D9 /* GULSceneDelegateSwizzler.h in Headers */ = {isa = PBXBuildFile; fileRef = A3DEC82D5290A649190683E1419896E1 /* GULSceneDelegateSwizzler.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 86A03DE9366D1BE94EB99AA387EACD1F /* IQKeyboardManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96D337AE4A370ACFEF6EFFFDF7E98259 /* IQKeyboardManager.swift */; }; + 875FB4D96B5DD9EDC240F7C845517546 /* RLMUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = 26CAA31B99921D7EEC52278EEF31B2BC /* RLMUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 87E3B15B2AA7D226CB60059610C1241A /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD3CD06550FF4C8846B1AAFDDA71EB16 /* QuartzCore.framework */; }; + 8821E3636BB86560FC2F2D2CFF545F16 /* SDImageCodersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E0B1574B2487C73208DF456F13985904 /* SDImageCodersManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 882E20FA17B71515C3FD621A27E5116D /* GDTCORStorageEventSelector.h in Headers */ = {isa = PBXBuildFile; fileRef = E1ADFDC48B5E76B1144C314CD46892DB /* GDTCORStorageEventSelector.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 888BEE4C3B238AC407C59D2194939AB9 /* SDImageCacheConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 7030496A6666BAA4AA30AD332A4FA9D7 /* SDImageCacheConfig.m */; }; + 88CBC3844A05BECE66B34A0153B00DDF /* GULURLSessionDataResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 721285D0E389639F42212E7E22F096D4 /* GULURLSessionDataResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 88D1744ACDEBE99DFA49F67154ADD8B8 /* FIRInstallationsIDController.m in Sources */ = {isa = PBXBuildFile; fileRef = 363BE38567B7028F170130B1B981D6CE /* FIRInstallationsIDController.m */; }; + 88E289AE800F6C2E36BCBC20CCF27CF0 /* sync_config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 109E6F6D680ADE61B9A5613128BA6864 /* sync_config.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 8982725DB534D3581B1B555F284CD572 /* FIRCurrentDateProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = A9863CC699E01F4C113719512EC56875 /* FIRCurrentDateProvider.m */; }; + 89F43849392A22634685D2CC339648EA /* AES.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB81519529A7AABD9E01533EAE4B5BA4 /* AES.swift */; }; + 8A1B3BE25A646468522667796FB2A99F /* FIRInstallationsSingleOperationPromiseCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B6641D11BC7AC86FB0829F329CD9610 /* FIRInstallationsSingleOperationPromiseCache.m */; }; + 8A2068E290BB290B127DC3C75DBF206A /* GDTCOREndpoints.m in Sources */ = {isa = PBXBuildFile; fileRef = 158F6B7F337E16D60C6EC42CAC92B984 /* GDTCOREndpoints.m */; }; + 8AE7F78784E5BFF2E0D9A23E89DFC478 /* RLMSyncUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D058E2CB32929EB0BB21D2851DB8AF2 /* RLMSyncUtil.h */; }; + 8B2C6969B209A7C579A564AD8AABA77F /* FBLPromise+Delay.m in Sources */ = {isa = PBXBuildFile; fileRef = D8A18183D15030981EFC0FA7B54235E3 /* FBLPromise+Delay.m */; }; + 8B2CC0AE97C9E4FCC9D934A97E11C1E2 /* GoogleUtilities-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 598A390AC37AD9F7070EAEFA20FE735C /* GoogleUtilities-dummy.m */; }; + 8B4442976F52EDA4E40651393C996AE9 /* FIRDependency.m in Sources */ = {isa = PBXBuildFile; fileRef = D030D0BD373ED9195BFD874641E77761 /* FIRDependency.m */; }; + 8BBFB2A81F33F9BB86DE2065F86C0645 /* cct.nanopb.c in Sources */ = {isa = PBXBuildFile; fileRef = 301DC1A682D522356B7B05C682A2178B /* cct.nanopb.c */; }; + 8BCC7C37E47F548B71932628D5943CA0 /* RLMSyncCredentials.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 261D533A9D09F851E4D6C4705A6BEC5A /* RLMSyncCredentials.h */; }; + 8BFE8E6BDEFBF870C1D0732BDF8F6967 /* UInt128.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2DB2F4C9669065A8267441D87FABB24 /* UInt128.swift */; }; + 8C193A77E9748D5B823ECF534A7A5183 /* FBLPromiseError.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A1AC2F6DBADD8B82AD675C56F3FE68 /* FBLPromiseError.h */; }; + 8C1B2AB9514407FB53079F91ECF24BDE /* firebasecore.nanopb.h in Headers */ = {isa = PBXBuildFile; fileRef = 97B6A2A7EA6CB7F58C1A47411E33D1BB /* firebasecore.nanopb.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8C5D0B2A7B52DF68D03820244993E91B /* SDImageTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C8B5A5BB02807B3F5E2B7A57D170345 /* SDImageTransformer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8C9D609988FE2993BB116B4B00FAC57B /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = A968D6ADC5E00A3D9B1542D83FF9CE5D /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8CAA340BECEF77F3709111EB9AD7DAF1 /* GDTCOREvent+GDTCCTSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = CDEB0E087A82FE00931F355ECE393524 /* GDTCOREvent+GDTCCTSupport.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8D0A898EAD5A41114AE7DA15F930ADFF /* FBLPromise+Retry.m in Sources */ = {isa = PBXBuildFile; fileRef = D99E332B61B44EE99DB5E3A91B0052B6 /* FBLPromise+Retry.m */; }; + 8D75FC8D7476C9674234F39F1A820D8C /* URLConvertible+URLRequestConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EFAAC73DDC1A85B6987CB688EF5984B /* URLConvertible+URLRequestConvertible.swift */; }; + 8D8CDBA945B69C9A3052CDB67FAAF0F2 /* FIRLibrary.h in Headers */ = {isa = PBXBuildFile; fileRef = C6CA19FAAE9C5CDC570FAFAB849010FC /* FIRLibrary.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8D9329946F0AF5B5E43E55B2043EA0EB /* GDTCORRegistrar_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EF983320F0CD0D802FFB0D358CDD49C2 /* GDTCORRegistrar_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8DA36E33306EFAA1275D13B978BB8666 /* AEAD.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABEAC198CE8166AEAE7E28DE988F7562 /* AEAD.swift */; }; + 8DE577A685436BCE0AB20956A3D3F300 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3263CAA0BC54D21B0E4A6596E847B597 /* Foundation.framework */; }; + 8E0F58CE9F6C01F6F417BEA5FB9CC87F /* FIRComponentContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = B6365B07E1474F38E235B0BFA41235A3 /* FIRComponentContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8E968F871C8609D40AC6AC112A4E10CF /* FIRComponentType.h in Headers */ = {isa = PBXBuildFile; fileRef = 67087440EC98298BCBDA731514E05D16 /* FIRComponentType.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8EC115F3F4632FA11422DEE8C8F6FA94 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3263CAA0BC54D21B0E4A6596E847B597 /* Foundation.framework */; }; + 8F3C970B91408D64919CCBF7FED47097 /* Realm.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76334FBCEC2DBBC92E967539B58A9436 /* Realm.swift */; }; + 8F88549F032EFFEA9C281860520CC879 /* SDWebImageIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 0716E30A0C360B72A550341ADE46F46E /* SDWebImageIndicator.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8F9C7DCEB7B584EA095988970BB808B8 /* FIRInstallationsAuthTokenResult.m in Sources */ = {isa = PBXBuildFile; fileRef = E4FAF77A0C5352DBB8DF36B550909EC7 /* FIRInstallationsAuthTokenResult.m */; }; + 900FDF45B55F6C449865147A917AA714 /* RLMObjectBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E5A813886535DAFDAFD5ED2DC4A2063 /* RLMObjectBase.h */; }; + 905EB6D7A5623EB600856452C84008FA /* FIRInstallationsHTTPError.m in Sources */ = {isa = PBXBuildFile; fileRef = 2052C40B6071A9CB9E6B8D76A0AE30C0 /* FIRInstallationsHTTPError.m */; }; + 909CBA577868D6E976AC82340B50343E /* SDImageCachesManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DE3B58FE3FB30F0F525EE261380B255 /* SDImageCachesManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 90F2E15762D90EB16AA37EE563BFBAE4 /* RLMAccessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 532A13E80977AC6F241DE314550DC0CA /* RLMAccessor.h */; }; + 91FCCAA110120ACAB3E8A23863D89409 /* Migration.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBBF78D6B3A1F82058C7E16A2FB8E5D3 /* Migration.swift */; }; + 926B3728D4D09DDD3D1909A3D23BE855 /* FIRMessagingCheckinPreferences.m in Sources */ = {isa = PBXBuildFile; fileRef = 55D3CFF5CC2AA8B1FC9A912E1C2EBB9F /* FIRMessagingCheckinPreferences.m */; }; + 92D3DA8C66C63AD5AB2FB84F76591AA5 /* PKCS7Padding.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC7B6B641EE4FC0F942F28C3F4D7F1D2 /* PKCS7Padding.swift */; }; + 92DCD0B3C0B1847F6B15C0649CBD7AE2 /* RLMObjectBase.mm in Sources */ = {isa = PBXBuildFile; fileRef = 54C80F4D471943D79144805C9E36DCDB /* RLMObjectBase.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 930B3A34DCD7CC70C104680EF22C9AFE /* FIRInstallationsStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 02805E74472A36252E661179D4F2BC08 /* FIRInstallationsStatus.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 933AA0732F7FF42769A61BA1EC2C08EE /* PromisesObjC-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F0331EFD461AF386398155C0EF7D010E /* PromisesObjC-dummy.m */; }; + 93DE5DC6D98B5DD09860532E35AE7C90 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7C99E6FBF6014D74F7365E1B7DCBD57D /* SystemConfiguration.framework */; }; + 942A6DA26AB4D4F78453FED00D57FDC6 /* FIRMessagingTopicOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 23A07E5EBF88626AF40A2A0DFE06399C /* FIRMessagingTopicOperation.m */; }; + 9449B4D558F2B0B10E9F8F63EB7BF626 /* GULNetwork.h in Headers */ = {isa = PBXBuildFile; fileRef = 72BA9E3807ADD6D72285C03EA594D389 /* GULNetwork.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 94A45D29C476E9A1365AE9BB40227F52 /* GULNetworkConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E547766466E019AF9920490BDAFF80B /* GULNetworkConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 95896594A680429556DD4FE00F699720 /* FIRInstallationsBackoffController.m in Sources */ = {isa = PBXBuildFile; fileRef = EEC8ED997E9EE6E0100B6B23CAB2E9EF /* FIRInstallationsBackoffController.m */; }; + 958CB2EC6B317D1B719C106EE46E61B9 /* FBLPromise+Await.h in Headers */ = {isa = PBXBuildFile; fileRef = 68E388DAEC380C6B69A42306861C03A8 /* FBLPromise+Await.h */; }; + 95967C10CBD1C26A8E7E225FDAA2D56E /* GDTCORUploadCoordinator.m in Sources */ = {isa = PBXBuildFile; fileRef = 089A750ED63C64F3A5DB59A500EF5F76 /* GDTCORUploadCoordinator.m */; }; + 95DDEA387C9E5E0FE454158A6175FA88 /* StreamDecryptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 949E1956D736409B999B35B1D89857FD /* StreamDecryptor.swift */; }; + 960DCEE9167C9C9E11FAA0EDAF872B2F /* ReachabilitySwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D7990988559D32F0F8E6A9A97E125901 /* ReachabilitySwift-dummy.m */; }; + 96479C9C76FDC513C03ADD58168F6911 /* SDImageIOAnimatedCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 4532917F3A7C0BBA21971C2D56F1FD6F /* SDImageIOAnimatedCoder.m */; }; + 96C4CBB9D0D374C99EC5C717EF7D07EF /* RLMCollection.mm in Sources */ = {isa = PBXBuildFile; fileRef = 68F814DD29A36E913885105CC75D57AD /* RLMCollection.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 96CB6A5FFD5ACB5FFB3A99F0BF9871C5 /* FBLPromise+Wrap.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = ED96B31B8F8C2BAF6896F2D27FBC5C3B /* FBLPromise+Wrap.h */; }; + 9708637F449A08489252F916791BAE0E /* FBLPromise+Async.h in Headers */ = {isa = PBXBuildFile; fileRef = F8FE1F84EE49BEEA3719D1D44CF09511 /* FBLPromise+Async.h */; }; + 97596ED767CFAA371B966551BF5308A3 /* GULHeartbeatDateStorageUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = 3AD14E581B487F55BD9C584A14D04B94 /* GULHeartbeatDateStorageUserDefaults.m */; }; + 97BF3CCB628215A7A6336B907EDD84D8 /* Utils+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C81E30A74ACA2EB0DE0F1B24DE663C1E /* Utils+Foundation.swift */; }; + 97F703131EF2D86BD472D245CDA7EDC7 /* RLMResults.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0146A24DBA3D4DDCF113EE93C863ACF6 /* RLMResults.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 97F86BC6C70FFFEA6793B21EF6A7BBFF /* ChaCha20.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7BA7048E4B4BC26C2DB3ACF7646C29F /* ChaCha20.swift */; }; + 9825A1DF04ABB8E4BD2B05783E4A88B2 /* FIRMessagingCheckinService.m in Sources */ = {isa = PBXBuildFile; fileRef = 13245380613203823650C6D0DEA01867 /* FIRMessagingCheckinService.m */; }; + 98E9AEBB637DCA4A9244945AD9F4DAF3 /* FirebaseInstallations.h in Headers */ = {isa = PBXBuildFile; fileRef = 140F933732FF837397C6367587633C1F /* FirebaseInstallations.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 98FAF8EF0E18686897E79A1505CA0D1D /* FIRLoggerLevel.h in Headers */ = {isa = PBXBuildFile; fileRef = 37AB95B73B3E07FBC1C21E8C11FD64D5 /* FIRLoggerLevel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9917CEAD8CE1CEB7FEC031255AED8FA8 /* SDWebImageError.h in Headers */ = {isa = PBXBuildFile; fileRef = C351F4948DBDC7BCFA6D8DC546E61A7C /* SDWebImageError.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 994327308CC7ECE7850C804FA0EA5F21 /* NSImage+Compatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = 3356187259DB1C7293663BDDFDFCE292 /* NSImage+Compatibility.m */; }; + 99709E1C4991C49EE5601FF9461B2969 /* SDImageHEICCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = CE37B880083BF255F4315680913666F6 /* SDImageHEICCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 999714C1F46C4964F86054E6C47CEDEC /* RLMSyncUtil_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 890CC9F4A0110C71D23B765C18804F6E /* RLMSyncUtil_Private.h */; }; + 99D058E53EFEE3AC4857CDE3DBA5C004 /* ParameterEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDFECEBF5147BD1E1DB1F92618AED902 /* ParameterEncoder.swift */; }; + 9A2EFDEAA3CC254A708D5DA3B5577E1C /* GULSwizzler.h in Headers */ = {isa = PBXBuildFile; fileRef = 457383C7455207390EB207746C863D1F /* GULSwizzler.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9A3447377AFE08514914C27B40DF1924 /* me.nanopb.h in Headers */ = {isa = PBXBuildFile; fileRef = 5ECC23479B265674A6D2DA2C220214A9 /* me.nanopb.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9C096C865369C21D252A0F4F90BE21D9 /* SDWeakProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = FD6EC4FE86BA4B04A3B5B1CD0573DB54 /* SDWeakProxy.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 9C1F8F18F25D8A637B5E3C70B928899C /* RLMObject.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = A390F0EB031CC42ED74FE2EDD5D36BA9 /* RLMObject.h */; }; + 9C3A9F6D9ABAC3441E0F96B541C654E0 /* FIRCurrentDateProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 46CD44D8B32167812095788FC33F28C9 /* FIRCurrentDateProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9C6D45BB9AB32A98B398E0BF6674C42F /* external_commit_helper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3A3BE509D836FC3C6D2387EF3B506E26 /* external_commit_helper.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 9C9030DEDB0DF955B16FE08C50892D57 /* Concurrency.swift in Sources */ = {isa = PBXBuildFile; fileRef = D363522D0FA0C366797112BDA6705FD0 /* Concurrency.swift */; }; + 9C92D8A8C26CB10562265CED29743542 /* thread_safe_reference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A16B6AF7C53EDDBD94158FC1C153D5E9 /* thread_safe_reference.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 9CEB5B454088D6BCC3A11C759A76161A /* SDAnimatedImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CADE015322C7E72BCD9A93A0551B0B4 /* SDAnimatedImage.m */; }; + 9D1675F919BB06D47A9BE5C52CD860FA /* RLMSyncManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = A980A30A29A11151B83C3CE1E1758FA9 /* RLMSyncManager.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 9D59535CF4F4C867E488363A17D18809 /* ActionSheetStringPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BD894247BBFFB5B9BC564749CB1AC66 /* ActionSheetStringPicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9D7EBB3A7377C116526B8A511F8CE245 /* SDDisplayLink.m in Sources */ = {isa = PBXBuildFile; fileRef = 084A6973FD2037A5B548324E91FE74E0 /* SDDisplayLink.m */; }; + 9E1EB59875B9875193013A10277645FD /* Blowfish+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = B602B85D1CC653F63C797D7CCFF0F21F /* Blowfish+Foundation.swift */; }; + 9E49EF1E36AF0CA44BE7E74450EE1BAB /* GDTCORConsoleLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = E7871376CEAB6CF4AF675C223A79838D /* GDTCORConsoleLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9E81C3F56C26E0DEC392E072F5A6775D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3263CAA0BC54D21B0E4A6596E847B597 /* Foundation.framework */; }; + 9E8B76A5E596E737D73DB23886CF472A /* RLMSyncCredentials.m in Sources */ = {isa = PBXBuildFile; fileRef = FB22C85C0139C5494193A2C764AE4974 /* RLMSyncCredentials.m */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 9E96E08C3DBB7D36E0F8F233C3A81C61 /* RLMSwiftSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8E14937455517AE7C4DAB052E2081B /* RLMSwiftSupport.m */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 9E9F5012CFD5E47804BE4142C64BC163 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3263CAA0BC54D21B0E4A6596E847B597 /* Foundation.framework */; }; + 9F18CD942A6388A54C0AC3EFA18670D3 /* GDTCORLifecycle.h in Headers */ = {isa = PBXBuildFile; fileRef = C36C6746AB974F043E7930AF68B52178 /* GDTCORLifecycle.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9F3B6E84932D5E188E40AC537131AA48 /* RealmConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = B999AF169C60FEBE8211DFED3BDBF06C /* RealmConfiguration.swift */; }; + 9F67D81FA1B761895E9C43154475847F /* FBLPromise+Catch.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = DBAE4D4625DBCFBEC2DB4DC64A8C326B /* FBLPromise+Catch.h */; }; + A010171CFA2A6782E83B75D63BC34B13 /* String+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AC5A45B3B35233595CCBD1F65C086B9 /* String+Extension.swift */; }; + A07BE34DD7BA088811E2BB9D036C098D /* FBLPromise+Catch.h in Headers */ = {isa = PBXBuildFile; fileRef = DBAE4D4625DBCFBEC2DB4DC64A8C326B /* FBLPromise+Catch.h */; }; + A07CD5F593F198521969AA739442E86E /* GULUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = 79CD50386D6776EA19B2E6957632178B /* GULUserDefaults.m */; }; + A082EBD6881A9405F9C6C9983EB8D2A7 /* FBLPromise+Delay.h in Headers */ = {isa = PBXBuildFile; fileRef = 92C6D0B54C4429D514530F47D7C856B3 /* FBLPromise+Delay.h */; }; + A083AAC3481062E5DE223D480757A83B /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F4EAACD0E8EA6864328386047EAC1D0 /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A0B8BCDD2F42C2932591B53F0D4B0335 /* FIRMessagingUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = BD02E870F83599D0FB6A24F1E6B0119F /* FIRMessagingUtilities.m */; }; + A0E0785E780713BD580EAF4A82633A1E /* NSURLSession+GULPromises.m in Sources */ = {isa = PBXBuildFile; fileRef = D893114E596661E896FBB30F59553F3A /* NSURLSession+GULPromises.m */; }; + A166E5BECB00B65CAE449843FA3C1D78 /* GULSecureCoding.m in Sources */ = {isa = PBXBuildFile; fileRef = A6359EC24CB1E1FB06510CD17C8D0EED /* GULSecureCoding.m */; }; + A24B4B60656BA387B9979BD877A23983 /* SDDisplayLink.h in Headers */ = {isa = PBXBuildFile; fileRef = D765502D6EF2FB061089D72BCA244195 /* SDDisplayLink.h */; settings = {ATTRIBUTES = (Private, ); }; }; + A25E83EA365D122AB25399187328C749 /* ObjectiveCSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B4F1082E4616E9F4125CE579148B55D /* ObjectiveCSupport.swift */; }; + A29100AA1876DDEFF6F54694A51FDB0E /* NetworkReachabilityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A157E35C9483F6D633C143ABF79C995D /* NetworkReachabilityManager.swift */; }; + A2A4B9698B2D4AFF38D5184BE0CA9C3D /* AbstractActionSheetPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 867B5EA3966123FC40EE3299924AEFAD /* AbstractActionSheetPicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A2CE92DE43AB450DE1AAA129BFBADCBE /* SDGraphicsImageRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 99C2B284313B2943DABAF9C37D0C27B2 /* SDGraphicsImageRenderer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A354DD0D6AF8E956C39A1AFD6E3B42A4 /* FIRInteropEventNames.h in Headers */ = {isa = PBXBuildFile; fileRef = 1884FC6CA6542AAD8723028E471BCEF3 /* FIRInteropEventNames.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A3BFF0CDB72BC173BEA1C8ADDBDB0D1D /* UIView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 5402C1E7CCFF363C64A90E42B7723FDD /* UIView+WebCache.m */; }; + A4036587FE569E6D1E2C4C91DD77CF75 /* FIRMessagingContextManagerService.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F0C7EC2129FADFA1F03573C4EADE97F /* FIRMessagingContextManagerService.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A40B8EA22C62CFF11C50728DC9B04D4D /* FirebaseCoreInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B73F422130E3173C51DACD28AF77628 /* FirebaseCoreInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + A494C10F5043D41343AA237DF3A2B57C /* sync_metadata.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 99BE132ADCFA4E9B0FCD9173BBFC4AE1 /* sync_metadata.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + A4BAEE317BFF650DCC888FC67BFBF7EF /* IQKeyboardManager+UIKeyboardNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3D98957A559D62480662DA35BA325AE /* IQKeyboardManager+UIKeyboardNotification.swift */; }; + A53BDE589BDD6483F3EEDCE5EA1DCCD3 /* Protected.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4865576F1547E1DE111654A4A0F10081 /* Protected.swift */; }; + A55AA4F69804E0952F5A67D777B13455 /* Realm-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8ADA08729FDC8982DBBCE7528189BB54 /* Realm-dummy.m */; }; + A5BD94DB4DE7545B35240F2DF5C9AB72 /* SlideMenuController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FC4DA18ADD12B19BDF2018DCF5876DB /* SlideMenuController.swift */; }; + A5D3E40DA041B9B570227F4D8EA1F8E1 /* PKCS7.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19BF348B2456B511A825BA5257385DD1 /* PKCS7.swift */; }; + A6D746883D720C5A0A30A8CB9F229340 /* GDTCOREndpoints.h in Headers */ = {isa = PBXBuildFile; fileRef = F5ED064ED60C9AE4B23335CFCEB2F512 /* GDTCOREndpoints.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A6EE415CD7F5FBF6438E6B87731B5F56 /* GoogleDataTransport.h in Headers */ = {isa = PBXBuildFile; fileRef = A4BDD17ED4FF436E7A853091CC3CBAD6 /* GoogleDataTransport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A759E48B057ADB0ED5322F1C4C198638 /* RLMThreadSafeReference.h in Headers */ = {isa = PBXBuildFile; fileRef = 13F17F6A453303FFFBABD0E97C75036A /* RLMThreadSafeReference.h */; }; + A7D237A7C7A6F17490FA1D1E73191713 /* FBLPromise+Testing.h in Headers */ = {isa = PBXBuildFile; fileRef = B82C9BBA02B896199E357FD3CF478B94 /* FBLPromise+Testing.h */; }; + A8F08228388A321F201B4D41AA7B6CBA /* FIRAnalyticsInteropListener.h in Headers */ = {isa = PBXBuildFile; fileRef = E2C5920E1D549C69F3C3E06BE1EA02FB /* FIRAnalyticsInteropListener.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A931377263645CAF10AF923524EBF0B4 /* FIRAppInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = DBF9FEF24E5FF7E80958F9625ED03E09 /* FIRAppInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A952F8BC771D8F6AC4B933969AC640CA /* async_open_task.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FC73DE5F8515966AAF409FEB17AB72CF /* async_open_task.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + A9A87DA629538D239C4B7401EB56AEB5 /* SDImageTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 0A769A8769ED4E97B4898A90A9EF4869 /* SDImageTransformer.m */; }; + AA3AE0DF5E35D3E0D2CAE7972D69373E /* SDAnimatedImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B565E00C15800E354C0D1BD95C13739 /* SDAnimatedImageView+WebCache.m */; }; + AA9C7AEA4CC14179B7F944C622CCF9FC /* results.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 60AFF9B3EDFE25A4524E146097A5999C /* results.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + AAF258DE113D6F686617C4823B5E96E0 /* RLMSyncConfiguration_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = B21C3FFB257241762DEF4BBE0D8E1A0B /* RLMSyncConfiguration_Private.h */; }; + AAF9D011EB89B5894C280DE0A22480F1 /* RLMSchema.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 040493368318D4DC8040E4115DE6D10A /* RLMSchema.h */; }; + AB257D4C5FC5E263EB33380E87083B16 /* FIRFirebaseUserAgent.m in Sources */ = {isa = PBXBuildFile; fileRef = DA441CDF43BF037EA940DB6B00989644 /* FIRFirebaseUserAgent.m */; }; + AB43B618099D0E0BE5730DE4166CD403 /* Reachability.swift in Sources */ = {isa = PBXBuildFile; fileRef = 813B7EE4B0772F93E3E4AD9C5153A317 /* Reachability.swift */; }; + ABBACAE988E1D0EAEDC91B5AC6CAF0E6 /* GULReachabilityMessageCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BE953515C8804F9559351E43F70B533 /* GULReachabilityMessageCode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ABBC05E95A0E02478869C3F01385B566 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A14D461519705DCA765D901C9DF2124A /* UIKit.framework */; }; + ABE12A9A7223E4C6228975E0EB28DADD /* ThreadSafeReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C2524A45BA16D2EAC721535AB1E62E8 /* ThreadSafeReference.swift */; }; + ABEAA41C35A6CD25C93E622FB129C379 /* SDImageLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 719B0167BB6B1344BEA76D64A8FBD135 /* SDImageLoader.m */; }; + AC09A2A1288E32EB9519E05A495948C0 /* FIRInstallationsStoredItem.m in Sources */ = {isa = PBXBuildFile; fileRef = AB86C6C2A0C8AB4560B91A98D5E6EA54 /* FIRInstallationsStoredItem.m */; }; + AC8168FAC637E96DFBDC0365EDDF0E93 /* NSDictionary+FIRMessaging.m in Sources */ = {isa = PBXBuildFile; fileRef = BDC05F29BAB20E8E600B77B7261DF241 /* NSDictionary+FIRMessaging.m */; }; + ACBD4EC1FF29AF9763F2CB8735FF4C87 /* FIRInstallationsLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CBF2212D72C4FDCABDD41EAE473C741 /* FIRInstallationsLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AD0CFDA140E346502935BA58225E6EF3 /* SDWebImageDownloaderRequestModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = A5A6CD9B84C410822D0E090B7DBFB3E2 /* SDWebImageDownloaderRequestModifier.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AD485B7D9A894C44A57593FE64BD654E /* UInt64+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40B88C765D2533850E39D8F27A9AC327 /* UInt64+Extension.swift */; }; + AD9C71B103839DAD8D2A67AA9095B7E5 /* GDTCCTCompressionHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B106CDB4B99099BA2C08B7C4EA25BEA /* GDTCCTCompressionHelper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ADBA50B933B7B857BC80FD659DA51DE9 /* NoPadding.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9AE969F0B095AA9193301C3D5E993CC /* NoPadding.swift */; }; + ADC5E03B6AD3623A4BC19F81229C221F /* FIRMessagingRemoteNotificationsProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B887F34F20ACE0F7B8B14175A65EDA9 /* FIRMessagingRemoteNotificationsProxy.m */; }; + ADF6EFAA5F5928A813A4E2A1B8899801 /* FBLPromise+Reduce.m in Sources */ = {isa = PBXBuildFile; fileRef = 7277CBA3C84228F260FB07A8EB44ED67 /* FBLPromise+Reduce.m */; }; + AE0D955CAEAF282248A964F82E61A59D /* GDTCOREventTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E79D5F823F26490736D3ACF33562F10 /* GDTCOREventTransformer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AE89C60F9CD4D6E1400DD304CE2A2B9E /* UIColor+SDHexString.m in Sources */ = {isa = PBXBuildFile; fileRef = A4572C030E69C027DB7F698CFDC7E7BC /* UIColor+SDHexString.m */; }; + AF6A598A2E23D651E27D4F4209424D01 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3263CAA0BC54D21B0E4A6596E847B597 /* Foundation.framework */; }; + AFB51A56D385E66FE45EC7766C95C734 /* GDTCORUploader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C5C0C38CF10DAC937D84A8B98840B30 /* GDTCORUploader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B04279CC3476C6D75EDE63B360B89DEC /* SDWebImageTransitionInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C407C7210A89A7EA8C05D261CAF6C05 /* SDWebImageTransitionInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + B0E18F568E095951B6209C6F9346503F /* FIRMessagingCheckinStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 841AE8A2609E4C62AF5D9F3B00214BAB /* FIRMessagingCheckinStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B128DE666CCA7CF6B0F09411D8209A92 /* SDWebImageCacheKeyFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = C279945E25D218FFB7CC4A91481E7590 /* SDWebImageCacheKeyFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B135701F0A6FFC9D4F1080AD8DDF6C74 /* FIRMessaging.m in Sources */ = {isa = PBXBuildFile; fileRef = 8186047FFCBBCFB3F5329B15E1325BFF /* FIRMessaging.m */; }; + B13D8979D97B1E4F0A79E96EADF6111F /* GULURLSessionDataResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C4A528B80B96962B92572AA74612457 /* GULURLSessionDataResponse.m */; }; + B1B2F57C198744D7DACD89FD2E7ACA97 /* RLMObjectSchema_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 5ED3FF30321054D07F68F68444603A7E /* RLMObjectSchema_Private.h */; }; + B1B6A2491AC437909DABE20C71BECDBC /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB24E464161714FB2F99431C96167D97 /* CoreGraphics.framework */; }; + B20CD5B9D658110F9C374648D8FE753E /* PCBC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C47955FAEBD057EF05A124649DA77DB /* PCBC.swift */; }; + B24F5A8B339639EBAE733048B83D51AE /* FIRMessagingBackupExcludedPlist.m in Sources */ = {isa = PBXBuildFile; fileRef = 232FB2CE82A48CC029AFD0424C25D8C4 /* FIRMessagingBackupExcludedPlist.m */; }; + B2A057A1A09E5715B6AE0F41AFA32830 /* GULHeartbeatDateStorable.h in Headers */ = {isa = PBXBuildFile; fileRef = 12DFEAFE7BFF2D26F1194BE8C0EB07A8 /* GULHeartbeatDateStorable.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B2AF71C08A4349665AEA3D6EC7F4A2C8 /* CryptoSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 58395B772D53249E2BFA5632CB61ABA5 /* CryptoSwift-dummy.m */; }; + B3190AD0FD14EAE155BA86FE1CDE51BE /* Mockingjay-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 548AC30CD88D0FF1EF91B1F7458FC1CE /* Mockingjay-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B3556BB6B3BE4910C609C54B2FAC9772 /* ActionSheetCustomPicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 910D84297AEC7F97CE8D7E1ECD2E82FD /* ActionSheetCustomPicker.m */; }; + B3658C29BBDE1033F6269A92E612CB30 /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69C2C2AF66ED23BE43387CAD7013D175 /* Request.swift */; }; + B391DF4313B1ED99A547DE573F0AADDB /* GULReachabilityChecker+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = F3265C4F3670E855D40B858BE499BDD3 /* GULReachabilityChecker+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B396DD9E9A49FCC941425FA3BA10E86A /* FIRMessagingTokenStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 8642BF4C54A8593E54F33CCBDC4AB1D2 /* FIRMessagingTokenStore.m */; }; + B40D9F620ECCDCB1B2BF6AA49E3F6740 /* GDTCORReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 8207D25452E8B924F7358EB025B3FC8C /* GDTCORReachability.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B461E11B99D6825575D7D5929F697838 /* RLMObjectStore.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 52B81E9570B59806F994DD9A65C241A3 /* RLMObjectStore.h */; }; + B484EDAFA852B01BD6B0E1068115833E /* FIRCoreDiagnosticsConnector.h in Headers */ = {isa = PBXBuildFile; fileRef = E453C157683D721DF09A49130CC7A5C6 /* FIRCoreDiagnosticsConnector.h */; settings = {ATTRIBUTES = (Private, ); }; }; + B4DBC9F2903BCF3C8CAC7FCF9C04CE23 /* FIRComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = E341AB0D145F406F4CCD0266358D789C /* FIRComponent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B58F9ED652AF253CFB9FEAC1B3998551 /* FBLPromise+Validate.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DD22208761570BF96A5E1CD1729794E /* FBLPromise+Validate.h */; }; + B5B0FEF06561B6BA3BAB9445409A24D5 /* Schema.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607AACAC41381E74F0EE5FA8ABF17666 /* Schema.swift */; }; + B5BE041EDBE04B779F186B7B04D6F8DA /* GDTCORDirectorySizeTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = C977FDAF3D1325FD03E94C2B1CED0412 /* GDTCORDirectorySizeTracker.m */; }; + B619161884EE544AC4431D5DB6136BC4 /* FIRInstallationsAuthTokenResultInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 147A20BCBAAABC8CA2DF2DE1A3BC7DF2 /* FIRInstallationsAuthTokenResultInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B6B43B1B78EC0E52CC08F82841A22A31 /* IQKeyboardManagerSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6794F4C1D41643AFFDCB2A9FFF834A87 /* IQKeyboardManagerSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B6C0E51614DE4B63A77B4513B906E564 /* FIRInstallationsItem+RegisterInstallationAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = F76E17FE12A073AEEE3E1D4B0C329494 /* FIRInstallationsItem+RegisterInstallationAPI.m */; }; + B6E2124F7902EEEE6DB50E18B13E3551 /* FIRCoreDiagnostics.m in Sources */ = {isa = PBXBuildFile; fileRef = 656C5F77188D1282E57C7F86B19899A9 /* FIRCoreDiagnostics.m */; }; + B6EC6D40823E66D5B389ACEAC9FD7AAE /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD3CD06550FF4C8846B1AAFDDA71EB16 /* QuartzCore.framework */; }; + B704B198B9B520D449260877E300D821 /* ServerTrustEvaluation.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6949FFF62A5950370EB517EDBAAA21E /* ServerTrustEvaluation.swift */; }; + B779C5D0133D2074CB2EDAC61C4C5475 /* ActionSheetCustomPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 03F7CD223F0E708E5C1AC45005C3F52A /* ActionSheetCustomPicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B7F442B97C1037318C88A2BCBE7ECC14 /* FIRMessagingTokenManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 95123A2DA35EAEB7351257F9949317F9 /* FIRMessagingTokenManager.m */; }; + B8749987FCA6AEB6A3C80F4DFE148D72 /* RLMSyncSession.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3CEDAA9A43552D4E84683F56728904E6 /* RLMSyncSession.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + B88C351562CE8FA4255EA9023213BE4E /* SDGraphicsImageRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 232E5758D238386213681400D75E7268 /* SDGraphicsImageRenderer.m */; }; + B90F0E0F741C432DFD50338912B7E4E4 /* FIRInstallationsIIDTokenStore.m in Sources */ = {isa = PBXBuildFile; fileRef = EBBE97B22CEAD2CB6FC677808EE74719 /* FIRInstallationsIIDTokenStore.m */; }; + B9D1270EAADE0A1F38D25EC5ABC096F0 /* Bit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30F869B0D88AF4110FBDC7FCC3E14E18 /* Bit.swift */; }; + BA4AE15D794448B0E8E96750F51B26E8 /* Results.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CFFCCBBB80B3B1B568ACBEE9C15039E /* Results.swift */; }; + BB77D1B5BCFFA37BAF01BE4492C6C07F /* FBLPromise+Any.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = EA76E4E1C7AE825FF51F1BEF26F1BC5D /* FBLPromise+Any.h */; }; + BBE721CBD0CF6D094BB61C1FEFBD25AE /* FIRInstallationsStoredAuthToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 615E3A444EE37594627883F244711AD8 /* FIRInstallationsStoredAuthToken.m */; }; + BC0B588DF8678F90C4FB762EC4766FC4 /* FIRMessagingAPNSInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F50D564F28D21D151DDB136E192DDCD /* FIRMessagingAPNSInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BC0ECA8F22DEDE8886E189CD0EAA1197 /* URLRequest+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1BFA13E3438CCEB0C43E67A14650D22 /* URLRequest+Alamofire.swift */; }; + BC1845C2C828DBD86E699A1FDD79AB69 /* FBLPromiseError.m in Sources */ = {isa = PBXBuildFile; fileRef = E586C409771F16D0B6118D81101A0E8B /* FBLPromiseError.m */; }; + BC92DAA5EA59849601A1080AA7671D4E /* ActionSheetPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = C4131218F8716A33D0DCF7F8569B9E9C /* ActionSheetPicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BCB7B61DB37BA3EDB8CBBF258DC66446 /* UIImage+ExtendedCacheData.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DEC125BF3990BEA5CEC35EF26A96390 /* UIImage+ExtendedCacheData.m */; }; + BCCDB1D0F65D85E8E1842244D825D5D7 /* FBLPromise+Recover.h in Headers */ = {isa = PBXBuildFile; fileRef = 2285C7BF5AA76D4D7094E6431B2FCC58 /* FBLPromise+Recover.h */; }; + BCEFED88755D8A913C798305C91904D1 /* RLMOptionalBase.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = BD6F5B92CA889A858AD40E373381079A /* RLMOptionalBase.h */; }; + BD074722CD72470954ADB5B1198E01C5 /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EBC192CAA7BF36AFC45CC8E9CAA09E1 /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BDC8AEBDF3F86A28500F9C67FC016ADA /* FIRInstallationsHTTPError.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AF4AB6D6C07698036A9FBDCB500EAA6 /* FIRInstallationsHTTPError.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BDF34B687D9FF14F3BD9FE870C5FD87C /* GDTCORReachability_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = AC431187E16C2E3F6A7050C2FDA0B447 /* GDTCORReachability_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BE09B05827F66151D154800E41EE3FC6 /* Mockingjay.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F4D97C94386876B76AFCABA12EEAA01 /* Mockingjay.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BE61E3911D987988113617F1CF613F41 /* GULKeychainUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = C394E1E8C0B31292091637DCD71392B9 /* GULKeychainUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BE649A29E5FB32C54FDAE55994804F6D /* SDWebImageOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = C889F533ED3626FEF20A7CF793684A3E /* SDWebImageOperation.m */; }; + BE69DABFBD5C72D179FB2DD11D6F3C5C /* FIRMessagingPubSub.h in Headers */ = {isa = PBXBuildFile; fileRef = A970973CC0EB4B10D9C8BC06021A62DC /* FIRMessagingPubSub.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BE6B90B609AF8E460D9E224617943154 /* FirebaseInstallations-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C56A8A3041B260E8C0EF3FCFA3A3C63 /* FirebaseInstallations-dummy.m */; }; + BEE2B631709CD0DA59CC9D72EF8BFE0E /* RLMSyncPermission.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = EB12CD8A16F1640BF7DE35CB0E9A9491 /* RLMSyncPermission.h */; }; + BF20C741EBB18F936CA31F2E41DC9F23 /* Toast-Swift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2182CACFEEDBB7D7AE3233A901E28526 /* Toast-Swift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BF8E2120AFF342FBAE6299005B291148 /* FIRAppAssociationRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = AC5D7ECB262E7A59B1C880493F798D61 /* FIRAppAssociationRegistration.m */; }; + BF9A6E2CB8F67686C4B7E04538664919 /* UIImage+Transform.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AC05C3E033285B28AA91CD51CD960F2 /* UIImage+Transform.m */; }; + BFBE488A160D145818FDFABFCCE70045 /* FBLPromiseError.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 53A1AC2F6DBADD8B82AD675C56F3FE68 /* FBLPromiseError.h */; }; + C02F374C2A8958DFD2D8DE71AFB3D2AD /* RLMProperty_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 66335C8A5AF18D0C031D33F089435222 /* RLMProperty_Private.h */; }; + C039F694EC1507A208A150C59D8D1A02 /* RLMRealmConfiguration_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 4BF11280898471488315C7ABEC946BCE /* RLMRealmConfiguration_Private.h */; }; + C10A947619692BA200EC6D8A18ACB80E /* FBLPromise.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F3F4BE17084ED51B2F66919D5AA3314 /* FBLPromise.h */; }; + C10AEAE3170856A4A6ED972AF8CCFF4A /* BlockMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCCBA313F9D44519610242CA85129447 /* BlockMode.swift */; }; + C12E83EA619B329199863FFCAC54821E /* FIRCoreDiagnosticsConnector.m in Sources */ = {isa = PBXBuildFile; fileRef = 486335F788645CFE83B2FE7E48A018B9 /* FIRCoreDiagnosticsConnector.m */; }; + C13F9CCA95CB7139583669894AF134C7 /* nanopb-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 307B04FF0227E17EC7DC590F992BC7A0 /* nanopb-dummy.m */; }; + C1560D479D2C4290339F2153A1009695 /* Digest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35D9F1DFE1454CA4DCBFC097E92887E2 /* Digest.swift */; }; + C19024EAF7E0812854AA02CA90034FDC /* FIRConfigurationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = CAA6054A2F5B34718BFFF6EF61795C0C /* FIRConfigurationInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C211F72939EFE73C150D3A955977111A /* FBLPromise+Then.m in Sources */ = {isa = PBXBuildFile; fileRef = 46B8F01201118ABFAF62692E92EC08E0 /* FBLPromise+Then.m */; }; + C25B1B39C7DD8710A2805A7DFA05557F /* FIRMessagingAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = 652D12158DE8D8B3CA0B200917A0619B /* FIRMessagingAnalytics.m */; }; + C27BD8C6B4E713A8E7B7B76B80E45823 /* SDWebImageDownloaderRequestModifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 226800BF273B26990AA0FF5EF47E5E7E /* SDWebImageDownloaderRequestModifier.m */; }; + C2D82385F4FDB67F6613CBBE8E2BD850 /* SDMemoryCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 5014226C888D6621F88E6AB048FED245 /* SDMemoryCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C319DAAECDDBD90554762D228289814E /* list.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 44C094511E941EC792C1BEEC22786E00 /* list.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + C352B41442214CAF7F14B2C25954DF70 /* FIRDependency.h in Headers */ = {isa = PBXBuildFile; fileRef = 1925FF0F5EEC34AE2C4AAA1C6226AC70 /* FIRDependency.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C4762BD85B320B9EBE199F7CDFBCED12 /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = A96AD85142773FA7DEF5D2F88C4DBDEC /* UIImageView+HighlightedWebCache.m */; }; + C4A78B8FC2DC76FBCF43D9D53BF90767 /* SDImageLoadersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = D7E59061A5E63AFC5011D57B20637056 /* SDImageLoadersManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C55A2D001850D3F407D968CFF1C545E2 /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 07E5446944D1981493AAD0EB936C93E4 /* UIButton+WebCache.m */; }; + C570C6448D4D022E5E506D0F9AF2139B /* pb_encode.c in Sources */ = {isa = PBXBuildFile; fileRef = 6B168909D065D0207116EC9091DAD8D6 /* pb_encode.c */; settings = {COMPILER_FLAGS = "-fno-objc-arc -fno-objc-arc"; }; }; + C73F45B2515924AF76B273849E0151FB /* FBLPromise+Race.h in Headers */ = {isa = PBXBuildFile; fileRef = 36F163FEF5F10CDBABF75F0E402F4184 /* FBLPromise+Race.h */; }; + C7B0D955485AD1A47A2E179D0470B067 /* GDTCORRegistrar.h in Headers */ = {isa = PBXBuildFile; fileRef = C7E01CF0697350C146A56F6AE62EEC72 /* GDTCORRegistrar.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C7C9A0C7565E081B79FE95731798D109 /* RLMPlatform.h in Headers */ = {isa = PBXBuildFile; fileRef = 7FD95F6236A4C815A5460B7EA152E296 /* RLMPlatform.h */; }; + C7E6C58652231A16F51E68352CDA94FA /* GULHeartbeatDateStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 2653098F7F86B721C8AEB33773CADE4A /* GULHeartbeatDateStorage.m */; }; + C7E8A80BE6BE5452380D8CA71F278B8A /* SDImageGIFCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 52D3E3BF4B8CC880C28BF4A4BB913C50 /* SDImageGIFCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C8014EFA3289C8FF5A0322C50204D667 /* pb_decode.c in Sources */ = {isa = PBXBuildFile; fileRef = F8A789EE0AD6DC84DA0FDC3026C1F49F /* pb_decode.c */; settings = {COMPILER_FLAGS = "-fno-objc-arc -fno-objc-arc"; }; }; + C81285F9109DEE70D627BD4C30409070 /* GULLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = B4F046BA3CC8D32499F052FE25306C9E /* GULLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C81CB3B5D25BDBCB6D3A3632BE408229 /* IQKeyboardReturnKeyHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FCA132268E23CE5CC40BF77BC455EC2 /* IQKeyboardReturnKeyHandler.swift */; }; + C892E672AB88B0E113005AD5D696C783 /* RLMNetworkClient.mm in Sources */ = {isa = PBXBuildFile; fileRef = 23275A4BFFC38771F513E7CAABEF6129 /* RLMNetworkClient.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + C89B8C0FB4AAC35805B90D5A3C8AACC4 /* RealmSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 382FB60C7C4EF1852D91C66987515F4D /* RealmSwift-dummy.m */; }; + C8DDDE5AB94536AFB7EB4C48AE1FFCE1 /* GULLoggerLevel.h in Headers */ = {isa = PBXBuildFile; fileRef = B770A412737D8D809530424D9D956AAD /* GULLoggerLevel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C8E5732E929C2BD2514B497668D3AE22 /* RLMThreadSafeReference.mm in Sources */ = {isa = PBXBuildFile; fileRef = D159E29C20CC7B24722B84E9F728CABE /* RLMThreadSafeReference.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + C8E5DC1E2E7830BBE767106AC78EFFF0 /* FIRMessagingPersistentSyncMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = E3CB1D0A96B45733D2DF9DD1FD249EC8 /* FIRMessagingPersistentSyncMessage.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C9086E0A22363785AD517EDFB0890173 /* FIRHeartbeatInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = B664FA00888280F042E3716933B5B584 /* FIRHeartbeatInfo.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C9272207891CD6DEB025FF7B688E51CF /* FIRInstallationsItem.m in Sources */ = {isa = PBXBuildFile; fileRef = E14A6B6C80B5DCE17D79BFE0E12CBBE2 /* FIRInstallationsItem.m */; }; + C98C64B270C832394514FF2605B229B0 /* FIRMessagingConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = D13F9D7F1F1735B63F0A63ED08BCC615 /* FIRMessagingConstants.m */; }; + CA42DD2DF65AA84CD0F61AFABA379C40 /* FIRComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 132A884C065390DEDD73CF188A337C69 /* FIRComponent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CAE29563450C7ED7B9BEFD4F8C3788CA /* Toast.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AAF5A18737624C27C29A00C2B1C2EE4 /* Toast.swift */; }; + CB09C9C9878B1605B72EC552B8D29E7D /* RLMObjectBase_Dynamic.h in Headers */ = {isa = PBXBuildFile; fileRef = 1031E2C9F40B857CD36BEAC1D6486B76 /* RLMObjectBase_Dynamic.h */; }; + CB5AE5CD33522F018D995F9EB026472D /* GULMutableDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = 17E112F213728306929ABAAA0BBAD6AE /* GULMutableDictionary.m */; }; + CC1CD01C18938425E8B5723D1683B377 /* RLMArray.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 4240A99561484EA9DEEF9707AAB5FA0F /* RLMArray.h */; }; + CC551ED254168CA10F59974144D2F767 /* collection_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A51499D2C2EB0CA3F302A88F0CE96444 /* collection_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + CC82698F242FDB9855351B212411A63E /* RLMSyncSession.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 1048324F727445AC178416B6259CDC24 /* RLMSyncSession.h */; }; + CC95169162908F93F653A92A59E440D5 /* UInt16+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33F5E03D74F5AA320D0137028300DFD6 /* UInt16+Extension.swift */; }; + CD14842CBC0C83FBCD474F3778A3FF24 /* RLMSyncUtil_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 890CC9F4A0110C71D23B765C18804F6E /* RLMSyncUtil_Private.h */; }; + CD151B24C25809170DECD96AA3F2989E /* ActionSheetDistancePicker.h in Headers */ = {isa = PBXBuildFile; fileRef = EC29CB017696B6FDBFE35398F74E8328 /* ActionSheetDistancePicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CD6046D905D981D308DE79E53A47F83C /* RLMSyncPermission.h in Headers */ = {isa = PBXBuildFile; fileRef = EB12CD8A16F1640BF7DE35CB0E9A9491 /* RLMSyncPermission.h */; }; + CDDA4333D7063A9EB29859DF27C97C28 /* SlideMenuControllerSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D26E710F500DE7A77179FBD03CD9D77 /* SlideMenuControllerSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CE1AA7729613A17F2A2C6C992A5C1610 /* FIRMessagingTokenDeleteOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 3575B3D52BABD185142F09359A0431AF /* FIRMessagingTokenDeleteOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CE268A014B11FE98F3589701685C14CF /* FIRMessagingKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = 44521325C57A8EC6E076292D6C090CF0 /* FIRMessagingKeychain.m */; }; + CE7A68CDFD3FC58EF21CC7C08D24CA55 /* CFB.swift in Sources */ = {isa = PBXBuildFile; fileRef = D434C82D8CA4ED52633411631B2476BF /* CFB.swift */; }; + CEBFFEED65D877702B2F36102528CF6D /* EventMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DF2124421CBBA4A2029D5609BC36AE4 /* EventMonitor.swift */; }; + CF942317588A7CF5B0892451EF08AADB /* GULOriginalIMPConvenienceMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DDC985D03E7F1E3A3AE06F64A21A539 /* GULOriginalIMPConvenienceMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D01BDAE093EB73097FB17398C1A68F6B /* FBLPromisePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 41A20FC27E05100D81B5873C6766049B /* FBLPromisePrivate.h */; }; + D05086EDFBAAD9D00782C48F51646D97 /* RLMCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DB8D97A1CC79B909E92F91F475AAB99 /* RLMCollection.h */; }; + D0555B0EB9B081AC97D0656EBB7232C6 /* FIRMessagingContextManagerService.m in Sources */ = {isa = PBXBuildFile; fileRef = 87560003B0C0EB44074950AFE351DFB4 /* FIRMessagingContextManagerService.m */; }; + D0EA90FBF83350C49E6EF6C8A98D6F00 /* AFError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67F228FDC6A2CAFCE7BD7CDC55ECDFD0 /* AFError.swift */; }; + D223ADD60F7C67B4B7444655991ECB8C /* NSURLSession+GULPromises.h in Headers */ = {isa = PBXBuildFile; fileRef = E1D026F32D91E6EA758EF0D37A17435A /* NSURLSession+GULPromises.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D25B344F3C3A0399C3BFF0AE3349CEB9 /* FIRMessagingInterop.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C3245EC9BB084F5342B21D389C88E5F /* FIRMessagingInterop.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D278B55615A04822D7E00ED93636F810 /* FIRDiagnosticsData.m in Sources */ = {isa = PBXBuildFile; fileRef = 78F701D011E4E0AE6BBCE0C13A9639D5 /* FIRDiagnosticsData.m */; }; + D2FA73EF2DE9EA921E64DF9AE051A8EF /* GULAppEnvironmentUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = B3BC07700F2814C5BA7CE4BE00FB6553 /* GULAppEnvironmentUtil.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D31356D54A39420DB91C892502CFFD57 /* IQUIViewController+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24F4020A274C6C9968F96807F3298F5B /* IQUIViewController+Additions.swift */; }; + D32830409AFDFAF84EDBA378965F72EE /* RLMRealmConfiguration+Sync.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = A0499A35DE68EEA7918378FB24898A52 /* RLMRealmConfiguration+Sync.h */; }; + D334208BC91A64ECE579C9017D62DC30 /* FirebaseCoreInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 238BADB8D2DF0E77C357F71B9765C968 /* FirebaseCoreInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D3E9E3F249E8D3D98C4E51836BDC4954 /* Cipher.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6837A3E7B5FC94EC4CDC728C045D1A8 /* Cipher.swift */; }; + D4135E6CF7800B813179A4DFB88BB112 /* ChaCha20+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B944858F8520734B6AB96BA217A2B2 /* ChaCha20+Foundation.swift */; }; + D419F390B4AD6EA22AFA019AF2E01D21 /* FIRLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = E4CDC40665BBA0AFC6509C4BA8F17494 /* FIRLogger.m */; }; + D452CB12B2177CFFE24A9D849BE52030 /* FIRInstallationsErrorUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CA89701332D4E50361C72D1A0839ACD /* FIRInstallationsErrorUtil.m */; }; + D48509A990BA8242C1E3F567DBDCEBA0 /* RLMSyncConfiguration.mm in Sources */ = {isa = PBXBuildFile; fileRef = 47DA34530389E50A8F3E0058A206EB8F /* RLMSyncConfiguration.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + D4931C8834963305D17F0ECB5388D705 /* FBLPromise+Then.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DE11A9D7AB89D3949A1741497809A5F /* FBLPromise+Then.h */; }; + D53530A54A33CA8FF8F7CA22A6F485C8 /* RLMResults_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8413BC54D9D681E1EA2B3A8CEABA7DCB /* RLMResults_Private.h */; }; + D556C63635E7A83C7A9B04FB104F7339 /* UIImage+Transform.h in Headers */ = {isa = PBXBuildFile; fileRef = C25692C04D77AAB7221165CFC06D57DD /* UIImage+Transform.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D580FDF91FEE9760DE95A720569B463A /* nanopb-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B8ECFDC2CF94E9D88FEDE1620B74DB8 /* nanopb-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D618594A60716C12B8FBAA73F18EC31C /* OCB.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5855953FE680CC2FAFABCEAE03620FF /* OCB.swift */; }; + D6516B5451008BF1ABA150E6482F6325 /* IQKeyboardManager+UITextFieldViewNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7423129F4E9D30FD62BBE7BE1E352E6 /* IQKeyboardManager+UITextFieldViewNotification.swift */; }; + D6530A25CE544B55B9FD5A90DF6DF726 /* FIRMessagingSyncMessageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 328A5C96CF30412EB3C1B7EADE29BA33 /* FIRMessagingSyncMessageManager.m */; }; + D67F859F956A7C43BB910167DDAD42DA /* GULHeartbeatDateStorageUserDefaults.h in Headers */ = {isa = PBXBuildFile; fileRef = 0366496CA3470F9B2B2F511EFCCA8B11 /* GULHeartbeatDateStorageUserDefaults.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D68F08F717E95BABFB43AE705D943426 /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 81735A75E6CF3056E326396EC1FC5ED0 /* SDWebImageDownloader.m */; }; + D69D3B884B204281F946D4DE9040A5DD /* FirebaseMessaging.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CEA5FB238F571B1F2A2ECE99154DB74 /* FirebaseMessaging.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D6B4751CED01D53E4A1B6A571AAA2F83 /* HTTPMethod.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DD665A0F87DBA3DC018D522EFBBCA05 /* HTTPMethod.swift */; }; + D6FE9B4939CA475107164439DDE301C3 /* GULNSData+zlib.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FC66F48CACC09AAC6190A0D13F6C8CB /* GULNSData+zlib.m */; }; + D79888E100ACB88EC3B4EAAA4BB8FE9C /* RLMRealmConfiguration.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 09286A1C246966D08249E164E0089729 /* RLMRealmConfiguration.h */; }; + D7BA04ADFE3104907F100E9370184A65 /* UIImage+ExtendedCacheData.h in Headers */ = {isa = PBXBuildFile; fileRef = 844383CEA99AA38235AD8948C9C22D6C /* UIImage+ExtendedCacheData.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D7D077F0FA5CAC32ACB65372453C701F /* SDImageAWebPCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 16D2535B01337419DCB6B7AA7F357640 /* SDImageAWebPCoder.m */; }; + D8143ACD68015DDC9D290DD502396B94 /* List.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31461360C6B500E9622692F038BD599C /* List.swift */; }; + D8274DA60B387CCD1116C9611C0BBCFA /* FIRMessagingTopicOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 61B470CFE2F9EDF2A6ED97B7680762C6 /* FIRMessagingTopicOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D82F493C72E872721EBC060BAA71A6CE /* GDTCORClock.m in Sources */ = {isa = PBXBuildFile; fileRef = DBC07DCD17235CF916393C00C423339E /* GDTCORClock.m */; }; + D86D490CF982E629A578DED0E89F146F /* Authenticator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D199AB7770FB1CA4CFA31E43161DFF9 /* Authenticator.swift */; }; + D88076DA0593D2835645CA5A92FFA37C /* SDAnimatedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F3FE833D9B4BA58B0E72BF395BB34B8 /* SDAnimatedImageView.m */; }; + D89AD7CF2C67EF6526C9F924E9F2DFCB /* RLMJSONModels.m in Sources */ = {isa = PBXBuildFile; fileRef = 788CF763F6B8CEF22383BB833C14EFDB /* RLMJSONModels.m */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + D93C4C639C38C9C0ECA7A14C86524652 /* FIRInstallationsBackoffController.h in Headers */ = {isa = PBXBuildFile; fileRef = 29CF6BAC9C5524BEE6735290DE18A7C1 /* FIRInstallationsBackoffController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D975B260AB44081399BCB612916CE675 /* UIView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 919441429B23C0D81323DFB6938C0A25 /* UIView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DA0879555CC95C3CBFF17EE1BFB82104 /* object_changeset.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92A3F71221BE3E85393BAAD68B35A5FF /* object_changeset.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + DA0881C07596A1B06D3619462ECE0E6B /* GDTCCTUploader.m in Sources */ = {isa = PBXBuildFile; fileRef = FD5A7A4A775F2FA9C153E805F913AA0D /* GDTCCTUploader.m */; }; + DA34899BEF0668D76CBCE8C4CE47B97B /* RequestTaskMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = F96303E9E6CE1708F412C20D5F2B14C9 /* RequestTaskMap.swift */; }; + DAD18CB4C9B39DAE8D2F9EA5BB882F11 /* FBLPromise+Race.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FFF05B3A924CA8BBEDDB3F284059A1C /* FBLPromise+Race.m */; }; + DB2115ACB523D7D853B91FDE842C8CBB /* RLMRealm+Sync.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D321850BFB472987C8920DDD847B563 /* RLMRealm+Sync.h */; }; + DB61822BEA875B413C858E1166590C9F /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = A5B2012268ABAA70954EFBFDB1BB5A52 /* SDWebImageDownloaderOperation.m */; }; + DB68D9AFA817850ED9EBBE7F3F378AF5 /* SDImageCodersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = AB194A4B183438BBF214D274AE84C1CD /* SDImageCodersManager.m */; }; + DB9E89DBF9F853CF9E764843C41FC22B /* GULHeartbeatDateStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = FB10CA3DD76A25CCADFB195C2B82C608 /* GULHeartbeatDateStorage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DBBAC864AD405BED53782364E0F0D5F3 /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = CAC6F836B72427D8993AA92EF501FBB7 /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DC2C88E51CAEEEDC1DA6147971764C60 /* DistancePickerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 29162A0581521628960574A01316BDF0 /* DistancePickerView.m */; }; + DCA6472EB6CA0FDD43C6F5DDBCEA419A /* RLMCollection.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 0DB8D97A1CC79B909E92F91F475AAB99 /* RLMCollection.h */; }; + DD612C1C856AAD4B4FC1503B3F67B8EA /* RLMSyncUtil.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 6D058E2CB32929EB0BB21D2851DB8AF2 /* RLMSyncUtil.h */; }; + DD902FE8D6824681C929D028655AE121 /* RequestInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = F55DC7793C9A35A4C62AE35322952BEE /* RequestInterceptor.swift */; }; + DDB34D9815F0577DB66673859CC0088A /* FIRCoreDiagnosticsData.h in Headers */ = {isa = PBXBuildFile; fileRef = A48BDEDD3B08E868AF5E71FB76873D30 /* FIRCoreDiagnosticsData.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DE0BA471FB4FC10C0B25BDE4F22F5B76 /* SDWebImageDownloaderDecryptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 6498E899ACC03B6A0A635255D09FC3EE /* SDWebImageDownloaderDecryptor.m */; }; + DE2B75B3D8A845F1DD27632B30AEE0D4 /* FIRInstallationsIIDStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 686B1F616D2D3CED7750A0D9071D8EF2 /* FIRInstallationsIIDStore.m */; }; + DE39DBC5AAF719AFBCB7BB50025A772B /* Blowfish.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA81C9CF689AE79EB34AFBBDCB8CD768 /* Blowfish.swift */; }; + DE6BD51091F66AE9666E35209C94A402 /* system_configuration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0D2F4EAC2F5189DB9445256EE720D554 /* system_configuration.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + DE8077C86627654CBDF64F37E12981F9 /* GDTCOREvent.m in Sources */ = {isa = PBXBuildFile; fileRef = F9890802352368079A87804738221C37 /* GDTCOREvent.m */; }; + DECA57AF64C5C257919649ECBB75F0B9 /* SDWebImageCacheSerializer.h in Headers */ = {isa = PBXBuildFile; fileRef = B7F97C2181CC787B9FFDCED5D841E2DE /* SDWebImageCacheSerializer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DEE74CD0E78DE0DB4056A8A3244B6ED1 /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 64696D763EBA8C3B8985BDE10E30030C /* UIImage+GIF.m */; }; + DF05140DDF642B2EF7F4CDE512B71005 /* RLMRealm.mm in Sources */ = {isa = PBXBuildFile; fileRef = B4D2BDF9D48B7824405D884616379A53 /* RLMRealm.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + DF33C3DE068D6116B3F551B0453ACD23 /* IQUIScrollView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59A9022453BEFEFA7662103158E162BB /* IQUIScrollView+Additions.swift */; }; + DF7B503059D5E8013F13DEB0D3BD22D4 /* GDTCORUploadBatch.h in Headers */ = {isa = PBXBuildFile; fileRef = BE849E713DD4116CC8BB99BD6F12B32B /* GDTCORUploadBatch.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DFBAE6B4C40C06766DA185E4BC71BB5D /* FirebaseMessaging-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 058E011CE5E12E690AB9C2234F9A4156 /* FirebaseMessaging-dummy.m */; }; + DFEB3EDFEA7B82012C8C4F442C41380E /* FIRMessaging.h in Headers */ = {isa = PBXBuildFile; fileRef = 87629E31C47EEC3BD53180898BD2FC58 /* FIRMessaging.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DFEC35C6AB9215D9C6EAEE261F3FCC89 /* FBLPromise+All.m in Sources */ = {isa = PBXBuildFile; fileRef = 651889BB4A9EACEEEF3B5E89854DF17C /* FBLPromise+All.m */; }; + E0137D6D9AE5B6786272CFEE12EE329F /* Updatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6144AD96804FD9CF5C15BDA80A55D007 /* Updatable.swift */; }; + E06FC57B0A253021D9A514CFB30B159B /* MockingjayProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FEF70CC1C3F3E0854F2D6D92936B15D /* MockingjayProtocol.swift */; }; + E070FEE7C84CF3B6B321E6FA0F4168BD /* RLMListBase.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = AAE233D5B3FE1F32D73E6A2778EFD329 /* RLMListBase.h */; }; + E09F6EA995970558C2760C5669E3375C /* FBLPromise+Reduce.h in Headers */ = {isa = PBXBuildFile; fileRef = 28FE13834F2A78F2B96F8D97F12B7CDA /* FBLPromise+Reduce.h */; }; + E0CD793ACD03F02004FFD7ABACF9047C /* GDTCORStorageProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 747C2C807F81EBA99E2020E69BA5B31C /* GDTCORStorageProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E1A93DFBCF431BCE980742525FF79661 /* RLMObjectBase_Dynamic.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 1031E2C9F40B857CD36BEAC1D6486B76 /* RLMObjectBase_Dynamic.h */; }; + E2C50CA38760109247FE8624452C2C97 /* FIRCoreDiagnosticsConnector.h in Headers */ = {isa = PBXBuildFile; fileRef = 427735807BF753B50B7BC8E4D8EAB63A /* FIRCoreDiagnosticsConnector.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E2EFE66C5E4ADD921A9BE89DD7E489D6 /* SortDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F67EA96581F7CC63A063CFE294809C6 /* SortDescriptor.swift */; }; + E33A7CDF3107CD3426ADD0D906100CD4 /* SDImageHEICCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = B2F6EF5D8599FE975E8FC0C7A96DC7F5 /* SDImageHEICCoder.m */; }; + E3A23BAC7140C71EB52E568494B8E6DA /* RLMSyncSessionRefreshHandle.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0F6CEB8E4A2699C012797C2CB8208382 /* RLMSyncSessionRefreshHandle.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + E3F4DE3B5FB5D5932758B4547AFB7E84 /* URITemplate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA490B13588476F88AB81643E638781D /* URITemplate.swift */; }; + E40E4A4AF8B51666574CCD391E9F1864 /* Combine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 298C17E2B96E1102A88DD9FEF27F77AE /* Combine.swift */; }; + E4AF87F8012F919F00E2E8698A1A3C33 /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = AEF8DE56C227D7BCB241BC0C7E7AFF9B /* SDWebImageCompat.m */; }; + E515780850EBAD40342EBF2997BFC2D2 /* SDWebImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 03546A03FBFFEFB5AEA3C6917F5E1648 /* SDWebImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E54654D504A42C24F284A68F87F7671D /* OperationQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5338663A029341ADD610774A4C917D5D /* OperationQueue+Alamofire.swift */; }; + E556832E0C191FCFABB9E97C87D243EF /* SDmetamacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 593CB5ABE9D6AB2760979B81EFC78510 /* SDmetamacros.h */; settings = {ATTRIBUTES = (Private, ); }; }; + E55AD85C0D738B4863E72358E0630788 /* FIRMessagingUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 75BD193246E08BA4866D30885759C162 /* FIRMessagingUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E5C6051933677CDF392BF6356271A92E /* SDImageIOCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F42CA0FB980DE6081660223095BDA43 /* SDImageIOCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E5F6C16790C5A7213D6E771C76A95A83 /* FirebaseCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A4E2652D3A51538F369A7816AA75A9B /* FirebaseCore-dummy.m */; }; + E60E46BC303B4B4F1249ADEB56B32B79 /* FIRAnalyticsInterop.h in Headers */ = {isa = PBXBuildFile; fileRef = 05F7ADE3ED81DA5115BA1688CF6E0832 /* FIRAnalyticsInterop.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E61A729B25227A44AB5D8B31B1D659EF /* PromisesObjC-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = FFBB53491A7735D5F57962E24123923F /* PromisesObjC-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E6BF834FABD16266E5290E3040F65F9A /* network_reachability_observer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A31E24A6A601B6770990552B1C590B24 /* network_reachability_observer.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + E70C2F0E85E174239771E6400FB2411C /* RLMQueryUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3082551530D4F9F80AF74AAE1613F888 /* RLMQueryUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + E72E1BDDFF31003BD089544FC112FAAC /* IQTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8607A349742D091607CE66A99A57A798 /* IQTextView.swift */; }; + E75268CC78D495A28703451DCA8B57CD /* FBLPromise+Wrap.m in Sources */ = {isa = PBXBuildFile; fileRef = 67FFD7D4314E904B675B4E1A9354281E /* FBLPromise+Wrap.m */; }; + E793B49B0F4F9444C35C938A84919D59 /* Rabbit+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AD30745CF94914FA5AE9BA5A323D71F /* Rabbit+Foundation.swift */; }; + E7D9FFD14B425686DF956275B061D89A /* GULNetworkInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 3889DA1D77D0CC868F31535ECE1FA026 /* GULNetworkInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E7FA1E1CD066D0335A95376C73E3F8ED /* SDImageCacheConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 40F739E2E783538510A8E71423F779DE /* SDImageCacheConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E8CE28499C17965A931605D4F47AAEBF /* NSImage+Compatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B9D5EE235CD65A5F5007B23B539F50C /* NSImage+Compatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E8D519B63C2077979F799769F9A35072 /* SDImageCachesManagerOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 585EC19B11E0EA1E759120ACC50C30EA /* SDImageCachesManagerOperation.h */; settings = {ATTRIBUTES = (Private, ); }; }; + E8D93D8B7FCD1E4AB8C5DA94280C3422 /* RLMRealm_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C8B18A0570D7BAC0A8F837133E2DDFD1 /* RLMRealm_Private.h */; }; + E9114F0A5B221B52506D3BDC66174EF1 /* Pods-MyStudies-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B655AFFE819E391100EDCEFCD6E138E5 /* Pods-MyStudies-dummy.m */; }; + E92276E579BE2DB5DADEFEB59EE0F86D /* FirebaseMessaging-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B434A1EDAF09571A7BB0FA340012517 /* FirebaseMessaging-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E9B1EE521C74E68921DD97D24EDC388A /* AES.Cryptors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50DE2616C4EEBEED97B119F0B3B22684 /* AES.Cryptors.swift */; }; + E9B4C89E7EB3B27D46AFCA452C3D426F /* MultipartUpload.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02073E7407EAD96EC98B83467F0AF66D /* MultipartUpload.swift */; }; + E9BFBE4D5642CFC361EBC20E4647772B /* FIRComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 66456E822A392BF9E98C839A7B878610 /* FIRComponent.h */; settings = {ATTRIBUTES = (Private, ); }; }; + E9CF46857D61D2A8AF4C3722C27C61C6 /* SDImageCoderHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 275B9FD49BD02C6B329A5F53A9515369 /* SDImageCoderHelper.m */; }; + EA70261DFE74CABB1710447DABE8A25D /* Realm.h in Headers */ = {isa = PBXBuildFile; fileRef = E41E301F92647C576F44D654E1304912 /* Realm.h */; }; + EB0E9F3AD13CD1AB244456A8E80E660B /* RLMObject.h in Headers */ = {isa = PBXBuildFile; fileRef = A390F0EB031CC42ED74FE2EDD5D36BA9 /* RLMObject.h */; }; + EB8B47DA7B42073621D06102F00292AB /* FBLPromise+Timeout.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B6D52104C8C8971AD52BC7B175B1F5F /* FBLPromise+Timeout.m */; }; + EBF4519FBC30DDD26C0FAC888A169FCB /* sync_file.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 646EDA5D1B0389E4B968DF5E2CB461D7 /* sync_file.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + EC54AC9692C0BCC18326B0FA0FC15638 /* RLMRealmConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 09286A1C246966D08249E164E0089729 /* RLMRealmConfiguration.h */; }; + EC7222CB5D2208398F18AAE16373D49A /* Array+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BED8CD028BF0BC150E6EC6C757B8ECB /* Array+Foundation.swift */; }; + ECAAB4CE5E7E97B8ECFA6FA8F37D6687 /* GDTCORLifecycle.m in Sources */ = {isa = PBXBuildFile; fileRef = 175D841F6C2A409853B98E88723029A5 /* GDTCORLifecycle.m */; }; + ECEDC158B80A95CCB66AFF9E080B5618 /* RLMObjectBase_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 034E8659175E77FD8858B78104CBDDD2 /* RLMObjectBase_Private.h */; }; + ED915EA4C9B934A4D749E2331D417B03 /* GULKeychainStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = F87D3C31506443C1F43904C532941C90 /* GULKeychainStorage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EDE610BB92F0D97B56F0DB9AF430159E /* Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71E09580BB6015B43244BE82E6F0D3EE /* Optional.swift */; }; + EE13A2A7B16AE51CF70EB499F06170B2 /* FIRHeartbeatInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 56CACBBF9EB3EEBF42A892D32515ABC9 /* FIRHeartbeatInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EE783D3B9E15DFFD23C61D2C552B49EA /* ActionSheetLocalePicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BE55C4B55F2D2ADDE4DA989E9402F66 /* ActionSheetLocalePicker.m */; }; + EEC150B66BCCD6C80FDA7E4D1975166B /* DispatchQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 783FC92A0BC431551685935131EE1C34 /* DispatchQueue+Alamofire.swift */; }; + EEC7477ABC2DC5D98E61613141784919 /* ActionSheetMultipleStringPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 00EB32FE19B31E7E4447F0DC63F002F2 /* ActionSheetMultipleStringPicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EF1DE0CA52B7C08866DC2A5805B3D260 /* FIRMessagingConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 63726E3EB65FAC84139E80F6F8C8BA11 /* FIRMessagingConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EF2CD3F572064582E2BDEECDC0AA8D49 /* FirebaseCoreInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = FA5F1C0536B9B401241D07209538E945 /* FirebaseCoreInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EFF369F03E1F419C335BFD65B2945857 /* FirebaseCoreDiagnostics-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 913F780036799F671CCFDEBD0667A97F /* FirebaseCoreDiagnostics-dummy.m */; }; + F077E74D9855D0D7FCF570F8E8ED4A1E /* SDFileAttributeHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 22C045FA2E45CFF26482BA33B2CAC9B3 /* SDFileAttributeHelper.h */; settings = {ATTRIBUTES = (Private, ); }; }; + F0E28CEF30861F3589A4A662CEA76D80 /* SDImageGraphics.m in Sources */ = {isa = PBXBuildFile; fileRef = 8673FA0542D5C499BED6689327506E41 /* SDImageGraphics.m */; }; + F0E3DB07AD35A6E33D04DB14704F1268 /* FIRVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C84B9FBADEAED841694D655A99B8923 /* FIRVersion.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F161112B04B9AC7D276D9F588BA6E313 /* SDDeviceHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C8F3F013C33334D4532CEB1EC0214A8 /* SDDeviceHelper.h */; settings = {ATTRIBUTES = (Private, ); }; }; + F17A4CA4664CABB331D39FE902E06843 /* Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9D9AF5E0EF9FFF8CA211030D4A5AA9A /* Alamofire.swift */; }; + F231B30175CBBF5D0AB7318FFFF280E6 /* GULNetworkConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B42558C32A1FD2F89049E3384432943 /* GULNetworkConstants.m */; }; + F2B1C1D70C629AE19C0D5121B1BBA891 /* IQKeyboardManager+Position.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDB0DA85ABB129CF78ECEBA518892920 /* IQKeyboardManager+Position.swift */; }; + F3339CACE6609C80B8B12FC20503992D /* FIRMessagingTokenStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CE3710E033FFF34407C6530C1A0B0F9 /* FIRMessagingTokenStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F39C188DB7358A76600C6F1DAE4F91CC /* GDTCORAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = EBD1B54F860E526FDEF048BBEE5E4505 /* GDTCORAssert.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F3D45D57D86B45F6EF57022B4F1D85B3 /* GDTCORStorageEventSelector.m in Sources */ = {isa = PBXBuildFile; fileRef = 2310543941A54A3646D841D1F49AB2BD /* GDTCORStorageEventSelector.m */; }; + F463DEB020D5C466D4613947AE4BE16F /* SDAnimatedImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = D39450137F8784D0DB4BC80C50DF27CA /* SDAnimatedImageView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F4811CFAC05932CE436CC2C32BAD91E6 /* UIColor+SDHexString.h in Headers */ = {isa = PBXBuildFile; fileRef = 28863E45B912A9BC94254CE63EB18D85 /* UIColor+SDHexString.h */; settings = {ATTRIBUTES = (Private, ); }; }; + F497CD01EF6568475FD363A248D78A4B /* UIImage+ForceDecode.m in Sources */ = {isa = PBXBuildFile; fileRef = E16645BBC6EB041B291C580CC97E79ED /* UIImage+ForceDecode.m */; }; + F49EA2F3BC378AF7500E84C124C657AD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3263CAA0BC54D21B0E4A6596E847B597 /* Foundation.framework */; }; + F4D2ADA7E1DAB3AB844FCF231E0D72E5 /* ActionSheetMultipleStringPicker.m in Sources */ = {isa = PBXBuildFile; fileRef = DEDBB15D64C22759CCD7CB5E6DDCB684 /* ActionSheetMultipleStringPicker.m */; }; + F4D542A60E3616C84BA38E821A644A2C /* GDTCORRegistrar.m in Sources */ = {isa = PBXBuildFile; fileRef = BBC9DFBCF8FCF44430F1F97EB402FB05 /* GDTCORRegistrar.m */; }; + F4DF5059CA5D71EA3B87BE05CB7D76ED /* FIRInstallationsIIDTokenStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 885B5658215645D47FAECA22A261F827 /* FIRInstallationsIIDTokenStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F54936D6E4E4D8360799608587FBE650 /* CMAC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ECE80114DB78DBA42FDE6C4D000CED1 /* CMAC.swift */; }; + F600E0602DA2C6BDEB7B139295F44CAD /* RLMAccessor.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 532A13E80977AC6F241DE314550DC0CA /* RLMAccessor.h */; }; + F70D3ADD697E1D8C8E6E514ED8A7C4A3 /* FIRCoreDiagnosticsInterop.h in Headers */ = {isa = PBXBuildFile; fileRef = AF1C0CDA75E84F42CF89784B4185A3F3 /* FIRCoreDiagnosticsInterop.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F7289F163C285103D6CCAB39447153CA /* SDWebImageDownloaderConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 588DA198B9FE9D130E7095049CE9DCFE /* SDWebImageDownloaderConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F7462C6596BBFFFF4EFB9DC8BA39B18F /* Padding.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5489946F1EB3811DB451699DBCF3C2D /* Padding.swift */; }; + F7B5F76F363F06CC58B18C19A4132205 /* CTR.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CEFB8688EFB229C202CBD8E83BA0BC6 /* CTR.swift */; }; + F7E57DD98E63C5DEE7CB3DF9C628E2E4 /* cct.nanopb.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A385DA5505B3D33CCDE3B8AD93AB7B5 /* cct.nanopb.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F80A57B529CF5B35E68F18A629FE0AF5 /* FIRInstallationsStore.h in Headers */ = {isa = PBXBuildFile; fileRef = F0E9969E0A710B2EA86FE461BC91E41B /* FIRInstallationsStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F816E33023F03ADACE585B75DA769F8C /* GDTCORTransport.h in Headers */ = {isa = PBXBuildFile; fileRef = 2046ECE5BE6FA08DD97CEBC197948AA4 /* GDTCORTransport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F848F14CD5FC2D6C666615E058FB84AD /* FIRMessagingTokenInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 7996877D7C985123D64F885666119A76 /* FIRMessagingTokenInfo.m */; }; + F886C4D4982ACF821498785A2DB8F1F2 /* FBLPromise+Await.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 68E388DAEC380C6B69A42306861C03A8 /* FBLPromise+Await.h */; }; + F8882C34E671D16CE5A676C3C1BC68C1 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F9EEAD2CCB06E3D9F37D73E7DCA7FA4 /* Security.framework */; }; + F906C6087BF26D779C36F16A2DC69526 /* RLMSyncUser.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B62C630E6350F365DAB53F4E4128891 /* RLMSyncUser.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + F9623E97C4C18200F4567AE2CBA4D510 /* FBLPromise+Recover.m in Sources */ = {isa = PBXBuildFile; fileRef = 8124EE4EEB34148FB0A5D598BCEA43D6 /* FBLPromise+Recover.m */; }; + F99989CA9C466470569D5A7F04A0FB82 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3263CAA0BC54D21B0E4A6596E847B597 /* Foundation.framework */; }; + FA0502B3678EC835EAEAB000529D762E /* Scrypt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87DC2214947702356F70EB5FA95ED714 /* Scrypt.swift */; }; + FA56CC7A3C1BD5D5E8453FFAF4E033BD /* RLMUpdateChecker.mm in Sources */ = {isa = PBXBuildFile; fileRef = FB3E0B2437EE2718D03A09946A639F24 /* RLMUpdateChecker.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + FAB3DF6A6CE7D8DDBA1056C02E7E304D /* GDTCORTransformer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 714F94EB2642B5ED903E63F27E37BA7D /* GDTCORTransformer_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FAF1D2E2C00824EA57393D93AB58CEBB /* FIROptionsInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 04C3178B389F61C6A8327FAFAF0A4D7B /* FIROptionsInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FAF2E02CDCD35F70362DF58ECFF3CE8C /* FBLPromise+Do.h in Headers */ = {isa = PBXBuildFile; fileRef = 50EAE3FD2BD1CB163C45B1B82C934B30 /* FBLPromise+Do.h */; }; + FAF9F208C87105DBB01C49B39CA7F6E5 /* UInt8+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D9645E9A4A1AA59D9DB66BD2872ACD7 /* UInt8+Extension.swift */; }; + FB359FC2B8375E01A8A8F84D3C50EE82 /* SDWebImageDownloaderResponseModifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B31EB2C667E0759CAA8D7B5F3EE0F94 /* SDWebImageDownloaderResponseModifier.m */; }; + FB576D4ECFCAE769D88BDB2CA9FADE85 /* realm_coordinator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0BB962BA20D0D1B8D652060CB58DD072 /* realm_coordinator.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + FBCD6D8D56A2086EF53DA7228F7382A6 /* CBCMAC.swift in Sources */ = {isa = PBXBuildFile; fileRef = D33B844CD5264CC7D80AD15B940F6362 /* CBCMAC.swift */; }; + FC9C1438D53E537E74B47D877EF22651 /* FIRConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 27DEA7D794F00A123D85FE61B4C7F6B0 /* FIRConfiguration.m */; }; + FD758D92860155C866FE905EE568E664 /* GULKeychainStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = E231A7D05DD155CA705DAD98DF2A1D80 /* GULKeychainStorage.m */; }; + FD805AC3316F8953F09EEA0CB2310674 /* RLMResults.h in Headers */ = {isa = PBXBuildFile; fileRef = 73605EA91DA311A4558468B17EF9A149 /* RLMResults.h */; }; + FD886A8B4E419DF83480C78DB0133DCE /* object_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B5D1C66CA1FB494054F9FEC030CDFF04 /* object_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"5.3.5\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + FDD207124D7A22912DFD9D876922B06D /* FIRLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 09B0014F0D58BBA420CE6E37538B4761 /* FIRLogger.h */; settings = {ATTRIBUTES = (Private, ); }; }; + FE0189D2FE038AD82C4CCF5A801A50A3 /* SDDiskCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B2F13C0805300E59B783FB5E222CBC2 /* SDDiskCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FE05A1BF611E69C94BC7A9EADBE10B2F /* SDWebImageDownloaderConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A6675DD47C74F5E1D12FB7A074C98D3 /* SDWebImageDownloaderConfig.m */; }; + FE1514CE016F6C24791F3A387A7615E9 /* Property.swift in Sources */ = {isa = PBXBuildFile; fileRef = 183916BA5832B1125690D63520919F70 /* Property.swift */; }; + FE4845B6FDD260059CDF9E26965CA31B /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 2103B96B229AC47E2173FD6D91A2FF8E /* SDWebImageManager.m */; }; + FED292AF8AD5924263FC0A8D0B8AF26D /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CD7D7CB2F223CDAF8EC4B7F88CB9EBD /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FEDF459AADCFB85294A55B24AD5803FE /* FIRCoreDiagnosticsData.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A92973F8132BBD460A9D3152327C5EB /* FIRCoreDiagnosticsData.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FF66D2DA2D9726DCE5903B5C800A7171 /* FBLPromise+Race.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 36F163FEF5F10CDBABF75F0E402F4184 /* FBLPromise+Race.h */; }; + FF66F3E7374A9398D5B08AA23273BC0E /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = 68C0ED1768A304DFA76334D03F6C4D83 /* NSData+ImageContentType.m */; }; + FFAD094602317ED745B1D7DDA89F8EA5 /* RLMMigration.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 45C43C2847EAAB5879230B469A3C0E62 /* RLMMigration.h */; }; + FFADA5B803954CCACF133530BC399714 /* FIRMessagingCheckinStore.m in Sources */ = {isa = PBXBuildFile; fileRef = A676E3CB72E97B8DF24E02804DD36ACA /* FIRMessagingCheckinStore.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 0320955E2B0A683CEA9A4EB704D98E5E /* PBXContainerItemProxy */ = { + 01A5C4CF52B63CE1A513502B83B268CD /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 620E05868772C10B4920DC7E324F2C87; - remoteInfo = FirebaseCoreDiagnostics; + remoteGlobalIDString = 8D7F5D5DD528D21A72DC87ADA5B12E2D; + remoteInfo = GoogleUtilities; }; - 06ECC0ACAF88A649395C4FE02B3A74EA /* PBXContainerItemProxy */ = { + 0244D7861D24555B16B7FBCE0FF353AB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 3847153A6E5EEFB86565BA840768F429; - remoteInfo = SDWebImage; + remoteGlobalIDString = 2BBF7206D7FAC92C82A042A99C4A98F8; + remoteInfo = PromisesObjC; }; - 0DAF3617F8B25359D0124A64D7D75786 /* PBXContainerItemProxy */ = { + 061466C6BC532A33F9CF25E2F9CB2D63 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 2BBF7206D7FAC92C82A042A99C4A98F8; - remoteInfo = PromisesObjC; + remoteGlobalIDString = 0B00B2C167CD783351BD1D00BD5AD1F8; + remoteInfo = ReachabilitySwift; }; - 0E4871E60BECA1888EB7041BE93B6CA9 /* PBXContainerItemProxy */ = { + 0DFAE9B05468C7CDE0F25E2B5B258BFB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 8D7F5D5DD528D21A72DC87ADA5B12E2D; - remoteInfo = GoogleUtilities; + remoteGlobalIDString = C49E7A4D59E5C8BE8DE9FB1EFB150185; + remoteInfo = FirebaseAnalytics; }; - 13EF5C41089A3D67B27B0129526B98AB /* PBXContainerItemProxy */ = { + 180A1E63EDEB9A91DB82FE941E7FB782 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = A4ED113D38492F631BC6DBF8BB3D1D8E; - remoteInfo = URITemplate; + remoteGlobalIDString = 4402AFF83DBDC4DD07E198685FDC2DF2; + remoteInfo = FirebaseCore; }; - 20616180CC19067C2E4B6BEAF6F0B3CF /* PBXContainerItemProxy */ = { + 2320E552CB6F04112A2CDF4D15302EFF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 2BBF7206D7FAC92C82A042A99C4A98F8; - remoteInfo = PromisesObjC; + remoteGlobalIDString = 87803597EB3F20FC46472B85392EC4FD; + remoteInfo = FirebaseInstallations; }; - 209939D70BA52B4721E1F7FE7CACEC9A /* PBXContainerItemProxy */ = { + 2E713798652C92973A450388BB2F5FC4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 7996D4D780FF8A38ECB1C58253B87C8F; - remoteInfo = Mockingjay; + remoteGlobalIDString = D2B5E7DCCBBFB32341D857D01211A1A3; + remoteInfo = nanopb; }; - 21FF6246DAFD6CA8CCE4A90625358700 /* PBXContainerItemProxy */ = { + 2F0B896B73629E4D1C5D3B0DE15CC95A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 8D7F5D5DD528D21A72DC87ADA5B12E2D; - remoteInfo = GoogleUtilities; + remoteGlobalIDString = 5C0371EE948D0357B8EE0E34ABB44BF0; + remoteInfo = GoogleDataTransport; }; - 2D6015793E1863EB1A50E1257C3DF2F2 /* PBXContainerItemProxy */ = { + 32757078825CCEFB47313D849F93EF75 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = D2B5E7DCCBBFB32341D857D01211A1A3; remoteInfo = nanopb; }; - 2DE8BD3FA1613A590C3C8D0AD489A17F /* PBXContainerItemProxy */ = { + 348D7874A206E2FB689EF7559AA24690 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 2BBF7206D7FAC92C82A042A99C4A98F8; + remoteInfo = PromisesObjC; + }; + 3950B0A7D32ECB2409A9A54B3CD97318 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 87803597EB3F20FC46472B85392EC4FD; remoteInfo = FirebaseInstallations; }; - 2DFE0F306BC9FB8346ABDD5CD3E20ED9 /* PBXContainerItemProxy */ = { + 3B8D14889326966E56EBFAEB9877EDC3 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5C0371EE948D0357B8EE0E34ABB44BF0; + remoteInfo = GoogleDataTransport; + }; + 41D4D51F6FF8E5775FCE3EFD49EA2731 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 4402AFF83DBDC4DD07E198685FDC2DF2; remoteInfo = FirebaseCore; }; - 3D70B6D90C913BC15DBB0379AE20CA00 /* PBXContainerItemProxy */ = { + 43EDB6AE0F818ABFED1FC63BBC6E3490 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 072CEA044D2EF26F03496D5996BBF59F; - remoteInfo = Firebase; + remoteGlobalIDString = 7996D4D780FF8A38ECB1C58253B87C8F; + remoteInfo = Mockingjay; }; - 3DDF95439C6E2E0B1F3F29F81F4E9A7E /* PBXContainerItemProxy */ = { + 47795C561F396B2451BD5C0960F690AA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 4402AFF83DBDC4DD07E198685FDC2DF2; - remoteInfo = FirebaseCore; + remoteGlobalIDString = B53D977A951AFC38B21751B706C1DF83; + remoteInfo = GoogleAppMeasurement; }; - 43326D2BBA170DA9306D831AC42123BB /* PBXContainerItemProxy */ = { + 4961602A8A656369A824F337E2370F4F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 2BBF7206D7FAC92C82A042A99C4A98F8; remoteInfo = PromisesObjC; }; - 4E0662977C51BFDAAEF81D04F12ABC97 /* PBXContainerItemProxy */ = { + 5610FE4D923DB47F975CEAB2D4D85792 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 68494F30B4A13F8E5E88BCCAEC25B0A4; - remoteInfo = Realm; + remoteGlobalIDString = 7B571FD072D3CCB32EC015AE483FCCD0; + remoteInfo = SlideMenuControllerSwift; }; - 58F8673B3C52F2D196073B6CEBBEB7B9 /* PBXContainerItemProxy */ = { + 5744E1EEF32028593F87462B65B8C0F8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = EAAA1AD3A8A1B59AB91319EE40752C6D; - remoteInfo = Alamofire; + remoteGlobalIDString = 8D7F5D5DD528D21A72DC87ADA5B12E2D; + remoteInfo = GoogleUtilities; + }; + 5FCB9BDFCE295FDD6456738CA1FEF668 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 87803597EB3F20FC46472B85392EC4FD; + remoteInfo = FirebaseInstallations; + }; + 6C8307A1053512A33FC1A60D9EE423C5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5C0371EE948D0357B8EE0E34ABB44BF0; + remoteInfo = GoogleDataTransport; }; - 5D4273679FA192BFF3CEEFDD7C84C8A5 /* PBXContainerItemProxy */ = { + 7DB8FE00AB83E73D60E45721F70A650C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 5895B432FE4D2F6826C8FF25A09DB6D2; remoteInfo = FirebaseMessaging; }; - 655D65EC1099C52AD1B1FCD072EA8D76 /* PBXContainerItemProxy */ = { + 7F672B906C5986D67201064EB369AAE3 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 620E05868772C10B4920DC7E324F2C87; remoteInfo = FirebaseCoreDiagnostics; }; - 8C4A251D8B539E1E4BE2849E4FC4352B /* PBXContainerItemProxy */ = { + 80BE60E458C0E79F94FADFC034899675 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 2BBF7206D7FAC92C82A042A99C4A98F8; - remoteInfo = PromisesObjC; + remoteGlobalIDString = A43B25DDF20FCB9228471F8F5135C866; + remoteInfo = "ActionSheetPicker-3.0"; }; - 8D23B2B26068422FC23863BBB2DF11D4 /* PBXContainerItemProxy */ = { + 84595D475E01317D9FEA5861522B3E5B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 8D7F5D5DD528D21A72DC87ADA5B12E2D; - remoteInfo = GoogleUtilities; + remoteGlobalIDString = 620E05868772C10B4920DC7E324F2C87; + remoteInfo = FirebaseCoreDiagnostics; }; - 9A9AABB3A38F0742EF66BDE9221F695B /* PBXContainerItemProxy */ = { + 856D72581F56F2E2AEF176E7F3384B32 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 99313990C1D76A6D1D017868B6975CC8; - remoteInfo = CryptoSwift; + remoteGlobalIDString = D2B5E7DCCBBFB32341D857D01211A1A3; + remoteInfo = nanopb; }; - 9AB6795BAEC16345281107615A3DA4B0 /* PBXContainerItemProxy */ = { + 85FDAD3EB7A61FA0FA625FFAA48F03E7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = A43B25DDF20FCB9228471F8F5135C866; - remoteInfo = "ActionSheetPicker-3.0"; + remoteGlobalIDString = 072CEA044D2EF26F03496D5996BBF59F; + remoteInfo = Firebase; }; - 9BEFA75BE713AF61164098FB8DB5E99D /* PBXContainerItemProxy */ = { + 8750DE31697DDA8860DD9AACA46E14FC /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 5895B432FE4D2F6826C8FF25A09DB6D2; - remoteInfo = FirebaseMessaging; + remoteGlobalIDString = 4402AFF83DBDC4DD07E198685FDC2DF2; + remoteInfo = FirebaseCore; }; - A62447E80DFF1F527F53B89AC4C18CC5 /* PBXContainerItemProxy */ = { + 87779FF6323E326B8E4819696484C2F9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 87803597EB3F20FC46472B85392EC4FD; - remoteInfo = FirebaseInstallations; + remoteGlobalIDString = 68494F30B4A13F8E5E88BCCAEC25B0A4; + remoteInfo = Realm; }; - AA7F7A4B0EF5C9FC5031854CB2E456AA /* PBXContainerItemProxy */ = { + 8809AC3110AD632784E38ED66A2CC854 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 7B571FD072D3CCB32EC015AE483FCCD0; - remoteInfo = SlideMenuControllerSwift; + remoteGlobalIDString = 2BBF7206D7FAC92C82A042A99C4A98F8; + remoteInfo = PromisesObjC; + }; + 8B571D6090534F5E323E78315364C7E0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 99313990C1D76A6D1D017868B6975CC8; + remoteInfo = CryptoSwift; }; - AED1AD89B25F32303AFDA1B71FEFD55B /* PBXContainerItemProxy */ = { + 91A64C67DC76B5FAED1AFFD76E964A12 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 4402AFF83DBDC4DD07E198685FDC2DF2; remoteInfo = FirebaseCore; }; - BCDA79557FAF82055338D44929529BFC /* PBXContainerItemProxy */ = { + 92E061529C5EA963780E29DB9196AEB0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = B990BD87169C76A3ED3FE8A9258D91A3; - remoteInfo = "Toast-Swift"; + remoteGlobalIDString = 8D7F5D5DD528D21A72DC87ADA5B12E2D; + remoteInfo = GoogleUtilities; }; - C00F853387C42FEDD7AA1E421A84AA0C /* PBXContainerItemProxy */ = { + 9B43A8924F36DC074E1E15A77E134699 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = A4ED113D38492F631BC6DBF8BB3D1D8E; - remoteInfo = URITemplate; + remoteGlobalIDString = 5895B432FE4D2F6826C8FF25A09DB6D2; + remoteInfo = FirebaseMessaging; }; - C5C0C8C5DF8CDDE3B212D7CE52CD9E5E /* PBXContainerItemProxy */ = { + B261CDC66C3B8D722E21B8C72881B59D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 8D7F5D5DD528D21A72DC87ADA5B12E2D; remoteInfo = GoogleUtilities; }; - C716D0242673174F5FE410F2D61D68B4 /* PBXContainerItemProxy */ = { + B447E269ED1F39F4878EBB3A3738DEF2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 0B00B2C167CD783351BD1D00BD5AD1F8; - remoteInfo = ReachabilitySwift; + remoteGlobalIDString = D2B5E7DCCBBFB32341D857D01211A1A3; + remoteInfo = nanopb; + }; + B6C7D541D5F774A4637592C112BF53A2 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = A4ED113D38492F631BC6DBF8BB3D1D8E; + remoteInfo = URITemplate; + }; + BD6402864DE12C54179995F6B4C7CC6B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 782725687624F8665247B84AB581BEB1; + remoteInfo = RealmSwift; + }; + CF8FEA2A29765A7C3E74056A41CEE091 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B53D977A951AFC38B21751B706C1DF83; + remoteInfo = GoogleAppMeasurement; + }; + D4AD0B758AC1828697116A8F43C06700 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8D7F5D5DD528D21A72DC87ADA5B12E2D; + remoteInfo = GoogleUtilities; }; - C77DD009F064755B7992133A26100FD5 /* PBXContainerItemProxy */ = { + D8AB50F7967F1266BACF4E92E2E9E1A5 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 8D7F5D5DD528D21A72DC87ADA5B12E2D; remoteInfo = GoogleUtilities; }; - D4FA8BB3AC4BB3D716ADE751E109F49A /* PBXContainerItemProxy */ = { + D9C802A4D1CBACFAD08DC471A3A5C957 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 68494F30B4A13F8E5E88BCCAEC25B0A4; remoteInfo = Realm; }; - DEC1A8622ADFEA1EDBC7C1282761ECF9 /* PBXContainerItemProxy */ = { + DA81DF945F90A6F78356C9C23625A1B5 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 782725687624F8665247B84AB581BEB1; - remoteInfo = RealmSwift; + remoteGlobalIDString = C49E7A4D59E5C8BE8DE9FB1EFB150185; + remoteInfo = FirebaseAnalytics; + }; + DEE367F051073E0EBBE3812ACA28E244 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4402AFF83DBDC4DD07E198685FDC2DF2; + remoteInfo = FirebaseCore; + }; + E19752924881B543BA9EE53352A52577 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8D7F5D5DD528D21A72DC87ADA5B12E2D; + remoteInfo = GoogleUtilities; + }; + E5D5187B2295EC51F4BF2685FD7A14FC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8D7F5D5DD528D21A72DC87ADA5B12E2D; + remoteInfo = GoogleUtilities; }; - DF1403CBCA73B1CEBF070BB9ABA84782 /* PBXContainerItemProxy */ = { + E822DACEA03B99ABD37C1595630C957D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = D2B5E7DCCBBFB32341D857D01211A1A3; remoteInfo = nanopb; }; - E07B7C5191EBF069A5A4FC47AF1C341E /* PBXContainerItemProxy */ = { + E9313555225AEBCF87520E4F27155E1F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 4402AFF83DBDC4DD07E198685FDC2DF2; - remoteInfo = FirebaseCore; + remoteGlobalIDString = B490E7485944099E16C9CBD79119D1D4; + remoteInfo = IQKeyboardManagerSwift; }; - E6BBF06547C1DB7C6F044065E7553129 /* PBXContainerItemProxy */ = { + EBA4A0479A6FBF67D4CBFCCDD5717C29 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = D2B5E7DCCBBFB32341D857D01211A1A3; remoteInfo = nanopb; }; - EC4AEBF0B8302DE5743CB3EA26B0786E /* PBXContainerItemProxy */ = { + EC6016E1E1566B0CBA264DCC95BF085F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 8D7F5D5DD528D21A72DC87ADA5B12E2D; - remoteInfo = GoogleUtilities; + remoteGlobalIDString = B990BD87169C76A3ED3FE8A9258D91A3; + remoteInfo = "Toast-Swift"; }; - F38160631848839721434794C35747B7 /* PBXContainerItemProxy */ = { + ECF3CEE9FC30808B6B9D50A99A313336 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 5C0371EE948D0357B8EE0E34ABB44BF0; - remoteInfo = GoogleDataTransport; + remoteGlobalIDString = 3847153A6E5EEFB86565BA840768F429; + remoteInfo = SDWebImage; }; - F4AF672BE4E27730736DE632FAF1D491 /* PBXContainerItemProxy */ = { + F3E31AE1A48269D2BA22F8F7282FF6CB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 5C0371EE948D0357B8EE0E34ABB44BF0; - remoteInfo = GoogleDataTransport; + remoteGlobalIDString = EAAA1AD3A8A1B59AB91319EE40752C6D; + remoteInfo = Alamofire; }; - FC8985882936E69A6FDE0BE7A0EAC688 /* PBXContainerItemProxy */ = { + F40E02632BAA6B013BD7FB10E552477E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = B490E7485944099E16C9CBD79119D1D4; - remoteInfo = IQKeyboardManagerSwift; + remoteGlobalIDString = A4ED113D38492F631BC6DBF8BB3D1D8E; + remoteInfo = URITemplate; }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ - 3ED5637A90AE1E7B986421EE0B890A8C /* Copy . Public Headers */ = { + 5A7BE0885DD67A9486E42A8B5FB8795A /* Copy . Private Headers */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; - dstPath = "$(PUBLIC_HEADERS_FOLDER_PATH)/."; + dstPath = "$(PRIVATE_HEADERS_FOLDER_PATH)/."; dstSubfolderSpec = 16; files = ( - ED92EA1BBD1E8F0EB8E2DBEC4AF416C6 /* NSError+RLMSync.h in Copy . Public Headers */, - 2EE52D0804B31CB66E57E5AB89237739 /* Realm.h in Copy . Public Headers */, - 54230048C4FF834F051D2C378BD00465 /* RLMArray.h in Copy . Public Headers */, - 6412FAE8F2D57B0B8E4811DF1F5958AB /* RLMCollection.h in Copy . Public Headers */, - 33293CDA27A208E5050823A6F4A7B454 /* RLMConstants.h in Copy . Public Headers */, - FBBAB81966EE63F5BC980FD1A58EF4FF /* RLMListBase.h in Copy . Public Headers */, - 0A97EBECA9EC19BA150C343AAE92ADE1 /* RLMMigration.h in Copy . Public Headers */, - F3DCB1E7F01ED98F9F2B6BDA4A456B92 /* RLMObject.h in Copy . Public Headers */, - FCDCD7CAB9B9733CE9DA62BAE23BBB81 /* RLMObjectBase.h in Copy . Public Headers */, - 140F868AFA7250D824D7518DF705C0F7 /* RLMObjectBase_Dynamic.h in Copy . Public Headers */, - 86488C7395299D62D524FEED908C8AC8 /* RLMObjectSchema.h in Copy . Public Headers */, - A3793BF8E8C158EE3B6D5EAF8220F49F /* RLMOptionalBase.h in Copy . Public Headers */, - 3AD34B4386EC2485BED8726337AD7FBC /* RLMPlatform.h in Copy . Public Headers */, - DF466DB5280164C8A71DCEBF497739F1 /* RLMProperty.h in Copy . Public Headers */, - EDE0907FA6F81F338BACD6BCDA48E6C5 /* RLMRealm+Sync.h in Copy . Public Headers */, - C08339DB44B4C8BA6831AF1025CB516F /* RLMRealm.h in Copy . Public Headers */, - 66C3024EFEDD40FB4E3A4D4B942EFAFC /* RLMRealm_Dynamic.h in Copy . Public Headers */, - 348BF6CE5B9BA3245F1B440726373506 /* RLMRealmConfiguration+Sync.h in Copy . Public Headers */, - EB7A74BAAEF34C9D56288F3C724F1964 /* RLMRealmConfiguration.h in Copy . Public Headers */, - 4D705B7F335F6401ED416C31BD6E81EA /* RLMResults.h in Copy . Public Headers */, - FE5A6D257F08E9C20139B7F793D24C69 /* RLMSchema.h in Copy . Public Headers */, - AF7F468786F1C39BF5818929BE61385C /* RLMSyncConfiguration.h in Copy . Public Headers */, - 6CD2E690E23D56B5B78365E223255624 /* RLMSyncCredentials.h in Copy . Public Headers */, - 5AA825685E0EA682193195DBB12BFD71 /* RLMSyncManager.h in Copy . Public Headers */, - 164A62C568AF3674CCA397AD243906C6 /* RLMSyncPermission.h in Copy . Public Headers */, - 385A9189A91BF29CDD615D9A8828E591 /* RLMSyncSession.h in Copy . Public Headers */, - 5FA18B31A86F803DEDE30ADC518DF987 /* RLMSyncSubscription.h in Copy . Public Headers */, - A4C8285E5203F6C471882FCAE61948FF /* RLMSyncUser.h in Copy . Public Headers */, - 6E49EF14F30804F8B1DBCB93984B061F /* RLMSyncUtil.h in Copy . Public Headers */, - 644320462DB0C79BBB688EC18AB0834E /* RLMThreadSafeReference.h in Copy . Public Headers */, + 1A76A2F2998719605A162BAC0AC064A4 /* FBLPromisePrivate.h in Copy . Private Headers */, ); - name = "Copy . Public Headers"; + name = "Copy . Private Headers"; runOnlyForDeploymentPostprocessing = 0; }; - 9BF95FC27B4278CCA0D4C90B11CF284B /* Copy . Private Headers */ = { + 6149C8B6C6BCEFD0BA3F100392EDB406 /* Copy . Public Headers */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; - dstPath = "$(PRIVATE_HEADERS_FOLDER_PATH)/."; + dstPath = "$(PUBLIC_HEADERS_FOLDER_PATH)/."; dstSubfolderSpec = 16; files = ( - 5662325CF302E6DBA5F13D89E0985214 /* RLMAccessor.h in Copy . Private Headers */, - 83D237CB9BF0DB8B9B7AE573F65AA52D /* RLMArray_Private.h in Copy . Private Headers */, - 56338AB6C096B0901C323031E0063F8B /* RLMCollection_Private.h in Copy . Private Headers */, - B343599BD16628F4496E2E2F7ABD40A4 /* RLMListBase.h in Copy . Private Headers */, - 1BE75988F4A2AF509C218BD1A68A7254 /* RLMObject_Private.h in Copy . Private Headers */, - 5EA0D68161B8F2390A8C5D39C9EE18BD /* RLMObjectBase_Private.h in Copy . Private Headers */, - 39992A51A1787D23CE8AF2EA4D0A51B7 /* RLMObjectSchema_Private.h in Copy . Private Headers */, - 77E832AD4A71EB485751B36625FCA9EC /* RLMObjectStore.h in Copy . Private Headers */, - CD1D7BEABD3A65D69AC665F84D2C0EE5 /* RLMOptionalBase.h in Copy . Private Headers */, - F72F47B3755CE00EFEFB8568DB01953B /* RLMProperty_Private.h in Copy . Private Headers */, - 526DDA15FFB439B38B653A31F3FAF062 /* RLMRealm_Private.h in Copy . Private Headers */, - 92D47F0311E3B44B46B3AD8D7A5C4B7B /* RLMRealmConfiguration_Private.h in Copy . Private Headers */, - B29CA6E05D3A08BE9CE19200717E635F /* RLMResults_Private.h in Copy . Private Headers */, - D21E35FFC200B76A5078C2A6FDD25834 /* RLMSchema_Private.h in Copy . Private Headers */, - F52E84524CC4E70324993077865130AB /* RLMSyncConfiguration_Private.h in Copy . Private Headers */, - 4C73C0FCAF418A6857A226C9E542600B /* RLMSyncUtil_Private.h in Copy . Private Headers */, + 16CCFF6A9BFAC7CDDE4E6A7FA2463515 /* FBLPromise.h in Copy . Public Headers */, + 522EEA502D440303F3965864EFE88117 /* FBLPromise+All.h in Copy . Public Headers */, + 8278054391F8B350CE9EF1DEDCAE2AB7 /* FBLPromise+Always.h in Copy . Public Headers */, + BB77D1B5BCFFA37BAF01BE4492C6C07F /* FBLPromise+Any.h in Copy . Public Headers */, + 3A03E128E6500F41492132965CE5E11A /* FBLPromise+Async.h in Copy . Public Headers */, + F886C4D4982ACF821498785A2DB8F1F2 /* FBLPromise+Await.h in Copy . Public Headers */, + 9F67D81FA1B761895E9C43154475847F /* FBLPromise+Catch.h in Copy . Public Headers */, + 55C070AD816ECA92658A0AF9024AA764 /* FBLPromise+Delay.h in Copy . Public Headers */, + 49183DA3D9248B07DE19CA294D5C7824 /* FBLPromise+Do.h in Copy . Public Headers */, + FF66D2DA2D9726DCE5903B5C800A7171 /* FBLPromise+Race.h in Copy . Public Headers */, + 1030529ED3EDBDFFD347E68F799E179A /* FBLPromise+Recover.h in Copy . Public Headers */, + 3AD1A8DE05F757C38D78E9AF67EB0887 /* FBLPromise+Reduce.h in Copy . Public Headers */, + 21BB67CBAC7B7033CD84EFE59814A6B3 /* FBLPromise+Retry.h in Copy . Public Headers */, + 26FE7FFC181A4B5270F19771DE8923F9 /* FBLPromise+Testing.h in Copy . Public Headers */, + 19D5EECA37E4C116563B4470C5DBB754 /* FBLPromise+Then.h in Copy . Public Headers */, + 49AF57614D7F6743DC1006C87FFA0212 /* FBLPromise+Timeout.h in Copy . Public Headers */, + 276CC227966843C2742BB4BECEE4CE6D /* FBLPromise+Validate.h in Copy . Public Headers */, + 96CB6A5FFD5ACB5FFB3A99F0BF9871C5 /* FBLPromise+Wrap.h in Copy . Public Headers */, + BFBE488A160D145818FDFABFCCE70045 /* FBLPromiseError.h in Copy . Public Headers */, + 26802F527B0AA12FA4F9BB6EDB7460F7 /* FBLPromises.h in Copy . Public Headers */, ); - name = "Copy . Private Headers"; + name = "Copy . Public Headers"; runOnlyForDeploymentPostprocessing = 0; }; - B5776472897589D50EDA86274F31557B /* Copy . Private Headers */ = { + 8EE93581EC6C395F2FAA8587A9A02DF6 /* Copy . Private Headers */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = "$(PRIVATE_HEADERS_FOLDER_PATH)/."; dstSubfolderSpec = 16; files = ( - 7E2879544827736BE7DD7E3029E19288 /* FBLPromisePrivate.h in Copy . Private Headers */, + F600E0602DA2C6BDEB7B139295F44CAD /* RLMAccessor.h in Copy . Private Headers */, + 8205CC15C5F8857E097431E553FF177E /* RLMArray_Private.h in Copy . Private Headers */, + 1F6BC4C496EC88B19D3D8C46147045DE /* RLMCollection_Private.h in Copy . Private Headers */, + E070FEE7C84CF3B6B321E6FA0F4168BD /* RLMListBase.h in Copy . Private Headers */, + 23F2594C8B2A5AF793655618C7B7F985 /* RLMObject_Private.h in Copy . Private Headers */, + ECEDC158B80A95CCB66AFF9E080B5618 /* RLMObjectBase_Private.h in Copy . Private Headers */, + B1B2F57C198744D7DACD89FD2E7ACA97 /* RLMObjectSchema_Private.h in Copy . Private Headers */, + B461E11B99D6825575D7D5929F697838 /* RLMObjectStore.h in Copy . Private Headers */, + BCEFED88755D8A913C798305C91904D1 /* RLMOptionalBase.h in Copy . Private Headers */, + C02F374C2A8958DFD2D8DE71AFB3D2AD /* RLMProperty_Private.h in Copy . Private Headers */, + 04781A4F03AC18B7754685B3F1095341 /* RLMRealm_Private.h in Copy . Private Headers */, + C039F694EC1507A208A150C59D8D1A02 /* RLMRealmConfiguration_Private.h in Copy . Private Headers */, + 80611FBCA5BF80AB784BC760B6F2A061 /* RLMResults_Private.h in Copy . Private Headers */, + 4B351391A67289500CCE3095528A30EC /* RLMSchema_Private.h in Copy . Private Headers */, + AAF258DE113D6F686617C4823B5E96E0 /* RLMSyncConfiguration_Private.h in Copy . Private Headers */, + CD14842CBC0C83FBCD474F3778A3FF24 /* RLMSyncUtil_Private.h in Copy . Private Headers */, ); name = "Copy . Private Headers"; runOnlyForDeploymentPostprocessing = 0; }; - CC23D841BF35FA9B1DD08A96C811F229 /* Copy . Public Headers */ = { + E50269A2EEF9C03FB419614905D4FC24 /* Copy . Public Headers */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = "$(PUBLIC_HEADERS_FOLDER_PATH)/."; dstSubfolderSpec = 16; files = ( - ADA69A6A8E7776C0DED6858309561E16 /* FBLPromise+All.h in Copy . Public Headers */, - D91C6F1B091A81D5910ABAFEAA892E60 /* FBLPromise+Always.h in Copy . Public Headers */, - C175D4AF9FDD1EAD5793CA2AEF5D7BA3 /* FBLPromise+Any.h in Copy . Public Headers */, - FC0C43680427806DB063A89FF2F48587 /* FBLPromise+Async.h in Copy . Public Headers */, - 1780733974379544222E324AE6C5E52B /* FBLPromise+Await.h in Copy . Public Headers */, - C9563AD909C90C311FEBB6F1B9ED3A0D /* FBLPromise+Catch.h in Copy . Public Headers */, - 8F7479F70C3CF40F3A02EF6650171BC2 /* FBLPromise+Delay.h in Copy . Public Headers */, - 35987C58F285217E7A5AE19AD6AEBD7B /* FBLPromise+Do.h in Copy . Public Headers */, - 328A018EF12E784BCD19185D6317F9B1 /* FBLPromise+Race.h in Copy . Public Headers */, - 69E93249D2B7F0D3DAD389C45ECED024 /* FBLPromise+Recover.h in Copy . Public Headers */, - 921430F4175FC55FE988CDEFC88DA88C /* FBLPromise+Reduce.h in Copy . Public Headers */, - 1418333507D6C169269E41FC941A0A89 /* FBLPromise+Retry.h in Copy . Public Headers */, - BA530F0C097D606E5159955512062F0B /* FBLPromise+Testing.h in Copy . Public Headers */, - C84517532E67DDDC8A5CBB8489F15EC8 /* FBLPromise+Then.h in Copy . Public Headers */, - DF4B65322F06C08D16BB0A774DB901EB /* FBLPromise+Timeout.h in Copy . Public Headers */, - 7ABF7B40B3D56DF5AE62FEFEBAA0CAAF /* FBLPromise+Validate.h in Copy . Public Headers */, - 59248A6C40C29D9A950F33DBF71C1903 /* FBLPromise+Wrap.h in Copy . Public Headers */, - 5E4A07CB9EF37D7D4638A6857BD7B0D9 /* FBLPromise.h in Copy . Public Headers */, - D312CE482F7AD12D95BFC5E94DDA53D6 /* FBLPromiseError.h in Copy . Public Headers */, - 706DF58ED22032AF84DA8AA2BD34A0FA /* FBLPromises.h in Copy . Public Headers */, + 786C82403C9A90AD1743AE51DD68DA2F /* NSError+RLMSync.h in Copy . Public Headers */, + 1F77D168B69FEA1F9E60CB2AE6B16F7B /* Realm.h in Copy . Public Headers */, + CC1CD01C18938425E8B5723D1683B377 /* RLMArray.h in Copy . Public Headers */, + DCA6472EB6CA0FDD43C6F5DDBCEA419A /* RLMCollection.h in Copy . Public Headers */, + 39A97C81141042C0051269857044D285 /* RLMConstants.h in Copy . Public Headers */, + 69504476CD5EC345627198FBF32DD88F /* RLMListBase.h in Copy . Public Headers */, + FFAD094602317ED745B1D7DDA89F8EA5 /* RLMMigration.h in Copy . Public Headers */, + 9C1F8F18F25D8A637B5E3C70B928899C /* RLMObject.h in Copy . Public Headers */, + 21024210611944A5526024611AE6D305 /* RLMObjectBase.h in Copy . Public Headers */, + E1A93DFBCF431BCE980742525FF79661 /* RLMObjectBase_Dynamic.h in Copy . Public Headers */, + 7B37AC1CD558C3E2B4837514882308B7 /* RLMObjectSchema.h in Copy . Public Headers */, + 8566882ADFEF2D272B1F7708313717DF /* RLMOptionalBase.h in Copy . Public Headers */, + 6099BB3284030D931E1B2A6AF1FD8589 /* RLMPlatform.h in Copy . Public Headers */, + 170789FA2CF4B22FD3B014A06A181983 /* RLMProperty.h in Copy . Public Headers */, + 3E11E701FBE0271ABFA5E290595A03A8 /* RLMRealm.h in Copy . Public Headers */, + 12C96BC78642460573A68F5985031D24 /* RLMRealm+Sync.h in Copy . Public Headers */, + 84CF1EF84AAF0299AA9C942B078BD1FF /* RLMRealm_Dynamic.h in Copy . Public Headers */, + D79888E100ACB88EC3B4EAAA4BB8FE9C /* RLMRealmConfiguration.h in Copy . Public Headers */, + D32830409AFDFAF84EDBA378965F72EE /* RLMRealmConfiguration+Sync.h in Copy . Public Headers */, + 541A7BB28AFAE0B25113844FCC938679 /* RLMResults.h in Copy . Public Headers */, + AAF9D011EB89B5894C280DE0A22480F1 /* RLMSchema.h in Copy . Public Headers */, + 518AC1F883F916217AAD67980057E512 /* RLMSyncConfiguration.h in Copy . Public Headers */, + 8BCC7C37E47F548B71932628D5943CA0 /* RLMSyncCredentials.h in Copy . Public Headers */, + 7316B1250EB6CC0B060CDD8C6039B409 /* RLMSyncManager.h in Copy . Public Headers */, + BEE2B631709CD0DA59CC9D72EF8BFE0E /* RLMSyncPermission.h in Copy . Public Headers */, + CC82698F242FDB9855351B212411A63E /* RLMSyncSession.h in Copy . Public Headers */, + 71B830963046ED71045ACEAB0938937E /* RLMSyncSubscription.h in Copy . Public Headers */, + 3F173B5C7863A05E06C08380C17E4C48 /* RLMSyncUser.h in Copy . Public Headers */, + DD612C1C856AAD4B4FC1503B3F67B8EA /* RLMSyncUtil.h in Copy . Public Headers */, + 3167565AD7A11B9B78E40490FC5674C8 /* RLMThreadSafeReference.h in Copy . Public Headers */, ); name = "Copy . Public Headers"; runOnlyForDeploymentPostprocessing = 0; @@ -1361,1595 +1470,1528 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 006EE801EF14194FBF196F3C3F777930 /* GULHeartbeatDateStorageUserDefaults.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULHeartbeatDateStorageUserDefaults.h; path = GoogleUtilities/Environment/Public/GoogleUtilities/GULHeartbeatDateStorageUserDefaults.h; sourceTree = ""; }; - 008C9E1E3B9656D135DC7B0E43EE71C2 /* FirebaseInstallations.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseInstallations.debug.xcconfig; sourceTree = ""; }; + 00360F12C385BC79E08324609EA070AA /* GoogleUtilities-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GoogleUtilities-Info.plist"; sourceTree = ""; }; + 005415C2416F043F336BC633C2E71162 /* FIRComponentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRComponentType.m; path = FirebaseCore/Sources/FIRComponentType.m; sourceTree = ""; }; 00BCC2898533EA623D3085B3A1DAC5A8 /* Pods-MyStudiesTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-MyStudiesTests.modulemap"; sourceTree = ""; }; - 00CF16A360EEF1313C99FDF5AA421CBE /* FIRMessagingPendingTopicsList.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingPendingTopicsList.m; path = FirebaseMessaging/Sources/FIRMessagingPendingTopicsList.m; sourceTree = ""; }; - 00F1F168B4E790840B4C3B865A1A7A9F /* FBLPromise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBLPromise.h; path = Sources/FBLPromises/include/FBLPromise.h; sourceTree = ""; }; - 00FCD86B688052CF5033C426C4CB015B /* UIColor+SDHexString.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+SDHexString.m"; path = "SDWebImage/Private/UIColor+SDHexString.m"; sourceTree = ""; }; - 013EAF5B8AA53D7DF81AEB9B4CB6CC37 /* RealmSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RealmSwift-prefix.pch"; sourceTree = ""; }; - 01904FF8D07C58EFF3F7DC7B38664C95 /* GULNetworkURLSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULNetworkURLSession.h; path = GoogleUtilities/Network/Public/GoogleUtilities/GULNetworkURLSession.h; sourceTree = ""; }; - 021C13EF73374C46D725AC51D4A46486 /* PromisesObjC-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "PromisesObjC-Info.plist"; sourceTree = ""; }; - 031138CCD8D9D474F40D82801D921C55 /* NSURLSession+GULPromises.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURLSession+GULPromises.m"; path = "GoogleUtilities/Environment/URLSessionPromiseWrapper/NSURLSession+GULPromises.m"; sourceTree = ""; }; - 039B16C1C293A2DD65CC5798825A479B /* FIRMessagingSyncMessageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingSyncMessageManager.h; path = FirebaseMessaging/Sources/FIRMessagingSyncMessageManager.h; sourceTree = ""; }; - 03B30AC1CAAF899A6FEC51FDFFD9317E /* RLMObjectBase_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectBase_Private.h; path = include/RLMObjectBase_Private.h; sourceTree = ""; }; - 03E01B4F8255ECB27B91A7290C2C0581 /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "SDWebImage/Core/NSData+ImageContentType.m"; sourceTree = ""; }; - 03F5D2F51E06C31E2FBD08EC36CE4D2C /* GDTCORUploadCoordinator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORUploadCoordinator.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORUploadCoordinator.m; sourceTree = ""; }; - 041F6080E6F1B8BA523C6C2E5F0CC9D9 /* HTTPHeaders.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPHeaders.swift; path = Source/HTTPHeaders.swift; sourceTree = ""; }; - 042704367765D9F013F4E111BBB4D52A /* FirebaseInstallationsInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseInstallationsInternal.h; path = FirebaseInstallations/Source/Library/Private/FirebaseInstallationsInternal.h; sourceTree = ""; }; - 0432627A142444D9A9B8665CF3ADB39B /* UIImage+ForceDecode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+ForceDecode.m"; path = "SDWebImage/Core/UIImage+ForceDecode.m"; sourceTree = ""; }; - 05306FAF06C74D1F9998EFD834DF4409 /* SDWebImageIndicator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageIndicator.m; path = SDWebImage/Core/SDWebImageIndicator.m; sourceTree = ""; }; - 053AB860E5634039BAF88BD7E0FC5BE0 /* RLMUpdateChecker.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMUpdateChecker.mm; path = Realm/RLMUpdateChecker.mm; sourceTree = ""; }; - 05827744B1F4135B099BA652B9220212 /* NSImage+Compatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSImage+Compatibility.h"; path = "SDWebImage/Core/NSImage+Compatibility.h"; sourceTree = ""; }; - 059F94760C42A1A66ED75EAB3BC99B91 /* scheduler.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = scheduler.cpp; path = Realm/ObjectStore/src/util/scheduler.cpp; sourceTree = ""; }; - 05BFE78A90925045A780B3A8EB1F21DE /* FBLPromise+Race.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Race.h"; path = "Sources/FBLPromises/include/FBLPromise+Race.h"; sourceTree = ""; }; - 0692B33FFCFE498DB4CA452B9728A3B6 /* ParameterEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParameterEncoder.swift; path = Source/ParameterEncoder.swift; sourceTree = ""; }; - 06A993B3D361AC6CEC8E1A42D615F0C1 /* DigestType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DigestType.swift; path = Sources/CryptoSwift/DigestType.swift; sourceTree = ""; }; - 06AFDF03F9C1D8B9F4CF9B8D0016C73C /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; - 06BFCF2C6211AF4CCCCCF67A9C4536E6 /* pb_common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb_common.h; sourceTree = ""; }; - 06F05F478C5C28C47471C05ED820757B /* keychain_helper.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = keychain_helper.cpp; path = Realm/ObjectStore/src/impl/apple/keychain_helper.cpp; sourceTree = ""; }; - 06FC5C9CF96D60C50FCD47D339C91951 /* nanopb.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = nanopb.framework; path = nanopb.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 072E25ED4BB736636C50A394C9F2FD5B /* IQKeyboardManagerConstantsInternal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardManagerConstantsInternal.swift; path = IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstantsInternal.swift; sourceTree = ""; }; - 079BC76CDD3EA7B0E6EC6D0537065173 /* FIRMessagingRmqManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingRmqManager.h; path = FirebaseMessaging/Sources/FIRMessagingRmqManager.h; sourceTree = ""; }; - 07CCA0508B960E856C07AF0A9E944AEB /* FBLPromise+Reduce.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Reduce.h"; path = "Sources/FBLPromises/include/FBLPromise+Reduce.h"; sourceTree = ""; }; - 08E7515E1263611536A1E91C40BED4F4 /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/Core/UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; - 090684D3599570B96499EBE901EAB822 /* FIRMessagingTokenDeleteOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingTokenDeleteOperation.h; path = FirebaseMessaging/Sources/Token/FIRMessagingTokenDeleteOperation.h; sourceTree = ""; }; - 09270FD276479DC159CD2F94B634C486 /* ActionSheetPicker-3.0.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "ActionSheetPicker-3.0.release.xcconfig"; sourceTree = ""; }; - 0928E44AB241AA8AAB8DC0A33368B510 /* RLMOptionalBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMOptionalBase.h; path = include/RLMOptionalBase.h; sourceTree = ""; }; - 0936C0D1F782BB48EAC913B953C479B7 /* FirebaseMessaging.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FirebaseMessaging.modulemap; sourceTree = ""; }; - 0A0D2A5791B541D6FB60542F6A94DF63 /* Checksum.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Checksum.swift; path = Sources/CryptoSwift/Checksum.swift; sourceTree = ""; }; - 0A13357AB64AA63E60E55758E3789FFD /* FIRInteropParameterNames.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInteropParameterNames.h; path = Interop/Analytics/Public/FIRInteropParameterNames.h; sourceTree = ""; }; - 0B593AB8B2EACC688BA648D23B96EF20 /* XCTest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XCTest.swift; path = Sources/Mockingjay/XCTest.swift; sourceTree = ""; }; - 0B895637F6FAB3E8B7F2A656CB34EFA5 /* ActionSheetMultipleStringPicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetMultipleStringPicker.h; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/ActionSheetMultipleStringPicker.h; sourceTree = ""; }; - 0BCA1447D9C0AA7C6461DD5A75E4FE30 /* Alamofire-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-prefix.pch"; sourceTree = ""; }; - 0C1162B65AB5726FF65A08A5F6756D47 /* UIImage+ExtendedCacheData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ExtendedCacheData.h"; path = "SDWebImage/Core/UIImage+ExtendedCacheData.h"; sourceTree = ""; }; - 0C19E2A60F3775C60A9664BA403F4135 /* URITemplate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URITemplate.swift; path = Sources/URITemplate.swift; sourceTree = ""; }; - 0C200381FD7CABEC0F476BC0C00E3677 /* Collection+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Collection+Extension.swift"; path = "Sources/CryptoSwift/Collection+Extension.swift"; sourceTree = ""; }; - 0C4C97B3D1D21A8E09EDE223D2A7ABCC /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/Core/SDImageCache.h; sourceTree = ""; }; - 0CAB2A4CFB5E017CE31DB53C7B460D93 /* FIRMessaging_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessaging_Private.h; path = FirebaseMessaging/Sources/FIRMessaging_Private.h; sourceTree = ""; }; - 0CC326724D40B9B65C3C1A8E79E9F1FE /* SortDescriptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SortDescriptor.swift; path = RealmSwift/SortDescriptor.swift; sourceTree = ""; }; - 0CD3BC32129764C7CA355D1BF01A99ED /* FIRComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRComponent.m; path = FirebaseCore/Sources/FIRComponent.m; sourceTree = ""; }; - 0CE874A89AAF583128863BA1FCA5760C /* RLMManagedArray.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMManagedArray.mm; path = Realm/RLMManagedArray.mm; sourceTree = ""; }; - 0D34FEFC52A7D1B53C98AC34A4C933D3 /* GDTCCTCompressionHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCCTCompressionHelper.h; path = GoogleDataTransport/GDTCCTLibrary/Private/GDTCCTCompressionHelper.h; sourceTree = ""; }; - 0D4EA0A339B4C02E0528360927CE1AA7 /* SDAnimatedImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImageView.m; path = SDWebImage/Core/SDAnimatedImageView.m; sourceTree = ""; }; - 0D850BD593B8E52777A0374A1F5D37F3 /* RealmSwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RealmSwift.debug.xcconfig; sourceTree = ""; }; - 0DCB5DB463BB3BB168FA088925303516 /* FBLPromise+Reduce.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Reduce.m"; path = "Sources/FBLPromises/FBLPromise+Reduce.m"; sourceTree = ""; }; - 0DD279B7473F2FE464717897860B7323 /* realm_coordinator.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = realm_coordinator.cpp; path = Realm/ObjectStore/src/impl/realm_coordinator.cpp; sourceTree = ""; }; - 0DDD930CFA2058C6D7FB9D707278BD77 /* SDWebImage-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SDWebImage-Info.plist"; sourceTree = ""; }; - 0E4D6D92C3C044BBB1AFC0B639A10849 /* Realm-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Realm-prefix.pch"; sourceTree = ""; }; - 0ECB7740A74C8DF087CC5CCAA9845ABB /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "SDWebImage/Core/UIImage+GIF.m"; sourceTree = ""; }; - 0ECFC83453F0ECB27A1E0234BCC2B4DF /* AEADChaCha20Poly1305.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AEADChaCha20Poly1305.swift; path = Sources/CryptoSwift/AEAD/AEADChaCha20Poly1305.swift; sourceTree = ""; }; - 0ED78A49E7C5A56E27CA0CB39145198F /* GDTCORClock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORClock.h; path = GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCORClock.h; sourceTree = ""; }; - 0EE2A87672FBAC31E7864C137E9CFFDE /* GULAppEnvironmentUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULAppEnvironmentUtil.h; path = GoogleUtilities/Environment/Public/GoogleUtilities/GULAppEnvironmentUtil.h; sourceTree = ""; }; - 0F1F787E1DF3FC6B64AC7A57CC9A182B /* SDImageIOCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageIOCoder.m; path = SDWebImage/Core/SDImageIOCoder.m; sourceTree = ""; }; - 0F8884BB64A79D96185E4A06A46C0141 /* IQKeyboardManagerSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManagerSwift-umbrella.h"; sourceTree = ""; }; - 0FDD5E1FCA6A592C9E96544E56D90D93 /* GDTCORUploadCoordinator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORUploadCoordinator.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadCoordinator.h; sourceTree = ""; }; - 0FE625ABED4A4A39E0B44EF3BB1B071F /* FIRInteropEventNames.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInteropEventNames.h; path = Interop/Analytics/Public/FIRInteropEventNames.h; sourceTree = ""; }; - 1038ED066EC49DB4C900D898EBEA6E26 /* GDTCORTransformer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORTransformer.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer.h; sourceTree = ""; }; - 1039C413C929A2D6D726AC6859120CDB /* FIRComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponent.h; path = FirebaseCore/Sources/Private/FIRComponent.h; sourceTree = ""; }; - 105F0F4818FB674A5888D58E8BBCD69E /* GULSceneDelegateSwizzler_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULSceneDelegateSwizzler_Private.h; path = GoogleUtilities/AppDelegateSwizzler/Internal/GULSceneDelegateSwizzler_Private.h; sourceTree = ""; }; - 11722587FEA5F33027B6060D7B17F3C4 /* uuid.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = uuid.cpp; path = Realm/ObjectStore/src/util/uuid.cpp; sourceTree = ""; }; - 121C26A0E874B9D6FF380F044C384B99 /* sync_manager.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_manager.cpp; path = Realm/ObjectStore/src/sync/sync_manager.cpp; sourceTree = ""; }; - 12E5B7CE0F5FCA93F58A864E85041CAE /* FIRCoreDiagnosticsConnector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCoreDiagnosticsConnector.h; path = FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h; sourceTree = ""; }; - 1318DAFB39FE3FA5EE1408916E5334B5 /* FBLPromise+Timeout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Timeout.h"; path = "Sources/FBLPromises/include/FBLPromise+Timeout.h"; sourceTree = ""; }; - 13343565055CAF3120AD802619E91FCC /* UIView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCache.m"; path = "SDWebImage/Core/UIView+WebCache.m"; sourceTree = ""; }; - 133E546169AAE20A35B5BCC1520D9AE8 /* FIRComponentContainer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRComponentContainer.m; path = FirebaseCore/Sources/FIRComponentContainer.m; sourceTree = ""; }; - 13A0D66F3E67C3A685C5BAAEAAF1736E /* SDImageIOAnimatedCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOAnimatedCoder.h; path = SDWebImage/Core/SDImageIOAnimatedCoder.h; sourceTree = ""; }; - 13A31AF4024C5C2FB927ED925C18222E /* SDmetamacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDmetamacros.h; path = SDWebImage/Private/SDmetamacros.h; sourceTree = ""; }; - 13B1AA9A64AEFCDE68FEBB56B60AE309 /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/CoreTelephony.framework; sourceTree = DEVELOPER_DIR; }; - 13C8C8B254851998F9289F71229B28A2 /* FirebaseInstallations.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FirebaseInstallations.framework; path = FirebaseInstallations.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 13C907A07E4C375D07724A5939201DA1 /* FirebaseInstallations-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FirebaseInstallations-Info.plist"; sourceTree = ""; }; - 13FCF797284FECE3A13B140BA7A6C5F5 /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/Core/UIImage+GIF.h"; sourceTree = ""; }; - 142D1E2C1BC5FC36978E0E70A1EBC1E9 /* FIRInstallationsStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsStatus.h; path = FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsStatus.h; sourceTree = ""; }; - 1451B052EDF69823983D38AE91B6D78A /* FBLPromise+Then.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Then.h"; path = "Sources/FBLPromises/include/FBLPromise+Then.h"; sourceTree = ""; }; - 14FBAB99FC765178FFE8550C4BC3EF7A /* Alamofire.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.debug.xcconfig; sourceTree = ""; }; - 155B23A4872917ACBE28F725DFF6F659 /* RLMRealm+Sync.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "RLMRealm+Sync.h"; path = "include/RLMRealm+Sync.h"; sourceTree = ""; }; - 1570F708658C3D5FC6B0F902008DC01C /* BlockCipher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlockCipher.swift; path = Sources/CryptoSwift/BlockCipher.swift; sourceTree = ""; }; - 15796A8F6EE2C795704B1242ADE8D4D7 /* Toast-Swift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Toast-Swift-umbrella.h"; sourceTree = ""; }; + 00E5C9C2AFC1D9E2079B2831B49CFDB1 /* ReachabilitySwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ReachabilitySwift-prefix.pch"; sourceTree = ""; }; + 00EB32FE19B31E7E4447F0DC63F002F2 /* ActionSheetMultipleStringPicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetMultipleStringPicker.h; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/ActionSheetMultipleStringPicker.h; sourceTree = ""; }; + 0146A24DBA3D4DDCF113EE93C863ACF6 /* RLMResults.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMResults.mm; path = Realm/RLMResults.mm; sourceTree = ""; }; + 02073E7407EAD96EC98B83467F0AF66D /* MultipartUpload.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartUpload.swift; path = Source/MultipartUpload.swift; sourceTree = ""; }; + 0212D03CB4042D2280F3D688437E37C9 /* Operators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Operators.swift; path = Sources/CryptoSwift/Operators.swift; sourceTree = ""; }; + 026726DB5A61D8558D133CAD606BD6EF /* FirebaseCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseCore.h; path = FirebaseCore/Sources/Public/FirebaseCore/FirebaseCore.h; sourceTree = ""; }; + 02753C69DF0810D06A54AF6D39AAADAF /* RLMManagedArray.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMManagedArray.mm; path = Realm/RLMManagedArray.mm; sourceTree = ""; }; + 02805E74472A36252E661179D4F2BC08 /* FIRInstallationsStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsStatus.h; path = FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsStatus.h; sourceTree = ""; }; + 02A3D844B9131010E4CE4782112088B1 /* GDTCCTUploadOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCCTUploadOperation.h; path = GoogleDataTransport/GDTCCTLibrary/Private/GDTCCTUploadOperation.h; sourceTree = ""; }; + 034E8659175E77FD8858B78104CBDDD2 /* RLMObjectBase_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectBase_Private.h; path = include/RLMObjectBase_Private.h; sourceTree = ""; }; + 03546A03FBFFEFB5AEA3C6917F5E1648 /* SDWebImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImage.h; path = WebImage/SDWebImage.h; sourceTree = ""; }; + 0366496CA3470F9B2B2F511EFCCA8B11 /* GULHeartbeatDateStorageUserDefaults.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULHeartbeatDateStorageUserDefaults.h; path = GoogleUtilities/Environment/Public/GoogleUtilities/GULHeartbeatDateStorageUserDefaults.h; sourceTree = ""; }; + 03953057E81A4640AB065537BFE27DB6 /* FIRMessagingAnalytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingAnalytics.h; path = FirebaseMessaging/Sources/FIRMessagingAnalytics.h; sourceTree = ""; }; + 03C3BF23D82E8C0C06EBB0DAD4BD8D07 /* SDWebImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDWebImage-dummy.m"; sourceTree = ""; }; + 03EECABE8B2F2144165610F1A3B26DEE /* FBLPromises.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBLPromises.h; path = Sources/FBLPromises/include/FBLPromises.h; sourceTree = ""; }; + 03F7CD223F0E708E5C1AC45005C3F52A /* ActionSheetCustomPicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetCustomPicker.h; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/ActionSheetCustomPicker.h; sourceTree = ""; }; + 03F9E1C9D345AFD0ACD2C0F00A77B859 /* SDDeviceHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDDeviceHelper.m; path = SDWebImage/Private/SDDeviceHelper.m; sourceTree = ""; }; + 040493368318D4DC8040E4115DE6D10A /* RLMSchema.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSchema.h; path = include/RLMSchema.h; sourceTree = ""; }; + 04C3178B389F61C6A8327FAFAF0A4D7B /* FIROptionsInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIROptionsInternal.h; path = FirebaseCore/Sources/Private/FIROptionsInternal.h; sourceTree = ""; }; + 0578D8EEFBD28A2BEF6C79D840F382D0 /* RLMSchema.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMSchema.mm; path = Realm/RLMSchema.mm; sourceTree = ""; }; + 058E011CE5E12E690AB9C2234F9A4156 /* FirebaseMessaging-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FirebaseMessaging-dummy.m"; sourceTree = ""; }; + 05A65261C9148BCCE7C935337988C5C5 /* GDTCOREvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCOREvent.h; path = GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCOREvent.h; sourceTree = ""; }; + 05F7ADE3ED81DA5115BA1688CF6E0832 /* FIRAnalyticsInterop.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAnalyticsInterop.h; path = Interop/Analytics/Public/FIRAnalyticsInterop.h; sourceTree = ""; }; + 06FC5C9CF96D60C50FCD47D339C91951 /* nanopb */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = nanopb; path = nanopb.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0716E30A0C360B72A550341ADE46F46E /* SDWebImageIndicator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageIndicator.h; path = SDWebImage/Core/SDWebImageIndicator.h; sourceTree = ""; }; + 07428F5C2C886973860D0B1E10A12457 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/Core/UIImageView+WebCache.h"; sourceTree = ""; }; + 078782FFD727F30FE3A92A32B64A9C35 /* FIRMessagingRmqManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingRmqManager.h; path = FirebaseMessaging/Sources/FIRMessagingRmqManager.h; sourceTree = ""; }; + 07B1E0E662005D9C75ADC6BA4A8DBF71 /* Checksum.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Checksum.swift; path = Sources/CryptoSwift/Checksum.swift; sourceTree = ""; }; + 07E5446944D1981493AAD0EB936C93E4 /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/Core/UIButton+WebCache.m"; sourceTree = ""; }; + 0836FBB35B723CA60E57A757D6ECC880 /* Array+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Array+Extension.swift"; path = "Sources/CryptoSwift/Array+Extension.swift"; sourceTree = ""; }; + 084A6973FD2037A5B548324E91FE74E0 /* SDDisplayLink.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDDisplayLink.m; path = SDWebImage/Private/SDDisplayLink.m; sourceTree = ""; }; + 087EA6523FE31CCFA6065FE327F8C347 /* FIRBundleUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRBundleUtil.h; path = FirebaseCore/Sources/FIRBundleUtil.h; sourceTree = ""; }; + 0880DC2E05B89810EF2DA307BE3A5684 /* FirebaseMessaging.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FirebaseMessaging.modulemap; sourceTree = ""; }; + 089A750ED63C64F3A5DB59A500EF5F76 /* GDTCORUploadCoordinator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORUploadCoordinator.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORUploadCoordinator.m; sourceTree = ""; }; + 08B944858F8520734B6AB96BA217A2B2 /* ChaCha20+Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ChaCha20+Foundation.swift"; path = "Sources/CryptoSwift/Foundation/ChaCha20+Foundation.swift"; sourceTree = ""; }; + 08F97D6DE4F5E987AFC48A4AE0A515F6 /* PromisesObjC.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PromisesObjC.debug.xcconfig; sourceTree = ""; }; + 09286A1C246966D08249E164E0089729 /* RLMRealmConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealmConfiguration.h; path = include/RLMRealmConfiguration.h; sourceTree = ""; }; + 093E6929BCC0A3171A565B4BE665067C /* Realm-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Realm-prefix.pch"; sourceTree = ""; }; + 095AB0EBBCEB9C57CE1EB42C47F03E22 /* PBKDF1.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PBKDF1.swift; path = Sources/CryptoSwift/PKCS/PBKDF1.swift; sourceTree = ""; }; + 0982B24C7A90D05306A76DDAF3CA0F61 /* FIRCoreDiagnosticsInterop.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCoreDiagnosticsInterop.h; path = Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h; sourceTree = ""; }; + 098ADCDD0F84837A726FE07A8BEE2882 /* Toast-Swift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Toast-Swift-Info.plist"; sourceTree = ""; }; + 09B0014F0D58BBA420CE6E37538B4761 /* FIRLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRLogger.h; path = FirebaseCore/Sources/Private/FIRLogger.h; sourceTree = ""; }; + 0A7056C0B785C11028021B59CECD0E6E /* ActionSheetDatePicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetDatePicker.h; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/ActionSheetDatePicker.h; sourceTree = ""; }; + 0A769A8769ED4E97B4898A90A9EF4869 /* SDImageTransformer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageTransformer.m; path = SDWebImage/Core/SDImageTransformer.m; sourceTree = ""; }; + 0ACCA20C360D7CEB7B79938097F776FF /* NSDictionary+FIRMessaging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+FIRMessaging.h"; path = "FirebaseMessaging/Sources/NSDictionary+FIRMessaging.h"; sourceTree = ""; }; + 0B565E00C15800E354C0D1BD95C13739 /* SDAnimatedImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SDAnimatedImageView+WebCache.m"; path = "SDWebImage/Core/SDAnimatedImageView+WebCache.m"; sourceTree = ""; }; + 0BB962BA20D0D1B8D652060CB58DD072 /* realm_coordinator.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = realm_coordinator.cpp; path = Realm/ObjectStore/src/impl/realm_coordinator.cpp; sourceTree = ""; }; + 0BE55C4B55F2D2ADDE4DA989E9402F66 /* ActionSheetLocalePicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ActionSheetLocalePicker.m; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/ActionSheetLocalePicker.m; sourceTree = ""; }; + 0C0ED09D78C79C0AB48BC0AD1372A340 /* SDAssociatedObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAssociatedObject.m; path = SDWebImage/Private/SDAssociatedObject.m; sourceTree = ""; }; + 0C5EAE6515A98F6798C3877BE70EC989 /* IQTitleBarButtonItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTitleBarButtonItem.swift; path = IQKeyboardManagerSwift/IQToolbar/IQTitleBarButtonItem.swift; sourceTree = ""; }; + 0C708CC7FEEA0AFC0ECF4BC6F05C2EA8 /* FIRInstallationsErrors.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsErrors.h; path = FirebaseInstallations/Source/Library/Public/FirebaseInstallations/FIRInstallationsErrors.h; sourceTree = ""; }; + 0CEF5D5C68FF22FC04888630F0CF74A7 /* FBLPromise+Retry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Retry.h"; path = "Sources/FBLPromises/include/FBLPromise+Retry.h"; sourceTree = ""; }; + 0D2F4EAC2F5189DB9445256EE720D554 /* system_configuration.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = system_configuration.cpp; path = Realm/ObjectStore/src/sync/impl/apple/system_configuration.cpp; sourceTree = ""; }; + 0D844984E98E7424570911761BD9B9B7 /* IQKeyboardManager+Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Internal.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+Internal.swift"; sourceTree = ""; }; + 0D86C8CBCE4B0E7F64C1D31B2DAC6DF8 /* AlamofireExtended.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlamofireExtended.swift; path = Source/AlamofireExtended.swift; sourceTree = ""; }; + 0D87293269F3DB091255FFC22359A44A /* GULNSData+zlib.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "GULNSData+zlib.h"; path = "GoogleUtilities/NSData+zlib/Public/GoogleUtilities/GULNSData+zlib.h"; sourceTree = ""; }; + 0DB8D97A1CC79B909E92F91F475AAB99 /* RLMCollection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMCollection.h; path = include/RLMCollection.h; sourceTree = ""; }; + 0DEC125BF3990BEA5CEC35EF26A96390 /* UIImage+ExtendedCacheData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+ExtendedCacheData.m"; path = "SDWebImage/Core/UIImage+ExtendedCacheData.m"; sourceTree = ""; }; + 0E1C73229087CE619C0EE8F95220D703 /* FirebaseCoreDiagnostics.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FirebaseCoreDiagnostics.modulemap; sourceTree = ""; }; + 0E29CCEBECA32534EA64B9D6C77DE5E2 /* ReachabilitySwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ReachabilitySwift-Info.plist"; sourceTree = ""; }; + 0EC6C19B7F3FAD3D16CA4E97360D0E5D /* FIROptions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIROptions.m; path = FirebaseCore/Sources/FIROptions.m; sourceTree = ""; }; + 0F4D97C94386876B76AFCABA12EEAA01 /* Mockingjay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Mockingjay.h; path = Sources/Mockingjay/Mockingjay.h; sourceTree = ""; }; + 0F6CEB8E4A2699C012797C2CB8208382 /* RLMSyncSessionRefreshHandle.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMSyncSessionRefreshHandle.mm; path = Realm/RLMSyncSessionRefreshHandle.mm; sourceTree = ""; }; + 0F9A122A32FAC4BB79A362A9E767BE5B /* RLMSyncConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncConfiguration.h; path = include/RLMSyncConfiguration.h; sourceTree = ""; }; + 1031E2C9F40B857CD36BEAC1D6486B76 /* RLMObjectBase_Dynamic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectBase_Dynamic.h; path = include/RLMObjectBase_Dynamic.h; sourceTree = ""; }; + 1048324F727445AC178416B6259CDC24 /* RLMSyncSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncSession.h; path = include/RLMSyncSession.h; sourceTree = ""; }; + 109E6F6D680ADE61B9A5613128BA6864 /* sync_config.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_config.cpp; path = Realm/ObjectStore/src/sync/sync_config.cpp; sourceTree = ""; }; + 113F1B2DA7303DC2420D6440869234DA /* RLMObjectSchema.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMObjectSchema.mm; path = Realm/RLMObjectSchema.mm; sourceTree = ""; }; + 118CAEC0E0CE6DFF0DEB62741D592ADF /* GoogleAppMeasurement-xcframeworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "GoogleAppMeasurement-xcframeworks.sh"; sourceTree = ""; }; + 11B2F1350462148ECF81B6564429DC5C /* FIRComponentContainer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRComponentContainer.m; path = FirebaseCore/Sources/FIRComponentContainer.m; sourceTree = ""; }; + 11BF7B050361D037136A5EE4E8935E72 /* SlideMenuControllerSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SlideMenuControllerSwift.modulemap; sourceTree = ""; }; + 1239C333B57CA601FFCCDE649028999A /* FIRMessagingExtensionHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingExtensionHelper.m; path = FirebaseMessaging/Sources/FIRMessagingExtensionHelper.m; sourceTree = ""; }; + 1253F99226CEEFA9B7E64A60720D033A /* FirebaseCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FirebaseCore.modulemap; sourceTree = ""; }; + 1271A1543FC34B052F555BCCB28A5380 /* IQBarButtonItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQBarButtonItem.swift; path = IQKeyboardManagerSwift/IQToolbar/IQBarButtonItem.swift; sourceTree = ""; }; + 12879C29FF49723AA1A8917275D96091 /* RLMSyncSubscription.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMSyncSubscription.mm; path = Realm/RLMSyncSubscription.mm; sourceTree = ""; }; + 12AE4111ACF34FAD59B19E2997E3D7FD /* SDFileAttributeHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDFileAttributeHelper.m; path = SDWebImage/Private/SDFileAttributeHelper.m; sourceTree = ""; }; + 12DFEAFE7BFF2D26F1194BE8C0EB07A8 /* GULHeartbeatDateStorable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULHeartbeatDateStorable.h; path = GoogleUtilities/Environment/Public/GoogleUtilities/GULHeartbeatDateStorable.h; sourceTree = ""; }; + 13245380613203823650C6D0DEA01867 /* FIRMessagingCheckinService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingCheckinService.m; path = FirebaseMessaging/Sources/Token/FIRMessagingCheckinService.m; sourceTree = ""; }; + 132A884C065390DEDD73CF188A337C69 /* FIRComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponent.h; path = FirebaseCore/Sources/Private/FIRComponent.h; sourceTree = ""; }; + 13C8C8B254851998F9289F71229B28A2 /* FirebaseInstallations */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FirebaseInstallations; path = FirebaseInstallations.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 13F17F6A453303FFFBABD0E97C75036A /* RLMThreadSafeReference.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMThreadSafeReference.h; path = include/RLMThreadSafeReference.h; sourceTree = ""; }; + 140F933732FF837397C6367587633C1F /* FirebaseInstallations.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseInstallations.h; path = FirebaseInstallations/Source/Library/Public/FirebaseInstallations/FirebaseInstallations.h; sourceTree = ""; }; + 1455DB1506413AD7F20DB8A3C93B6AF8 /* FBLPromise+Await.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Await.m"; path = "Sources/FBLPromises/FBLPromise+Await.m"; sourceTree = ""; }; + 147A20BCBAAABC8CA2DF2DE1A3BC7DF2 /* FIRInstallationsAuthTokenResultInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsAuthTokenResultInternal.h; path = FirebaseInstallations/Source/Library/FIRInstallationsAuthTokenResultInternal.h; sourceTree = ""; }; + 14B3A02C631B5290BC8599CDD26DDA09 /* Alamofire.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.debug.xcconfig; sourceTree = ""; }; + 1510CC3127861D6044166660206EA1E4 /* GDTCORTransport_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORTransport_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransport_Private.h; sourceTree = ""; }; + 152CA9F9887265F3C621276390D41295 /* NSButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSButton+WebCache.m"; path = "SDWebImage/Core/NSButton+WebCache.m"; sourceTree = ""; }; + 158F6B7F337E16D60C6EC42CAC92B984 /* GDTCOREndpoints.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCOREndpoints.m; path = GoogleDataTransport/GDTCORLibrary/GDTCOREndpoints.m; sourceTree = ""; }; + 15A0BCF2B12B2799651BFAC082027F15 /* FIRAnalyticsConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAnalyticsConfiguration.m; path = FirebaseCore/Sources/FIRAnalyticsConfiguration.m; sourceTree = ""; }; 162B656496498B9FB54D3ED6470B5CA1 /* Pods-MyStudies-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MyStudies-frameworks.sh"; sourceTree = ""; }; - 162BA16DB4A07234409AF1C9FFB41A86 /* AES+Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "AES+Foundation.swift"; path = "Sources/CryptoSwift/Foundation/AES+Foundation.swift"; sourceTree = ""; }; - 166606002169D53DB590DCDC2402D8D4 /* SDWebImageDownloaderResponseModifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderResponseModifier.h; path = SDWebImage/Core/SDWebImageDownloaderResponseModifier.h; sourceTree = ""; }; - 16DCA68A77792F71E4E233C3AAFA54E8 /* FIROptions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIROptions.h; path = FirebaseCore/Sources/Public/FirebaseCore/FIROptions.h; sourceTree = ""; }; - 16DE024C8CB16FA20C78D11CEE0D8750 /* SDImageIOAnimatedCoderInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOAnimatedCoderInternal.h; path = SDWebImage/Private/SDImageIOAnimatedCoderInternal.h; sourceTree = ""; }; - 170BF41F3D80EC5965A6679E24A00F04 /* GULKeychainStorage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULKeychainStorage.m; path = GoogleUtilities/Environment/SecureStorage/GULKeychainStorage.m; sourceTree = ""; }; - 173324043D4D3BA47FCB6F18925B2C90 /* Blowfish.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Blowfish.swift; path = Sources/CryptoSwift/Blowfish.swift; sourceTree = ""; }; - 177CAD5878399B14102554569E7C3B72 /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/Core/SDWebImageDownloaderOperation.h; sourceTree = ""; }; - 18878089B49C4307981A487808368A62 /* NSError+FIRMessaging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSError+FIRMessaging.h"; path = "FirebaseMessaging/Sources/NSError+FIRMessaging.h"; sourceTree = ""; }; - 18E1D6D55119A8A07D1CBC8E856AB124 /* FirebaseCoreDiagnostics.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseCoreDiagnostics.release.xcconfig; sourceTree = ""; }; - 18E2801B86E3023E1076B7EC71754C1A /* shared_realm.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = shared_realm.cpp; path = Realm/ObjectStore/src/shared_realm.cpp; sourceTree = ""; }; - 1901AA5F111195BCD92FC5A0D680BC91 /* GULURLSessionDataResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULURLSessionDataResponse.m; path = GoogleUtilities/Environment/URLSessionPromiseWrapper/GULURLSessionDataResponse.m; sourceTree = ""; }; - 19508D9635DEE7FED4030772670091C6 /* GDTCORRegistrar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORRegistrar.h; path = GoogleDataTransport/GDTCORLibrary/Internal/GDTCORRegistrar.h; sourceTree = ""; }; - 19C6D3E6DF2F6FFB52BBEC824847250F /* pb_encode.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pb_encode.c; sourceTree = ""; }; - 1A426FA0C178F5D5B7385132447399A7 /* FIRMessagingLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingLogger.h; path = FirebaseMessaging/Sources/FIRMessagingLogger.h; sourceTree = ""; }; - 1A5A8C27F0F94B75DF682413D266B486 /* RLMResults.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMResults.h; path = include/RLMResults.h; sourceTree = ""; }; - 1A9A3526CC4B3753BB8BDDD76F69886B /* PromisesObjC-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PromisesObjC-umbrella.h"; sourceTree = ""; }; - 1AC288358E204E7C81EA626BDC43C342 /* RLMResults_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMResults_Private.h; path = include/RLMResults_Private.h; sourceTree = ""; }; - 1AC79AEF663CE061B73BBC9C51CBD65F /* NSBezierPath+SDRoundedCorners.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSBezierPath+SDRoundedCorners.m"; path = "SDWebImage/Private/NSBezierPath+SDRoundedCorners.m"; sourceTree = ""; }; - 1BAA874222D307237209F71090049BE3 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; - 1BD2F315F65D74D0E9C9B15E315E96FD /* RLMClassInfo.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMClassInfo.mm; path = Realm/RLMClassInfo.mm; sourceTree = ""; }; - 1C91D43FD5AEBC0D1AD1FFBD0128B8DD /* GDTCORTransport_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORTransport_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransport_Private.h; sourceTree = ""; }; - 1CF20EA6B0DE3339FC2E7ECE9D5B5FEB /* FirebaseInstallations.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseInstallations.h; path = FirebaseInstallations/Source/Library/Public/FirebaseInstallations/FirebaseInstallations.h; sourceTree = ""; }; - 1DB26637B4C7A983E245460E1691AD12 /* SDImageTransformer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageTransformer.m; path = SDWebImage/Core/SDImageTransformer.m; sourceTree = ""; }; - 1DBED427ED5F67FFC2FD84C7FE003EDB /* SDWebImageCacheSerializer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCacheSerializer.m; path = SDWebImage/Core/SDWebImageCacheSerializer.m; sourceTree = ""; }; - 1E25CF9E464B86FF2C956FB7C8DD9861 /* FIRMessagingSyncMessageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingSyncMessageManager.m; path = FirebaseMessaging/Sources/FIRMessagingSyncMessageManager.m; sourceTree = ""; }; - 1E2C40842B6E4C39E180D9207F1E17FB /* SDAnimatedImageRep.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImageRep.m; path = SDWebImage/Core/SDAnimatedImageRep.m; sourceTree = ""; }; - 1E95D11E343E352E861832FC81DBD7A9 /* IQKeyboardManagerSwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManagerSwift.debug.xcconfig; sourceTree = ""; }; - 1EBA825D4A1141948CDCC87E6B329704 /* FIRMessagingCheckinStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingCheckinStore.m; path = FirebaseMessaging/Sources/Token/FIRMessagingCheckinStore.m; sourceTree = ""; }; - 1F07AEA03081FA26561364FD6019DD67 /* sync_user.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_user.cpp; path = Realm/ObjectStore/src/sync/sync_user.cpp; sourceTree = ""; }; - 1F32596C6F9A5F92AFD232BC7ADBA323 /* FIRMessagingCode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingCode.h; path = FirebaseMessaging/Sources/FIRMessagingCode.h; sourceTree = ""; }; - 1F40D4228462660CA4BE37F18082E9E5 /* FIRMessagingCheckinPreferences.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingCheckinPreferences.h; path = FirebaseMessaging/Sources/Token/FIRMessagingCheckinPreferences.h; sourceTree = ""; }; - 1F994B95A81C90C0D4A20E80C3158D3B /* ActionSheetDistancePicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ActionSheetDistancePicker.m; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/ActionSheetDistancePicker.m; sourceTree = ""; }; - 1FC94920448D483EBCEEFD5A74D40405 /* Realm.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Realm.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 206793060D969FA7496E5BC0F5CC0014 /* SDMemoryCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDMemoryCache.h; path = SDWebImage/Core/SDMemoryCache.h; sourceTree = ""; }; - 20857C9639D0B60308972014193BE7B4 /* GDTCORDirectorySizeTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORDirectorySizeTracker.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORDirectorySizeTracker.m; sourceTree = ""; }; - 20B308123DA60ABFD57905575B6018BE /* FIRFirebaseUserAgent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRFirebaseUserAgent.h; path = FirebaseCore/Sources/FIRFirebaseUserAgent.h; sourceTree = ""; }; - 20C948E606D5CE44AD03A5C7366A9B1B /* IQKeyboardManagerConstants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardManagerConstants.swift; path = IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstants.swift; sourceTree = ""; }; - 2188C48F8C4870DB2ADA3BFE10060920 /* GoogleDataTransport-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GoogleDataTransport-dummy.m"; sourceTree = ""; }; - 219946A35B05998559D841DFC5C9877B /* GULNetworkMessageCode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULNetworkMessageCode.h; path = GoogleUtilities/Network/Public/GoogleUtilities/GULNetworkMessageCode.h; sourceTree = ""; }; - 21B03CA622E690725A6626C088E1D09F /* Reachability.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Reachability.framework; path = ReachabilitySwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 21B756D504A1CD0C1B8DB189A1C7D930 /* Toast-Swift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Toast-Swift-dummy.m"; sourceTree = ""; }; - 21CA59B37340EC61A8C33CF7650E10C7 /* Pods_MyStudiesTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_MyStudiesTests.framework; path = "Pods-MyStudiesTests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 21EDB470C1B431BF3502D1AE1E257E30 /* FIRMessagingAuthKeychain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingAuthKeychain.h; path = FirebaseMessaging/Sources/Token/FIRMessagingAuthKeychain.h; sourceTree = ""; }; - 2283CDF983CC68D987E675E693EDAED0 /* FIRInstallationsIIDStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsIIDStore.h; path = FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDStore.h; sourceTree = ""; }; - 2286A916678C9D2E35D70ADD42A8508F /* FIRLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRLogger.m; path = FirebaseCore/Sources/FIRLogger.m; sourceTree = ""; }; - 228997D5E6396605D390F8D4345155E4 /* IQKeyboardManagerSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardManagerSwift-Info.plist"; sourceTree = ""; }; - 22F949F50295F4910C96683F61136A58 /* GDTCORReachability_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORReachability_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORReachability_Private.h; sourceTree = ""; }; - 230C2DF16DF9C4FDA79D1828DA8465FD /* FIRMessagingAnalytics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingAnalytics.m; path = FirebaseMessaging/Sources/FIRMessagingAnalytics.m; sourceTree = ""; }; - 2310F918A6725456B3386150ED5D4DA3 /* RLMRealmConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealmConfiguration.h; path = include/RLMRealmConfiguration.h; sourceTree = ""; }; - 2348BB82646E9C334BA33BC1391D23B7 /* FirebaseCoreDiagnostics-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FirebaseCoreDiagnostics-Info.plist"; sourceTree = ""; }; - 237A0819F1D8DA8DB03588A5BF8CE083 /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/Core/UIView+WebCacheOperation.m"; sourceTree = ""; }; - 23B0AC2796C0D9DC98FF91206D3981DA /* SDAnimatedImagePlayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImagePlayer.h; path = SDWebImage/Core/SDAnimatedImagePlayer.h; sourceTree = ""; }; - 23B2179510831837DFEEEDE340AD8646 /* nanopb-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "nanopb-prefix.pch"; sourceTree = ""; }; - 23B33242AB54F7FF88A556749925B47B /* NSDictionary+FIRMessaging.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+FIRMessaging.m"; path = "FirebaseMessaging/Sources/NSDictionary+FIRMessaging.m"; sourceTree = ""; }; - 23FCC2666D8D2ECD43F8C6075C24AE98 /* FIRCurrentDateProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCurrentDateProvider.h; path = FirebaseInstallations/Source/Library/InstallationsIDController/FIRCurrentDateProvider.h; sourceTree = ""; }; - 243BE1AE2BBE963CF634290AE83B0735 /* ActionSheetLocalePicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetLocalePicker.h; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/ActionSheetLocalePicker.h; sourceTree = ""; }; - 24557FF343160ADBDAA497CA5CFB282E /* HKDF.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HKDF.swift; path = Sources/CryptoSwift/HKDF.swift; sourceTree = ""; }; - 249FE35E9BC2F950342279D45727DFA8 /* SDWebImageDownloaderDecryptor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderDecryptor.m; path = SDWebImage/Core/SDWebImageDownloaderDecryptor.m; sourceTree = ""; }; - 24DFFDE95AB183781DC4EA1DFF0D732E /* FIRComponentContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponentContainer.h; path = FirebaseCore/Sources/Private/FIRComponentContainer.h; sourceTree = ""; }; - 251AC437E4AB28CADCAB834D92DD672D /* GULNetwork.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULNetwork.h; path = GoogleUtilities/Network/Public/GoogleUtilities/GULNetwork.h; sourceTree = ""; }; - 25BA8C2BED9D71530658549424438F43 /* IQKeyboardReturnKeyHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardReturnKeyHandler.swift; path = IQKeyboardManagerSwift/IQKeyboardReturnKeyHandler.swift; sourceTree = ""; }; - 25CF384AECDAD25EED31BF97E9023453 /* FIRMessaging.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessaging.m; path = FirebaseMessaging/Sources/FIRMessaging.m; sourceTree = ""; }; - 25DCFDDA5CA5EC617535E9A01B61348F /* ActionSheetCustomPicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ActionSheetCustomPicker.m; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/ActionSheetCustomPicker.m; sourceTree = ""; }; - 25FCF1FC11F99F41CC8FE1C400879559 /* FBLPromise+All.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+All.h"; path = "Sources/FBLPromises/include/FBLPromise+All.h"; sourceTree = ""; }; - 26686002C9D8C8EFE805D254868E0A1A /* FIRMessagingRemoteNotificationsProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingRemoteNotificationsProxy.m; path = FirebaseMessaging/Sources/FIRMessagingRemoteNotificationsProxy.m; sourceTree = ""; }; - 2685CB813C038E116759E794136F7D7F /* FBLPromise+Retry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Retry.h"; path = "Sources/FBLPromises/include/FBLPromise+Retry.h"; sourceTree = ""; }; - 26D37C2815447D36E1833F62298C1C75 /* GDTCORFlatFileStorage+Promises.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "GDTCORFlatFileStorage+Promises.h"; path = "GoogleDataTransport/GDTCORLibrary/Private/GDTCORFlatFileStorage+Promises.h"; sourceTree = ""; }; - 2804786570BE3EE0349D1A823763B8DB /* FIRHeartbeatInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRHeartbeatInfo.h; path = FirebaseCore/Sources/Private/FIRHeartbeatInfo.h; sourceTree = ""; }; - 281D8FF15A1DFFF3DAFF10BDD480737C /* RLMRealm+Sync.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = "RLMRealm+Sync.mm"; path = "Realm/RLMRealm+Sync.mm"; sourceTree = ""; }; - 2873B53E0E594665AABD29242FD91B61 /* CBCMAC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CBCMAC.swift; path = Sources/CryptoSwift/CBCMAC.swift; sourceTree = ""; }; - 2880AA96B7C50CB14B78E254DA15B460 /* SDWebImageOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageOperation.m; path = SDWebImage/Core/SDWebImageOperation.m; sourceTree = ""; }; - 289B3F758C08CB9E187E1BAA9FE98C45 /* SDImageCachesManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCachesManager.h; path = SDWebImage/Core/SDImageCachesManager.h; sourceTree = ""; }; - 28D350610060943E1A96A0EB1032685B /* SDWebImageCacheKeyFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCacheKeyFilter.h; path = SDWebImage/Core/SDWebImageCacheKeyFilter.h; sourceTree = ""; }; - 28F1C11AA3D4A6C9C4276D076B225AE8 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/Core/SDWebImagePrefetcher.h; sourceTree = ""; }; - 28F533A4844BA7F1E3FC68433FDDF818 /* FIROptionsInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIROptionsInternal.h; path = FirebaseCore/Sources/Private/FIROptionsInternal.h; sourceTree = ""; }; - 2926C8352FEFD9E4E4A0A5C4841CF3B6 /* Firebase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Firebase.h; path = CoreOnly/Sources/Firebase.h; sourceTree = ""; }; - 294ADF7051FB25145BD211B8BB8823A8 /* GDTCORRegistrar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORRegistrar.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORRegistrar.m; sourceTree = ""; }; - 29F79AD601A7A8B9B79F7169D2017A7F /* RLMArray_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMArray_Private.h; path = include/RLMArray_Private.h; sourceTree = ""; }; - 2A17D40ACA8F8A042A04883C715D859B /* Rabbit+Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Rabbit+Foundation.swift"; path = "Sources/CryptoSwift/Foundation/Rabbit+Foundation.swift"; sourceTree = ""; }; - 2A3C712F0F9555A673A9FF81CBA60997 /* FIRInstallationsStoredAuthToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsStoredAuthToken.m; path = FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredAuthToken.m; sourceTree = ""; }; - 2A8C388117B0AFE665668A5CDDF11762 /* FBLPromise+Timeout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Timeout.m"; path = "Sources/FBLPromises/FBLPromise+Timeout.m"; sourceTree = ""; }; - 2AD7C113B557EE5995A197AEC9EF624A /* RLMSyncConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncConfiguration.h; path = include/RLMSyncConfiguration.h; sourceTree = ""; }; - 2B12F578F735267B7742EB1678771172 /* FirebaseMessaging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseMessaging.h; path = FirebaseMessaging/Sources/Public/FirebaseMessaging/FirebaseMessaging.h; sourceTree = ""; }; - 2B93416F1EC7FF429DDC77D53CEAA687 /* FirebaseMessaging.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseMessaging.release.xcconfig; sourceTree = ""; }; - 2BFA7B313874095AEA0F1CBBBCE6C7EF /* UIImage+ExtendedCacheData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+ExtendedCacheData.m"; path = "SDWebImage/Core/UIImage+ExtendedCacheData.m"; sourceTree = ""; }; - 2C280205CE3A83276559BB5EB064D765 /* ActionSheetMultipleStringPicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ActionSheetMultipleStringPicker.m; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/ActionSheetMultipleStringPicker.m; sourceTree = ""; }; - 2C630A712DBF2F3BD10E520AC73860CC /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/Core/SDWebImageCompat.h; sourceTree = ""; }; - 2CC8055C65A814C00D776EEB246F07D1 /* FIRMessagingTokenOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingTokenOperation.m; path = FirebaseMessaging/Sources/Token/FIRMessagingTokenOperation.m; sourceTree = ""; }; - 2CD0BCA2633B549DF689C142B16127A4 /* FIRHeartbeatInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRHeartbeatInfo.h; path = FirebaseCore/Sources/Private/FIRHeartbeatInfo.h; sourceTree = ""; }; - 2DAEF97FD92E359D4F8B69972A55DC01 /* GoogleDataTransport-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GoogleDataTransport-Info.plist"; sourceTree = ""; }; - 2DB460E7FFBC47ECE1095865956574CF /* FIRMessagingPubSub.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingPubSub.h; path = FirebaseMessaging/Sources/FIRMessagingPubSub.h; sourceTree = ""; }; - 2DC883C2E75107C200EB603B681CA0AA /* FIRMessagingTopicOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingTopicOperation.h; path = FirebaseMessaging/Sources/FIRMessagingTopicOperation.h; sourceTree = ""; }; - 2DED94C46EED4DEF21674532BA1277BD /* FIRInstallationsIDController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsIDController.m; path = FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsIDController.m; sourceTree = ""; }; - 2E4633F715CC7B0679E989FFB9D17EEB /* GoogleUtilities.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleUtilities.release.xcconfig; sourceTree = ""; }; - 2EA9CE05D1DFE28502DEBD3165F8C1E4 /* FBLPromise+Delay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Delay.h"; path = "Sources/FBLPromises/include/FBLPromise+Delay.h"; sourceTree = ""; }; - 2EB83B09EF9F06403EE7B61ECF00D452 /* SDWeakProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWeakProxy.m; path = SDWebImage/Private/SDWeakProxy.m; sourceTree = ""; }; - 2F26DBA70E2E7C4A161BDFA9A7F9FD52 /* RLMSyncConfiguration.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMSyncConfiguration.mm; path = Realm/RLMSyncConfiguration.mm; sourceTree = ""; }; - 2F294EDF1531907DE680A2507F79C9FF /* RLMSyncPermission.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncPermission.h; path = include/RLMSyncPermission.h; sourceTree = ""; }; - 2F3EB1AA384BA51FBAB480339FC6F717 /* FIRLibrary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRLibrary.h; path = FirebaseCore/Sources/Private/FIRLibrary.h; sourceTree = ""; }; - 2F47B9623AD99AFA45CFFE3DA971247A /* Mockingjay.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Mockingjay.release.xcconfig; sourceTree = ""; }; - 2FA01A3D389B8E45A5925456F5760E2B /* BlockMode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlockMode.swift; path = Sources/CryptoSwift/BlockMode/BlockMode.swift; sourceTree = ""; }; - 300D715D4DB5901B4FCB9514A11C40AA /* FIRMessagingTokenOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingTokenOperation.h; path = FirebaseMessaging/Sources/Token/FIRMessagingTokenOperation.h; sourceTree = ""; }; - 30B223C026C0CB3A27990245026E7451 /* FIROptionsInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIROptionsInternal.h; path = FirebaseCore/Sources/Private/FIROptionsInternal.h; sourceTree = ""; }; - 30E2B292ED156DC221F0CDE53D2CBA2B /* HTTPMethod.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPMethod.swift; path = Source/HTTPMethod.swift; sourceTree = ""; }; - 314252F48F4713320A94CD62EFC62116 /* SDImageCachesManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCachesManager.m; path = SDWebImage/Core/SDImageCachesManager.m; sourceTree = ""; }; - 314DF40A6DB850AB51424A6F2B1D779C /* GDTCORUploadBatch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORUploadBatch.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORUploadBatch.m; sourceTree = ""; }; - 31EED164FF5843CCDDBF9C914BD41B35 /* Mockingjay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Mockingjay.h; path = Sources/Mockingjay/Mockingjay.h; sourceTree = ""; }; - 3230D4195CC6F7787F106E4E08891CA9 /* AbstractActionSheetPicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AbstractActionSheetPicker.h; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/AbstractActionSheetPicker.h; sourceTree = ""; }; + 164FF34DC7E9A852524BA8F8889B253D /* CryptoSwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CryptoSwift.release.xcconfig; sourceTree = ""; }; + 1653E6C2BE2B7BEBEB61883E847EF596 /* GULAppEnvironmentUtil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULAppEnvironmentUtil.m; path = GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.m; sourceTree = ""; }; + 16B4A9A6BED7E99535ABC2962B36BCF0 /* FirebaseMessaging.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseMessaging.debug.xcconfig; sourceTree = ""; }; + 16D2535B01337419DCB6B7AA7F357640 /* SDImageAWebPCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageAWebPCoder.m; path = SDWebImage/Core/SDImageAWebPCoder.m; sourceTree = ""; }; + 173BB89C74EDF388533011E15206D618 /* GDTCORFlatFileStorage+Promises.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "GDTCORFlatFileStorage+Promises.h"; path = "GoogleDataTransport/GDTCORLibrary/Private/GDTCORFlatFileStorage+Promises.h"; sourceTree = ""; }; + 17556347F56716DD69265DF5CE773998 /* BlockModeOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlockModeOptions.swift; path = Sources/CryptoSwift/BlockMode/BlockModeOptions.swift; sourceTree = ""; }; + 175D841F6C2A409853B98E88723029A5 /* GDTCORLifecycle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORLifecycle.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORLifecycle.m; sourceTree = ""; }; + 17E112F213728306929ABAAA0BBAD6AE /* GULMutableDictionary.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULMutableDictionary.m; path = GoogleUtilities/Network/GULMutableDictionary.m; sourceTree = ""; }; + 17F0DE74F11971DCF93741D2AE964BAD /* Aliases.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Aliases.swift; path = RealmSwift/Aliases.swift; sourceTree = ""; }; + 183916BA5832B1125690D63520919F70 /* Property.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Property.swift; path = RealmSwift/Property.swift; sourceTree = ""; }; + 186522BBE623AD946669C9A507583BD7 /* RLMArray.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMArray.mm; path = Realm/RLMArray.mm; sourceTree = ""; }; + 1884FC6CA6542AAD8723028E471BCEF3 /* FIRInteropEventNames.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInteropEventNames.h; path = Interop/Analytics/Public/FIRInteropEventNames.h; sourceTree = ""; }; + 18C80A43EB44F0E62A207FA78C04C3C3 /* FIRMessagingTokenFetchOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingTokenFetchOperation.h; path = FirebaseMessaging/Sources/Token/FIRMessagingTokenFetchOperation.h; sourceTree = ""; }; + 18D5BEA6637B5DE87ADD67760EF53F32 /* ZeroPadding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZeroPadding.swift; path = Sources/CryptoSwift/ZeroPadding.swift; sourceTree = ""; }; + 1925FF0F5EEC34AE2C4AAA1C6226AC70 /* FIRDependency.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDependency.h; path = FirebaseCore/Sources/Private/FIRDependency.h; sourceTree = ""; }; + 196ACE4F3702EB309112A01BAAA80186 /* SDWebImage.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.release.xcconfig; sourceTree = ""; }; + 19BF348B2456B511A825BA5257385DD1 /* PKCS7.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PKCS7.swift; path = Sources/CryptoSwift/PKCS/PKCS7.swift; sourceTree = ""; }; + 1A0AE9E33952783CDA96AED14FD9B5D1 /* IQKeyboardManagerSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardManagerSwift-Info.plist"; sourceTree = ""; }; + 1A8A2F06F0D82F51910105C8D83FB48A /* String+FoundationExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+FoundationExtension.swift"; path = "Sources/CryptoSwift/Foundation/String+FoundationExtension.swift"; sourceTree = ""; }; + 1A92973F8132BBD460A9D3152327C5EB /* FIRCoreDiagnosticsData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCoreDiagnosticsData.h; path = Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h; sourceTree = ""; }; + 1AC05C3E033285B28AA91CD51CD960F2 /* UIImage+Transform.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Transform.m"; path = "SDWebImage/Core/UIImage+Transform.m"; sourceTree = ""; }; + 1AE1274662E7A3145CB7B1B0A3504C55 /* Alamofire.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Alamofire.modulemap; sourceTree = ""; }; + 1AE3EE2DEE883E075187AD4918626511 /* URITemplate.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = URITemplate.debug.xcconfig; sourceTree = ""; }; + 1B2F13C0805300E59B783FB5E222CBC2 /* SDDiskCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDDiskCache.h; path = SDWebImage/Core/SDDiskCache.h; sourceTree = ""; }; + 1B42558C32A1FD2F89049E3384432943 /* GULNetworkConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULNetworkConstants.m; path = GoogleUtilities/Network/GULNetworkConstants.m; sourceTree = ""; }; + 1BD50408843A7D771E39BFF6691FA5A9 /* RealmSwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RealmSwift.debug.xcconfig; sourceTree = ""; }; + 1C3245EC9BB084F5342B21D389C88E5F /* FIRMessagingInterop.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingInterop.h; path = FirebaseMessaging/Sources/Interop/FIRMessagingInterop.h; sourceTree = ""; }; + 1C80393FBAA2987B924AA1F484CD95D8 /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/Core/UIImageView+WebCache.m"; sourceTree = ""; }; + 1CD14704836DFBBAA2A320D727DC5654 /* IQKeyboardManagerSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardManagerSwift-dummy.m"; sourceTree = ""; }; + 1D0A126A6DC0299326169F5255EEC33C /* RLMConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMConstants.h; path = include/RLMConstants.h; sourceTree = ""; }; + 1DA9B4A60A50F7D770689F1613B2ADDD /* SWActionSheet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SWActionSheet.m; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/SWActionSheet.m; sourceTree = ""; }; + 1DC690A50A8FC6E3664DCCA6A2F66E78 /* GULNetworkURLSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULNetworkURLSession.m; path = GoogleUtilities/Network/GULNetworkURLSession.m; sourceTree = ""; }; + 1E2D7D7BC83A0DB5B41A87BA2238B3F4 /* Alamofire.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.release.xcconfig; sourceTree = ""; }; + 1E6793ABEE4BCA72BFF1F256D49A61CC /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/Core/SDWebImageManager.h; sourceTree = ""; }; + 1F3F4BE17084ED51B2F66919D5AA3314 /* FBLPromise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBLPromise.h; path = Sources/FBLPromises/include/FBLPromise.h; sourceTree = ""; }; + 1F4EAACD0E8EA6864328386047EAC1D0 /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "SDWebImage/Core/UIButton+WebCache.h"; sourceTree = ""; }; + 1F50D564F28D21D151DDB136E192DDCD /* FIRMessagingAPNSInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingAPNSInfo.h; path = FirebaseMessaging/Sources/Token/FIRMessagingAPNSInfo.h; sourceTree = ""; }; + 1F75ED21D56BA218674B25FE4E05FA63 /* RLMPredicateUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMPredicateUtil.mm; path = Realm/RLMPredicateUtil.mm; sourceTree = ""; }; + 1FC66F48CACC09AAC6190A0D13F6C8CB /* GULNSData+zlib.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "GULNSData+zlib.m"; path = "GoogleUtilities/NSData+zlib/GULNSData+zlib.m"; sourceTree = ""; }; + 1FFF05B3A924CA8BBEDDB3F284059A1C /* FBLPromise+Race.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Race.m"; path = "Sources/FBLPromises/FBLPromise+Race.m"; sourceTree = ""; }; + 202CADAFA25D2D647E8966451802FB7A /* PromisesObjC-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "PromisesObjC-Info.plist"; sourceTree = ""; }; + 203B166F25E8E0184A8F9013523E33F9 /* FIRMessagingTokenManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingTokenManager.h; path = FirebaseMessaging/Sources/Token/FIRMessagingTokenManager.h; sourceTree = ""; }; + 2046ECE5BE6FA08DD97CEBC197948AA4 /* GDTCORTransport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORTransport.h; path = GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCORTransport.h; sourceTree = ""; }; + 2052C40B6071A9CB9E6B8D76A0AE30C0 /* FIRInstallationsHTTPError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsHTTPError.m; path = FirebaseInstallations/Source/Library/Errors/FIRInstallationsHTTPError.m; sourceTree = ""; }; + 20FAD7748BD61979750F439CC076A93A /* UIImage+Metadata.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Metadata.m"; path = "SDWebImage/Core/UIImage+Metadata.m"; sourceTree = ""; }; + 2103B96B229AC47E2173FD6D91A2FF8E /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/Core/SDWebImageManager.m; sourceTree = ""; }; + 214363DB4E5E4ECD5ADF5761CB7F8FB1 /* SlideMenuControllerSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SlideMenuControllerSwift-prefix.pch"; sourceTree = ""; }; + 2182CACFEEDBB7D7AE3233A901E28526 /* Toast-Swift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Toast-Swift-umbrella.h"; sourceTree = ""; }; + 21B03CA622E690725A6626C088E1D09F /* ReachabilitySwift */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = ReachabilitySwift; path = Reachability.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 21CA59B37340EC61A8C33CF7650E10C7 /* Pods-MyStudiesTests */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-MyStudiesTests"; path = Pods_MyStudiesTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 21CD99DC88689CA38D69CB3C08DF3DE1 /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/Core/UIImage+MultiFormat.h"; sourceTree = ""; }; + 21FEDA89A23387679FAD97F0EFB38224 /* Toast-Swift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Toast-Swift.debug.xcconfig"; sourceTree = ""; }; + 2253712B6523B037EEA43A5E861FD0F3 /* GULLoggerCodes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULLoggerCodes.h; path = GoogleUtilities/Common/GULLoggerCodes.h; sourceTree = ""; }; + 226800BF273B26990AA0FF5EF47E5E7E /* SDWebImageDownloaderRequestModifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderRequestModifier.m; path = SDWebImage/Core/SDWebImageDownloaderRequestModifier.m; sourceTree = ""; }; + 22805B2E34D9DF8AA6F023CE27EE5621 /* SDAnimatedImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImage.h; path = SDWebImage/Core/SDAnimatedImage.h; sourceTree = ""; }; + 2285C7BF5AA76D4D7094E6431B2FCC58 /* FBLPromise+Recover.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Recover.h"; path = "Sources/FBLPromises/include/FBLPromise+Recover.h"; sourceTree = ""; }; + 22C045FA2E45CFF26482BA33B2CAC9B3 /* SDFileAttributeHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDFileAttributeHelper.h; path = SDWebImage/Private/SDFileAttributeHelper.h; sourceTree = ""; }; + 2310543941A54A3646D841D1F49AB2BD /* GDTCORStorageEventSelector.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORStorageEventSelector.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORStorageEventSelector.m; sourceTree = ""; }; + 23275A4BFFC38771F513E7CAABEF6129 /* RLMNetworkClient.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMNetworkClient.mm; path = Realm/RLMNetworkClient.mm; sourceTree = ""; }; + 232E5758D238386213681400D75E7268 /* SDGraphicsImageRenderer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDGraphicsImageRenderer.m; path = SDWebImage/Core/SDGraphicsImageRenderer.m; sourceTree = ""; }; + 232FB2CE82A48CC029AFD0424C25D8C4 /* FIRMessagingBackupExcludedPlist.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingBackupExcludedPlist.m; path = FirebaseMessaging/Sources/Token/FIRMessagingBackupExcludedPlist.m; sourceTree = ""; }; + 238BADB8D2DF0E77C357F71B9765C968 /* FirebaseCoreInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseCoreInternal.h; path = FirebaseCore/Sources/Private/FirebaseCoreInternal.h; sourceTree = ""; }; + 239D66620DF32FD8BB09D702E83D275F /* IQKeyboardManagerSwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManagerSwift.release.xcconfig; sourceTree = ""; }; + 23A07E5EBF88626AF40A2A0DFE06399C /* FIRMessagingTopicOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingTopicOperation.m; path = FirebaseMessaging/Sources/FIRMessagingTopicOperation.m; sourceTree = ""; }; + 24CD7F1F6A9EFAC4207F37E6A723C3F0 /* RLMRealmConfiguration+Sync.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = "RLMRealmConfiguration+Sync.mm"; path = "Realm/RLMRealmConfiguration+Sync.mm"; sourceTree = ""; }; + 24D52884ECAFD090E5D42AB429DBBFEF /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/Core/UIView+WebCacheOperation.h"; sourceTree = ""; }; + 24F4020A274C6C9968F96807F3298F5B /* IQUIViewController+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIViewController+Additions.swift"; path = "IQKeyboardManagerSwift/Categories/IQUIViewController+Additions.swift"; sourceTree = ""; }; + 24F449C44B57967C5D754656FF206DCC /* RLMProperty.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMProperty.h; path = include/RLMProperty.h; sourceTree = ""; }; + 2516768042410629379B76D78BCDABF0 /* IQToolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQToolbar.swift; path = IQKeyboardManagerSwift/IQToolbar/IQToolbar.swift; sourceTree = ""; }; + 253EAAF31418DB93D32BB190E09A5E61 /* SDWebImage.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.debug.xcconfig; sourceTree = ""; }; + 254B7E87A46E81B959B878436D36FF40 /* FirebaseMessaging.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseMessaging.release.xcconfig; sourceTree = ""; }; + 261D533A9D09F851E4D6C4705A6BEC5A /* RLMSyncCredentials.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncCredentials.h; path = include/RLMSyncCredentials.h; sourceTree = ""; }; + 2653098F7F86B721C8AEB33773CADE4A /* GULHeartbeatDateStorage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULHeartbeatDateStorage.m; path = GoogleUtilities/Environment/GULHeartbeatDateStorage.m; sourceTree = ""; }; + 26CAA31B99921D7EEC52278EEF31B2BC /* RLMUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMUtil.mm; path = Realm/RLMUtil.mm; sourceTree = ""; }; + 272291D466318A926383BA802F3FAA26 /* FIRMessagingAuthKeychain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingAuthKeychain.m; path = FirebaseMessaging/Sources/Token/FIRMessagingAuthKeychain.m; sourceTree = ""; }; + 275B9FD49BD02C6B329A5F53A9515369 /* SDImageCoderHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCoderHelper.m; path = SDWebImage/Core/SDImageCoderHelper.m; sourceTree = ""; }; + 27DEA7D794F00A123D85FE61B4C7F6B0 /* FIRConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRConfiguration.m; path = FirebaseCore/Sources/FIRConfiguration.m; sourceTree = ""; }; + 28863E45B912A9BC94254CE63EB18D85 /* UIColor+SDHexString.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+SDHexString.h"; path = "SDWebImage/Private/UIColor+SDHexString.h"; sourceTree = ""; }; + 289B40B5569980B9DA8326D6E99F392E /* SDImageLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageLoader.h; path = SDWebImage/Core/SDImageLoader.h; sourceTree = ""; }; + 28FE13834F2A78F2B96F8D97F12B7CDA /* FBLPromise+Reduce.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Reduce.h"; path = "Sources/FBLPromises/include/FBLPromise+Reduce.h"; sourceTree = ""; }; + 29162A0581521628960574A01316BDF0 /* DistancePickerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DistancePickerView.m; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/DistancePickerView.m; sourceTree = ""; }; + 2976707D92DC19E2837FD3A16CFCAEB0 /* RealmCollection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RealmCollection.swift; path = RealmSwift/RealmCollection.swift; sourceTree = ""; }; + 2989F02D3A300DFBF9AE8B59A6FD2A39 /* IQKeyboardManagerSwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManagerSwift.debug.xcconfig; sourceTree = ""; }; + 298C17E2B96E1102A88DD9FEF27F77AE /* Combine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Combine.swift; path = RealmSwift/Combine.swift; sourceTree = ""; }; + 29CF6BAC9C5524BEE6735290DE18A7C1 /* FIRInstallationsBackoffController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsBackoffController.h; path = FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsBackoffController.h; sourceTree = ""; }; + 2A34F287062DAEA8F748AA7B037F2BCB /* FirebaseCoreDiagnostics-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FirebaseCoreDiagnostics-Info.plist"; sourceTree = ""; }; + 2A8E14937455517AE7C4DAB052E2081B /* RLMSwiftSupport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RLMSwiftSupport.m; path = Realm/RLMSwiftSupport.m; sourceTree = ""; }; + 2AF4AB6D6C07698036A9FBDCB500EAA6 /* FIRInstallationsHTTPError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsHTTPError.h; path = FirebaseInstallations/Source/Library/Errors/FIRInstallationsHTTPError.h; sourceTree = ""; }; + 2B136F9C45BAE3737E765F915F354D86 /* UIImage+MemoryCacheCost.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MemoryCacheCost.h"; path = "SDWebImage/Core/UIImage+MemoryCacheCost.h"; sourceTree = ""; }; + 2B44FFC9B7D2F052D2EBFBA30D60EC31 /* FIRMessagingAuthService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingAuthService.h; path = FirebaseMessaging/Sources/Token/FIRMessagingAuthService.h; sourceTree = ""; }; + 2B6641D11BC7AC86FB0829F329CD9610 /* FIRInstallationsSingleOperationPromiseCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsSingleOperationPromiseCache.m; path = FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsSingleOperationPromiseCache.m; sourceTree = ""; }; + 2B6D52104C8C8971AD52BC7B175B1F5F /* FBLPromise+Timeout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Timeout.m"; path = "Sources/FBLPromises/FBLPromise+Timeout.m"; sourceTree = ""; }; + 2B8815694B91A8617C4797DE51CD3540 /* FIRLibrary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRLibrary.h; path = FirebaseCore/Sources/Private/FIRLibrary.h; sourceTree = ""; }; + 2BBFBE048CC7616F01FCDFD89F2EC8FD /* GDTCCTUploadOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCCTUploadOperation.m; path = GoogleDataTransport/GDTCCTLibrary/GDTCCTUploadOperation.m; sourceTree = ""; }; + 2BC9A12907B21FFD6019EEBD418A1916 /* ActionSheetPicker-3.0.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "ActionSheetPicker-3.0.modulemap"; sourceTree = ""; }; + 2BCF93BF622E68DD91D8085EDA79E224 /* PKCS5.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PKCS5.swift; path = Sources/CryptoSwift/PKCS/PKCS5.swift; sourceTree = ""; }; + 2BE953515C8804F9559351E43F70B533 /* GULReachabilityMessageCode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULReachabilityMessageCode.h; path = GoogleUtilities/Reachability/GULReachabilityMessageCode.h; sourceTree = ""; }; + 2C10DF7C79C9CECA6E502F5442898ADE /* GoogleDataTransport-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GoogleDataTransport-Info.plist"; sourceTree = ""; }; + 2C3797347C2210AC6AB2BA4B8874341F /* Combine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Combine.swift; path = Source/Combine.swift; sourceTree = ""; }; + 2C47955FAEBD057EF05A124649DA77DB /* PCBC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PCBC.swift; path = Sources/CryptoSwift/BlockMode/PCBC.swift; sourceTree = ""; }; + 2C84B9FBADEAED841694D655A99B8923 /* FIRVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRVersion.h; path = FirebaseCore/Sources/Public/FirebaseCore/FIRVersion.h; sourceTree = ""; }; + 2C96889F60BFA511A54235EF1F4EFF20 /* RLMRealmUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMRealmUtil.mm; path = Realm/RLMRealmUtil.mm; sourceTree = ""; }; + 2D199AB7770FB1CA4CFA31E43161DFF9 /* Authenticator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Authenticator.swift; path = Sources/CryptoSwift/Authenticator.swift; sourceTree = ""; }; + 2D37BB179447B790A4451862B6AA9763 /* GULSwizzler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULSwizzler.m; path = GoogleUtilities/MethodSwizzler/GULSwizzler.m; sourceTree = ""; }; + 2D528F0D8937E74B679CDBEB2E38580D /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/Core/SDWebImageOperation.h; sourceTree = ""; }; + 2D9DF334AD742E96E98ACD959F55F76E /* ISO78164Padding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ISO78164Padding.swift; path = Sources/CryptoSwift/ISO78164Padding.swift; sourceTree = ""; }; + 2E547766466E019AF9920490BDAFF80B /* GULNetworkConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULNetworkConstants.h; path = GoogleUtilities/Network/Public/GoogleUtilities/GULNetworkConstants.h; sourceTree = ""; }; + 2EA46C16911E09AA35F596EB0ECD3431 /* GDTCORPlatform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORPlatform.h; path = GoogleDataTransport/GDTCORLibrary/Internal/GDTCORPlatform.h; sourceTree = ""; }; + 2EC53384D4743591FB5FE0E9F8D0F85A /* GDTCORUploadCoordinator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORUploadCoordinator.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadCoordinator.h; sourceTree = ""; }; + 2ED122F473D59CA33CE6B81ED4B9F82A /* ObjectiveCSupport+Sync.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ObjectiveCSupport+Sync.swift"; path = "RealmSwift/ObjectiveCSupport+Sync.swift"; sourceTree = ""; }; + 2FD7CDFFB7B9502E730382217BEED0F7 /* Sync.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Sync.swift; path = RealmSwift/Sync.swift; sourceTree = ""; }; + 2FEF70CC1C3F3E0854F2D6D92936B15D /* MockingjayProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MockingjayProtocol.swift; path = Sources/Mockingjay/MockingjayProtocol.swift; sourceTree = ""; }; + 301DC1A682D522356B7B05C682A2178B /* cct.nanopb.c */ = {isa = PBXFileReference; includeInIndex = 1; name = cct.nanopb.c; path = GoogleDataTransport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.c; sourceTree = ""; }; + 307B04FF0227E17EC7DC590F992BC7A0 /* nanopb-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "nanopb-dummy.m"; sourceTree = ""; }; + 3082551530D4F9F80AF74AAE1613F888 /* RLMQueryUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMQueryUtil.mm; path = Realm/RLMQueryUtil.mm; sourceTree = ""; }; + 30941BDA5284148664051626E909A984 /* MD5.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MD5.swift; path = Sources/CryptoSwift/MD5.swift; sourceTree = ""; }; + 30F869B0D88AF4110FBDC7FCC3E14E18 /* Bit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Bit.swift; path = Sources/CryptoSwift/Bit.swift; sourceTree = ""; }; + 31142395B647915A87438E257105247C /* librealmcore-ios.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; name = "librealmcore-ios.a"; path = "core/librealmcore-ios.a"; sourceTree = ""; }; + 31461360C6B500E9622692F038BD599C /* List.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = List.swift; path = RealmSwift/List.swift; sourceTree = ""; }; + 314C749436D4A87B600D47700AE7BCF3 /* LinkingObjects.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LinkingObjects.swift; path = RealmSwift/LinkingObjects.swift; sourceTree = ""; }; + 3263CAA0BC54D21B0E4A6596E847B597 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 32647D8C004CBADF70621F2769336BBD /* pb_common.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pb_common.c; sourceTree = ""; }; 327E0C1B0AB086D09B90F529EE0762DA /* Pods-MyStudies.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-MyStudies.modulemap"; sourceTree = ""; }; - 32EDBEAFA27BF7105E9222E0C4C56E47 /* RLMSyncManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncManager.h; path = include/RLMSyncManager.h; sourceTree = ""; }; - 3347A1AB6546F0A3977529B8F199DC41 /* FBLPromises.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FBLPromises.framework; path = PromisesObjC.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 33BB7DA6ECF2D95DA65F887C501E3D14 /* FirebaseCoreInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseCoreInternal.h; path = FirebaseCore/Sources/Private/FirebaseCoreInternal.h; sourceTree = ""; }; - 33BBB4CE14C3DFD13215A8C7D7EB11D4 /* SDWebImageOptionsProcessor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageOptionsProcessor.m; path = SDWebImage/Core/SDWebImageOptionsProcessor.m; sourceTree = ""; }; - 3420442C8E639DC4A7E3B39DA0EC211E /* FIRCoreDiagnosticsConnector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCoreDiagnosticsConnector.h; path = FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h; sourceTree = ""; }; - 346099D94443E80FCAF9A2B788B1F37B /* FIRMessagingTokenStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingTokenStore.m; path = FirebaseMessaging/Sources/Token/FIRMessagingTokenStore.m; sourceTree = ""; }; - 347C1F87E1B278AAC467E3F75112F018 /* Realm-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Realm-Info.plist"; sourceTree = ""; }; - 359A536046D13F9BF9A4977AA85528F9 /* FBLPromisePrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBLPromisePrivate.h; path = Sources/FBLPromises/include/FBLPromisePrivate.h; sourceTree = ""; }; - 35CADD0DB9B3DF2FC6ADB24779449323 /* Mockingjay.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Mockingjay.swift; path = Sources/Mockingjay/Mockingjay.swift; sourceTree = ""; }; - 3678D7EE39A50863492E94161B2802DA /* SDDeviceHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDDeviceHelper.h; path = SDWebImage/Private/SDDeviceHelper.h; sourceTree = ""; }; - 36CCB995FB5B9BF5BA18B6B93BE6421C /* MockingjayURLSessionConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MockingjayURLSessionConfiguration.m; path = Sources/Mockingjay/MockingjayURLSessionConfiguration.m; sourceTree = ""; }; - 36D3CBD2B108BFD3BE648EA9CC38ABDD /* Blowfish+Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Blowfish+Foundation.swift"; path = "Sources/CryptoSwift/Foundation/Blowfish+Foundation.swift"; sourceTree = ""; }; - 36F9D0013D1BED072F46FB7E4D1C6081 /* Request.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Request.swift; path = Source/Request.swift; sourceTree = ""; }; - 37667D87938175B0B9E0276B63D19F0B /* FIRInstallationsIIDTokenStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsIIDTokenStore.h; path = FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDTokenStore.h; sourceTree = ""; }; - 37B54E70FA95282CF15A607B01677C05 /* SHA2.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SHA2.swift; path = Sources/CryptoSwift/SHA2.swift; sourceTree = ""; }; - 38238CF7AD890DAF8D919747BF49E4AD /* Cryptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cryptor.swift; path = Sources/CryptoSwift/Cryptor.swift; sourceTree = ""; }; - 38596DD1A62B86E3D0DFF6B6F9131A57 /* ActionSheetDatePicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetDatePicker.h; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/ActionSheetDatePicker.h; sourceTree = ""; }; - 386DE82B6615203FECE5C4CA67E66DF4 /* nanopb-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "nanopb-dummy.m"; sourceTree = ""; }; - 38BEFC79FC0B3038FC08CEAE376D479A /* RLMRealm_Dynamic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealm_Dynamic.h; path = include/RLMRealm_Dynamic.h; sourceTree = ""; }; - 38F70518F75132A097074E43D71C78CF /* cct.nanopb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = cct.nanopb.h; path = GoogleDataTransport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.h; sourceTree = ""; }; - 3A29068EA38DE61C3E2D666A647F2BE4 /* UInt8+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UInt8+Extension.swift"; path = "Sources/CryptoSwift/UInt8+Extension.swift"; sourceTree = ""; }; - 3A335F797F0FB9F0EC941DFFE5B83A51 /* FBLPromise+Retry.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Retry.m"; path = "Sources/FBLPromises/FBLPromise+Retry.m"; sourceTree = ""; }; - 3A3AFEA306C07447240F9D4673A276EB /* URITemplate-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "URITemplate-umbrella.h"; sourceTree = ""; }; - 3A71E9725D3A9ED066A2DC3E2EA3C0DA /* ReachabilitySwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ReachabilitySwift.modulemap; sourceTree = ""; }; - 3A75C31C67E549259D25BDE159CEA0FE /* FBLPromise+Do.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Do.h"; path = "Sources/FBLPromises/include/FBLPromise+Do.h"; sourceTree = ""; }; - 3A9AE4009397240F73870331DE9EC85C /* Toast-Swift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Toast-Swift.debug.xcconfig"; sourceTree = ""; }; - 3AE488274939C10B2FA5F802F96755AD /* ObjectiveCSupport+Sync.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ObjectiveCSupport+Sync.swift"; path = "RealmSwift/ObjectiveCSupport+Sync.swift"; sourceTree = ""; }; - 3B87A45E45815350DF624366426FBC52 /* FBLPromise+Async.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Async.m"; path = "Sources/FBLPromises/FBLPromise+Async.m"; sourceTree = ""; }; - 3B96489B2A8704F7FD5BA2909A35C612 /* SDWebImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SDWebImage.modulemap; sourceTree = ""; }; - 3B9ADF3C3A0BAD3C891E96F90C0ADD15 /* GULNetworkConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULNetworkConstants.m; path = GoogleUtilities/Network/GULNetworkConstants.m; sourceTree = ""; }; - 3BDB3002AF727D595FE3C32DF44492E3 /* FIRInstallationsAPIService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsAPIService.h; path = FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsAPIService.h; sourceTree = ""; }; - 3BFA3AA7F1811156155860B2A54C4772 /* RLMRealmConfiguration+Sync.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = "RLMRealmConfiguration+Sync.mm"; path = "Realm/RLMRealmConfiguration+Sync.mm"; sourceTree = ""; }; - 3C46201584D8E0A2D22CBC11EB255C9A /* RLMThreadSafeReference.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMThreadSafeReference.h; path = include/RLMThreadSafeReference.h; sourceTree = ""; }; - 3C71360D51309A6708D0136DA45D4A9A /* SDAnimatedImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SDAnimatedImageView+WebCache.h"; path = "SDWebImage/Core/SDAnimatedImageView+WebCache.h"; sourceTree = ""; }; - 3CCBF9796C8E7B87420F14B71979E65B /* AES.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AES.swift; path = Sources/CryptoSwift/AES.swift; sourceTree = ""; }; - 3D1223B53F45937C2D8E549F844CE896 /* HMAC+Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "HMAC+Foundation.swift"; path = "Sources/CryptoSwift/Foundation/HMAC+Foundation.swift"; sourceTree = ""; }; - 3D24851DF2A7139150ADCA3F485D00DC /* Mockingjay.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Mockingjay.framework; path = Mockingjay.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 3D864C8C01CC51B7F19D672BC99E2D5F /* FIRAppInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAppInternal.h; path = FirebaseCore/Sources/Private/FIRAppInternal.h; sourceTree = ""; }; - 3DA4FD1697C659CE1EE345AD47DF790A /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/Core/SDWebImageOperation.h; sourceTree = ""; }; - 3E4A7C20A6E2E91AB1AB49340B5A6FFB /* FirebaseInstallations.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseInstallations.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 3E5A2302A76BC97D7385934D695A5324 /* FIRInstallationsAuthTokenResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsAuthTokenResult.h; path = FirebaseInstallations/Source/Library/Public/FirebaseInstallations/FIRInstallationsAuthTokenResult.h; sourceTree = ""; }; - 3E74C7F8E5CCF7349E76351E910A69CC /* UIImage+MemoryCacheCost.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MemoryCacheCost.h"; path = "SDWebImage/Core/UIImage+MemoryCacheCost.h"; sourceTree = ""; }; - 3E9FF6DAC13EBDD63D463D4238028831 /* FIRMessagingUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingUtilities.h; path = FirebaseMessaging/Sources/FIRMessagingUtilities.h; sourceTree = ""; }; - 3F2A8344AC870E4E3DC8C5485DCE9324 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/Core/UIImageView+WebCache.h"; sourceTree = ""; }; - 3F511A39ADC1E231659A49E1436A6C0A /* StringEncoding+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "StringEncoding+Alamofire.swift"; path = "Source/StringEncoding+Alamofire.swift"; sourceTree = ""; }; - 3FE405049FC2FB29BF75B7A35C818115 /* SlideMenuControllerSwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SlideMenuControllerSwift.debug.xcconfig; sourceTree = ""; }; - 3FE9D4DD0EE5BEAA6BE3E7E4956A5697 /* FIRMessagingBackupExcludedPlist.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingBackupExcludedPlist.m; path = FirebaseMessaging/Sources/Token/FIRMessagingBackupExcludedPlist.m; sourceTree = ""; }; - 400AA4E8EB633D266394275ACB8B6627 /* RLMSyncSessionRefreshHandle.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMSyncSessionRefreshHandle.mm; path = Realm/RLMSyncSessionRefreshHandle.mm; sourceTree = ""; }; - 401DED0A7A6F531F70739B837278EC78 /* UIImage+MemoryCacheCost.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MemoryCacheCost.m"; path = "SDWebImage/Core/UIImage+MemoryCacheCost.m"; sourceTree = ""; }; - 407B19389CE8A310DD46D01A3D6C6823 /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/Core/UIImageView+WebCache.m"; sourceTree = ""; }; - 407C0EA82D2794AFA141886522441A57 /* RLMThreadSafeReference.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMThreadSafeReference.mm; path = Realm/RLMThreadSafeReference.mm; sourceTree = ""; }; - 4147ADC1C327B0092BFEB8CAC124A35D /* CryptoSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "CryptoSwift-Info.plist"; sourceTree = ""; }; - 41557D2BDE7B328CD32E826C75C34482 /* PKCS5.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PKCS5.swift; path = Sources/CryptoSwift/PKCS/PKCS5.swift; sourceTree = ""; }; - 418077CEAAD453A2CE0566D5E5509F1F /* AuthenticationInterceptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AuthenticationInterceptor.swift; path = Source/AuthenticationInterceptor.swift; sourceTree = ""; }; + 328A5C96CF30412EB3C1B7EADE29BA33 /* FIRMessagingSyncMessageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingSyncMessageManager.m; path = FirebaseMessaging/Sources/FIRMessagingSyncMessageManager.m; sourceTree = ""; }; + 32C6AE4A06A83AFB21F4D6A5445F5089 /* FIRMessagingKeychain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingKeychain.h; path = FirebaseMessaging/Sources/Token/FIRMessagingKeychain.h; sourceTree = ""; }; + 333918872DEB5BF3A6E169A58B513191 /* FirebaseInstallations.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FirebaseInstallations.modulemap; sourceTree = ""; }; + 3347A1AB6546F0A3977529B8F199DC41 /* PromisesObjC */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = PromisesObjC; path = FBLPromises.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3356187259DB1C7293663BDDFDFCE292 /* NSImage+Compatibility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSImage+Compatibility.m"; path = "SDWebImage/Core/NSImage+Compatibility.m"; sourceTree = ""; }; + 33F5E03D74F5AA320D0137028300DFD6 /* UInt16+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UInt16+Extension.swift"; path = "Sources/CryptoSwift/UInt16+Extension.swift"; sourceTree = ""; }; + 341D3D7FF38A52056B04B400FDA3A053 /* SDImageAWebPCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageAWebPCoder.h; path = SDWebImage/Core/SDImageAWebPCoder.h; sourceTree = ""; }; + 345358275926E6904CA8446BB1CA1700 /* object.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = object.cpp; path = Realm/ObjectStore/src/object.cpp; sourceTree = ""; }; + 34929893181926D54E74552494C67DD8 /* GULAppDelegateSwizzler_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULAppDelegateSwizzler_Private.h; path = GoogleUtilities/AppDelegateSwizzler/Internal/GULAppDelegateSwizzler_Private.h; sourceTree = ""; }; + 352E5C3B9C4EE13565098E76A3F812BE /* Firebase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Firebase.h; path = CoreOnly/Sources/Firebase.h; sourceTree = ""; }; + 35350DE1440D129F75DD619CFA52EEFC /* GDTCORConsoleLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORConsoleLogger.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORConsoleLogger.m; sourceTree = ""; }; + 3575B3D52BABD185142F09359A0431AF /* FIRMessagingTokenDeleteOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingTokenDeleteOperation.h; path = FirebaseMessaging/Sources/Token/FIRMessagingTokenDeleteOperation.h; sourceTree = ""; }; + 35772521BDF8213DF50045F39ADA084A /* GULSecureCoding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULSecureCoding.h; path = GoogleUtilities/Environment/Public/GoogleUtilities/GULSecureCoding.h; sourceTree = ""; }; + 35D9F1DFE1454CA4DCBFC097E92887E2 /* Digest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Digest.swift; path = Sources/CryptoSwift/Digest.swift; sourceTree = ""; }; + 363BE38567B7028F170130B1B981D6CE /* FIRInstallationsIDController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsIDController.m; path = FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsIDController.m; sourceTree = ""; }; + 36E86EA86E30E46E397612FA984D6EDB /* NSError+FIRMessaging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSError+FIRMessaging.h"; path = "FirebaseMessaging/Sources/NSError+FIRMessaging.h"; sourceTree = ""; }; + 36F163FEF5F10CDBABF75F0E402F4184 /* FBLPromise+Race.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Race.h"; path = "Sources/FBLPromises/include/FBLPromise+Race.h"; sourceTree = ""; }; + 37AB95B73B3E07FBC1C21E8C11FD64D5 /* FIRLoggerLevel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRLoggerLevel.h; path = FirebaseCore/Sources/Public/FirebaseCore/FIRLoggerLevel.h; sourceTree = ""; }; + 382FB60C7C4EF1852D91C66987515F4D /* RealmSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RealmSwift-dummy.m"; sourceTree = ""; }; + 3889DA1D77D0CC868F31535ECE1FA026 /* GULNetworkInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULNetworkInternal.h; path = GoogleUtilities/Network/GULNetworkInternal.h; sourceTree = ""; }; + 38DFB1BF9513F31663E962AFBFB94CEE /* GULReachabilityChecker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULReachabilityChecker.h; path = GoogleUtilities/Reachability/Public/GoogleUtilities/GULReachabilityChecker.h; sourceTree = ""; }; + 3916E6195CD4C68739B781772014C7E2 /* FIRInteropParameterNames.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInteropParameterNames.h; path = Interop/Analytics/Public/FIRInteropParameterNames.h; sourceTree = ""; }; + 3953AE17C7700CC8842FB26A55BF9B76 /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/CoreTelephony.framework; sourceTree = DEVELOPER_DIR; }; + 39685141D196933DC50441D7F8CC70C6 /* IQInvocation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQInvocation.swift; path = IQKeyboardManagerSwift/IQToolbar/IQInvocation.swift; sourceTree = ""; }; + 3A142289F8D7C9C05BA9D87FF751F846 /* MultipartFormData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartFormData.swift; path = Source/MultipartFormData.swift; sourceTree = ""; }; + 3A3BE509D836FC3C6D2387EF3B506E26 /* external_commit_helper.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = external_commit_helper.cpp; path = Realm/ObjectStore/src/impl/apple/external_commit_helper.cpp; sourceTree = ""; }; + 3AD14E581B487F55BD9C584A14D04B94 /* GULHeartbeatDateStorageUserDefaults.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULHeartbeatDateStorageUserDefaults.m; path = GoogleUtilities/Environment/GULHeartbeatDateStorageUserDefaults.m; sourceTree = ""; }; + 3AFF407D41F79B206C4ED6F608AC9214 /* FirebaseCore.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseCore.debug.xcconfig; sourceTree = ""; }; + 3BEE9BC20EAC927F80208F041F3D1BFA /* SDImageAPNGCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageAPNGCoder.m; path = SDWebImage/Core/SDImageAPNGCoder.m; sourceTree = ""; }; + 3C2524A45BA16D2EAC721535AB1E62E8 /* ThreadSafeReference.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ThreadSafeReference.swift; path = RealmSwift/ThreadSafeReference.swift; sourceTree = ""; }; + 3C5C0C38CF10DAC937D84A8B98840B30 /* GDTCORUploader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORUploader.h; path = GoogleDataTransport/GDTCORLibrary/Internal/GDTCORUploader.h; sourceTree = ""; }; + 3C8177666E8FD739690B4689F89755B3 /* FIRMessagingExtensionHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingExtensionHelper.h; path = FirebaseMessaging/Sources/Public/FirebaseMessaging/FIRMessagingExtensionHelper.h; sourceTree = ""; }; + 3CA89701332D4E50361C72D1A0839ACD /* FIRInstallationsErrorUtil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsErrorUtil.m; path = FirebaseInstallations/Source/Library/Errors/FIRInstallationsErrorUtil.m; sourceTree = ""; }; + 3CD68B8EFC8D06054D1FDB35C873FBD6 /* RLMClassInfo.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMClassInfo.mm; path = Realm/RLMClassInfo.mm; sourceTree = ""; }; + 3CEA5FB238F571B1F2A2ECE99154DB74 /* FirebaseMessaging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseMessaging.h; path = FirebaseMessaging/Sources/FirebaseMessaging.h; sourceTree = ""; }; + 3CEDAA9A43552D4E84683F56728904E6 /* RLMSyncSession.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMSyncSession.mm; path = Realm/RLMSyncSession.mm; sourceTree = ""; }; + 3CFF9B6EC3E61D2BEDFA053704DA00CA /* SDDiskCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDDiskCache.m; path = SDWebImage/Core/SDDiskCache.m; sourceTree = ""; }; + 3CFFCCBBB80B3B1B568ACBEE9C15039E /* Results.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Results.swift; path = RealmSwift/Results.swift; sourceTree = ""; }; + 3D24851DF2A7139150ADCA3F485D00DC /* Mockingjay */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Mockingjay; path = Mockingjay.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3DE5E0BE7EB7E86E441E7F282B5C3B69 /* SDWebImageDownloaderResponseModifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderResponseModifier.h; path = SDWebImage/Core/SDWebImageDownloaderResponseModifier.h; sourceTree = ""; }; + 3DE6A3C9B720D73EA03AA3BE4D3B9F02 /* FIRMessagingTokenFetchOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingTokenFetchOperation.m; path = FirebaseMessaging/Sources/Token/FIRMessagingTokenFetchOperation.m; sourceTree = ""; }; + 3EC9452D77ED1A96835CD67A80DF2F64 /* SDAsyncBlockOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAsyncBlockOperation.h; path = SDWebImage/Private/SDAsyncBlockOperation.h; sourceTree = ""; }; + 40B88C765D2533850E39D8F27A9AC327 /* UInt64+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UInt64+Extension.swift"; path = "Sources/CryptoSwift/UInt64+Extension.swift"; sourceTree = ""; }; + 40F739E2E783538510A8E71423F779DE /* SDImageCacheConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheConfig.h; path = SDWebImage/Core/SDImageCacheConfig.h; sourceTree = ""; }; + 41A20FC27E05100D81B5873C6766049B /* FBLPromisePrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBLPromisePrivate.h; path = Sources/FBLPromises/include/FBLPromisePrivate.h; sourceTree = ""; }; + 41C0DB8A35FCF8AC9736A6044FFB28F3 /* FirebaseCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FirebaseCore-Info.plist"; sourceTree = ""; }; 41C31BB07837A1BD687C404C2420456B /* Pods-MyStudies-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MyStudies-acknowledgements.markdown"; sourceTree = ""; }; - 41CFA1918BE4241B1A1AC31D78516FBF /* ActionSheetPicker-3.0-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ActionSheetPicker-3.0-umbrella.h"; sourceTree = ""; }; - 41E4B609B9ED90E731C3762FF56010F4 /* FIRMessagingTokenStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingTokenStore.h; path = FirebaseMessaging/Sources/Token/FIRMessagingTokenStore.h; sourceTree = ""; }; - 41F835695A0055130E4008FC969C8042 /* Data+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+Extension.swift"; path = "Sources/CryptoSwift/Foundation/Data+Extension.swift"; sourceTree = ""; }; - 424CC92A1DFE45CCE02FDA04EC73916F /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/Core/SDWebImageManager.h; sourceTree = ""; }; - 428318B3F24614FD364D1537B3E26350 /* GDTCORDirectorySizeTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORDirectorySizeTracker.h; path = GoogleDataTransport/GDTCORLibrary/Internal/GDTCORDirectorySizeTracker.h; sourceTree = ""; }; - 428D24AE27003C44D1F38A6606EF5B36 /* GDTCORLifecycle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORLifecycle.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORLifecycle.m; sourceTree = ""; }; - 431724020214A6F7A52D05A937BA68D4 /* list.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = list.cpp; path = Realm/ObjectStore/src/list.cpp; sourceTree = ""; }; - 431D6AD2AD76F92D5553A4199AB4D083 /* SDImageGIFCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageGIFCoder.h; path = SDWebImage/Core/SDImageGIFCoder.h; sourceTree = ""; }; - 4345FCEF681F59EF390184CE72D0E6CC /* URLEncodedFormEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLEncodedFormEncoder.swift; path = Source/URLEncodedFormEncoder.swift; sourceTree = ""; }; - 4358653149756F5FB1FBFF4F16A78A6E /* FirebaseCore.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseCore.debug.xcconfig; sourceTree = ""; }; - 437919EE08EC6BFCCBAC3BD346309742 /* RealmSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RealmSwift.framework; path = RealmSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 43D9E69C9DB48743E32D1CED03F575B4 /* FIRLibrary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRLibrary.h; path = FirebaseCore/Sources/Private/FIRLibrary.h; sourceTree = ""; }; - 44A787E2B38B6DD9272ECEB4FA30A7B0 /* GDTCORStorageEventSelector.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORStorageEventSelector.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORStorageEventSelector.m; sourceTree = ""; }; - 45D8C0D80BD6AED0DF166BCD8BC0302F /* SDWebImageError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageError.h; path = SDWebImage/Core/SDWebImageError.h; sourceTree = ""; }; - 467B20320803E6118AFD4D450CCA3CBB /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/Core/UIImage+MultiFormat.m"; sourceTree = ""; }; - 4698F5E317BE9BDBC28EB98E4D90D186 /* RLMObservation.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMObservation.mm; path = Realm/RLMObservation.mm; sourceTree = ""; }; - 46FE061DB976489F4B96875AE470D5C1 /* Padding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Padding.swift; path = Sources/CryptoSwift/Padding.swift; sourceTree = ""; }; - 47043D749809A5D228A9CD83F859E4C4 /* RLMConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RLMConstants.m; path = Realm/RLMConstants.m; sourceTree = ""; }; - 4727D23BEFA427118D70B96364985397 /* network_reachability_observer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = network_reachability_observer.cpp; path = Realm/ObjectStore/src/sync/impl/apple/network_reachability_observer.cpp; sourceTree = ""; }; - 474FDBF5FF8966AFDB911BACA2C5BA7F /* FBLPromises.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FBLPromises.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 47BBD24AF2DFA5C4B802260B7E1085C9 /* RetryPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RetryPolicy.swift; path = Source/RetryPolicy.swift; sourceTree = ""; }; - 480AAB33A312CA82AE61F505F0AEF9B1 /* SDAnimatedImageRep.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImageRep.h; path = SDWebImage/Core/SDAnimatedImageRep.h; sourceTree = ""; }; - 4855D9AD77F07FE71132A1617DD6ACE1 /* RealmSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RealmSwift.modulemap; sourceTree = ""; }; - 48CA79CE972CA130F3B98C5969E021BD /* GDTCCTUploader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCCTUploader.m; path = GoogleDataTransport/GDTCCTLibrary/GDTCCTUploader.m; sourceTree = ""; }; - 48FC60298EE0706240EE16412E87C195 /* ReachabilitySwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ReachabilitySwift.release.xcconfig; sourceTree = ""; }; - 49704C776C03DB5D973207C9C54D0E7A /* GULSceneDelegateSwizzler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULSceneDelegateSwizzler.m; path = GoogleUtilities/AppDelegateSwizzler/GULSceneDelegateSwizzler.m; sourceTree = ""; }; - 497B1E09724BEF3FF7FD7EBC64ACAB21 /* Schema.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Schema.swift; path = RealmSwift/Schema.swift; sourceTree = ""; }; - 499EF5B8D28905B12B780B3CD61A9672 /* GDTCORTransport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORTransport.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORTransport.m; sourceTree = ""; }; - 49F2621FB242E5BE194D8ED62819185E /* GULApplication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULApplication.h; path = GoogleUtilities/AppDelegateSwizzler/Public/GoogleUtilities/GULApplication.h; sourceTree = ""; }; - 4A0610993BF3A21BEDC0331AC74BCF08 /* SDImageIOAnimatedCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageIOAnimatedCoder.m; path = SDWebImage/Core/SDImageIOAnimatedCoder.m; sourceTree = ""; }; - 4A16F5E77A8F00736FC7EC916B21494D /* FBLPromise+Wrap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Wrap.h"; path = "Sources/FBLPromises/include/FBLPromise+Wrap.h"; sourceTree = ""; }; - 4A771BAFCBE02423B9261A03E8392C92 /* SDWebImageTransition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageTransition.h; path = SDWebImage/Core/SDWebImageTransition.h; sourceTree = ""; }; - 4A81D9BB1CDD86F8D47F1BCAE80233CB /* SDGraphicsImageRenderer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDGraphicsImageRenderer.m; path = SDWebImage/Core/SDGraphicsImageRenderer.m; sourceTree = ""; }; - 4AA413F046AFBAEA8AB95CE6974E2545 /* RLMSyncUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncUtil.h; path = include/RLMSyncUtil.h; sourceTree = ""; }; - 4AB99F15401665EED48F2DCB2FB2F122 /* nanopb.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = nanopb.modulemap; sourceTree = ""; }; - 4AD747B1B145F396CB866F7DEE0ACAFE /* FIRComponentContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponentContainer.h; path = FirebaseCore/Sources/Private/FIRComponentContainer.h; sourceTree = ""; }; - 4AFC5C54F905DDB55FDA199F580E0FF1 /* nanopb.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = nanopb.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 4B11B517153CB418E80BD4DB887FF43C /* FIRMessagingTokenFetchOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingTokenFetchOperation.h; path = FirebaseMessaging/Sources/Token/FIRMessagingTokenFetchOperation.h; sourceTree = ""; }; - 4B228E650F649CAA162CFDF44D7B78E7 /* GDTCCTUploader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCCTUploader.h; path = GoogleDataTransport/GDTCCTLibrary/Private/GDTCCTUploader.h; sourceTree = ""; }; - 4B4CCEE7D7BB836DA8FF55E0F983157F /* Toast-Swift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Toast-Swift.modulemap"; sourceTree = ""; }; - 4BE6DA74B44F1046517C807B43528A27 /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = SDWebImage/Core/SDWebImagePrefetcher.m; sourceTree = ""; }; - 4C0B2031AC82B7BC3B12C3F628E06856 /* RLMObjectSchema.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectSchema.h; path = include/RLMObjectSchema.h; sourceTree = ""; }; - 4C658F80BADD9BF0AFF419083A18A3F0 /* FirebaseCoreDiagnostics-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FirebaseCoreDiagnostics-dummy.m"; sourceTree = ""; }; - 4C78A2C49ECD2A029B535EADAF3DBE36 /* FirebaseCoreInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseCoreInternal.h; path = FirebaseCore/Sources/Private/FirebaseCoreInternal.h; sourceTree = ""; }; - 4CA3726D07BC30180D2666191E4C541F /* SDImageAssetManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageAssetManager.h; path = SDWebImage/Private/SDImageAssetManager.h; sourceTree = ""; }; - 4CA7613D1D20994E6A4F32EB8BB65BCA /* SDAnimatedImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SDAnimatedImageView+WebCache.m"; path = "SDWebImage/Core/SDAnimatedImageView+WebCache.m"; sourceTree = ""; }; - 4CB2DBF25A1D17A1A07269F5E6EAE563 /* URITemplate.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = URITemplate.release.xcconfig; sourceTree = ""; }; - 4D7A158188945A292C7229C1B0F81CCD /* IQKeyboardManagerSwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManagerSwift.release.xcconfig; sourceTree = ""; }; - 4D7D14929A15F9D5B0176E9CDE24C9F0 /* Utils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Utils.swift; path = Sources/CryptoSwift/Utils.swift; sourceTree = ""; }; - 4DACF37A31E17F90F1C66F2746050CBC /* SDImageAPNGCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageAPNGCoder.m; path = SDWebImage/Core/SDImageAPNGCoder.m; sourceTree = ""; }; - 4DFC44C94BC39670C0A4DAB333B3C9DB /* pb_decode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb_decode.h; sourceTree = ""; }; - 4E3897F7232EC713A7B9F337E71E3CD3 /* GoogleUtilities-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GoogleUtilities-dummy.m"; sourceTree = ""; }; - 4EB9F3A7FEC60780B14118789EAA1D4E /* SDWebImageOptionsProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOptionsProcessor.h; path = SDWebImage/Core/SDWebImageOptionsProcessor.h; sourceTree = ""; }; - 4EF116B0168428A5BC33403A25DA22B5 /* FIRMessagingContextManagerService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingContextManagerService.h; path = FirebaseMessaging/Sources/FIRMessagingContextManagerService.h; sourceTree = ""; }; - 4F1872D9097E8397C20B5A8D6DA18E50 /* UIImage+Transform.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Transform.m"; path = "SDWebImage/Core/UIImage+Transform.m"; sourceTree = ""; }; - 4F580D47F58651D2034D6C0F44074450 /* ObjectiveCSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObjectiveCSupport.swift; path = RealmSwift/ObjectiveCSupport.swift; sourceTree = ""; }; - 4FEC326411BC91F4F2B42B7A4666569E /* FIRInstallationsAuthTokenResultInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsAuthTokenResultInternal.h; path = FirebaseInstallations/Source/Library/FIRInstallationsAuthTokenResultInternal.h; sourceTree = ""; }; - 501AD06683AD4E27FF53EDDA150AD86C /* FBLPromiseError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBLPromiseError.m; path = Sources/FBLPromises/FBLPromiseError.m; sourceTree = ""; }; - 50AFE4F61A458B99F602B8C0B16FD50F /* SDImageCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCoder.h; path = SDWebImage/Core/SDImageCoder.h; sourceTree = ""; }; - 50C4031B83BB4A01B75DB3D7B766E5B7 /* FIRAnalyticsConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAnalyticsConfiguration.m; path = FirebaseCore/Sources/FIRAnalyticsConfiguration.m; sourceTree = ""; }; - 5148886951BEAF5EB22A32613ED23788 /* RLMConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMConstants.h; path = include/RLMConstants.h; sourceTree = ""; }; - 524035FA6C26E04B57BACCD9925A532B /* FBLPromise+Delay.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Delay.m"; path = "Sources/FBLPromises/FBLPromise+Delay.m"; sourceTree = ""; }; - 530CE1C0CF9E0EAE92FD2F8CEC3EEA35 /* ReachabilitySwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ReachabilitySwift-prefix.pch"; sourceTree = ""; }; - 531ECE962339B1BE353B1662749344A3 /* PKCS7.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PKCS7.swift; path = Sources/CryptoSwift/PKCS/PKCS7.swift; sourceTree = ""; }; - 5353BF79D83F058DDEFEB38385407A7E /* PromisesObjC-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "PromisesObjC-dummy.m"; sourceTree = ""; }; - 5358FBDAF7303977A415971B059F538D /* FIRCoreDiagnostics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCoreDiagnostics.m; path = Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnostics.m; sourceTree = ""; }; - 53980335770F8A09C4C7339EABEE8AFF /* GDTCORUploader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORUploader.h; path = GoogleDataTransport/GDTCORLibrary/Internal/GDTCORUploader.h; sourceTree = ""; }; - 53BFA135230FC31D40245189AF5E0C59 /* FIRMessagingTokenManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingTokenManager.m; path = FirebaseMessaging/Sources/Token/FIRMessagingTokenManager.m; sourceTree = ""; }; - 54063735C36300832D5415AC24D83590 /* GULReachabilityChecker+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "GULReachabilityChecker+Internal.h"; path = "GoogleUtilities/Reachability/GULReachabilityChecker+Internal.h"; sourceTree = ""; }; - 541DCEE9AC038D6D17A45DE00975B341 /* FBLPromise+Await.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Await.h"; path = "Sources/FBLPromises/include/FBLPromise+Await.h"; sourceTree = ""; }; - 544C4177378510804A127246BCF8EDCF /* GULLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULLogger.m; path = GoogleUtilities/Logger/GULLogger.m; sourceTree = ""; }; - 547E0F0E9C3FD84B7310D70A66C3C2B7 /* GULKeychainUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULKeychainUtils.h; path = GoogleUtilities/Environment/Public/GoogleUtilities/GULKeychainUtils.h; sourceTree = ""; }; - 55120C5C5BB01A700C2FCC53926BEB24 /* GULURLSessionDataResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULURLSessionDataResponse.h; path = GoogleUtilities/Environment/Public/GoogleUtilities/GULURLSessionDataResponse.h; sourceTree = ""; }; - 55B1EC469D3411172E2BADB83FAC81F4 /* StreamEncryptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StreamEncryptor.swift; path = Sources/CryptoSwift/StreamEncryptor.swift; sourceTree = ""; }; - 55DFDE0D991180170E72C2CE72A8C63A /* RLMObject_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObject_Private.h; path = include/RLMObject_Private.h; sourceTree = ""; }; - 55FCDE25725ED190E78EA751F46C2B39 /* GULKeychainStorage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULKeychainStorage.h; path = GoogleUtilities/Environment/Public/GoogleUtilities/GULKeychainStorage.h; sourceTree = ""; }; - 5646ED6F5BCD711B379A9F694D0A4B5A /* SDImageAWebPCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageAWebPCoder.h; path = SDWebImage/Core/SDImageAWebPCoder.h; sourceTree = ""; }; - 567E7701F9C7D5D0CAFBC3BFFB405157 /* ActionSheetCustomPicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetCustomPicker.h; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/ActionSheetCustomPicker.h; sourceTree = ""; }; - 5697BCE5F0F65CCD7FFCBCAE48D4A8DA /* pb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb.h; sourceTree = ""; }; - 56C371181087B6899177B4A563C53B84 /* RLMArray.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMArray.mm; path = Realm/RLMArray.mm; sourceTree = ""; }; - 56C8C0126D2AE3C78DD8297405088C5C /* SDImageAWebPCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageAWebPCoder.m; path = SDWebImage/Core/SDImageAWebPCoder.m; sourceTree = ""; }; - 56CD4BBC18CE67C39A7CF12B8605C90C /* Cipher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cipher.swift; path = Sources/CryptoSwift/Cipher.swift; sourceTree = ""; }; - 56D278275B058F795A19B8A5284AB104 /* SWActionSheet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SWActionSheet.m; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/SWActionSheet.m; sourceTree = ""; }; - 575AF376772B398A53BD47788A334E4C /* FIRMessagingTokenFetchOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingTokenFetchOperation.m; path = FirebaseMessaging/Sources/Token/FIRMessagingTokenFetchOperation.m; sourceTree = ""; }; - 581706FDA11032852763BF85646ED803 /* FIRCoreDiagnosticsInterop.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCoreDiagnosticsInterop.h; path = Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h; sourceTree = ""; }; - 581C0DABC4484037C6A839C72F26F953 /* GDTCORAssert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORAssert.h; path = GoogleDataTransport/GDTCORLibrary/Internal/GDTCORAssert.h; sourceTree = ""; }; - 58B57B98CE0FC88B70A4F95937983B2F /* librealmcore-ios.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; name = "librealmcore-ios.a"; path = "core/librealmcore-ios.a"; sourceTree = ""; }; - 593E670A8A84C0577E491FD16DF8F4CD /* OperationQueue+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "OperationQueue+Alamofire.swift"; path = "Source/OperationQueue+Alamofire.swift"; sourceTree = ""; }; - 59491E5FBA95EB70D5B820565FC54551 /* GULHeartbeatDateStorage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULHeartbeatDateStorage.m; path = GoogleUtilities/Environment/GULHeartbeatDateStorage.m; sourceTree = ""; }; - 5952E889205D2329C14CE59B7F11BB2B /* Results.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Results.swift; path = RealmSwift/Results.swift; sourceTree = ""; }; - 5991724F8BDE5DF993E8099E99EA827D /* StreamDecryptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StreamDecryptor.swift; path = Sources/CryptoSwift/StreamDecryptor.swift; sourceTree = ""; }; - 59BDAB41DB8A613F0C4A6D23D4D0DE29 /* FIRAnalyticsInteropListener.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAnalyticsInteropListener.h; path = Interop/Analytics/Public/FIRAnalyticsInteropListener.h; sourceTree = ""; }; - 5A336109209870C637555876732E12CA /* SDWebImageDownloaderRequestModifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderRequestModifier.m; path = SDWebImage/Core/SDWebImageDownloaderRequestModifier.m; sourceTree = ""; }; - 5A609A22563F4C47AB689C7F2639A538 /* FirebaseMessaging-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FirebaseMessaging-Info.plist"; sourceTree = ""; }; - 5A8B1E2C47B8DCFA7C15A6BC6FFF8E79 /* Protected.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Protected.swift; path = Source/Protected.swift; sourceTree = ""; }; - 5AA917770CC9A23BDC767A899ADB5FF3 /* Firebase.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Firebase.debug.xcconfig; sourceTree = ""; }; - 5AEA21C41773B656C22018B7F70EA7B5 /* CTR.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CTR.swift; path = Sources/CryptoSwift/BlockMode/CTR.swift; sourceTree = ""; }; - 5B654B4B042BA7DC93766943A643E42B /* FirebaseMessaging.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FirebaseMessaging.framework; path = FirebaseMessaging.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5B68D177712773CE78129178A34ECA61 /* SDAsyncBlockOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAsyncBlockOperation.h; path = SDWebImage/Private/SDAsyncBlockOperation.h; sourceTree = ""; }; - 5B69A6CBE35A2F01D911572A4A3974A1 /* FirebaseInstallationsInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseInstallationsInternal.h; path = FirebaseInstallations/Source/Library/Private/FirebaseInstallationsInternal.h; sourceTree = ""; }; - 5BD4D0AA9938C9E104775EFDF778F6E8 /* PromisesObjC.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PromisesObjC.release.xcconfig; sourceTree = ""; }; - 5C436844E51243B738467F6554C1302E /* sync_session.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_session.cpp; path = Realm/ObjectStore/src/sync/sync_session.cpp; sourceTree = ""; }; - 5C61B4CDC53A86188A9DE1485A8DAEBC /* FIRMessagingCheckinStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingCheckinStore.h; path = FirebaseMessaging/Sources/Token/FIRMessagingCheckinStore.h; sourceTree = ""; }; - 5C708F3B35B6ED8BDF28F2D6A3119690 /* FIRAnalyticsInterop.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAnalyticsInterop.h; path = Interop/Analytics/Public/FIRAnalyticsInterop.h; sourceTree = ""; }; - 5CDE7329D9840C6731AA3C68D1D35C55 /* FIRInstallationsSingleOperationPromiseCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsSingleOperationPromiseCache.m; path = FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsSingleOperationPromiseCache.m; sourceTree = ""; }; - 5CF2D6C518135EA851EF0784343BD5CA /* SlideMenuControllerSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SlideMenuControllerSwift-prefix.pch"; sourceTree = ""; }; - 5D1052EB83107367AB1BEB6C72F23502 /* GoogleDataTransport.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GoogleDataTransport.modulemap; sourceTree = ""; }; - 5D4364CCF9E6A683282E4501A476CFE4 /* UInt128.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UInt128.swift; path = Sources/CryptoSwift/UInt128.swift; sourceTree = ""; }; - 5D62DC0C397687B9A3F30B1968806DB5 /* Updatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Updatable.swift; path = Sources/CryptoSwift/Updatable.swift; sourceTree = ""; }; - 5D6A51F40E2E8F7B9FC79A9D96C40795 /* GDTCOREndpoints.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCOREndpoints.h; path = GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCOREndpoints.h; sourceTree = ""; }; - 5D797E9A5C5782CE845840781FA1CC81 /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Alamofire.framework; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5D8933C06F028BDDEECF70B616763139 /* URLSessionConfiguration+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLSessionConfiguration+Alamofire.swift"; path = "Source/URLSessionConfiguration+Alamofire.swift"; sourceTree = ""; }; - 5E0C4E1EFC05808108934BE32EB223A8 /* Sync.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Sync.swift; path = RealmSwift/Sync.swift; sourceTree = ""; }; - 5E95F78E71818E5BDFB465BDB9138A3E /* SlideMenuControllerSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SlideMenuControllerSwift-Info.plist"; sourceTree = ""; }; - 5F0E0BBFEFA9A057DD473421975D6133 /* GULNetworkURLSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULNetworkURLSession.m; path = GoogleUtilities/Network/GULNetworkURLSession.m; sourceTree = ""; }; - 6075031448B4C9CE0101FBB38F246DD7 /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/Core/UIView+WebCacheOperation.h"; sourceTree = ""; }; - 608C19CDF5F7F340220D2718615D51E2 /* Generics.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Generics.swift; path = Sources/CryptoSwift/Generics.swift; sourceTree = ""; }; - 60BEA434B31D101F866115A2D1CD943E /* FirebaseCoreInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseCoreInternal.h; path = FirebaseCore/Sources/Private/FirebaseCoreInternal.h; sourceTree = ""; }; - 60D0436CE6406CD207DCA38E5AD38946 /* GULAppEnvironmentUtil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULAppEnvironmentUtil.m; path = GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.m; sourceTree = ""; }; - 61984E71B3C8DE01427EF4E43411EFE8 /* SDDiskCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDDiskCache.m; path = SDWebImage/Core/SDDiskCache.m; sourceTree = ""; }; - 626528A463AED29883E476C13F15A539 /* Response.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Response.swift; path = Source/Response.swift; sourceTree = ""; }; - 63053457BC7A712B1D849DA362C66A2C /* IQUIView+IQKeyboardToolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIView+IQKeyboardToolbar.swift"; path = "IQKeyboardManagerSwift/IQToolbar/IQUIView+IQKeyboardToolbar.swift"; sourceTree = ""; }; - 63080FFA2784DA24057BB18A90D0F3DA /* GCM.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GCM.swift; path = Sources/CryptoSwift/BlockMode/GCM.swift; sourceTree = ""; }; - 63C619DE9BE3CCD0A0812566278340C4 /* GDTCOREvent+GDTCCTSupport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "GDTCOREvent+GDTCCTSupport.m"; path = "GoogleDataTransport/GDTCCTLibrary/GDTCOREvent+GDTCCTSupport.m"; sourceTree = ""; }; + 4240A99561484EA9DEEF9707AAB5FA0F /* RLMArray.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMArray.h; path = include/RLMArray.h; sourceTree = ""; }; + 427735807BF753B50B7BC8E4D8EAB63A /* FIRCoreDiagnosticsConnector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCoreDiagnosticsConnector.h; path = FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h; sourceTree = ""; }; + 42DD581DCCF8F255485F1C1C6F091196 /* Utils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Utils.swift; path = Sources/CryptoSwift/Utils.swift; sourceTree = ""; }; + 433AB0250C2751F438843DC418BFACEF /* GDTCOREvent+GDTCCTSupport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "GDTCOREvent+GDTCCTSupport.m"; path = "GoogleDataTransport/GDTCCTLibrary/GDTCOREvent+GDTCCTSupport.m"; sourceTree = ""; }; + 437919EE08EC6BFCCBAC3BD346309742 /* RealmSwift */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RealmSwift; path = RealmSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 43BDEB2895894AC4536960C7B57CD0C4 /* FIRCoreDiagnostics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCoreDiagnostics.h; path = Firebase/CoreDiagnostics/FIRCDLibrary/Public/FIRCoreDiagnostics.h; sourceTree = ""; }; + 442BA6B70F4E697581837AF370FAD30A /* RealmSwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RealmSwift.release.xcconfig; sourceTree = ""; }; + 44521325C57A8EC6E076292D6C090CF0 /* FIRMessagingKeychain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingKeychain.m; path = FirebaseMessaging/Sources/Token/FIRMessagingKeychain.m; sourceTree = ""; }; + 448A7FB587AAC6F435DA74D64E96FAF3 /* URITemplate-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "URITemplate-Info.plist"; sourceTree = ""; }; + 44A3FB7C2F5B735151330F798B0B6DD1 /* SDImageAssetManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageAssetManager.m; path = SDWebImage/Private/SDImageAssetManager.m; sourceTree = ""; }; + 44C094511E941EC792C1BEEC22786E00 /* list.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = list.cpp; path = Realm/ObjectStore/src/list.cpp; sourceTree = ""; }; + 4532917F3A7C0BBA21971C2D56F1FD6F /* SDImageIOAnimatedCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageIOAnimatedCoder.m; path = SDWebImage/Core/SDImageIOAnimatedCoder.m; sourceTree = ""; }; + 457383C7455207390EB207746C863D1F /* GULSwizzler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULSwizzler.h; path = GoogleUtilities/MethodSwizzler/Public/GoogleUtilities/GULSwizzler.h; sourceTree = ""; }; + 458788B0053BA4922324B24001F1BFCE /* RealmSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RealmSwift-umbrella.h"; sourceTree = ""; }; + 45C43C2847EAAB5879230B469A3C0E62 /* RLMMigration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMMigration.h; path = include/RLMMigration.h; sourceTree = ""; }; + 45E1B02C85E81345337E53888B6E6B7A /* nanopb.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = nanopb.modulemap; sourceTree = ""; }; + 464D09382F45B4B64C6452662549CE4D /* FirebaseInstallations-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FirebaseInstallations-umbrella.h"; sourceTree = ""; }; + 46B8F01201118ABFAF62692E92EC08E0 /* FBLPromise+Then.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Then.m"; path = "Sources/FBLPromises/FBLPromise+Then.m"; sourceTree = ""; }; + 46CD44D8B32167812095788FC33F28C9 /* FIRCurrentDateProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCurrentDateProvider.h; path = FirebaseInstallations/Source/Library/InstallationsIDController/FIRCurrentDateProvider.h; sourceTree = ""; }; + 46E3F6903676E051C59EBAF339DC56B5 /* Firebase.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Firebase.debug.xcconfig; sourceTree = ""; }; + 479E153B1350EF15C02E6FC76272FDCA /* RLMRealm+Sync.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = "RLMRealm+Sync.mm"; path = "Realm/RLMRealm+Sync.mm"; sourceTree = ""; }; + 47A0852693BEB55945FE14612DB17444 /* SlideMenuControllerSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SlideMenuControllerSwift-dummy.m"; sourceTree = ""; }; + 47DA34530389E50A8F3E0058A206EB8F /* RLMSyncConfiguration.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMSyncConfiguration.mm; path = Realm/RLMSyncConfiguration.mm; sourceTree = ""; }; + 47E509C5408A326D4B97130D8CBDF654 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; + 480EC9AF5B7086DDB29AB46E776457ED /* RealmSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RealmSwift.modulemap; sourceTree = ""; }; + 486335F788645CFE83B2FE7E48A018B9 /* FIRCoreDiagnosticsConnector.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCoreDiagnosticsConnector.m; path = FirebaseCore/Sources/FIRCoreDiagnosticsConnector.m; sourceTree = ""; }; + 4865576F1547E1DE111654A4A0F10081 /* Protected.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Protected.swift; path = Source/Protected.swift; sourceTree = ""; }; + 49B3813670594A60E4ACE3E5CE4BA3F4 /* FBLPromise+Do.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Do.m"; path = "Sources/FBLPromises/FBLPromise+Do.m"; sourceTree = ""; }; + 49D9C32DF72C2034EEF6B470123FC589 /* Mockingjay.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Mockingjay.debug.xcconfig; sourceTree = ""; }; + 49FCAC0C133618FAE480D2B7371BDFB2 /* FBLPromise+All.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+All.h"; path = "Sources/FBLPromises/include/FBLPromise+All.h"; sourceTree = ""; }; + 4A6675DD47C74F5E1D12FB7A074C98D3 /* SDWebImageDownloaderConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderConfig.m; path = SDWebImage/Core/SDWebImageDownloaderConfig.m; sourceTree = ""; }; + 4AA20EA1311ADE78FD1CF8BB0EA8276D /* GDTCORReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORReachability.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORReachability.m; sourceTree = ""; }; + 4AC980C3C48910AE631078552DF53515 /* FIRDependency.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDependency.h; path = FirebaseCore/Sources/Private/FIRDependency.h; sourceTree = ""; }; + 4AE58B349D1534C90080FC30892B1FD3 /* Toast-Swift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Toast-Swift-prefix.pch"; sourceTree = ""; }; + 4B8ECFDC2CF94E9D88FEDE1620B74DB8 /* nanopb-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "nanopb-umbrella.h"; sourceTree = ""; }; + 4BF11280898471488315C7ABEC946BCE /* RLMRealmConfiguration_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealmConfiguration_Private.h; path = include/RLMRealmConfiguration_Private.h; sourceTree = ""; }; + 4BFD24E56E59506609D86F9ABBC6858F /* firebasecore.nanopb.c */ = {isa = PBXFileReference; includeInIndex = 1; name = firebasecore.nanopb.c; path = Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.c; sourceTree = ""; }; + 4C0F6A6A8715F88728809EAED4034D59 /* URITemplate.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = URITemplate.release.xcconfig; sourceTree = ""; }; + 4C25ACBE0B3675BFAFFAB56CCF6B89CC /* FIRMessagingDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingDefines.h; path = FirebaseMessaging/Sources/FIRMessagingDefines.h; sourceTree = ""; }; + 4C56A8A3041B260E8C0EF3FCFA3A3C63 /* FirebaseInstallations-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FirebaseInstallations-dummy.m"; sourceTree = ""; }; + 4C6A257FF276CE5534AD997BCB16EB70 /* FIRAppInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAppInternal.h; path = FirebaseCore/Sources/Private/FIRAppInternal.h; sourceTree = ""; }; + 4C8B5A5BB02807B3F5E2B7A57D170345 /* SDImageTransformer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageTransformer.h; path = SDWebImage/Core/SDImageTransformer.h; sourceTree = ""; }; + 4DDC985D03E7F1E3A3AE06F64A21A539 /* GULOriginalIMPConvenienceMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULOriginalIMPConvenienceMacros.h; path = GoogleUtilities/MethodSwizzler/Public/GoogleUtilities/GULOriginalIMPConvenienceMacros.h; sourceTree = ""; }; + 4E09113C715CD978820B9D409361614A /* work_queue.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = work_queue.cpp; path = Realm/ObjectStore/src/sync/impl/work_queue.cpp; sourceTree = ""; }; + 4F42CA0FB980DE6081660223095BDA43 /* SDImageIOCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOCoder.h; path = SDWebImage/Core/SDImageIOCoder.h; sourceTree = ""; }; + 4F67EA96581F7CC63A063CFE294809C6 /* SortDescriptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SortDescriptor.swift; path = RealmSwift/SortDescriptor.swift; sourceTree = ""; }; + 4FC4DA18ADD12B19BDF2018DCF5876DB /* SlideMenuController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SlideMenuController.swift; path = Source/SlideMenuController.swift; sourceTree = ""; }; + 5014226C888D6621F88E6AB048FED245 /* SDMemoryCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDMemoryCache.h; path = SDWebImage/Core/SDMemoryCache.h; sourceTree = ""; }; + 50CBD6F7E1D609D0EEB6BE8CA7CA85D7 /* HTTPHeaders.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPHeaders.swift; path = Source/HTTPHeaders.swift; sourceTree = ""; }; + 50DE2616C4EEBEED97B119F0B3B22684 /* AES.Cryptors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AES.Cryptors.swift; path = Sources/CryptoSwift/AES.Cryptors.swift; sourceTree = ""; }; + 50EAE3FD2BD1CB163C45B1B82C934B30 /* FBLPromise+Do.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Do.h"; path = "Sources/FBLPromises/include/FBLPromise+Do.h"; sourceTree = ""; }; + 50F95FD971FA0EF0B15A6714A629D84A /* Mockingjay-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Mockingjay-Info.plist"; sourceTree = ""; }; + 521B61126D3583D4E3C48185CA518C2D /* SDImageCacheDefine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheDefine.h; path = SDWebImage/Core/SDImageCacheDefine.h; sourceTree = ""; }; + 525B65287859DDD7112EBF6E0F802636 /* ActionSheetLocalePicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetLocalePicker.h; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/ActionSheetLocalePicker.h; sourceTree = ""; }; + 52B81E9570B59806F994DD9A65C241A3 /* RLMObjectStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectStore.h; path = include/RLMObjectStore.h; sourceTree = ""; }; + 52D3E3BF4B8CC880C28BF4A4BB913C50 /* SDImageGIFCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageGIFCoder.h; path = SDWebImage/Core/SDImageGIFCoder.h; sourceTree = ""; }; + 5302DDB3EACA02979C5ED891D0C1779C /* Poly1305.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Poly1305.swift; path = Sources/CryptoSwift/Poly1305.swift; sourceTree = ""; }; + 532A13E80977AC6F241DE314550DC0CA /* RLMAccessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMAccessor.h; path = include/RLMAccessor.h; sourceTree = ""; }; + 5338663A029341ADD610774A4C917D5D /* OperationQueue+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "OperationQueue+Alamofire.swift"; path = "Source/OperationQueue+Alamofire.swift"; sourceTree = ""; }; + 53798DB9DC96F928D599839DA469095B /* FBLPromise+Async.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Async.m"; path = "Sources/FBLPromises/FBLPromise+Async.m"; sourceTree = ""; }; + 53A1AC2F6DBADD8B82AD675C56F3FE68 /* FBLPromiseError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBLPromiseError.h; path = Sources/FBLPromises/include/FBLPromiseError.h; sourceTree = ""; }; + 53DB3472CB9FE8166030C604EB73A270 /* NSURLSessionConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSURLSessionConfiguration.swift; path = Sources/Mockingjay/NSURLSessionConfiguration.swift; sourceTree = ""; }; + 53FD448BF9AA064AEA9DD8D12BCE6D84 /* Toast-Swift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Toast-Swift.modulemap"; sourceTree = ""; }; + 5402C1E7CCFF363C64A90E42B7723FDD /* UIView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCache.m"; path = "SDWebImage/Core/UIView+WebCache.m"; sourceTree = ""; }; + 5488779E119BBCC926CF051E1FD1A3D6 /* FirebaseAnalytics-xcframeworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "FirebaseAnalytics-xcframeworks.sh"; sourceTree = ""; }; + 548AC30CD88D0FF1EF91B1F7458FC1CE /* Mockingjay-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Mockingjay-umbrella.h"; sourceTree = ""; }; + 54C80F4D471943D79144805C9E36DCDB /* RLMObjectBase.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMObjectBase.mm; path = Realm/RLMObjectBase.mm; sourceTree = ""; }; + 554B24F16943C1AD775CD7B8B7E95C84 /* SDImageFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageFrame.h; path = SDWebImage/Core/SDImageFrame.h; sourceTree = ""; }; + 55644CD902425893359FD8B06036045B /* SDImageCachesManagerOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCachesManagerOperation.m; path = SDWebImage/Private/SDImageCachesManagerOperation.m; sourceTree = ""; }; + 55C8BFB9370B8516909387087FBFE624 /* ActionSheetPicker-3.0-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ActionSheetPicker-3.0-Info.plist"; sourceTree = ""; }; + 55D3CFF5CC2AA8B1FC9A912E1C2EBB9F /* FIRMessagingCheckinPreferences.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingCheckinPreferences.m; path = FirebaseMessaging/Sources/Token/FIRMessagingCheckinPreferences.m; sourceTree = ""; }; + 56CACBBF9EB3EEBF42A892D32515ABC9 /* FIRHeartbeatInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRHeartbeatInfo.h; path = FirebaseCore/Sources/Private/FIRHeartbeatInfo.h; sourceTree = ""; }; + 57061E940006E9984AD984E51EA242F0 /* ActionSheetPicker-3.0-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ActionSheetPicker-3.0-umbrella.h"; sourceTree = ""; }; + 57ACF0797DFDA079729F8AD264A1761F /* SDWebImageDownloaderDecryptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderDecryptor.h; path = SDWebImage/Core/SDWebImageDownloaderDecryptor.h; sourceTree = ""; }; + 57BD84FC5F011F36F49EAB98F3D2932B /* SDAnimatedImagePlayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImagePlayer.m; path = SDWebImage/Core/SDAnimatedImagePlayer.m; sourceTree = ""; }; + 5828C1BB14128916DE0B5C809ACDA0BD /* GDTCORTargets.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORTargets.h; path = GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCORTargets.h; sourceTree = ""; }; + 58395B772D53249E2BFA5632CB61ABA5 /* CryptoSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CryptoSwift-dummy.m"; sourceTree = ""; }; + 585EC19B11E0EA1E759120ACC50C30EA /* SDImageCachesManagerOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCachesManagerOperation.h; path = SDWebImage/Private/SDImageCachesManagerOperation.h; sourceTree = ""; }; + 586F8346074F0F8A9D76F6CC518E2807 /* FIRBundleUtil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRBundleUtil.m; path = FirebaseCore/Sources/FIRBundleUtil.m; sourceTree = ""; }; + 588DA198B9FE9D130E7095049CE9DCFE /* SDWebImageDownloaderConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderConfig.h; path = SDWebImage/Core/SDWebImageDownloaderConfig.h; sourceTree = ""; }; + 593CB5ABE9D6AB2760979B81EFC78510 /* SDmetamacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDmetamacros.h; path = SDWebImage/Private/SDmetamacros.h; sourceTree = ""; }; + 598A390AC37AD9F7070EAEFA20FE735C /* GoogleUtilities-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GoogleUtilities-dummy.m"; sourceTree = ""; }; + 59A9022453BEFEFA7662103158E162BB /* IQUIScrollView+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIScrollView+Additions.swift"; path = "IQKeyboardManagerSwift/Categories/IQUIScrollView+Additions.swift"; sourceTree = ""; }; + 5A0E033642613D92472CEECA180C86ED /* SDImageIOAnimatedCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOAnimatedCoder.h; path = SDWebImage/Core/SDImageIOAnimatedCoder.h; sourceTree = ""; }; + 5A8F6E644CB4E340546DD02D99C1D316 /* Realm.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Realm.modulemap; sourceTree = ""; }; + 5AD30745CF94914FA5AE9BA5A323D71F /* Rabbit+Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Rabbit+Foundation.swift"; path = "Sources/CryptoSwift/Foundation/Rabbit+Foundation.swift"; sourceTree = ""; }; + 5AE5A5DC96C77E5E7DE1F09EC7910E4A /* GULReachabilityChecker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULReachabilityChecker.m; path = GoogleUtilities/Reachability/GULReachabilityChecker.m; sourceTree = ""; }; + 5B654B4B042BA7DC93766943A643E42B /* FirebaseMessaging */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FirebaseMessaging; path = FirebaseMessaging.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5B95E2BBA62EB0149FD16A87340BAB1F /* GULNetworkURLSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULNetworkURLSession.h; path = GoogleUtilities/Network/Public/GoogleUtilities/GULNetworkURLSession.h; sourceTree = ""; }; + 5B9D5EE235CD65A5F5007B23B539F50C /* NSImage+Compatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSImage+Compatibility.h"; path = "SDWebImage/Core/NSImage+Compatibility.h"; sourceTree = ""; }; + 5BD836B8A63722C8720DC62D1E39E0FA /* GoogleAppMeasurementIdentitySupport.xcframework */ = {isa = PBXFileReference; includeInIndex = 1; name = GoogleAppMeasurementIdentitySupport.xcframework; path = Frameworks/GoogleAppMeasurementIdentitySupport.xcframework; sourceTree = ""; }; + 5C6C4BA0487C33053C0FF67C5E65978B /* object_schema.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = object_schema.cpp; path = Realm/ObjectStore/src/object_schema.cpp; sourceTree = ""; }; + 5CA71DBDD2BE853B0EA3B8ECDA9BA6EF /* Toast-Swift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Toast-Swift-dummy.m"; sourceTree = ""; }; + 5CADE015322C7E72BCD9A93A0551B0B4 /* SDAnimatedImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImage.m; path = SDWebImage/Core/SDAnimatedImage.m; sourceTree = ""; }; + 5CEFB8688EFB229C202CBD8E83BA0BC6 /* CTR.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CTR.swift; path = Sources/CryptoSwift/BlockMode/CTR.swift; sourceTree = ""; }; + 5CF55EE1E62635B4548DA43FFC36D7A1 /* placeholder.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = placeholder.cpp; path = Realm/ObjectStore/src/placeholder.cpp; sourceTree = ""; }; + 5D797E9A5C5782CE845840781FA1CC81 /* Alamofire */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Alamofire; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5DACDA66527627D9FC31F1B27F691ADF /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; + 5E43D6407F194F3198F56B37230D7DF3 /* index_set.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = index_set.cpp; path = Realm/ObjectStore/src/index_set.cpp; sourceTree = ""; }; + 5E5A813886535DAFDAFD5ED2DC4A2063 /* RLMObjectBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectBase.h; path = include/RLMObjectBase.h; sourceTree = ""; }; + 5ECC23479B265674A6D2DA2C220214A9 /* me.nanopb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = me.nanopb.h; path = FirebaseMessaging/Sources/Protogen/nanopb/me.nanopb.h; sourceTree = ""; }; + 5ED3FF30321054D07F68F68444603A7E /* RLMObjectSchema_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectSchema_Private.h; path = include/RLMObjectSchema_Private.h; sourceTree = ""; }; + 5F05DD265455B69C332AAEE9DE02AE04 /* IQUITextFieldView+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUITextFieldView+Additions.swift"; path = "IQKeyboardManagerSwift/Categories/IQUITextFieldView+Additions.swift"; sourceTree = ""; }; + 5FA13C0279C883576F45A9BF6C23D2C4 /* FirebaseInstallationsInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseInstallationsInternal.h; path = FirebaseInstallations/Source/Library/Private/FirebaseInstallationsInternal.h; sourceTree = ""; }; + 5FB10D3D2C3AB2BB11550F7F1F9C46C1 /* GULNetworkLoggerProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULNetworkLoggerProtocol.h; path = GoogleUtilities/Network/Public/GoogleUtilities/GULNetworkLoggerProtocol.h; sourceTree = ""; }; + 5FDD6836072918EAB99194EE6F52F4B4 /* CryptoSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CryptoSwift-prefix.pch"; sourceTree = ""; }; + 602237D7A9DA1D545D0DF0DF8D21C58F /* FIRInstallations.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallations.m; path = FirebaseInstallations/Source/Library/FIRInstallations.m; sourceTree = ""; }; + 6062F87D1BE8728BF0C977EB8B3085C6 /* Mockingjay-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Mockingjay-prefix.pch"; sourceTree = ""; }; + 607AACAC41381E74F0EE5FA8ABF17666 /* Schema.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Schema.swift; path = RealmSwift/Schema.swift; sourceTree = ""; }; + 607E6499DE7AF4C3172D4FE3A794E676 /* RLMOptionalBase.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMOptionalBase.mm; path = Realm/RLMOptionalBase.mm; sourceTree = ""; }; + 60AFF9B3EDFE25A4524E146097A5999C /* results.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = results.cpp; path = Realm/ObjectStore/src/results.cpp; sourceTree = ""; }; + 6144AD96804FD9CF5C15BDA80A55D007 /* Updatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Updatable.swift; path = Sources/CryptoSwift/Updatable.swift; sourceTree = ""; }; + 61561838FE4384FD4971B7FBC488CCBC /* FIRApp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRApp.h; path = FirebaseCore/Sources/Public/FirebaseCore/FIRApp.h; sourceTree = ""; }; + 615E3A444EE37594627883F244711AD8 /* FIRInstallationsStoredAuthToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsStoredAuthToken.m; path = FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredAuthToken.m; sourceTree = ""; }; + 61AA70F5CAA013CA9CB376BC0007F3D0 /* FIRMessaging_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessaging_Private.h; path = FirebaseMessaging/Sources/FIRMessaging_Private.h; sourceTree = ""; }; + 61B470CFE2F9EDF2A6ED97B7680762C6 /* FIRMessagingTopicOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingTopicOperation.h; path = FirebaseMessaging/Sources/FIRMessagingTopicOperation.h; sourceTree = ""; }; + 62E2A196FA7C8AA84EFEBA4E419F2ACE /* SDImageLoadersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageLoadersManager.m; path = SDWebImage/Core/SDImageLoadersManager.m; sourceTree = ""; }; + 634D852EB52F1539A9522067358D2E32 /* AES+Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "AES+Foundation.swift"; path = "Sources/CryptoSwift/Foundation/AES+Foundation.swift"; sourceTree = ""; }; + 63602BB28A0255038A646BEEC0159C32 /* FIRInstallationsAPIService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsAPIService.m; path = FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsAPIService.m; sourceTree = ""; }; + 636C461F716423711BC21B884F3588B8 /* ECB.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ECB.swift; path = Sources/CryptoSwift/BlockMode/ECB.swift; sourceTree = ""; }; + 63726E3EB65FAC84139E80F6F8C8BA11 /* FIRMessagingConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingConstants.h; path = FirebaseMessaging/Sources/FIRMessagingConstants.h; sourceTree = ""; }; + 639712B03B02179C165E44277C5453F4 /* Util.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Util.swift; path = RealmSwift/Util.swift; sourceTree = ""; }; 63EF32C2D41A977DDD047D871155E5EF /* Pods-MyStudiesTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MyStudiesTests-acknowledgements.markdown"; sourceTree = ""; }; - 63F1678CFD09A6C1192E25AF692DE257 /* Realm.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Realm.modulemap; sourceTree = ""; }; - 64826FB20BEA4BD8003565B41D7A9BD1 /* SDWebImage.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.debug.xcconfig; sourceTree = ""; }; - 64A4F9BBFD4C2230F01C4D849748E623 /* Reachability.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Reachability.swift; path = Sources/Reachability.swift; sourceTree = ""; }; - 64B1C31A45C7B0ECA9401EC03254CC0B /* FIRMessagingAuthService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingAuthService.h; path = FirebaseMessaging/Sources/Token/FIRMessagingAuthService.h; sourceTree = ""; }; - 6590F755CC81D11D01FC0AF9EA8D49AE /* SDWebImageDefine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDefine.h; path = SDWebImage/Core/SDWebImageDefine.h; sourceTree = ""; }; - 659E51AD14E5565FB071605E73BE2BA0 /* FIRCoreDiagnosticsData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCoreDiagnosticsData.h; path = Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h; sourceTree = ""; }; - 660A5577CA9AAF26647707D912A886CC /* GoogleUtilities.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GoogleUtilities.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 66A9764BDD7FF9FD8DFCC707C89DBDBB /* FIRMessagingRmqManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingRmqManager.m; path = FirebaseMessaging/Sources/FIRMessagingRmqManager.m; sourceTree = ""; }; - 66FF5C7177402EF69F9E032898006650 /* FBLPromise+Async.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Async.h"; path = "Sources/FBLPromises/include/FBLPromise+Async.h"; sourceTree = ""; }; - 6750073F3E208E4508427AA4E2A3C714 /* RLMObjectBase.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMObjectBase.mm; path = Realm/RLMObjectBase.mm; sourceTree = ""; }; - 67758097F5B9C13C52FE595322FAE27B /* GULNetwork.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULNetwork.m; path = GoogleUtilities/Network/GULNetwork.m; sourceTree = ""; }; - 67C1C2DD15E3F3ED592A6E43CBCF4BD5 /* SDImageCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCoder.m; path = SDWebImage/Core/SDImageCoder.m; sourceTree = ""; }; - 680890F3701AEE80516DAC78514F0B29 /* SDDiskCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDDiskCache.h; path = SDWebImage/Core/SDDiskCache.h; sourceTree = ""; }; - 684B1C7C88075B9B348E69A61640F129 /* pb_encode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb_encode.h; sourceTree = ""; }; - 68519E5F29D218784C27FC3B96BB54D7 /* IQUITextFieldView+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUITextFieldView+Additions.swift"; path = "IQKeyboardManagerSwift/Categories/IQUITextFieldView+Additions.swift"; sourceTree = ""; }; - 6875F93BA1C041F7E8C8CC62F9648826 /* List.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = List.swift; path = RealmSwift/List.swift; sourceTree = ""; }; - 68C898D63E58A393745FD6648B352DE9 /* Bit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Bit.swift; path = Sources/CryptoSwift/Bit.swift; sourceTree = ""; }; - 68E71D44325D1EB91F8EA7D7A4C9BF43 /* RLMSchema.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMSchema.mm; path = Realm/RLMSchema.mm; sourceTree = ""; }; - 691DA74C687A632003A5B9CE2E69CA14 /* Utils+Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Utils+Foundation.swift"; path = "Sources/CryptoSwift/Foundation/Utils+Foundation.swift"; sourceTree = ""; }; - 6984E3A265318374C18C92B277030130 /* nanopb-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "nanopb-Info.plist"; sourceTree = ""; }; - 69917A87CC117A8C41D05AA9059D8C32 /* CFB.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CFB.swift; path = Sources/CryptoSwift/BlockMode/CFB.swift; sourceTree = ""; }; - 6A3A0034D029E88EFC9A2A929BBE04B2 /* FirebaseInstallations.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FirebaseInstallations.modulemap; sourceTree = ""; }; - 6A918DA9646862A213968C27CC812379 /* FIRComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponent.h; path = FirebaseCore/Sources/Private/FIRComponent.h; sourceTree = ""; }; - 6A92D13ACA76A198281BA4FC0F5CBAD0 /* URITemplate.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = URITemplate.framework; path = URITemplate.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 64696D763EBA8C3B8985BDE10E30030C /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "SDWebImage/Core/UIImage+GIF.m"; sourceTree = ""; }; + 646EDA5D1B0389E4B968DF5E2CB461D7 /* sync_file.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_file.cpp; path = Realm/ObjectStore/src/sync/impl/sync_file.cpp; sourceTree = ""; }; + 6498E899ACC03B6A0A635255D09FC3EE /* SDWebImageDownloaderDecryptor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderDecryptor.m; path = SDWebImage/Core/SDWebImageDownloaderDecryptor.m; sourceTree = ""; }; + 64C77D75F4599EB7A0286913B20C5E12 /* Session.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Session.swift; path = Source/Session.swift; sourceTree = ""; }; + 651889BB4A9EACEEEF3B5E89854DF17C /* FBLPromise+All.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+All.m"; path = "Sources/FBLPromises/FBLPromise+All.m"; sourceTree = ""; }; + 652B9C49262C1D41786BA997BB665585 /* IQPreviousNextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQPreviousNextView.swift; path = IQKeyboardManagerSwift/IQToolbar/IQPreviousNextView.swift; sourceTree = ""; }; + 652D12158DE8D8B3CA0B200917A0619B /* FIRMessagingAnalytics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingAnalytics.m; path = FirebaseMessaging/Sources/FIRMessagingAnalytics.m; sourceTree = ""; }; + 6536FA0E22574FA5AA6C1BCB88DF3449 /* BatchedCollection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BatchedCollection.swift; path = Sources/CryptoSwift/BatchedCollection.swift; sourceTree = ""; }; + 656C5F77188D1282E57C7F86B19899A9 /* FIRCoreDiagnostics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCoreDiagnostics.m; path = Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnostics.m; sourceTree = ""; }; + 65F1D45714BE10127712F7805E738421 /* SlideMenuControllerSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SlideMenuControllerSwift-Info.plist"; sourceTree = ""; }; + 66116F7F66CD6891D2B68144F8DE2337 /* me.nanopb.c */ = {isa = PBXFileReference; includeInIndex = 1; name = me.nanopb.c; path = FirebaseMessaging/Sources/Protogen/nanopb/me.nanopb.c; sourceTree = ""; }; + 66335C8A5AF18D0C031D33F089435222 /* RLMProperty_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMProperty_Private.h; path = include/RLMProperty_Private.h; sourceTree = ""; }; + 66456E822A392BF9E98C839A7B878610 /* FIRComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponent.h; path = FirebaseCore/Sources/Private/FIRComponent.h; sourceTree = ""; }; + 66CC2499398F88BBC4623E0C724E9441 /* GDTCORFlatFileStorage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORFlatFileStorage.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORFlatFileStorage.m; sourceTree = ""; }; + 67087440EC98298BCBDA731514E05D16 /* FIRComponentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponentType.h; path = FirebaseCore/Sources/Private/FIRComponentType.h; sourceTree = ""; }; + 677F023889847F06D08B9418023C07D4 /* GDTCOREndpoints_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCOREndpoints_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCOREndpoints_Private.h; sourceTree = ""; }; + 6794F4C1D41643AFFDCB2A9FFF834A87 /* IQKeyboardManagerSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManagerSwift-umbrella.h"; sourceTree = ""; }; + 67ED919753BA2A8CF8C1870264A7BEE7 /* GoogleDataTransport-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GoogleDataTransport-dummy.m"; sourceTree = ""; }; + 67F228FDC6A2CAFCE7BD7CDC55ECDFD0 /* AFError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AFError.swift; path = Source/AFError.swift; sourceTree = ""; }; + 67FFD7D4314E904B675B4E1A9354281E /* FBLPromise+Wrap.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Wrap.m"; path = "Sources/FBLPromises/FBLPromise+Wrap.m"; sourceTree = ""; }; + 6867281FD3DED3B1B74A7A631FC9AA08 /* SDInternalMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDInternalMacros.h; path = SDWebImage/Private/SDInternalMacros.h; sourceTree = ""; }; + 686B1F616D2D3CED7750A0D9071D8EF2 /* FIRInstallationsIIDStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsIIDStore.m; path = FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDStore.m; sourceTree = ""; }; + 688307369B03E356928C679F0B4DC901 /* GoogleUtilities.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleUtilities.release.xcconfig; sourceTree = ""; }; + 6896074E62F776B5D9C75C5B86435842 /* ObjectSchema.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObjectSchema.swift; path = RealmSwift/ObjectSchema.swift; sourceTree = ""; }; + 689DE646188A608CD070FE34CEEFB3DD /* SDAnimatedImagePlayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImagePlayer.h; path = SDWebImage/Core/SDAnimatedImagePlayer.h; sourceTree = ""; }; + 68C0ED1768A304DFA76334D03F6C4D83 /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "SDWebImage/Core/NSData+ImageContentType.m"; sourceTree = ""; }; + 68E388DAEC380C6B69A42306861C03A8 /* FBLPromise+Await.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Await.h"; path = "Sources/FBLPromises/include/FBLPromise+Await.h"; sourceTree = ""; }; + 68F814DD29A36E913885105CC75D57AD /* RLMCollection.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMCollection.mm; path = Realm/RLMCollection.mm; sourceTree = ""; }; + 690C59EC5F552947A705CD99FC9C2708 /* GULAppDelegateSwizzler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULAppDelegateSwizzler.m; path = GoogleUtilities/AppDelegateSwizzler/GULAppDelegateSwizzler.m; sourceTree = ""; }; + 69BB52D815D0D5F759691A96723B1F1B /* FIRVersion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRVersion.m; path = FirebaseCore/Sources/FIRVersion.m; sourceTree = ""; }; + 69C2C2AF66ED23BE43387CAD7013D175 /* Request.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Request.swift; path = Source/Request.swift; sourceTree = ""; }; + 6A392146091E5BE7082F5B1F808838BF /* DigestType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DigestType.swift; path = Sources/CryptoSwift/DigestType.swift; sourceTree = ""; }; + 6A92D13ACA76A198281BA4FC0F5CBAD0 /* URITemplate */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = URITemplate; path = URITemplate.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 6A9D406F8B67A2346DA4A21163C6A378 /* Pods-MyStudies.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MyStudies.release.xcconfig"; sourceTree = ""; }; - 6AA0E91824FAEA1891606A904C5530F9 /* RealmSwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RealmSwift.release.xcconfig; sourceTree = ""; }; - 6AAA9CC30F33C99575CEC0CFCACEDAF0 /* FIRDependency.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDependency.m; path = FirebaseCore/Sources/FIRDependency.m; sourceTree = ""; }; - 6AE495A6DE9D91B2470DDB5F5798382C /* GDTCORTransformer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORTransformer.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORTransformer.m; sourceTree = ""; }; - 6B21A569299928E991D5A12EB57C3E89 /* FirebaseCoreDiagnostics.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FirebaseCoreDiagnostics.modulemap; sourceTree = ""; }; - 6C5EFFE1D4E98FECB12BEF710B058607 /* SlideMenuControllerSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SlideMenuControllerSwift-umbrella.h"; sourceTree = ""; }; - 6C75E41399C25E0B0531FE0EB0A551DE /* UInt64+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UInt64+Extension.swift"; path = "Sources/CryptoSwift/UInt64+Extension.swift"; sourceTree = ""; }; - 6CC9746F7ACF148D70CB9F2A6FE7B209 /* CipherModeWorker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CipherModeWorker.swift; path = Sources/CryptoSwift/BlockMode/CipherModeWorker.swift; sourceTree = ""; }; - 6CF59DCAC40F440B5B33C0E5A1548A08 /* RLMObjectStore.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMObjectStore.mm; path = Realm/RLMObjectStore.mm; sourceTree = ""; }; - 6D61EAA7BA118557928346B039256C36 /* SDWebImage-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-umbrella.h"; sourceTree = ""; }; - 6E03A51E166FA635F8C93FB0C9F09554 /* RLMJSONModels.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RLMJSONModels.m; path = Realm/RLMJSONModels.m; sourceTree = ""; }; - 6E3EC9425FDB95292D63B027016260EE /* FIRComponentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponentType.h; path = FirebaseCore/Sources/Private/FIRComponentType.h; sourceTree = ""; }; - 6E46FBC12764A557BBF103DF0786B589 /* SDWebImageCacheSerializer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCacheSerializer.h; path = SDWebImage/Core/SDWebImageCacheSerializer.h; sourceTree = ""; }; - 6E611D764C8C487C549D638A5B6A2D15 /* Pods_MyStudies.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_MyStudies.framework; path = "Pods-MyStudies.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 6E92F316CA8D3C689A4B512AC5541A4C /* DispatchQueue+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DispatchQueue+Alamofire.swift"; path = "Source/DispatchQueue+Alamofire.swift"; sourceTree = ""; }; - 6EAB78C3EBD08B79BB29F219DA1AD708 /* FIRMessagingTopicOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingTopicOperation.m; path = FirebaseMessaging/Sources/FIRMessagingTopicOperation.m; sourceTree = ""; }; - 6F7589184FD469326D0CDDEE6348B467 /* ServerTrustEvaluation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ServerTrustEvaluation.swift; path = Source/ServerTrustEvaluation.swift; sourceTree = ""; }; - 705407BDFC2ACF1648B6C0E3C1153880 /* SecureBytes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureBytes.swift; path = Sources/CryptoSwift/SecureBytes.swift; sourceTree = ""; }; - 705A836C6E197175EA75D51A49850C63 /* IQToolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQToolbar.swift; path = IQKeyboardManagerSwift/IQToolbar/IQToolbar.swift; sourceTree = ""; }; - 70739CE1C376A131C345089D41F7F08B /* partial_sync.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = partial_sync.cpp; path = Realm/ObjectStore/src/sync/partial_sync.cpp; sourceTree = ""; }; - 7137386EE9BF38B2B6483FA9C006247E /* FIRConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRConfiguration.m; path = FirebaseCore/Sources/FIRConfiguration.m; sourceTree = ""; }; - 71492E04EE0DDE32FA529F56DBAD25D9 /* URLRequest+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLRequest+Alamofire.swift"; path = "Source/URLRequest+Alamofire.swift"; sourceTree = ""; }; - 71597C20842E69E42CB41DDDA2580861 /* object.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = object.cpp; path = Realm/ObjectStore/src/object.cpp; sourceTree = ""; }; - 71A11E4BE13756310BF288A29CA7CBFC /* FIRMessagingRemoteNotificationsProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingRemoteNotificationsProxy.h; path = FirebaseMessaging/Sources/FIRMessagingRemoteNotificationsProxy.h; sourceTree = ""; }; + 6B0023AE6FB4975A029EE2A42CA165FF /* MockingjayURLSessionConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MockingjayURLSessionConfiguration.m; path = Sources/Mockingjay/MockingjayURLSessionConfiguration.m; sourceTree = ""; }; + 6B106CDB4B99099BA2C08B7C4EA25BEA /* GDTCCTCompressionHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCCTCompressionHelper.h; path = GoogleDataTransport/GDTCCTLibrary/Private/GDTCCTCompressionHelper.h; sourceTree = ""; }; + 6B168909D065D0207116EC9091DAD8D6 /* pb_encode.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pb_encode.c; sourceTree = ""; }; + 6B31EB2C667E0759CAA8D7B5F3EE0F94 /* SDWebImageDownloaderResponseModifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderResponseModifier.m; path = SDWebImage/Core/SDWebImageDownloaderResponseModifier.m; sourceTree = ""; }; + 6B434A1EDAF09571A7BB0FA340012517 /* FirebaseMessaging-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FirebaseMessaging-umbrella.h"; sourceTree = ""; }; + 6B4BB533058FE937737E9954037611C7 /* FIRInstallationsLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsLogger.m; path = FirebaseInstallations/Source/Library/FIRInstallationsLogger.m; sourceTree = ""; }; + 6B887F34F20ACE0F7B8B14175A65EDA9 /* FIRMessagingRemoteNotificationsProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingRemoteNotificationsProxy.m; path = FirebaseMessaging/Sources/FIRMessagingRemoteNotificationsProxy.m; sourceTree = ""; }; + 6C221AF1B27128D4A7953E752AC5641E /* IQKeyboardManagerSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManagerSwift-prefix.pch"; sourceTree = ""; }; + 6C4A528B80B96962B92572AA74612457 /* GULURLSessionDataResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULURLSessionDataResponse.m; path = GoogleUtilities/Environment/URLSessionPromiseWrapper/GULURLSessionDataResponse.m; sourceTree = ""; }; + 6C51CF7B3A80351134D238F3608ADD8D /* FBLPromise+Always.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Always.h"; path = "Sources/FBLPromises/include/FBLPromise+Always.h"; sourceTree = ""; }; + 6C8F3F013C33334D4532CEB1EC0214A8 /* SDDeviceHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDDeviceHelper.h; path = SDWebImage/Private/SDDeviceHelper.h; sourceTree = ""; }; + 6CBF2212D72C4FDCABDD41EAE473C741 /* FIRInstallationsLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsLogger.h; path = FirebaseInstallations/Source/Library/FIRInstallationsLogger.h; sourceTree = ""; }; + 6CD46BAE712C73065009FCB58F13B4F2 /* IQUIView+IQKeyboardToolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIView+IQKeyboardToolbar.swift"; path = "IQKeyboardManagerSwift/IQToolbar/IQUIView+IQKeyboardToolbar.swift"; sourceTree = ""; }; + 6CD7D7CB2F223CDAF8EC4B7F88CB9EBD /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/Core/SDWebImageCompat.h; sourceTree = ""; }; + 6D058E2CB32929EB0BB21D2851DB8AF2 /* RLMSyncUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncUtil.h; path = include/RLMSyncUtil.h; sourceTree = ""; }; + 6DE3B58FE3FB30F0F525EE261380B255 /* SDImageCachesManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCachesManager.h; path = SDWebImage/Core/SDImageCachesManager.h; sourceTree = ""; }; + 6E539DBB7888BE07E510D1839D688276 /* SDAsyncBlockOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAsyncBlockOperation.m; path = SDWebImage/Private/SDAsyncBlockOperation.m; sourceTree = ""; }; + 6E611D764C8C487C549D638A5B6A2D15 /* Pods-MyStudies */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-MyStudies"; path = Pods_MyStudies.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6E79D5F823F26490736D3ACF33562F10 /* GDTCOREventTransformer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCOREventTransformer.h; path = GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCOREventTransformer.h; sourceTree = ""; }; + 6E865C5F4D351F90D3D88FF2CD01C211 /* results_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = results_notifier.cpp; path = Realm/ObjectStore/src/impl/results_notifier.cpp; sourceTree = ""; }; + 6EF0F8E949D61223B76B4D795E8D9010 /* GDTCCTCompressionHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCCTCompressionHelper.m; path = GoogleDataTransport/GDTCCTLibrary/GDTCCTCompressionHelper.m; sourceTree = ""; }; + 6F7EB1F9ECCD5AE03E5F10FCE68FF1BE /* GDTCCTUploader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCCTUploader.h; path = GoogleDataTransport/GDTCCTLibrary/Private/GDTCCTUploader.h; sourceTree = ""; }; + 7030496A6666BAA4AA30AD332A4FA9D7 /* SDImageCacheConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCacheConfig.m; path = SDWebImage/Core/SDImageCacheConfig.m; sourceTree = ""; }; + 7095FDE29741CCD0A3ACA5F104C904A8 /* Error.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Error.swift; path = RealmSwift/Error.swift; sourceTree = ""; }; + 710A260513A82DD95EE9C188BF553F35 /* Object.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Object.swift; path = RealmSwift/Object.swift; sourceTree = ""; }; + 714F94EB2642B5ED903E63F27E37BA7D /* GDTCORTransformer_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORTransformer_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer_Private.h; sourceTree = ""; }; + 719B0167BB6B1344BEA76D64A8FBD135 /* SDImageLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageLoader.m; path = SDWebImage/Core/SDImageLoader.m; sourceTree = ""; }; 71D093E7D2D6F46FAAF2312802B43FA6 /* Pods-MyStudiesTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MyStudiesTests-frameworks.sh"; sourceTree = ""; }; - 7225392A28F4E4D91F8C0154D3D7405A /* FIRMessagingPubSub.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingPubSub.m; path = FirebaseMessaging/Sources/FIRMessagingPubSub.m; sourceTree = ""; }; - 722A539D0917C5A6312EB00EE2B8107A /* Realm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Realm.h; path = include/Realm.h; sourceTree = ""; }; - 730F81D9DE531E5531DB90F3483175AE /* GDTCORFlatFileStorage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORFlatFileStorage.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORFlatFileStorage.h; sourceTree = ""; }; - 7388B5A687333B951611AA629442DBDA /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/Core/SDImageCache.m; sourceTree = ""; }; - 738E1CDDE859CBEA8F97C5B308F73477 /* cct.nanopb.c */ = {isa = PBXFileReference; includeInIndex = 1; name = cct.nanopb.c; path = GoogleDataTransport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.c; sourceTree = ""; }; - 7456C30DEABC709056E38C830B328DC4 /* IQTextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextView.swift; path = IQKeyboardManagerSwift/IQTextView/IQTextView.swift; sourceTree = ""; }; - 748C44B0F30FF0C186DDF67405F8E1E6 /* GoogleDataTransport.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleDataTransport.debug.xcconfig; sourceTree = ""; }; - 750A35F5B0BD3AC3D9E33AE92A598D5A /* FIRMessagingBackupExcludedPlist.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingBackupExcludedPlist.h; path = FirebaseMessaging/Sources/Token/FIRMessagingBackupExcludedPlist.h; sourceTree = ""; }; - 752D9B7CAEC6F057D70938FE33E2B68B /* FIRComponentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponentType.h; path = FirebaseCore/Sources/Private/FIRComponentType.h; sourceTree = ""; }; - 7536B41CECCD77067EA9E061097DD791 /* SDImageCacheConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCacheConfig.m; path = SDWebImage/Core/SDImageCacheConfig.m; sourceTree = ""; }; - 757834CDFA774B2AF52F022F5AF33717 /* FIRComponentContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponentContainer.h; path = FirebaseCore/Sources/Private/FIRComponentContainer.h; sourceTree = ""; }; - 75CDDD2C741C2B3013B6135198196F5D /* RealmSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RealmSwift-umbrella.h"; sourceTree = ""; }; - 75D51599F64B9F4B2FD70F5E0D42708A /* RLMRealmUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMRealmUtil.mm; path = Realm/RLMRealmUtil.mm; sourceTree = ""; }; - 766A4EDA4DCFD89068A9EE9E65A5373B /* SDImageAssetManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageAssetManager.m; path = SDWebImage/Private/SDImageAssetManager.m; sourceTree = ""; }; - 76D9841C1E68CE9361A6992FF5315C12 /* RealmSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RealmSwift-dummy.m"; sourceTree = ""; }; - 76F3E7235301AEE7AA9B87E64DD1FB32 /* SDAnimatedImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImage.h; path = SDWebImage/Core/SDAnimatedImage.h; sourceTree = ""; }; - 773D5FAFA8378E3C7770F04F77B21883 /* SDImageHEICCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageHEICCoder.h; path = SDWebImage/Core/SDImageHEICCoder.h; sourceTree = ""; }; - 77779AED9FA8778B208FF7F453264092 /* RLMSyncCredentials.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncCredentials.h; path = include/RLMSyncCredentials.h; sourceTree = ""; }; - 7783CE513EA70BA02007C2F7034279D8 /* FIRHeartbeatInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRHeartbeatInfo.h; path = FirebaseCore/Sources/Private/FIRHeartbeatInfo.h; sourceTree = ""; }; - 77A3D392E38E05B93A51C3C29F75430E /* SDAnimatedImagePlayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImagePlayer.m; path = SDWebImage/Core/SDAnimatedImagePlayer.m; sourceTree = ""; }; - 77F188052E4D379660A93C519C66DB15 /* CBC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CBC.swift; path = Sources/CryptoSwift/BlockMode/CBC.swift; sourceTree = ""; }; - 78076D3D35AED2432FDBB05969D93FA0 /* BlockEncryptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlockEncryptor.swift; path = Sources/CryptoSwift/BlockEncryptor.swift; sourceTree = ""; }; - 78569820395287E24D614961947852A6 /* RealmCollection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RealmCollection.swift; path = RealmSwift/RealmCollection.swift; sourceTree = ""; }; - 78CD5A0B098764C81EC208C04DEDB25C /* GDTCORFlatFileStorage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORFlatFileStorage.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORFlatFileStorage.m; sourceTree = ""; }; - 790CA29C065DD0F0B4F0098A3292067D /* GDTCORConsoleLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORConsoleLogger.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORConsoleLogger.m; sourceTree = ""; }; - 7914A904A8FB3E217B9E236A9BC0A928 /* placeholder.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = placeholder.cpp; path = Realm/ObjectStore/src/placeholder.cpp; sourceTree = ""; }; - 791FD2358CCF061FA9DEF6F541E41F2E /* GULNetworkLoggerProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULNetworkLoggerProtocol.h; path = GoogleUtilities/Network/Public/GoogleUtilities/GULNetworkLoggerProtocol.h; sourceTree = ""; }; - 792DFC751461DE2A6E29F9023B572B68 /* RealmConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RealmConfiguration.swift; path = RealmSwift/RealmConfiguration.swift; sourceTree = ""; }; - 79ADDA42485AB4FD68719AC8787415E6 /* PBKDF2.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PBKDF2.swift; path = Sources/CryptoSwift/PKCS/PBKDF2.swift; sourceTree = ""; }; - 79DC8F114A5797B8935C230E82661D3A /* GDTCORTargets.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORTargets.h; path = GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCORTargets.h; sourceTree = ""; }; - 79DC9ED48A74ECA18DA00C9E9CBCE3EF /* FIRMessagingTokenInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingTokenInfo.m; path = FirebaseMessaging/Sources/Token/FIRMessagingTokenInfo.m; sourceTree = ""; }; - 7A3EA138EB4E4D0801CB209916A3AD5C /* SDDeviceHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDDeviceHelper.m; path = SDWebImage/Private/SDDeviceHelper.m; sourceTree = ""; }; - 7A8F3246E32B49855933788771B1CF10 /* RLMObjectBase_Dynamic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectBase_Dynamic.h; path = include/RLMObjectBase_Dynamic.h; sourceTree = ""; }; - 7A9141B5DBAFD79279A115AFCA1750D9 /* MultipartUpload.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartUpload.swift; path = Source/MultipartUpload.swift; sourceTree = ""; }; - 7BAD137506983EB9E1D80719D85FAC3F /* FIRInstallationsItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsItem.m; path = FirebaseInstallations/Source/Library/FIRInstallationsItem.m; sourceTree = ""; }; - 7BC4753105A074D6C50C2019A0D660CB /* FIRInstallationsItem+RegisterInstallationAPI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FIRInstallationsItem+RegisterInstallationAPI.h"; path = "FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsItem+RegisterInstallationAPI.h"; sourceTree = ""; }; - 7BF688785C15162B30AA934AF388B86D /* ReachabilitySwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ReachabilitySwift-dummy.m"; sourceTree = ""; }; - 7C6C389801C071C67181351FBD1B6E3D /* String+FoundationExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+FoundationExtension.swift"; path = "Sources/CryptoSwift/Foundation/String+FoundationExtension.swift"; sourceTree = ""; }; - 7CFFCB7D60C7B1F28BFBB156C93EF4FC /* schema.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = schema.cpp; path = Realm/ObjectStore/src/schema.cpp; sourceTree = ""; }; - 7D9DCAB1A8C069E91446710E04970738 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; - 7EF8CE9BA5ABA56D54A2F16B7A2FCC06 /* FirebaseMessaging-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FirebaseMessaging-dummy.m"; sourceTree = ""; }; - 7F7365CA24E185DB737A0919EBE10110 /* FBLPromise+All.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+All.m"; path = "Sources/FBLPromises/FBLPromise+All.m"; sourceTree = ""; }; - 7F8EFF6ECDEDBC1C10BC83DDDAA3829C /* GDTCOREndpoints.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCOREndpoints.m; path = GoogleDataTransport/GDTCORLibrary/GDTCOREndpoints.m; sourceTree = ""; }; - 800E0C9B7CB1B577C7812930D92BA0CF /* FBLPromise+Any.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Any.h"; path = "Sources/FBLPromises/include/FBLPromise+Any.h"; sourceTree = ""; }; - 800E574A332A80D110655753B116A778 /* FIRCoreDiagnosticsData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCoreDiagnosticsData.h; path = Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h; sourceTree = ""; }; - 805E92DED1B8DCA59C486F6854ED878F /* RLMCollection.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMCollection.mm; path = Realm/RLMCollection.mm; sourceTree = ""; }; - 80F21AA0F6A19D1C67E18AC6699D10D1 /* GULNSData+zlib.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "GULNSData+zlib.h"; path = "GoogleUtilities/NSData+zlib/Public/GoogleUtilities/GULNSData+zlib.h"; sourceTree = ""; }; - 812FF8F54A2A5C5EA9A678C56FD72EC9 /* FIRInstallationsIIDTokenStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsIIDTokenStore.m; path = FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDTokenStore.m; sourceTree = ""; }; - 819B7BE18B15159139374F5ECBD24101 /* IQKeyboardManagerSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardManagerSwift.modulemap; sourceTree = ""; }; - 81D2B1002F82F7AF499F3D5A2CFE0492 /* transact_log_handler.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = transact_log_handler.cpp; path = Realm/ObjectStore/src/impl/transact_log_handler.cpp; sourceTree = ""; }; - 8236EEB3FBE373CA368D5A2630A5EB9B /* PCBC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PCBC.swift; path = Sources/CryptoSwift/BlockMode/PCBC.swift; sourceTree = ""; }; - 82668E620DA82196DB6D63532C0190DA /* CryptoSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CryptoSwift-umbrella.h"; sourceTree = ""; }; - 8276FB26ED80CAD78CF5A647F8687E9B /* Alamofire.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.release.xcconfig; sourceTree = ""; }; - 82B264AAB291711292025352DE361821 /* FIRConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRConfiguration.h; path = FirebaseCore/Sources/Public/FirebaseCore/FIRConfiguration.h; sourceTree = ""; }; - 82C895CD744D0DFD1DBBAE87075328E1 /* FIRVersion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRVersion.m; path = FirebaseCore/Sources/FIRVersion.m; sourceTree = ""; }; - 83561A1BE550C60222567B8DBD7B9C9E /* object_store.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = object_store.cpp; path = Realm/ObjectStore/src/object_store.cpp; sourceTree = ""; }; - 83713112EC0F90E41C8B23E88DFE5CA5 /* RLMObjectStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectStore.h; path = include/RLMObjectStore.h; sourceTree = ""; }; - 83EABF76579C3D6648BFE7A01EE7E49A /* FIRInstallationsBackoffController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsBackoffController.m; path = FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsBackoffController.m; sourceTree = ""; }; - 843039480971C4CBB9A2E439E96BB460 /* GDTCCTUploadOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCCTUploadOperation.h; path = GoogleDataTransport/GDTCCTLibrary/Private/GDTCCTUploadOperation.h; sourceTree = ""; }; - 846A54F6F1F1C1229CDE012D56ECA7D2 /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/Core/UIImage+MultiFormat.h"; sourceTree = ""; }; - 846E235F5DD469FF13FCB02D792DF232 /* AES.Cryptors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AES.Cryptors.swift; path = Sources/CryptoSwift/AES.Cryptors.swift; sourceTree = ""; }; - 8478BAB89219A419FF39EA29EA9E3DDB /* RLMObjectBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectBase.h; path = include/RLMObjectBase.h; sourceTree = ""; }; - 8481B0727000CBFADA6B53DF5D7590E4 /* NSButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSButton+WebCache.h"; path = "SDWebImage/Core/NSButton+WebCache.h"; sourceTree = ""; }; - 84B3479AC1BAC595E7B95332DB343B33 /* FBLPromise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBLPromise.m; path = Sources/FBLPromises/FBLPromise.m; sourceTree = ""; }; - 84FC29A540131AA60C7DCC83CC678DD2 /* UIColor+SDHexString.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+SDHexString.h"; path = "SDWebImage/Private/UIColor+SDHexString.h"; sourceTree = ""; }; - 85240B6EDDB1ABE5C7E06F2908E5D570 /* FIRAppInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAppInternal.h; path = FirebaseCore/Sources/Private/FIRAppInternal.h; sourceTree = ""; }; - 8557C3098119DEB8E40364362615D661 /* FIRAppAssociationRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAppAssociationRegistration.m; path = FirebaseCore/Sources/FIRAppAssociationRegistration.m; sourceTree = ""; }; - 856B5CD56F194FAD26EA91620B66D614 /* GoogleDataTransport.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GoogleDataTransport.framework; path = GoogleDataTransport.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 857BCF93020CA518DE9EA34BD596A194 /* FIRComponentContainerInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponentContainerInternal.h; path = FirebaseCore/Sources/FIRComponentContainerInternal.h; sourceTree = ""; }; - 85821A534382A8F22B0A7A69CA0E6B49 /* RLMRealm_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealm_Private.h; path = include/RLMRealm_Private.h; sourceTree = ""; }; - 85F7AB2BB7587C5C389E17636045425D /* firebasecore.nanopb.c */ = {isa = PBXFileReference; includeInIndex = 1; name = firebasecore.nanopb.c; path = Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.c; sourceTree = ""; }; - 863D8F71CBCCAE8D6C3777B8987192B2 /* FIRInstallationsAuthTokenResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsAuthTokenResult.m; path = FirebaseInstallations/Source/Library/FIRInstallationsAuthTokenResult.m; sourceTree = ""; }; - 864038E8150C2C4AD1491AD1F3A1B980 /* GDTCORConsoleLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORConsoleLogger.h; path = GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCORConsoleLogger.h; sourceTree = ""; }; - 864748984B96DE752B03C28D80A1CC88 /* FIRDependency.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDependency.h; path = FirebaseCore/Sources/Private/FIRDependency.h; sourceTree = ""; }; - 86BE6B3F44465CD164284308AEEBA936 /* SDAssociatedObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAssociatedObject.h; path = SDWebImage/Private/SDAssociatedObject.h; sourceTree = ""; }; - 86CE09E9CAE2F0425C7EC37256FA5A9D /* FirebaseCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseCore.h; path = FirebaseCore/Sources/Public/FirebaseCore/FirebaseCore.h; sourceTree = ""; }; + 71E09580BB6015B43244BE82E6F0D3EE /* Optional.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Optional.swift; path = RealmSwift/Optional.swift; sourceTree = ""; }; + 721285D0E389639F42212E7E22F096D4 /* GULURLSessionDataResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULURLSessionDataResponse.h; path = GoogleUtilities/Environment/Public/GoogleUtilities/GULURLSessionDataResponse.h; sourceTree = ""; }; + 7277CBA3C84228F260FB07A8EB44ED67 /* FBLPromise+Reduce.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Reduce.m"; path = "Sources/FBLPromises/FBLPromise+Reduce.m"; sourceTree = ""; }; + 72A503470E248385EB0444FE80D5889C /* SDImageFrame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageFrame.m; path = SDWebImage/Core/SDImageFrame.m; sourceTree = ""; }; + 72A9B93B24EAB754E87D4959978F5193 /* FIRInstallationsStoredAuthToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsStoredAuthToken.h; path = FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredAuthToken.h; sourceTree = ""; }; + 72B83333C0AFB4A6E78AE7028737B54F /* Rabbit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Rabbit.swift; path = Sources/CryptoSwift/Rabbit.swift; sourceTree = ""; }; + 72BA9E3807ADD6D72285C03EA594D389 /* GULNetwork.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULNetwork.h; path = GoogleUtilities/Network/Public/GoogleUtilities/GULNetwork.h; sourceTree = ""; }; + 73605EA91DA311A4558468B17EF9A149 /* RLMResults.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMResults.h; path = include/RLMResults.h; sourceTree = ""; }; + 74043E5CD70DD7C95FEF16DF6B47EBED /* SDWebImageDefine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDefine.h; path = SDWebImage/Core/SDWebImageDefine.h; sourceTree = ""; }; + 7439F217070FB579B7E2900147758F09 /* GDTCORUploadBatch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORUploadBatch.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORUploadBatch.m; sourceTree = ""; }; + 747C2C807F81EBA99E2020E69BA5B31C /* GDTCORStorageProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORStorageProtocol.h; path = GoogleDataTransport/GDTCORLibrary/Internal/GDTCORStorageProtocol.h; sourceTree = ""; }; + 756597C91955E64CC985D9E555E4356F /* ActionSheetPicker-3.0-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ActionSheetPicker-3.0-dummy.m"; sourceTree = ""; }; + 7568AB73CC8B6075CA253466A1030840 /* PromisesObjC.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = PromisesObjC.modulemap; sourceTree = ""; }; + 75BD193246E08BA4866D30885759C162 /* FIRMessagingUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingUtilities.h; path = FirebaseMessaging/Sources/FIRMessagingUtilities.h; sourceTree = ""; }; + 75FAA4A6DC235A402EAAD747DAF61360 /* SDImageIOCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageIOCoder.m; path = SDWebImage/Core/SDImageIOCoder.m; sourceTree = ""; }; + 76334FBCEC2DBBC92E967539B58A9436 /* Realm.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Realm.swift; path = RealmSwift/Realm.swift; sourceTree = ""; }; + 768AC73937772D944868FE8781922FA6 /* GULSceneDelegateSwizzler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULSceneDelegateSwizzler.m; path = GoogleUtilities/AppDelegateSwizzler/GULSceneDelegateSwizzler.m; sourceTree = ""; }; + 768E1282EC4221F70894BA62C11481BF /* GULNetworkMessageCode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULNetworkMessageCode.h; path = GoogleUtilities/Network/Public/GoogleUtilities/GULNetworkMessageCode.h; sourceTree = ""; }; + 76A7BEE9490C63F4A43F4C083A2314F6 /* RLMCollection_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMCollection_Private.h; path = include/RLMCollection_Private.h; sourceTree = ""; }; + 76B5DB2ADB6FFC91F27CB3037F369EAC /* FBLPromise+Always.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Always.m"; path = "Sources/FBLPromises/FBLPromise+Always.m"; sourceTree = ""; }; + 76D8E80C21A4CAF1EE2ABFE3F2506EF7 /* CryptoSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CryptoSwift-umbrella.h"; sourceTree = ""; }; + 76F434687E06090E9A0FD34A8D4F5404 /* SDMemoryCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDMemoryCache.m; path = SDWebImage/Core/SDMemoryCache.m; sourceTree = ""; }; + 783FC92A0BC431551685935131EE1C34 /* DispatchQueue+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DispatchQueue+Alamofire.swift"; path = "Source/DispatchQueue+Alamofire.swift"; sourceTree = ""; }; + 7847BF5210321D030D694AD9BC21EEFF /* ActionSheetDistancePicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ActionSheetDistancePicker.m; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/ActionSheetDistancePicker.m; sourceTree = ""; }; + 784D1561B788F0DCA445E4B459D70610 /* FIRFirebaseUserAgent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRFirebaseUserAgent.h; path = FirebaseCore/Sources/FIRFirebaseUserAgent.h; sourceTree = ""; }; + 788CF763F6B8CEF22383BB833C14EFDB /* RLMJSONModels.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RLMJSONModels.m; path = Realm/RLMJSONModels.m; sourceTree = ""; }; + 78A42D640A81DECF0F463A71FA26E6EB /* FIRMessagingRmqManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingRmqManager.m; path = FirebaseMessaging/Sources/FIRMessagingRmqManager.m; sourceTree = ""; }; + 78F701D011E4E0AE6BBCE0C13A9639D5 /* FIRDiagnosticsData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDiagnosticsData.m; path = FirebaseCore/Sources/FIRDiagnosticsData.m; sourceTree = ""; }; + 793E492FDC6F5C0C2D55DBF5A137C7F7 /* GoogleUtilities.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleUtilities.debug.xcconfig; sourceTree = ""; }; + 796764380BCCDD2B7C8B0AA3E307B0E3 /* FIRMessagingAPNSInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingAPNSInfo.m; path = FirebaseMessaging/Sources/Token/FIRMessagingAPNSInfo.m; sourceTree = ""; }; + 796BB9D72FDB0293F6C2B7CDB92B60AB /* NSError+RLMSync.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSError+RLMSync.m"; path = "Realm/NSError+RLMSync.m"; sourceTree = ""; }; + 7996877D7C985123D64F885666119A76 /* FIRMessagingTokenInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingTokenInfo.m; path = FirebaseMessaging/Sources/Token/FIRMessagingTokenInfo.m; sourceTree = ""; }; + 79CD50386D6776EA19B2E6957632178B /* GULUserDefaults.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULUserDefaults.m; path = GoogleUtilities/UserDefaults/GULUserDefaults.m; sourceTree = ""; }; + 7A269D3541CAC22B2C1EF187F11CE357 /* GULLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULLogger.m; path = GoogleUtilities/Logger/GULLogger.m; sourceTree = ""; }; + 7A4E2652D3A51538F369A7816AA75A9B /* FirebaseCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FirebaseCore-dummy.m"; sourceTree = ""; }; + 7BC0A720AAEF2D2E2A4E1C61BC6E01F6 /* FIRMessagingPersistentSyncMessage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingPersistentSyncMessage.m; path = FirebaseMessaging/Sources/FIRMessagingPersistentSyncMessage.m; sourceTree = ""; }; + 7BED8CD028BF0BC150E6EC6C757B8ECB /* Array+Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Array+Foundation.swift"; path = "Sources/CryptoSwift/Foundation/Array+Foundation.swift"; sourceTree = ""; }; + 7C0E6F5235C42D703058437E93A25F4A /* AuthenticationInterceptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AuthenticationInterceptor.swift; path = Source/AuthenticationInterceptor.swift; sourceTree = ""; }; + 7C407C7210A89A7EA8C05D261CAF6C05 /* SDWebImageTransitionInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageTransitionInternal.h; path = SDWebImage/Private/SDWebImageTransitionInternal.h; sourceTree = ""; }; + 7C99E6FBF6014D74F7365E1B7DCBD57D /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; + 7CBF26F21FA8038EDEFBA83395CE9299 /* GULMutableDictionary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULMutableDictionary.h; path = GoogleUtilities/Network/Public/GoogleUtilities/GULMutableDictionary.h; sourceTree = ""; }; + 7DA9B39A2B90F367E7A6BC98125FC30C /* GDTCOREventDataObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCOREventDataObject.h; path = GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCOREventDataObject.h; sourceTree = ""; }; + 7DE11A9D7AB89D3949A1741497809A5F /* FBLPromise+Then.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Then.h"; path = "Sources/FBLPromises/include/FBLPromise+Then.h"; sourceTree = ""; }; + 7DF1AF5E3CE3DE0779B0610F7BF31A85 /* FIRMessagingBackupExcludedPlist.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingBackupExcludedPlist.h; path = FirebaseMessaging/Sources/Token/FIRMessagingBackupExcludedPlist.h; sourceTree = ""; }; + 7DF2124421CBBA4A2029D5609BC36AE4 /* EventMonitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EventMonitor.swift; path = Source/EventMonitor.swift; sourceTree = ""; }; + 7ECE80114DB78DBA42FDE6C4D000CED1 /* CMAC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CMAC.swift; path = Sources/CryptoSwift/CMAC.swift; sourceTree = ""; }; + 7ED80882A44DDDA71D422827D3E6CC66 /* Validation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Validation.swift; path = Source/Validation.swift; sourceTree = ""; }; + 7F2EAE1C713FC99BDC19E819DF65833E /* pb_encode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb_encode.h; sourceTree = ""; }; + 7F4E01FCAD0DC75A625B94AECD417659 /* FIRApp.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRApp.m; path = FirebaseCore/Sources/FIRApp.m; sourceTree = ""; }; + 7FCA132268E23CE5CC40BF77BC455EC2 /* IQKeyboardReturnKeyHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardReturnKeyHandler.swift; path = IQKeyboardManagerSwift/IQKeyboardReturnKeyHandler.swift; sourceTree = ""; }; + 7FD95F6236A4C815A5460B7EA152E296 /* RLMPlatform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMPlatform.h; path = include/RLMPlatform.h; sourceTree = ""; }; + 803DDA4CB2AE4EBEA523C42066CE8E10 /* URITemplate-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "URITemplate-umbrella.h"; sourceTree = ""; }; + 80733B1467ECCE8ECCA96788C8D79917 /* ActionSheetCustomPickerDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetCustomPickerDelegate.h; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/ActionSheetCustomPickerDelegate.h; sourceTree = ""; }; + 8124EE4EEB34148FB0A5D598BCEA43D6 /* FBLPromise+Recover.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Recover.m"; path = "Sources/FBLPromises/FBLPromise+Recover.m"; sourceTree = ""; }; + 813B7EE4B0772F93E3E4AD9C5153A317 /* Reachability.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Reachability.swift; path = Sources/Reachability.swift; sourceTree = ""; }; + 81735A75E6CF3056E326396EC1FC5ED0 /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/Core/SDWebImageDownloader.m; sourceTree = ""; }; + 8186047FFCBBCFB3F5329B15E1325BFF /* FIRMessaging.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessaging.m; path = FirebaseMessaging/Sources/FIRMessaging.m; sourceTree = ""; }; + 81E7276C2FC19FC4571F27F8AA8D0F2E /* list_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = list_notifier.cpp; path = Realm/ObjectStore/src/impl/list_notifier.cpp; sourceTree = ""; }; + 81F5B8E4DC040480EF60B2727FA27617 /* RealmSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RealmSwift-Info.plist"; sourceTree = ""; }; + 81FE6F8FEE6CBEA03755FA07E116C399 /* FBLPromise+Testing.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Testing.m"; path = "Sources/FBLPromises/FBLPromise+Testing.m"; sourceTree = ""; }; + 8207D25452E8B924F7358EB025B3FC8C /* GDTCORReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORReachability.h; path = GoogleDataTransport/GDTCORLibrary/Internal/GDTCORReachability.h; sourceTree = ""; }; + 82C9A158D68EC8F991990F707AEA42E3 /* RLMSyncSubscription.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncSubscription.h; path = include/RLMSyncSubscription.h; sourceTree = ""; }; + 83081663FE44BEB82E6AEE91711F74B4 /* ActionSheetPicker-3.0-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ActionSheetPicker-3.0-prefix.pch"; sourceTree = ""; }; + 8413BC54D9D681E1EA2B3A8CEABA7DCB /* RLMResults_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMResults_Private.h; path = include/RLMResults_Private.h; sourceTree = ""; }; + 841AE8A2609E4C62AF5D9F3B00214BAB /* FIRMessagingCheckinStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingCheckinStore.h; path = FirebaseMessaging/Sources/Token/FIRMessagingCheckinStore.h; sourceTree = ""; }; + 844383CEA99AA38235AD8948C9C22D6C /* UIImage+ExtendedCacheData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ExtendedCacheData.h"; path = "SDWebImage/Core/UIImage+ExtendedCacheData.h"; sourceTree = ""; }; + 84646ED7C395057C75C29BA382B9A62F /* SDImageAPNGCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageAPNGCoder.h; path = SDWebImage/Core/SDImageAPNGCoder.h; sourceTree = ""; }; + 846A0AACA1227CFD7093B653A9CB28BB /* FIRMessagingTokenDeleteOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingTokenDeleteOperation.m; path = FirebaseMessaging/Sources/Token/FIRMessagingTokenDeleteOperation.m; sourceTree = ""; }; + 846EE9201BAD3CE3317DFAD5D53A3E48 /* FIRInstallationsItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsItem.h; path = FirebaseInstallations/Source/Library/FIRInstallationsItem.h; sourceTree = ""; }; + 850E31E97C95396F711505AA41F39D3E /* FBLPromise+Timeout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Timeout.h"; path = "Sources/FBLPromises/include/FBLPromise+Timeout.h"; sourceTree = ""; }; + 8530C6A9835A439D33DDD56BCB777CBD /* Int+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Int+Extension.swift"; path = "Sources/CryptoSwift/Int+Extension.swift"; sourceTree = ""; }; + 856B5CD56F194FAD26EA91620B66D614 /* GoogleDataTransport */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GoogleDataTransport; path = GoogleDataTransport.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 85FE598E63B7634CB66D13C64741E67F /* SDWebImageOptionsProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOptionsProcessor.h; path = SDWebImage/Core/SDWebImageOptionsProcessor.h; sourceTree = ""; }; + 8607A349742D091607CE66A99A57A798 /* IQTextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextView.swift; path = IQKeyboardManagerSwift/IQTextView/IQTextView.swift; sourceTree = ""; }; + 863408B2E7182025F57F38D290871626 /* FBLPromise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBLPromise.m; path = Sources/FBLPromises/FBLPromise.m; sourceTree = ""; }; + 8642BF4C54A8593E54F33CCBDC4AB1D2 /* FIRMessagingTokenStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingTokenStore.m; path = FirebaseMessaging/Sources/Token/FIRMessagingTokenStore.m; sourceTree = ""; }; + 8673FA0542D5C499BED6689327506E41 /* SDImageGraphics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageGraphics.m; path = SDWebImage/Core/SDImageGraphics.m; sourceTree = ""; }; + 867B5EA3966123FC40EE3299924AEFAD /* AbstractActionSheetPicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AbstractActionSheetPicker.h; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/AbstractActionSheetPicker.h; sourceTree = ""; }; 86D4DD720D8D88EEFDDD794AD8769A79 /* Pods-MyStudiesTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MyStudiesTests-acknowledgements.plist"; sourceTree = ""; }; - 86FD6C2B4A05610AB2888A437DE632CA /* RLMSyncUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncUser.h; path = include/RLMSyncUser.h; sourceTree = ""; }; - 86FFF55BE2496BBBC81C722F31BF1077 /* URITemplate.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = URITemplate.modulemap; sourceTree = ""; }; - 8751C239CC9CC196F977655F387F073C /* SDWeakProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWeakProxy.h; path = SDWebImage/Private/SDWeakProxy.h; sourceTree = ""; }; - 87D773189F499ACEE8B53BC884B1DC3A /* GoogleUtilities.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleUtilities.debug.xcconfig; sourceTree = ""; }; - 8838114C26F8D66D8AFD974AEE78EE20 /* GoogleDataTransport-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleDataTransport-umbrella.h"; sourceTree = ""; }; - 884820B0ECC534A66736999395266BB4 /* Poly1305.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Poly1305.swift; path = Sources/CryptoSwift/Poly1305.swift; sourceTree = ""; }; - 886BC41C8712FF81292C4ADB9E0AF2EB /* GDTCORUploadBatch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORUploadBatch.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadBatch.h; sourceTree = ""; }; - 887294FE52E59B5624DE24630AE49ACE /* FBLPromise+Wrap.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Wrap.m"; path = "Sources/FBLPromises/FBLPromise+Wrap.m"; sourceTree = ""; }; + 87560003B0C0EB44074950AFE351DFB4 /* FIRMessagingContextManagerService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingContextManagerService.m; path = FirebaseMessaging/Sources/FIRMessagingContextManagerService.m; sourceTree = ""; }; + 87629E31C47EEC3BD53180898BD2FC58 /* FIRMessaging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessaging.h; path = FirebaseMessaging/Sources/Public/FirebaseMessaging/FIRMessaging.h; sourceTree = ""; }; + 87731DACC37E460E5C08A2A2D090BE1A /* RealmSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RealmSwift-prefix.pch"; sourceTree = ""; }; + 87DC2214947702356F70EB5FA95ED714 /* Scrypt.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Scrypt.swift; path = Sources/CryptoSwift/Scrypt.swift; sourceTree = ""; }; + 8845D079BF4E1D468B7FE8D56D5618D1 /* UInt32+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UInt32+Extension.swift"; path = "Sources/CryptoSwift/UInt32+Extension.swift"; sourceTree = ""; }; + 885B5658215645D47FAECA22A261F827 /* FIRInstallationsIIDTokenStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsIIDTokenStore.h; path = FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDTokenStore.h; sourceTree = ""; }; 88D9B81D709F1B6DC318C3DF8E784B2C /* Pods-MyStudies-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MyStudies-umbrella.h"; sourceTree = ""; }; - 890947B98407FAF2248B81F88C9AD1F1 /* FIRInstallations.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallations.m; path = FirebaseInstallations/Source/Library/FIRInstallations.m; sourceTree = ""; }; - 89447C893828D75B9A945EDDC78BA278 /* FIRMessagingPersistentSyncMessage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingPersistentSyncMessage.h; path = FirebaseMessaging/Sources/FIRMessagingPersistentSyncMessage.h; sourceTree = ""; }; - 89870C6B30A40925A5F6F66088475F68 /* UIView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCache.h"; path = "SDWebImage/Core/UIView+WebCache.h"; sourceTree = ""; }; - 89A45638B734B51D38A0767EB8F60C70 /* SDImageLoadersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageLoadersManager.m; path = SDWebImage/Core/SDImageLoadersManager.m; sourceTree = ""; }; - 89B8D2823761EE3DB00B11BDD56D0074 /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/Core/UIButton+WebCache.m"; sourceTree = ""; }; - 89EB908E14258DC16339D5FBA1E70EA4 /* FIRMessagingConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingConstants.h; path = FirebaseMessaging/Sources/FIRMessagingConstants.h; sourceTree = ""; }; - 89FFF69FAB89315324004A48B8CFCEA9 /* RLMArray.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMArray.h; path = include/RLMArray.h; sourceTree = ""; }; - 8A2E811D849E65D02560B4FD80EEBDD6 /* FBLPromise+Validate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Validate.h"; path = "Sources/FBLPromises/include/FBLPromise+Validate.h"; sourceTree = ""; }; - 8A34BDC83EA597FF87030DE81208FEC1 /* FIRMessagingKeychain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingKeychain.m; path = FirebaseMessaging/Sources/Token/FIRMessagingKeychain.m; sourceTree = ""; }; - 8A7516205E1AB74247C872744951D82F /* FIRApp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRApp.h; path = FirebaseCore/Sources/Public/FirebaseCore/FIRApp.h; sourceTree = ""; }; - 8A81254465733788AF582A774ADB2F8E /* EventMonitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EventMonitor.swift; path = Source/EventMonitor.swift; sourceTree = ""; }; - 8ADD59B7A4F54D4DDA367047E513B60A /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; - 8AF076A07B131408F8B113F5691D6D4A /* RLMPlatform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMPlatform.h; path = include/RLMPlatform.h; sourceTree = ""; }; - 8B05AABF6DDBF7F0E609A84B3524925B /* FIRInstallationsIDController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsIDController.h; path = FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsIDController.h; sourceTree = ""; }; - 8B270A963EE131B68F100CA2D61652BE /* Builders.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Builders.swift; path = Sources/Mockingjay/Builders.swift; sourceTree = ""; }; - 8BC6A8964E6AE54EE1A4466B07D5B30F /* BlockDecryptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlockDecryptor.swift; path = Sources/CryptoSwift/BlockDecryptor.swift; sourceTree = ""; }; - 8C8B4FE54AEA7F9E1C0D140112FF8BD5 /* FIRDependency.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDependency.h; path = FirebaseCore/Sources/Private/FIRDependency.h; sourceTree = ""; }; - 8CA0655A438232106484BF42EB014143 /* RLMProperty_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMProperty_Private.h; path = include/RLMProperty_Private.h; sourceTree = ""; }; - 8CC9178C366942FD6FF6A115604EAD58 /* FirebaseCoreDiagnostics.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FirebaseCoreDiagnostics.framework; path = FirebaseCoreDiagnostics.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8CE39D808F6A30D49B0E13F49595B3D1 /* FIRDiagnosticsData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDiagnosticsData.h; path = FirebaseCore/Sources/FIRDiagnosticsData.h; sourceTree = ""; }; - 8D2A115BC6E7B8C642444CB0D7497979 /* DistancePickerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DistancePickerView.m; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/DistancePickerView.m; sourceTree = ""; }; - 8D3599CF550F9EB034877E67421264CC /* Util.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Util.swift; path = RealmSwift/Util.swift; sourceTree = ""; }; - 8D556045E6E9E35001A9C8A2403A666A /* GULKeychainUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULKeychainUtils.m; path = GoogleUtilities/Environment/SecureStorage/GULKeychainUtils.m; sourceTree = ""; }; - 8DB06E08793DF7A35C65E4DEC596D535 /* RLMMigration.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMMigration.mm; path = Realm/RLMMigration.mm; sourceTree = ""; }; - 8DFEE6A7766C550A778CA539B2DF4AEA /* FIRBundleUtil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRBundleUtil.m; path = FirebaseCore/Sources/FIRBundleUtil.m; sourceTree = ""; }; - 8E2758BCC92D424062539F9E983F9F56 /* SDWebImageTransitionInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageTransitionInternal.h; path = SDWebImage/Private/SDWebImageTransitionInternal.h; sourceTree = ""; }; - 8E311DBAB691A7D9C9279F13385CA37A /* UInt16+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UInt16+Extension.swift"; path = "Sources/CryptoSwift/UInt16+Extension.swift"; sourceTree = ""; }; - 8E37A51859909C1F97D55A46978EEF6D /* Digest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Digest.swift; path = Sources/CryptoSwift/Digest.swift; sourceTree = ""; }; - 8E426A0418D1F71A0ACAE7FE5185949C /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/Core/SDWebImageDownloaderOperation.m; sourceTree = ""; }; - 8E7F463FE2F325B3C6F61A56AFABBBE4 /* UIImage+ForceDecode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ForceDecode.h"; path = "SDWebImage/Core/UIImage+ForceDecode.h"; sourceTree = ""; }; - 8EAA64E8C95C7D0DDF75E931838E9BA4 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; - 8EDEDEB38B59652322819840B7D510F4 /* GULNetworkInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULNetworkInternal.h; path = GoogleUtilities/Network/GULNetworkInternal.h; sourceTree = ""; }; - 8F63CCA1076F27B4DD0D3A0BEA2E5CC1 /* IQPreviousNextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQPreviousNextView.swift; path = IQKeyboardManagerSwift/IQToolbar/IQPreviousNextView.swift; sourceTree = ""; }; - 8F754AEB94FF9A7F96CB5EB9ED777103 /* FIRMessagingPendingTopicsList.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingPendingTopicsList.h; path = FirebaseMessaging/Sources/FIRMessagingPendingTopicsList.h; sourceTree = ""; }; - 8FA40879D66F09AE16AAC8B0BA85117D /* SDImageGIFCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageGIFCoder.m; path = SDWebImage/Core/SDImageGIFCoder.m; sourceTree = ""; }; - 8FB4806E23BA4462C4C689399A4C0EEB /* IQNSArray+Sort.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQNSArray+Sort.swift"; path = "IQKeyboardManagerSwift/Categories/IQNSArray+Sort.swift"; sourceTree = ""; }; - 901BFCF017E527D8CE1C06227E6CD344 /* nanopb.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = nanopb.release.xcconfig; sourceTree = ""; }; - 902515A56C2EA6CDDE1BA78D70FE62D2 /* FirebaseCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FirebaseCore.modulemap; sourceTree = ""; }; - 909D5174512FBEDF2F4438425DD6C3BF /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/Core/SDWebImageCompat.m; sourceTree = ""; }; - 90F19DCB0ACA9EC4BCCEC8C7BB005FAC /* Error.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Error.swift; path = RealmSwift/Error.swift; sourceTree = ""; }; - 911AAC52B85C0038A4170B924E4C1E6C /* GDTCOREventTransformer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCOREventTransformer.h; path = GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCOREventTransformer.h; sourceTree = ""; }; - 91D643A984E8881A3AC8233310BA5ED5 /* IQUIView+Hierarchy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIView+Hierarchy.swift"; path = "IQKeyboardManagerSwift/Categories/IQUIView+Hierarchy.swift"; sourceTree = ""; }; - 921BE4A82C4A7A5C72A0C6F8B8FEF200 /* Realm.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Realm.framework; path = Realm.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 92537D6CD0B971AAAE38CA6FCA952824 /* RLMSyncPermission.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMSyncPermission.mm; path = Realm/RLMSyncPermission.mm; sourceTree = ""; }; - 928FE213F6BABD395070DBED6D711737 /* RLMProperty.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMProperty.h; path = include/RLMProperty.h; sourceTree = ""; }; - 92ED901BD940887D5EECCE82872D08FE /* IQUIScrollView+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIScrollView+Additions.swift"; path = "IQKeyboardManagerSwift/Categories/IQUIScrollView+Additions.swift"; sourceTree = ""; }; - 939E77A1AA3787216ED5F1749D86D0B5 /* FBLPromise+Testing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Testing.h"; path = "Sources/FBLPromises/include/FBLPromise+Testing.h"; sourceTree = ""; }; - 941EBA9CC982E351DBA271BBB7EB5AAD /* GULReachabilityChecker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULReachabilityChecker.m; path = GoogleUtilities/Reachability/GULReachabilityChecker.m; sourceTree = ""; }; - 9463D860456FB689C22804BED88D0803 /* FIRComponentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponentType.h; path = FirebaseCore/Sources/Private/FIRComponentType.h; sourceTree = ""; }; - 946A8858C9C1B580A7060540FC0FC329 /* AbstractActionSheetPicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AbstractActionSheetPicker.m; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/AbstractActionSheetPicker.m; sourceTree = ""; }; - 947B7AB29E527E934E6960DB9EDB8202 /* Realm-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Realm-dummy.m"; sourceTree = ""; }; - 948ECC9052D503C98FAC88A033F93ED8 /* RLMListBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMListBase.h; path = include/RLMListBase.h; sourceTree = ""; }; - 94D149E6E63A5F33A2B58BCB8C87B83B /* SDFileAttributeHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDFileAttributeHelper.h; path = SDWebImage/Private/SDFileAttributeHelper.h; sourceTree = ""; }; - 94EEDDE0868EDDF2409DB678DFA0047C /* GoogleDataTransport.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GoogleDataTransport.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 958A521B7187AF658E3D39DBCF912ACF /* GULNSData+zlib.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "GULNSData+zlib.m"; path = "GoogleUtilities/NSData+zlib/GULNSData+zlib.m"; sourceTree = ""; }; - 95A10ED205450B356F0C4F723F4BD734 /* UIImage+Metadata.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Metadata.m"; path = "SDWebImage/Core/UIImage+Metadata.m"; sourceTree = ""; }; + 890CC9F4A0110C71D23B765C18804F6E /* RLMSyncUtil_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncUtil_Private.h; path = include/RLMSyncUtil_Private.h; sourceTree = ""; }; + 8959290D65E52B6963D787F477D0D833 /* FIRMessagingAuthKeychain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingAuthKeychain.h; path = FirebaseMessaging/Sources/Token/FIRMessagingAuthKeychain.h; sourceTree = ""; }; + 895E940E9ACACE9310DD41557B9BD8CD /* FirebaseCoreDiagnostics.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseCoreDiagnostics.debug.xcconfig; sourceTree = ""; }; + 89B62DF893489A8ABB7DBF594E70E36B /* Result+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Result+Alamofire.swift"; path = "Source/Result+Alamofire.swift"; sourceTree = ""; }; + 89C4C88114FFBC5E889FE474846974B8 /* OFB.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OFB.swift; path = Sources/CryptoSwift/BlockMode/OFB.swift; sourceTree = ""; }; + 8ADA08729FDC8982DBBCE7528189BB54 /* Realm-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Realm-dummy.m"; sourceTree = ""; }; + 8AFAA3F4BCBF5CAF1ED6A01A0CF001EB /* RedirectHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RedirectHandler.swift; path = Source/RedirectHandler.swift; sourceTree = ""; }; + 8B141D56D9E09D8D0EAC98D26ACC4FCD /* FIRHeartbeatInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRHeartbeatInfo.m; path = FirebaseCore/Sources/FIRHeartbeatInfo.m; sourceTree = ""; }; + 8B4F1082E4616E9F4125CE579148B55D /* ObjectiveCSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObjectiveCSupport.swift; path = RealmSwift/ObjectiveCSupport.swift; sourceTree = ""; }; + 8B73F422130E3173C51DACD28AF77628 /* FirebaseCoreInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseCoreInternal.h; path = FirebaseCore/Sources/Private/FirebaseCoreInternal.h; sourceTree = ""; }; + 8B8EFF73E21B2FFAEEDA96C777B6D3E2 /* Realm.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Realm.debug.xcconfig; sourceTree = ""; }; + 8B96F13690D2203E934030C0A77D2E09 /* SDWebImageTransition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageTransition.m; path = SDWebImage/Core/SDWebImageTransition.m; sourceTree = ""; }; + 8BBBCA1BF6A934EAEC5F09C4902D0494 /* NSError+RLMSync.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSError+RLMSync.h"; path = "include/NSError+RLMSync.h"; sourceTree = ""; }; + 8BD894247BBFFB5B9BC564749CB1AC66 /* ActionSheetStringPicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetStringPicker.h; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/ActionSheetStringPicker.h; sourceTree = ""; }; + 8C6AF795D9AC7D35E093860A3B278048 /* GULAppDelegateSwizzler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULAppDelegateSwizzler.h; path = GoogleUtilities/AppDelegateSwizzler/Public/GoogleUtilities/GULAppDelegateSwizzler.h; sourceTree = ""; }; + 8C9DD17F7C6B6BFEE7352EE052C6EE7A /* SDWebImageIndicator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageIndicator.m; path = SDWebImage/Core/SDWebImageIndicator.m; sourceTree = ""; }; + 8CC9178C366942FD6FF6A115604EAD58 /* FirebaseCoreDiagnostics */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FirebaseCoreDiagnostics; path = FirebaseCoreDiagnostics.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8D321850BFB472987C8920DDD847B563 /* RLMRealm+Sync.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "RLMRealm+Sync.h"; path = "include/RLMRealm+Sync.h"; sourceTree = ""; }; + 8D9645E9A4A1AA59D9DB66BD2872ACD7 /* UInt8+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UInt8+Extension.swift"; path = "Sources/CryptoSwift/UInt8+Extension.swift"; sourceTree = ""; }; + 8DD665A0F87DBA3DC018D522EFBBCA05 /* HTTPMethod.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPMethod.swift; path = Source/HTTPMethod.swift; sourceTree = ""; }; + 8EBC005486B3ABDD3CDB504FF5E0639E /* RLMAnalytics.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMAnalytics.mm; path = Realm/RLMAnalytics.mm; sourceTree = ""; }; + 8F3F4D0CAD61DECA7DF8680481BD9590 /* GoogleAppMeasurement.xcframework */ = {isa = PBXFileReference; includeInIndex = 1; name = GoogleAppMeasurement.xcframework; path = Frameworks/GoogleAppMeasurement.xcframework; sourceTree = ""; }; + 8F9EEAD2CCB06E3D9F37D73E7DCA7FA4 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; + 8FBBD10AFE907DF8B70531381BA8CEE0 /* RLMSyncUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncUser.h; path = include/RLMSyncUser.h; sourceTree = ""; }; + 8FBDCFA96754F62BC07FDDCA84D6551E /* SDWebImage-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SDWebImage-Info.plist"; sourceTree = ""; }; + 910D84297AEC7F97CE8D7E1ECD2E82FD /* ActionSheetCustomPicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ActionSheetCustomPicker.m; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/ActionSheetCustomPicker.m; sourceTree = ""; }; + 913F780036799F671CCFDEBD0667A97F /* FirebaseCoreDiagnostics-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FirebaseCoreDiagnostics-dummy.m"; sourceTree = ""; }; + 916A614848833BFE81FD69ABD5E9ADFD /* SHA3.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SHA3.swift; path = Sources/CryptoSwift/SHA3.swift; sourceTree = ""; }; + 919441429B23C0D81323DFB6938C0A25 /* UIView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCache.h"; path = "SDWebImage/Core/UIView+WebCache.h"; sourceTree = ""; }; + 91A7812DE61C21F1BBB8FE1A9A3CE839 /* GoogleAppMeasurement.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleAppMeasurement.debug.xcconfig; sourceTree = ""; }; + 9217E55EEAC79CDDFFA16D67DC738B35 /* FIRAnalyticsConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAnalyticsConfiguration.h; path = FirebaseCore/Sources/FIRAnalyticsConfiguration.h; sourceTree = ""; }; + 921BE4A82C4A7A5C72A0C6F8B8FEF200 /* Realm */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Realm; path = Realm.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 92A0DE7613A69DC7D76C1949596CE01E /* RLMSyncManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncManager.h; path = include/RLMSyncManager.h; sourceTree = ""; }; + 92A3F71221BE3E85393BAAD68B35A5FF /* object_changeset.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = object_changeset.cpp; path = Realm/ObjectStore/src/object_changeset.cpp; sourceTree = ""; }; + 92C6D0B54C4429D514530F47D7C856B3 /* FBLPromise+Delay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Delay.h"; path = "Sources/FBLPromises/include/FBLPromise+Delay.h"; sourceTree = ""; }; + 93427A736E77B72D9C425FBF565D7090 /* Cryptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cryptor.swift; path = Sources/CryptoSwift/Cryptor.swift; sourceTree = ""; }; + 949E1956D736409B999B35B1D89857FD /* StreamDecryptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StreamDecryptor.swift; path = Sources/CryptoSwift/StreamDecryptor.swift; sourceTree = ""; }; + 94E08B980255A3F6FA9965B95B8EE948 /* CryptoSwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CryptoSwift.debug.xcconfig; sourceTree = ""; }; + 950DAECD0F1B40F2774FAA292CB28D23 /* Mockingjay.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Mockingjay.modulemap; sourceTree = ""; }; + 95123A2DA35EAEB7351257F9949317F9 /* FIRMessagingTokenManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingTokenManager.m; path = FirebaseMessaging/Sources/Token/FIRMessagingTokenManager.m; sourceTree = ""; }; 95B82C453115CD24EA9668BE883EB7B5 /* Pods-MyStudiesTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MyStudiesTests.debug.xcconfig"; sourceTree = ""; }; - 95E296B84D8CD03DCC39216A74A4C74C /* FIRInstallationsSingleOperationPromiseCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsSingleOperationPromiseCache.h; path = FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsSingleOperationPromiseCache.h; sourceTree = ""; }; - 9614F848A50E867CD86634E87419BF1E /* NSBezierPath+SDRoundedCorners.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBezierPath+SDRoundedCorners.h"; path = "SDWebImage/Private/NSBezierPath+SDRoundedCorners.h"; sourceTree = ""; }; - 969774418A140466BFBA6A018E612159 /* Validation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Validation.swift; path = Source/Validation.swift; sourceTree = ""; }; - 96C8813BD09278E35AF98C3BDDE23974 /* SDMemoryCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDMemoryCache.m; path = SDWebImage/Core/SDMemoryCache.m; sourceTree = ""; }; - 96CE92E5425AE24E39E7772E791A1F9F /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 9751695F04AEFB9C3F95BB2E355F8090 /* ChaCha20+Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ChaCha20+Foundation.swift"; path = "Sources/CryptoSwift/Foundation/ChaCha20+Foundation.swift"; sourceTree = ""; }; - 977B590CCBC383328EA42E97EC53B6C9 /* RLMAnalytics.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMAnalytics.mm; path = Realm/RLMAnalytics.mm; sourceTree = ""; }; - 9784D0880A821330DCF9CAA43952714F /* GDTCORReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORReachability.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORReachability.m; sourceTree = ""; }; - 97C210490C902F002D72B2CCEABA2775 /* SDWebImageDownloaderConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderConfig.h; path = SDWebImage/Core/SDWebImageDownloaderConfig.h; sourceTree = ""; }; - 97C914084CB577A244C3ECAF9F612198 /* Toast.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Toast.swift; path = Toast/Toast.swift; sourceTree = ""; }; - 987CB935C61B01E507BD3F4E1394A0D5 /* FirebaseMessaging.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseMessaging.debug.xcconfig; sourceTree = ""; }; - 991A5EC838D809DC10D814B9E8DEC3BF /* GoogleUtilities-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleUtilities-umbrella.h"; sourceTree = ""; }; - 9929F6E4584CF052BD347801DD3B4642 /* FBLPromise+Always.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Always.m"; path = "Sources/FBLPromises/FBLPromise+Always.m"; sourceTree = ""; }; - 9944EADD281B8543B43FC6FF7856CD2E /* ResponseSerialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResponseSerialization.swift; path = Source/ResponseSerialization.swift; sourceTree = ""; }; - 9994D7EE2116F6014B4E9400C7C0BB95 /* results_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = results_notifier.cpp; path = Realm/ObjectStore/src/impl/results_notifier.cpp; sourceTree = ""; }; - 9A4F43B9B838C9ED009A0AA82CF3E6EE /* FirebaseInstallations.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseInstallations.release.xcconfig; sourceTree = ""; }; - 9AC02E49F7EBAC898B69CDF48AB33E95 /* NSError+FIRMessaging.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSError+FIRMessaging.m"; path = "FirebaseMessaging/Sources/NSError+FIRMessaging.m"; sourceTree = ""; }; - 9B1D21F0F5D94A4F560149D736A160D5 /* Mockingjay-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Mockingjay-umbrella.h"; sourceTree = ""; }; - 9B664C77287C942F9E34C7D7D702F312 /* RLMRealmConfiguration+Sync.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "RLMRealmConfiguration+Sync.h"; path = "include/RLMRealmConfiguration+Sync.h"; sourceTree = ""; }; - 9B6E53A68A8A0D378E546FC8AB43BB6E /* Optional.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Optional.swift; path = RealmSwift/Optional.swift; sourceTree = ""; }; - 9BDAE9ECD2204684F06DB1E756BCCB1A /* SDImageGraphics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageGraphics.m; path = SDWebImage/Core/SDImageGraphics.m; sourceTree = ""; }; - 9C2D53E51615226484159ACBC1E40A7F /* SDImageHEICCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageHEICCoder.m; path = SDWebImage/Core/SDImageHEICCoder.m; sourceTree = ""; }; - 9C42C646F7AD853933601D509EF6E930 /* ActionSheetStringPicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetStringPicker.h; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/ActionSheetStringPicker.h; sourceTree = ""; }; - 9C86A9F959BAAB05EAABFD80BE01F80D /* Toast-Swift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Toast-Swift.release.xcconfig"; sourceTree = ""; }; - 9C94965A419B71F22543CCAA2917B6D9 /* FBLPromise+Validate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Validate.m"; path = "Sources/FBLPromises/FBLPromise+Validate.m"; sourceTree = ""; }; - 9CB40D2C81289B679425DEDD1A0B1B01 /* ISO78164Padding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ISO78164Padding.swift; path = Sources/CryptoSwift/ISO78164Padding.swift; sourceTree = ""; }; - 9CCFC6DBEBDC7C6ED8E119D7177DFB7D /* GoogleDataTransport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GoogleDataTransport.h; path = GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GoogleDataTransport.h; sourceTree = ""; }; - 9D5218F8B74DFC860B934E835C739EE1 /* UIImage+Transform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Transform.h"; path = "SDWebImage/Core/UIImage+Transform.h"; sourceTree = ""; }; - 9D6A99168873D172AFD88F381EC1D06C /* sync_metadata.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_metadata.cpp; path = Realm/ObjectStore/src/sync/impl/sync_metadata.cpp; sourceTree = ""; }; + 95BD75675CC5BA6799129F1026664498 /* UIImage+ForceDecode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ForceDecode.h"; path = "SDWebImage/Core/UIImage+ForceDecode.h"; sourceTree = ""; }; + 96D337AE4A370ACFEF6EFFFDF7E98259 /* IQKeyboardManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardManager.swift; path = IQKeyboardManagerSwift/IQKeyboardManager.swift; sourceTree = ""; }; + 96EE22ACD1B156368FD85BEFB2860D8B /* URLSessionConfiguration+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLSessionConfiguration+Alamofire.swift"; path = "Source/URLSessionConfiguration+Alamofire.swift"; sourceTree = ""; }; + 97B6A2A7EA6CB7F58C1A47411E33D1BB /* firebasecore.nanopb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = firebasecore.nanopb.h; path = Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.h; sourceTree = ""; }; + 997C62088E31C19A6E01FD622DF9C368 /* GoogleAppMeasurement.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleAppMeasurement.release.xcconfig; sourceTree = ""; }; + 99BE132ADCFA4E9B0FCD9173BBFC4AE1 /* sync_metadata.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_metadata.cpp; path = Realm/ObjectStore/src/sync/impl/sync_metadata.cpp; sourceTree = ""; }; + 99C2B284313B2943DABAF9C37D0C27B2 /* SDGraphicsImageRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDGraphicsImageRenderer.h; path = SDWebImage/Core/SDGraphicsImageRenderer.h; sourceTree = ""; }; + 9A385DA5505B3D33CCDE3B8AD93AB7B5 /* cct.nanopb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = cct.nanopb.h; path = GoogleDataTransport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.h; sourceTree = ""; }; + 9AAF5A18737624C27C29A00C2B1C2EE4 /* Toast.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Toast.swift; path = Toast/Toast.swift; sourceTree = ""; }; + 9AC5A45B3B35233595CCBD1F65C086B9 /* String+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+Extension.swift"; path = "Sources/CryptoSwift/String+Extension.swift"; sourceTree = ""; }; + 9AD526A021FFB96406ED14530104D96C /* SwiftVersion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftVersion.swift; path = RealmSwift/SwiftVersion.swift; sourceTree = ""; }; + 9B62C630E6350F365DAB53F4E4128891 /* RLMSyncUser.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMSyncUser.mm; path = Realm/RLMSyncUser.mm; sourceTree = ""; }; + 9C093E21AEEC109D6569BE9FC473A434 /* IQUIView+Hierarchy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIView+Hierarchy.swift"; path = "IQKeyboardManagerSwift/Categories/IQUIView+Hierarchy.swift"; sourceTree = ""; }; + 9C4BAD4FBF7AABC17A63713E4D8A60E2 /* FIRInstallationsIIDStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsIIDStore.h; path = FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDStore.h; sourceTree = ""; }; + 9CB9BB423AEB03FB77FD41865F954DEC /* GULUserDefaults.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULUserDefaults.h; path = GoogleUtilities/UserDefaults/Public/GoogleUtilities/GULUserDefaults.h; sourceTree = ""; }; + 9CE3710E033FFF34407C6530C1A0B0F9 /* FIRMessagingTokenStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingTokenStore.h; path = FirebaseMessaging/Sources/Token/FIRMessagingTokenStore.h; sourceTree = ""; }; + 9D0A3C2C50C122450267C4D688CF97D5 /* ActionSheetStringPicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ActionSheetStringPicker.m; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/ActionSheetStringPicker.m; sourceTree = ""; }; + 9D26E710F500DE7A77179FBD03CD9D77 /* SlideMenuControllerSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SlideMenuControllerSwift-umbrella.h"; sourceTree = ""; }; + 9D344218986461A48E21BA64D17721FC /* GDTCORClock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORClock.h; path = GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCORClock.h; sourceTree = ""; }; + 9D8DAE703C91F108652E2315F02D5E54 /* sync_session.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_session.cpp; path = Realm/ObjectStore/src/sync/sync_session.cpp; sourceTree = ""; }; 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9D95C7F99D2C68C5DBAAA51F236EBDBE /* ActionSheetDatePicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ActionSheetDatePicker.m; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/ActionSheetDatePicker.m; sourceTree = ""; }; - 9DF19DA9F7A7ED51656899AB5D859FBC /* SDAnimatedImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImage.m; path = SDWebImage/Core/SDAnimatedImage.m; sourceTree = ""; }; - 9E1130D1E08F12920F389C2C21B1A69B /* GDTCORAssert.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORAssert.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORAssert.m; sourceTree = ""; }; - 9E1CE00C7B46C7D2CB3D4714DE216F8E /* OFB.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OFB.swift; path = Sources/CryptoSwift/BlockMode/OFB.swift; sourceTree = ""; }; - 9E38033C3311FDBF035B7AC4D172C929 /* GULAppDelegateSwizzler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULAppDelegateSwizzler.h; path = GoogleUtilities/AppDelegateSwizzler/Public/GoogleUtilities/GULAppDelegateSwizzler.h; sourceTree = ""; }; - 9EF6C70D9C692FDA7EF6AFFE0C205737 /* GULSceneDelegateSwizzler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULSceneDelegateSwizzler.h; path = GoogleUtilities/AppDelegateSwizzler/Public/GoogleUtilities/GULSceneDelegateSwizzler.h; sourceTree = ""; }; - 9F944120A3E07CE8238DEE468F649D71 /* Alamofire-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-umbrella.h"; sourceTree = ""; }; - 9FBAE06143DB0136DDF58B9AA1D7313F /* SDImageCodersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCodersManager.h; path = SDWebImage/Core/SDImageCodersManager.h; sourceTree = ""; }; - A00A1102CDB3233B98ADD6CBB039733D /* IQUIViewController+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIViewController+Additions.swift"; path = "IQKeyboardManagerSwift/Categories/IQUIViewController+Additions.swift"; sourceTree = ""; }; - A023B5549EDC5FF374C920FC470B075A /* FIRInstallationsStoredAuthToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsStoredAuthToken.h; path = FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredAuthToken.h; sourceTree = ""; }; - A05F4580ED3412CA66F556B74BA1DCA5 /* NSURLSessionConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSURLSessionConfiguration.swift; path = Sources/Mockingjay/NSURLSessionConfiguration.swift; sourceTree = ""; }; - A08DA69B96F0B9F29FD22DD9358685AC /* RLMSyncUtil_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncUtil_Private.h; path = include/RLMSyncUtil_Private.h; sourceTree = ""; }; - A0A174561C82309A7D978CEB57ED4FFA /* FIRAppInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAppInternal.h; path = FirebaseCore/Sources/Private/FIRAppInternal.h; sourceTree = ""; }; - A0A29B5CC59B0DB58210B087BC0A378C /* RLMListBase.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMListBase.mm; path = Realm/RLMListBase.mm; sourceTree = ""; }; - A106256A5764B60C95B44AD82EFEED22 /* FirebaseCore.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseCore.release.xcconfig; sourceTree = ""; }; - A14220984AA9BFDD5349A39D88DDB703 /* GDTCOREvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCOREvent.h; path = GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCOREvent.h; sourceTree = ""; }; - A188D6768838E06D9E265C5C808681F7 /* FIRInstallationsStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsStore.h; path = FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStore.h; sourceTree = ""; }; - A19A8ACB5EB013F9E0ED63C0BF6E5A47 /* SDWebImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImage.h; path = WebImage/SDWebImage.h; sourceTree = ""; }; - A1C257BF7E526AF65FADE370454FD531 /* RealmSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RealmSwift-Info.plist"; sourceTree = ""; }; - A1EFF535572854DB51DDFBA01D060B42 /* FIRInstallationsLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsLogger.m; path = FirebaseInstallations/Source/Library/FIRInstallationsLogger.m; sourceTree = ""; }; - A2263D7CC98667C11733A34D2C5DC4C6 /* ActionSheetPicker-3.0.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "ActionSheetPicker-3.0.modulemap"; sourceTree = ""; }; - A23F193AB67028E114671FED528F7A89 /* PKCS7Padding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PKCS7Padding.swift; path = Sources/CryptoSwift/PKCS/PKCS7Padding.swift; sourceTree = ""; }; - A243B843977D3FFA06D754093DA0527F /* FBLPromise+Catch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Catch.h"; path = "Sources/FBLPromises/include/FBLPromise+Catch.h"; sourceTree = ""; }; - A28E305DEBD2717146F252B86FB3887E /* ActionSheetPicker-3.0-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ActionSheetPicker-3.0-prefix.pch"; sourceTree = ""; }; - A2D23BEE13FE5ABA1847C33BA6D008CF /* GDTCORReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORReachability.h; path = GoogleDataTransport/GDTCORLibrary/Internal/GDTCORReachability.h; sourceTree = ""; }; - A52128AC7228CCA3280934D0B65C9672 /* FIRMessagingAuthService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingAuthService.m; path = FirebaseMessaging/Sources/Token/FIRMessagingAuthService.m; sourceTree = ""; }; - A5AE73314B78EE62CD2BB6BB6C2EB58A /* Realm.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Realm.debug.xcconfig; sourceTree = ""; }; - A5E571043247FB18FD5E5D658C927971 /* FIRMessagingKeychain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingKeychain.h; path = FirebaseMessaging/Sources/Token/FIRMessagingKeychain.h; sourceTree = ""; }; - A5F58FBAF73CE2803158A5F029EC0585 /* FIRLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRLogger.h; path = FirebaseCore/Sources/Private/FIRLogger.h; sourceTree = ""; }; - A6620FB2CF03CE44DC554132934E15FC /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; - A6D1FF0163C1D9D60E0A8CB6C5E18027 /* Migration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Migration.swift; path = RealmSwift/Migration.swift; sourceTree = ""; }; - A6E5710B018893B0D662AE53096C1EBE /* GDTCOREventDataObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCOREventDataObject.h; path = GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCOREventDataObject.h; sourceTree = ""; }; - A6EB6C08B9CF5E2401D26CC5C855B17E /* SDFileAttributeHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDFileAttributeHelper.m; path = SDWebImage/Private/SDFileAttributeHelper.m; sourceTree = ""; }; - A7301257D3F72AC8BA18FAED3CEF641D /* SDGraphicsImageRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDGraphicsImageRenderer.h; path = SDWebImage/Core/SDGraphicsImageRenderer.h; sourceTree = ""; }; - A7487C06E8DF34D80C44645115050649 /* GULHeartbeatDateStorageUserDefaults.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULHeartbeatDateStorageUserDefaults.m; path = GoogleUtilities/Environment/GULHeartbeatDateStorageUserDefaults.m; sourceTree = ""; }; - A8362B5D872135BD70697E543AD15AF6 /* GDTCORStorageEventSelector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORStorageEventSelector.h; path = GoogleDataTransport/GDTCORLibrary/Internal/GDTCORStorageEventSelector.h; sourceTree = ""; }; - A83DD4F2C208EB2E9B9F9B982ABA86AA /* SlideMenuController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SlideMenuController.swift; path = Source/SlideMenuController.swift; sourceTree = ""; }; + 9DD22208761570BF96A5E1CD1729794E /* FBLPromise+Validate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Validate.h"; path = "Sources/FBLPromises/include/FBLPromise+Validate.h"; sourceTree = ""; }; + 9E2E660D7A08202AC7308B44862A5EF2 /* keychain_helper.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = keychain_helper.cpp; path = Realm/ObjectStore/src/impl/apple/keychain_helper.cpp; sourceTree = ""; }; + 9EBC192CAA7BF36AFC45CC8E9CAA09E1 /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "SDWebImage/Core/NSData+ImageContentType.h"; sourceTree = ""; }; + 9EE659580816A7DD04738971D08C481D /* IQKeyboardManager+Toolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Toolbar.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+Toolbar.swift"; sourceTree = ""; }; + 9EFAAC73DDC1A85B6987CB688EF5984B /* URLConvertible+URLRequestConvertible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLConvertible+URLRequestConvertible.swift"; path = "Source/URLConvertible+URLRequestConvertible.swift"; sourceTree = ""; }; + 9F0C7EC2129FADFA1F03573C4EADE97F /* FIRMessagingContextManagerService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingContextManagerService.h; path = FirebaseMessaging/Sources/FIRMessagingContextManagerService.h; sourceTree = ""; }; + 9F3FE833D9B4BA58B0E72BF395BB34B8 /* SDAnimatedImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImageView.m; path = SDWebImage/Core/SDAnimatedImageView.m; sourceTree = ""; }; + 9F6FFE14F792DE9044A5F38021BA5B6A /* BlockEncryptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlockEncryptor.swift; path = Sources/CryptoSwift/BlockEncryptor.swift; sourceTree = ""; }; + A00EEF8B7B1B90E3F6C2667815AE35BC /* pb_common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb_common.h; sourceTree = ""; }; + A03CA917F850F70E3EB8B7BA707E830A /* CryptoSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "CryptoSwift-Info.plist"; sourceTree = ""; }; + A03E41D63456BE46AA54BC5B6EC02C84 /* FIRLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRLogger.h; path = FirebaseCore/Sources/Private/FIRLogger.h; sourceTree = ""; }; + A0499A35DE68EEA7918378FB24898A52 /* RLMRealmConfiguration+Sync.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "RLMRealmConfiguration+Sync.h"; path = "include/RLMRealmConfiguration+Sync.h"; sourceTree = ""; }; + A0F76F81C970B6D1BDCCA4917FF7EE58 /* sync_manager.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_manager.cpp; path = Realm/ObjectStore/src/sync/sync_manager.cpp; sourceTree = ""; }; + A14D461519705DCA765D901C9DF2124A /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + A157E35C9483F6D633C143ABF79C995D /* NetworkReachabilityManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkReachabilityManager.swift; path = Source/NetworkReachabilityManager.swift; sourceTree = ""; }; + A1653080FEEAAFCDA6FDE565F7B16BED /* uuid.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = uuid.cpp; path = Realm/ObjectStore/src/util/uuid.cpp; sourceTree = ""; }; + A16B6AF7C53EDDBD94158FC1C153D5E9 /* thread_safe_reference.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = thread_safe_reference.cpp; path = Realm/ObjectStore/src/thread_safe_reference.cpp; sourceTree = ""; }; + A1E81D9668A99EB28F6B452A37B91FD5 /* FIRMessagingCode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingCode.h; path = FirebaseMessaging/Sources/FIRMessagingCode.h; sourceTree = ""; }; + A220E535E4466885D9933D023263EB53 /* PromisesObjC.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PromisesObjC.release.xcconfig; sourceTree = ""; }; + A230B9124C314F06247B2F7BE1D6BF3F /* CryptoSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = CryptoSwift.modulemap; sourceTree = ""; }; + A26050B8CF3CBAF05B5E6E1EDC3155A2 /* Toast-Swift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Toast-Swift.release.xcconfig"; sourceTree = ""; }; + A27CE631C7B441588AD83DA189F46F1B /* ReachabilitySwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ReachabilitySwift.modulemap; sourceTree = ""; }; + A29417FE62A3FC70235F1062E62971E1 /* RetryPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RetryPolicy.swift; path = Source/RetryPolicy.swift; sourceTree = ""; }; + A29E0AEB7A9DFCB7DCB70CD1139E55AF /* FIRAppInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAppInternal.h; path = FirebaseCore/Sources/Private/FIRAppInternal.h; sourceTree = ""; }; + A31E24A6A601B6770990552B1C590B24 /* network_reachability_observer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = network_reachability_observer.cpp; path = Realm/ObjectStore/src/sync/impl/apple/network_reachability_observer.cpp; sourceTree = ""; }; + A33F42324840BE40EE781E8445AA4B39 /* FirebaseInstallations.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseInstallations.release.xcconfig; sourceTree = ""; }; + A3411950D357EFDC7A1CCDB6429E6AFF /* UIImage+Metadata.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Metadata.h"; path = "SDWebImage/Core/UIImage+Metadata.h"; sourceTree = ""; }; + A38538CC04BC57EB74D2370BF048CF9A /* scheduler.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = scheduler.cpp; path = Realm/ObjectStore/src/util/scheduler.cpp; sourceTree = ""; }; + A390F0EB031CC42ED74FE2EDD5D36BA9 /* RLMObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObject.h; path = include/RLMObject.h; sourceTree = ""; }; + A3A8AAE72354973FC10658F51CB5666B /* pb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb.h; sourceTree = ""; }; + A3D98957A559D62480662DA35BA325AE /* IQKeyboardManager+UIKeyboardNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+UIKeyboardNotification.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+UIKeyboardNotification.swift"; sourceTree = ""; }; + A3DEC82D5290A649190683E1419896E1 /* GULSceneDelegateSwizzler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULSceneDelegateSwizzler.h; path = GoogleUtilities/AppDelegateSwizzler/Public/GoogleUtilities/GULSceneDelegateSwizzler.h; sourceTree = ""; }; + A3F5694700CDE9DBBBBCA7EC5A96B1DB /* FIRInstallationsStoredItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsStoredItem.h; path = FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredItem.h; sourceTree = ""; }; + A3F99181DAF40B6CF938E94C407F7C37 /* binding_callback_thread_observer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = binding_callback_thread_observer.cpp; path = Realm/ObjectStore/src/binding_callback_thread_observer.cpp; sourceTree = ""; }; + A43B584962FB87A9150DED9737AE77DD /* FIRComponentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponentType.h; path = FirebaseCore/Sources/Private/FIRComponentType.h; sourceTree = ""; }; + A446D9F1EC72D5F0E00297AD2CD54B08 /* ISO10126Padding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ISO10126Padding.swift; path = Sources/CryptoSwift/ISO10126Padding.swift; sourceTree = ""; }; + A4572C030E69C027DB7F698CFDC7E7BC /* UIColor+SDHexString.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+SDHexString.m"; path = "SDWebImage/Private/UIColor+SDHexString.m"; sourceTree = ""; }; + A4691749ACE03D3E4490D237508D0361 /* IQKeyboardManagerSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardManagerSwift.modulemap; sourceTree = ""; }; + A48BDEDD3B08E868AF5E71FB76873D30 /* FIRCoreDiagnosticsData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCoreDiagnosticsData.h; path = Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h; sourceTree = ""; }; + A4BDD17ED4FF436E7A853091CC3CBAD6 /* GoogleDataTransport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GoogleDataTransport.h; path = GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GoogleDataTransport.h; sourceTree = ""; }; + A50E7F631CDE15C236E4196C87BE523E /* FBLPromise+Any.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Any.m"; path = "Sources/FBLPromises/FBLPromise+Any.m"; sourceTree = ""; }; + A51499D2C2EB0CA3F302A88F0CE96444 /* collection_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = collection_notifier.cpp; path = Realm/ObjectStore/src/impl/collection_notifier.cpp; sourceTree = ""; }; + A54711595F78D8E4A4C98B920C25EE07 /* IQKeyboardManager+OrientationNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+OrientationNotification.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+OrientationNotification.swift"; sourceTree = ""; }; + A5489946F1EB3811DB451699DBCF3C2D /* Padding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Padding.swift; path = Sources/CryptoSwift/Padding.swift; sourceTree = ""; }; + A54EA876A39ACED7DC664C709B462662 /* StringEncoding+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "StringEncoding+Alamofire.swift"; path = "Source/StringEncoding+Alamofire.swift"; sourceTree = ""; }; + A5A6CD9B84C410822D0E090B7DBFB3E2 /* SDWebImageDownloaderRequestModifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderRequestModifier.h; path = SDWebImage/Core/SDWebImageDownloaderRequestModifier.h; sourceTree = ""; }; + A5AF03F87480F24C4F0E615FFB805B95 /* FIRComponentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponentType.h; path = FirebaseCore/Sources/Private/FIRComponentType.h; sourceTree = ""; }; + A5B2012268ABAA70954EFBFDB1BB5A52 /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/Core/SDWebImageDownloaderOperation.m; sourceTree = ""; }; + A6359EC24CB1E1FB06510CD17C8D0EED /* GULSecureCoding.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULSecureCoding.m; path = GoogleUtilities/Environment/GULSecureCoding.m; sourceTree = ""; }; + A676E3CB72E97B8DF24E02804DD36ACA /* FIRMessagingCheckinStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingCheckinStore.m; path = FirebaseMessaging/Sources/Token/FIRMessagingCheckinStore.m; sourceTree = ""; }; + A67F1ACB5315422C34CB97BBDE734FEA /* SHA2.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SHA2.swift; path = Sources/CryptoSwift/SHA2.swift; sourceTree = ""; }; + A6B262D269D710E9578DA2177B9B1F07 /* GDTCORTransformer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORTransformer.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer.h; sourceTree = ""; }; + A766B91C855FE70C180EBF007FFE216A /* sync_user.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_user.cpp; path = Realm/ObjectStore/src/sync/sync_user.cpp; sourceTree = ""; }; A84F08203C9AAC88EAE546EA369A5E7D /* Pods-MyStudiesTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MyStudiesTests-dummy.m"; sourceTree = ""; }; - A888E966597064B522ED26E1006DB2D2 /* FBLPromise+Testing.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Testing.m"; path = "Sources/FBLPromises/FBLPromise+Testing.m"; sourceTree = ""; }; - A8ABF5253D991FB679BF0B185CB0652B /* SDImageLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageLoader.m; path = SDWebImage/Core/SDImageLoader.m; sourceTree = ""; }; - A8E950A16D00F649C54FFB30F81D7842 /* IQKeyboardManagerSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = IQKeyboardManagerSwift.framework; path = IQKeyboardManagerSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - A93792CA49A4BE392FE79EEB74008676 /* ActionSheetLocalePicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ActionSheetLocalePicker.m; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/ActionSheetLocalePicker.m; sourceTree = ""; }; - A9386F39C17449D1C2CF204DB4A159AC /* FIRLibrary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRLibrary.h; path = FirebaseCore/Sources/Private/FIRLibrary.h; sourceTree = ""; }; - A964D4988E284DA3B8D6DC7D430B561E /* FBLPromise+Race.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Race.m"; path = "Sources/FBLPromises/FBLPromise+Race.m"; sourceTree = ""; }; - A9798CF1901066462B184EED06FA1D80 /* FIRInstallationsLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsLogger.h; path = FirebaseInstallations/Source/Library/FIRInstallationsLogger.h; sourceTree = ""; }; - AA30EB748D8C3BC89AAC2548E407B000 /* Combine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Combine.swift; path = RealmSwift/Combine.swift; sourceTree = ""; }; - AA3D52B90DA35D0F7E1B931F0514B7B2 /* SlideMenuControllerSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SlideMenuControllerSwift.framework; path = SlideMenuControllerSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - AAA6D2A3329BA1F4EC69BFC39E6B7BC5 /* FIRInstallationsErrors.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsErrors.h; path = FirebaseInstallations/Source/Library/Public/FirebaseInstallations/FIRInstallationsErrors.h; sourceTree = ""; }; - AAE36D9F05640A6F7C035A6D1680FBF6 /* FIRCurrentDateProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCurrentDateProvider.m; path = FirebaseInstallations/Source/Library/InstallationsIDController/FIRCurrentDateProvider.m; sourceTree = ""; }; - ABB684A17E009AF9AE6F61C7CE779D7F /* GULHeartbeatDateStorage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULHeartbeatDateStorage.h; path = GoogleUtilities/Environment/Public/GoogleUtilities/GULHeartbeatDateStorage.h; sourceTree = ""; }; - AC8E886CC9110DEAB0D4A3EB8DF9F13F /* GoogleUtilities-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GoogleUtilities-Info.plist"; sourceTree = ""; }; - ACD44C588D10AA6CA23A48117EE36567 /* URLConvertible+URLRequestConvertible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLConvertible+URLRequestConvertible.swift"; path = "Source/URLConvertible+URLRequestConvertible.swift"; sourceTree = ""; }; - ACF39C778BE0B215EB6502F2D61801BD /* GDTCORTransport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORTransport.h; path = GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCORTransport.h; sourceTree = ""; }; - AD03EAA7D8BF50D4963B73B1E429DEFE /* FIRMessagingExtensionHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingExtensionHelper.m; path = FirebaseMessaging/Sources/FIRMessagingExtensionHelper.m; sourceTree = ""; }; - AD2A290D30BC155AF1CBC178D4BDF8C6 /* FIRMessagingExtensionHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingExtensionHelper.h; path = FirebaseMessaging/Sources/Public/FirebaseMessaging/FIRMessagingExtensionHelper.h; sourceTree = ""; }; - AD77789BDC2D0067E91B041D158F6D4C /* ActionSheetPicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetPicker.h; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/ActionSheetPicker.h; sourceTree = ""; }; - ADB4CFD15093B3AD75723D8771CB7FFE /* SDAssociatedObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAssociatedObject.m; path = SDWebImage/Private/SDAssociatedObject.m; sourceTree = ""; }; - ADF6E9DB9FCF3DC90EAD64D6670803C3 /* GoogleUtilities.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GoogleUtilities.modulemap; sourceTree = ""; }; - AE6D0A0E31FB692C3F70C8121F2B7916 /* FIRAnalyticsConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAnalyticsConfiguration.h; path = FirebaseCore/Sources/FIRAnalyticsConfiguration.h; sourceTree = ""; }; - AE7388F42531DF0394A844665C90EFA8 /* CMAC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CMAC.swift; path = Sources/CryptoSwift/CMAC.swift; sourceTree = ""; }; - AE8A14963C233404956363CE226BA105 /* URITemplate.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = URITemplate.debug.xcconfig; sourceTree = ""; }; - AED399ECD30AC6CD7939977E47D59C39 /* CryptoSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CryptoSwift-dummy.m"; sourceTree = ""; }; - AF0F699C939997A311DBF5CAC1FB2BE3 /* RLMMigration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMMigration.h; path = include/RLMMigration.h; sourceTree = ""; }; - AF45B79E4B0FBA86E0B6467CBD42CEE1 /* IQKeyboardManagerSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardManagerSwift-dummy.m"; sourceTree = ""; }; - AFBCA17E1FDBAA063E69EF9BC644066F /* SDImageCodersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCodersManager.m; path = SDWebImage/Core/SDImageCodersManager.m; sourceTree = ""; }; - AFD5D75C949346B5A675325C42941FAB /* MultipartFormData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartFormData.swift; path = Source/MultipartFormData.swift; sourceTree = ""; }; - B04E0C77E5DD2FA7CCF40974C841BBCD /* SDWebImageDownloaderDecryptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderDecryptor.h; path = SDWebImage/Core/SDWebImageDownloaderDecryptor.h; sourceTree = ""; }; - B0532F43B14A813ACBCF29A2984DA9B6 /* object_schema.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = object_schema.cpp; path = Realm/ObjectStore/src/object_schema.cpp; sourceTree = ""; }; - B08293C9E9F18CD8FE18653AE3C758FA /* FIRMessagingPersistentSyncMessage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingPersistentSyncMessage.m; path = FirebaseMessaging/Sources/FIRMessagingPersistentSyncMessage.m; sourceTree = ""; }; - B090FEA8747328B3DC039D31125AE528 /* FIRInstallationsItem+RegisterInstallationAPI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FIRInstallationsItem+RegisterInstallationAPI.m"; path = "FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsItem+RegisterInstallationAPI.m"; sourceTree = ""; }; - B0B214D775196BA7CA8E17E53048A493 /* SDWebImage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SDWebImage.framework; path = SDWebImage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B0B4B6463A2DB13327B5E0B745FFE213 /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/Core/SDWebImageDownloader.m; sourceTree = ""; }; - B0C902E9152FD66B14D7F9D4817DC883 /* RLMAccessor.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMAccessor.mm; path = Realm/RLMAccessor.mm; sourceTree = ""; }; - B0F1D178D3AE8FF89D6BD0ECE869396E /* ActionSheetCustomPickerDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetCustomPickerDelegate.h; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/ActionSheetCustomPickerDelegate.h; sourceTree = ""; }; - B0F4AC7BB8AE303CA3DF523F14B53F81 /* Alamofire-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Alamofire-dummy.m"; sourceTree = ""; }; - B12C24DE5479F6BE3DE797E9097D4D7C /* GDTCCTNanopbHelpers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCCTNanopbHelpers.h; path = GoogleDataTransport/GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h; sourceTree = ""; }; - B1755D4550CE4A9020E5A8FABBB4F9C7 /* ObjectSchema.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObjectSchema.swift; path = RealmSwift/ObjectSchema.swift; sourceTree = ""; }; - B22D80E91E4E6DAE0C4B9A4E38589EC5 /* GDTCCTCompressionHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCCTCompressionHelper.m; path = GoogleDataTransport/GDTCCTLibrary/GDTCCTCompressionHelper.m; sourceTree = ""; }; - B22D89A31859FC1C4911D8263FA0E866 /* UInt32+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UInt32+Extension.swift"; path = "Sources/CryptoSwift/UInt32+Extension.swift"; sourceTree = ""; }; - B2669C5C82B7C0A22A84597EC0D19D89 /* GDTCORStorageProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORStorageProtocol.h; path = GoogleDataTransport/GDTCORLibrary/Internal/GDTCORStorageProtocol.h; sourceTree = ""; }; - B2E66B8856C66C55EC07AE0B0C619A93 /* SDWebImageDefine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDefine.m; path = SDWebImage/Core/SDWebImageDefine.m; sourceTree = ""; }; - B2F9CBECAC5227C8AFD9F50489EB9FA0 /* NSImage+Compatibility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSImage+Compatibility.m"; path = "SDWebImage/Core/NSImage+Compatibility.m"; sourceTree = ""; }; - B2FA33A54180E95615EF33A92C531DE9 /* GDTCCTUploadOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCCTUploadOperation.m; path = GoogleDataTransport/GDTCCTLibrary/GDTCCTUploadOperation.m; sourceTree = ""; }; - B317CB43DF56DDE5623FAEE16531F3BD /* ThreadSafeReference.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ThreadSafeReference.swift; path = RealmSwift/ThreadSafeReference.swift; sourceTree = ""; }; - B323C54A939899E339EAC33ECA8E6DAC /* ZeroPadding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZeroPadding.swift; path = Sources/CryptoSwift/ZeroPadding.swift; sourceTree = ""; }; - B3E6953895B94F7B91A9827DBA7B77FB /* ReachabilitySwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ReachabilitySwift-umbrella.h"; sourceTree = ""; }; - B43874C6CBB50E7134FBEC24BABFE14F /* GoogleUtilities.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GoogleUtilities.framework; path = GoogleUtilities.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B43991BF814E2ED59BC3F25D772B175E /* pb_common.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pb_common.c; sourceTree = ""; }; - B49AE6925612C4F7233E1FDC00585F58 /* FIRInstallationsHTTPError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsHTTPError.h; path = FirebaseInstallations/Source/Library/Errors/FIRInstallationsHTTPError.h; sourceTree = ""; }; - B500924F6C17D237612151C8A0B82036 /* Property.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Property.swift; path = RealmSwift/Property.swift; sourceTree = ""; }; - B52099236CE09D85935F717A05915FFA /* ChaCha20.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChaCha20.swift; path = Sources/CryptoSwift/ChaCha20.swift; sourceTree = ""; }; - B5238574F58033CB7E245705FFA55623 /* object_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = object_notifier.cpp; path = Realm/ObjectStore/src/impl/object_notifier.cpp; sourceTree = ""; }; - B57D8594305681F87152A11E2BD8017B /* FirebaseCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FirebaseCore-Info.plist"; sourceTree = ""; }; - B5A5163FCB4FDD453B34F6E0DEC4F644 /* FIRDiagnosticsData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDiagnosticsData.m; path = FirebaseCore/Sources/FIRDiagnosticsData.m; sourceTree = ""; }; + A8B54622D63E605A4B7FEC20FE38F5D0 /* GULApplication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULApplication.h; path = GoogleUtilities/AppDelegateSwizzler/Public/GoogleUtilities/GULApplication.h; sourceTree = ""; }; + A8E950A16D00F649C54FFB30F81D7842 /* IQKeyboardManagerSwift */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = IQKeyboardManagerSwift; path = IQKeyboardManagerSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A93B55389CE21A4C6DB378C0DBAB43C5 /* GoogleDataTransport.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleDataTransport.debug.xcconfig; sourceTree = ""; }; + A9448AB1CF2D1DDD1ADD7DDB32FE8C0C /* SDWebImageOptionsProcessor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageOptionsProcessor.m; path = SDWebImage/Core/SDWebImageOptionsProcessor.m; sourceTree = ""; }; + A968D6ADC5E00A3D9B1542D83FF9CE5D /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/Core/SDWebImagePrefetcher.h; sourceTree = ""; }; + A96AD85142773FA7DEF5D2F88C4DBDEC /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/Core/UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; + A970973CC0EB4B10D9C8BC06021A62DC /* FIRMessagingPubSub.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingPubSub.h; path = FirebaseMessaging/Sources/FIRMessagingPubSub.h; sourceTree = ""; }; + A980A30A29A11151B83C3CE1E1758FA9 /* RLMSyncManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMSyncManager.mm; path = Realm/RLMSyncManager.mm; sourceTree = ""; }; + A9863CC699E01F4C113719512EC56875 /* FIRCurrentDateProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCurrentDateProvider.m; path = FirebaseInstallations/Source/Library/InstallationsIDController/FIRCurrentDateProvider.m; sourceTree = ""; }; + A9D268FD4D7E49BAE640C9BD4FF78947 /* CipherModeWorker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CipherModeWorker.swift; path = Sources/CryptoSwift/BlockMode/CipherModeWorker.swift; sourceTree = ""; }; + AA1D8BC52D6CD4E6CFDC496B1E99AB26 /* FIRDependency.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDependency.h; path = FirebaseCore/Sources/Private/FIRDependency.h; sourceTree = ""; }; + AA3D52B90DA35D0F7E1B931F0514B7B2 /* SlideMenuControllerSwift */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SlideMenuControllerSwift; path = SlideMenuControllerSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AA81C9CF689AE79EB34AFBBDCB8CD768 /* Blowfish.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Blowfish.swift; path = Sources/CryptoSwift/Blowfish.swift; sourceTree = ""; }; + AAE233D5B3FE1F32D73E6A2778EFD329 /* RLMListBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMListBase.h; path = include/RLMListBase.h; sourceTree = ""; }; + AB194A4B183438BBF214D274AE84C1CD /* SDImageCodersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCodersManager.m; path = SDWebImage/Core/SDImageCodersManager.m; sourceTree = ""; }; + AB86C6C2A0C8AB4560B91A98D5E6EA54 /* FIRInstallationsStoredItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsStoredItem.m; path = FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredItem.m; sourceTree = ""; }; + AB9D58C883C7F638EEA3C2A49B4A8F49 /* SDImageCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCoder.h; path = SDWebImage/Core/SDImageCoder.h; sourceTree = ""; }; + ABEAC198CE8166AEAE7E28DE988F7562 /* AEAD.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AEAD.swift; path = Sources/CryptoSwift/AEAD/AEAD.swift; sourceTree = ""; }; + AC1DA9799D80B61CC9A00C151FABD1B3 /* Response.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Response.swift; path = Source/Response.swift; sourceTree = ""; }; + AC431187E16C2E3F6A7050C2FDA0B447 /* GDTCORReachability_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORReachability_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORReachability_Private.h; sourceTree = ""; }; + AC5D7ECB262E7A59B1C880493F798D61 /* FIRAppAssociationRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAppAssociationRegistration.m; path = FirebaseCore/Sources/FIRAppAssociationRegistration.m; sourceTree = ""; }; + AC8CCE125405EC4F83D00EF1265C3E50 /* FIRMessagingCheckinPreferences.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingCheckinPreferences.h; path = FirebaseMessaging/Sources/Token/FIRMessagingCheckinPreferences.h; sourceTree = ""; }; + ACE8206D5DD26D93C1F4307E689E4F2F /* SlideMenuControllerSwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SlideMenuControllerSwift.debug.xcconfig; sourceTree = ""; }; + AD3CD06550FF4C8846B1AAFDDA71EB16 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; + AD6E9C9CDC2181BB7F255FEBE0C1FD90 /* ResponseSerialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResponseSerialization.swift; path = Source/ResponseSerialization.swift; sourceTree = ""; }; + AD98C0B6BE9A80826D248CA211DE379D /* AbstractActionSheetPicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AbstractActionSheetPicker.m; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/AbstractActionSheetPicker.m; sourceTree = ""; }; + ADBF783F176F3612588EA416FDD05F2F /* IQKeyboardManagerConstants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardManagerConstants.swift; path = IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstants.swift; sourceTree = ""; }; + ADF9919489D1F7C1769E3E295E87533E /* FIRMessagingPendingTopicsList.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingPendingTopicsList.m; path = FirebaseMessaging/Sources/FIRMessagingPendingTopicsList.m; sourceTree = ""; }; + AE446C7E78D05F2B464DCADAE0114EC6 /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/Core/SDWebImageDownloaderOperation.h; sourceTree = ""; }; + AEC5B4958AD92A73442C6946F45E74A2 /* SDImageCachesManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCachesManager.m; path = SDWebImage/Core/SDImageCachesManager.m; sourceTree = ""; }; + AEF8DE56C227D7BCB241BC0C7E7AFF9B /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/Core/SDWebImageCompat.m; sourceTree = ""; }; + AF1539083D412B0D78A9D7356FBB71D0 /* CompactMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CompactMap.swift; path = Sources/CryptoSwift/CompactMap.swift; sourceTree = ""; }; + AF1C0CDA75E84F42CF89784B4185A3F3 /* FIRCoreDiagnosticsInterop.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCoreDiagnosticsInterop.h; path = Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h; sourceTree = ""; }; + AFE7068B91963A64D7C4128874DDB6F7 /* GDTCOREvent_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCOREvent_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCOREvent_Private.h; sourceTree = ""; }; + B02937B0837E2477E5DDA9949D0523B0 /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = SDWebImage/Core/SDWebImagePrefetcher.m; sourceTree = ""; }; + B0330C8A000DC358C098C10096A52674 /* RLMObject.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMObject.mm; path = Realm/RLMObject.mm; sourceTree = ""; }; + B099F852040462F40FA3A9723F46B9A6 /* RLMSyncUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMSyncUtil.mm; path = Realm/RLMSyncUtil.mm; sourceTree = ""; }; + B0B214D775196BA7CA8E17E53048A493 /* SDWebImage */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SDWebImage; path = SDWebImage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B21C3FFB257241762DEF4BBE0D8E1A0B /* RLMSyncConfiguration_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncConfiguration_Private.h; path = include/RLMSyncConfiguration_Private.h; sourceTree = ""; }; + B2F6EF5D8599FE975E8FC0C7A96DC7F5 /* SDImageHEICCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageHEICCoder.m; path = SDWebImage/Core/SDImageHEICCoder.m; sourceTree = ""; }; + B31A25F13A5D459B1F14D725B54383F9 /* FIRLibrary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRLibrary.h; path = FirebaseCore/Sources/Private/FIRLibrary.h; sourceTree = ""; }; + B38B99FAC7C60C3A7CA866B17FF061E7 /* Mockingjay.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Mockingjay.swift; path = Sources/Mockingjay/Mockingjay.swift; sourceTree = ""; }; + B3BC07700F2814C5BA7CE4BE00FB6553 /* GULAppEnvironmentUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULAppEnvironmentUtil.h; path = GoogleUtilities/Environment/Public/GoogleUtilities/GULAppEnvironmentUtil.h; sourceTree = ""; }; + B3BC31858C019AA80EDBF19684DA6A4E /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/Core/UIImage+MultiFormat.m"; sourceTree = ""; }; + B43874C6CBB50E7134FBEC24BABFE14F /* GoogleUtilities */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GoogleUtilities; path = GoogleUtilities.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B4D2BDF9D48B7824405D884616379A53 /* RLMRealm.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMRealm.mm; path = Realm/RLMRealm.mm; sourceTree = ""; }; + B4F046BA3CC8D32499F052FE25306C9E /* GULLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULLogger.h; path = GoogleUtilities/Logger/Public/GoogleUtilities/GULLogger.h; sourceTree = ""; }; + B521232F1F5112AE975E3B5195386F76 /* URLEncodedFormEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLEncodedFormEncoder.swift; path = Source/URLEncodedFormEncoder.swift; sourceTree = ""; }; + B5855953FE680CC2FAFABCEAE03620FF /* OCB.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OCB.swift; path = Sources/CryptoSwift/BlockMode/OCB.swift; sourceTree = ""; }; + B5D1C66CA1FB494054F9FEC030CDFF04 /* object_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = object_notifier.cpp; path = Realm/ObjectStore/src/impl/object_notifier.cpp; sourceTree = ""; }; + B602B85D1CC653F63C797D7CCFF0F21F /* Blowfish+Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Blowfish+Foundation.swift"; path = "Sources/CryptoSwift/Foundation/Blowfish+Foundation.swift"; sourceTree = ""; }; + B60E3053144A8B4C5BD31849BFA16CF6 /* ParameterEncoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParameterEncoding.swift; path = Source/ParameterEncoding.swift; sourceTree = ""; }; + B6365B07E1474F38E235B0BFA41235A3 /* FIRComponentContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponentContainer.h; path = FirebaseCore/Sources/Private/FIRComponentContainer.h; sourceTree = ""; }; B655AFFE819E391100EDCEFCD6E138E5 /* Pods-MyStudies-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MyStudies-dummy.m"; sourceTree = ""; }; - B70FA1C757B98A092A593114A7263C2C /* PromisesObjC.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = PromisesObjC.modulemap; sourceTree = ""; }; - B7170B949773D5A043AE9A197C1B8788 /* FIRMessagingDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingDefines.h; path = FirebaseMessaging/Sources/FIRMessagingDefines.h; sourceTree = ""; }; - B7724FA1AEF17D65AE7D26CF86894844 /* Operators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Operators.swift; path = Sources/CryptoSwift/Operators.swift; sourceTree = ""; }; - B7BDDC4ACE32101054FA8B7FE53B8844 /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/Core/SDWebImageDownloader.h; sourceTree = ""; }; - B7E03D90F08417E443B3C51B6964D25F /* GULReachabilityMessageCode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULReachabilityMessageCode.h; path = GoogleUtilities/Reachability/GULReachabilityMessageCode.h; sourceTree = ""; }; - B874BE11309727AA21DC626A5F951215 /* FIRCoreDiagnostics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCoreDiagnostics.h; path = Firebase/CoreDiagnostics/FIRCDLibrary/Public/FIRCoreDiagnostics.h; sourceTree = ""; }; - B8ADE224AEF88610C101F4CD39934CD3 /* RLMProperty.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMProperty.mm; path = Realm/RLMProperty.mm; sourceTree = ""; }; - B8EEE29B6D21F196FF2BC12DD5DD9D57 /* RLMSchema_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSchema_Private.h; path = include/RLMSchema_Private.h; sourceTree = ""; }; - B98CDEDD92AF09972CE95F3C4B875D57 /* GULSecureCoding.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULSecureCoding.m; path = GoogleUtilities/Environment/GULSecureCoding.m; sourceTree = ""; }; - B9984B319B861B12714D3B5ECAFE9258 /* FIRInstallationsErrorUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsErrorUtil.h; path = FirebaseInstallations/Source/Library/Errors/FIRInstallationsErrorUtil.h; sourceTree = ""; }; - B9C6687ED502E44AA73F9D0BB333E6FF /* RLMSyncSubscription.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMSyncSubscription.mm; path = Realm/RLMSyncSubscription.mm; sourceTree = ""; }; - BA1C9450BC31E8BACA1A6AF6A13EC637 /* RLMQueryUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMQueryUtil.mm; path = Realm/RLMQueryUtil.mm; sourceTree = ""; }; - BA4EDEEE041A69815E9E58C00528EA4E /* FIRBundleUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRBundleUtil.h; path = FirebaseCore/Sources/FIRBundleUtil.h; sourceTree = ""; }; - BB056D1BBDE11A544E29B87D799147D0 /* FIROptions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIROptions.m; path = FirebaseCore/Sources/FIROptions.m; sourceTree = ""; }; - BB07687790364ABC3F94C7179536982A /* FIRMessagingTokenManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingTokenManager.h; path = FirebaseMessaging/Sources/Token/FIRMessagingTokenManager.h; sourceTree = ""; }; - BB077B82D2A9A57FA42DC5C08DF91220 /* RLMSyncCredentials.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RLMSyncCredentials.m; path = Realm/RLMSyncCredentials.m; sourceTree = ""; }; - BB1390DC0B6FE19D06D3CD0F0F9018D6 /* FirebaseCoreDiagnostics.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseCoreDiagnostics.debug.xcconfig; sourceTree = ""; }; - BBA081D88B3A8E08ADBD5DA995E2ABDF /* RLMObjectSchema_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectSchema_Private.h; path = include/RLMObjectSchema_Private.h; sourceTree = ""; }; - BBC3FCB3BA4009B9F4AD451705C16E5A /* Rabbit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Rabbit.swift; path = Sources/CryptoSwift/Rabbit.swift; sourceTree = ""; }; - BBF4B7A90623E68E7C9CD3CC24437F98 /* GULMutableDictionary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULMutableDictionary.h; path = GoogleUtilities/Network/Public/GoogleUtilities/GULMutableDictionary.h; sourceTree = ""; }; - BC236C6E6F5BC7F453349B57E5CEBE51 /* GDTCOREvent+GDTCCTSupport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "GDTCOREvent+GDTCCTSupport.h"; path = "GoogleDataTransport/GDTCCTLibrary/Public/GDTCOREvent+GDTCCTSupport.h"; sourceTree = ""; }; - BC47C3781E84B22F01FD7F0435E586B2 /* SDImageLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageLoader.h; path = SDWebImage/Core/SDImageLoader.h; sourceTree = ""; }; - BC7DC13ADB8C72B54E0F6BD9CD66CE69 /* nanopb.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = nanopb.debug.xcconfig; sourceTree = ""; }; - BC8841F311DB3A4F05874165CC946CCA /* GDTCORPlatform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORPlatform.h; path = GoogleDataTransport/GDTCORLibrary/Internal/GDTCORPlatform.h; sourceTree = ""; }; - BC8D8ED1556DBA55F9EAD872236E8D7D /* ActionSheetPicker-3.0.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "ActionSheetPicker-3.0.debug.xcconfig"; sourceTree = ""; }; - BCC6D767E6AE84663104104B59CC4D84 /* FIRMessagingInterop.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingInterop.h; path = FirebaseMessaging/Sources/Interop/FIRMessagingInterop.h; sourceTree = ""; }; - BD0C7C30717E45F952F165E3BA7A9B7E /* FBLPromise+Recover.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Recover.h"; path = "Sources/FBLPromises/include/FBLPromise+Recover.h"; sourceTree = ""; }; - BD2CC6EDE585E1DABF84ADFE93DD267B /* FIRMessagingContextManagerService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingContextManagerService.m; path = FirebaseMessaging/Sources/FIRMessagingContextManagerService.m; sourceTree = ""; }; + B662C14AA32764258248147132467EA1 /* IQKeyboardManagerConstantsInternal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardManagerConstantsInternal.swift; path = IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstantsInternal.swift; sourceTree = ""; }; + B664FA00888280F042E3716933B5B584 /* FIRHeartbeatInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRHeartbeatInfo.h; path = FirebaseCore/Sources/Private/FIRHeartbeatInfo.h; sourceTree = ""; }; + B66DA96036A788D918F1123C8EADBB18 /* FIRMessagingLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingLogger.m; path = FirebaseMessaging/Sources/FIRMessagingLogger.m; sourceTree = ""; }; + B6949FFF62A5950370EB517EDBAAA21E /* ServerTrustEvaluation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ServerTrustEvaluation.swift; path = Source/ServerTrustEvaluation.swift; sourceTree = ""; }; + B6FA7B9BF5B0983846E6E5E452BB8A81 /* FirebaseCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FirebaseCore-umbrella.h"; sourceTree = ""; }; + B724474D370CE0618116FC1DA311C756 /* Realm-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Realm-Info.plist"; sourceTree = ""; }; + B770A412737D8D809530424D9D956AAD /* GULLoggerLevel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULLoggerLevel.h; path = GoogleUtilities/Logger/Public/GoogleUtilities/GULLoggerLevel.h; sourceTree = ""; }; + B771BA82C835F9C542044F7B93F2A464 /* SDAnimatedImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SDAnimatedImageView+WebCache.h"; path = "SDWebImage/Core/SDAnimatedImageView+WebCache.h"; sourceTree = ""; }; + B7A9F439CF96B7082986ECD26D018409 /* GULSceneDelegateSwizzler_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULSceneDelegateSwizzler_Private.h; path = GoogleUtilities/AppDelegateSwizzler/Internal/GULSceneDelegateSwizzler_Private.h; sourceTree = ""; }; + B7F97C2181CC787B9FFDCED5D841E2DE /* SDWebImageCacheSerializer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCacheSerializer.h; path = SDWebImage/Core/SDWebImageCacheSerializer.h; sourceTree = ""; }; + B82C9BBA02B896199E357FD3CF478B94 /* FBLPromise+Testing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Testing.h"; path = "Sources/FBLPromises/include/FBLPromise+Testing.h"; sourceTree = ""; }; + B8990846A8D29A5EBB6B8242841A362A /* FIRHeartbeatInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRHeartbeatInfo.h; path = FirebaseCore/Sources/Private/FIRHeartbeatInfo.h; sourceTree = ""; }; + B8B924018F65BFB3F44814382A590837 /* FIRInstallationsStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsStore.m; path = FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStore.m; sourceTree = ""; }; + B905FF11B41659CD1D66780ED7574A5B /* SWActionSheet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SWActionSheet.h; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/SWActionSheet.h; sourceTree = ""; }; + B9988E8D31B70E61ACF6C6137E5471C2 /* GoogleUtilities.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GoogleUtilities.modulemap; sourceTree = ""; }; + B999AF169C60FEBE8211DFED3BDBF06C /* RealmConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RealmConfiguration.swift; path = RealmSwift/RealmConfiguration.swift; sourceTree = ""; }; + BA3D5F08617F4431081E3A2BA17C9571 /* FIRInstallationsErrorUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsErrorUtil.h; path = FirebaseInstallations/Source/Library/Errors/FIRInstallationsErrorUtil.h; sourceTree = ""; }; + BAB318868EBA2F88A56A244FDF436352 /* UIImage+MemoryCacheCost.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MemoryCacheCost.m"; path = "SDWebImage/Core/UIImage+MemoryCacheCost.m"; sourceTree = ""; }; + BBC9DFBCF8FCF44430F1F97EB402FB05 /* GDTCORRegistrar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORRegistrar.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORRegistrar.m; sourceTree = ""; }; + BBCFB94BDDF9E2EF2D3775D8B0149F4F /* RLMConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RLMConstants.m; path = Realm/RLMConstants.m; sourceTree = ""; }; + BC1E107EAE78D582E58BD55DFE15A4EC /* GoogleDataTransport.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GoogleDataTransport.modulemap; sourceTree = ""; }; + BC345F039C5725079705F6A9271A9470 /* BlockDecryptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlockDecryptor.swift; path = Sources/CryptoSwift/BlockDecryptor.swift; sourceTree = ""; }; + BCA5A315512C480CE1FAB3429E3D5F53 /* GoogleDataTransport.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleDataTransport.release.xcconfig; sourceTree = ""; }; + BCAF6B0A1E45F7C95E5CA2DCDDE82795 /* SDImageIOAnimatedCoderInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOAnimatedCoderInternal.h; path = SDWebImage/Private/SDImageIOAnimatedCoderInternal.h; sourceTree = ""; }; + BD02E870F83599D0FB6A24F1E6B0119F /* FIRMessagingUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingUtilities.m; path = FirebaseMessaging/Sources/FIRMessagingUtilities.m; sourceTree = ""; }; + BD07A2135989221B678D6CCE9AF6679C /* DistancePickerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DistancePickerView.h; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/DistancePickerView.h; sourceTree = ""; }; BD49B07C6F33B8DA8DBB6D0CEE20C985 /* Pods-MyStudies-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MyStudies-Info.plist"; sourceTree = ""; }; - BD67DCAA71CC35D1A4923924D76A0B7F /* SDImageFrame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageFrame.m; path = SDWebImage/Core/SDImageFrame.m; sourceTree = ""; }; - BD71CCA7604C663CE9211AF74D84BE11 /* FBLPromiseError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBLPromiseError.h; path = Sources/FBLPromises/include/FBLPromiseError.h; sourceTree = ""; }; - BEEEF23218AACC11863C1A3E2EC98785 /* FirebaseCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BF3494D42C82FB5E482271BDF58BC576 /* FBLPromise+Always.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Always.h"; path = "Sources/FBLPromises/include/FBLPromise+Always.h"; sourceTree = ""; }; - BFC5A78D5AAFC9E274644C98F1BE51C3 /* GULReachabilityChecker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULReachabilityChecker.h; path = GoogleUtilities/Reachability/Public/GoogleUtilities/GULReachabilityChecker.h; sourceTree = ""; }; - C02635857EB5938F6B9153EA3F32DAA3 /* FirebaseInstallations-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FirebaseInstallations-umbrella.h"; sourceTree = ""; }; - C0FCB85B5691EBB5E27760C8F1A8C524 /* RLMCollection_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMCollection_Private.h; path = include/RLMCollection_Private.h; sourceTree = ""; }; - C15943DC74ED80F7B29BCFDC74C2BD99 /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/Core/SDWebImageManager.m; sourceTree = ""; }; - C1CCC1203C51EE52531784C112ADF8A4 /* DistancePickerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DistancePickerView.h; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/DistancePickerView.h; sourceTree = ""; }; - C1DDF12CD51B4BF51752949415EF4468 /* ReachabilitySwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ReachabilitySwift.debug.xcconfig; sourceTree = ""; }; - C21F899E0DBC32A67ADE34A66F7A2CF1 /* GDTCORPlatform.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORPlatform.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORPlatform.m; sourceTree = ""; }; - C26A3535842C1D9FD0200D20A89A5241 /* Array+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Array+Extension.swift"; path = "Sources/CryptoSwift/Array+Extension.swift"; sourceTree = ""; }; - C27B76FAE090920E1B0DEB9129733631 /* SDWebImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDWebImage-dummy.m"; sourceTree = ""; }; - C2EA805BD42842ADC7097DF27FAB316F /* SDInternalMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDInternalMacros.h; path = SDWebImage/Private/SDInternalMacros.h; sourceTree = ""; }; - C34E41E4E9B02895DC94A028A94AA4DB /* URITemplate-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "URITemplate-prefix.pch"; sourceTree = ""; }; - C37A25646D2E45AE830BC18C39804542 /* RLMRealm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealm.h; path = include/RLMRealm.h; sourceTree = ""; }; - C3D532EFBC6CF4F2679AD76983A3FDC5 /* GDTCOREndpoints_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCOREndpoints_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCOREndpoints_Private.h; sourceTree = ""; }; - C3F59E45EF8F2EEDC090D425C40D0176 /* FIRFirebaseUserAgent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRFirebaseUserAgent.m; path = FirebaseCore/Sources/FIRFirebaseUserAgent.m; sourceTree = ""; }; - C3FB52841B0D7A1F78781BF79B570A6E /* CryptoSwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CryptoSwift.release.xcconfig; sourceTree = ""; }; - C4A4E6AA5752EAB9E5560907951CC854 /* GULAppDelegateSwizzler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULAppDelegateSwizzler.m; path = GoogleUtilities/AppDelegateSwizzler/GULAppDelegateSwizzler.m; sourceTree = ""; }; - C4A819A148B06A23D2615A4002E7B793 /* RLMObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObject.h; path = include/RLMObject.h; sourceTree = ""; }; - C4DC6D23474A490E032C0DDF651AF66D /* RLMSyncManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMSyncManager.mm; path = Realm/RLMSyncManager.mm; sourceTree = ""; }; - C4DCA0FCD3B91F7E34D6AF3F5D59750C /* SDWebImageTransition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageTransition.m; path = SDWebImage/Core/SDWebImageTransition.m; sourceTree = ""; }; - C5233055C26DB8D380E7619D877CFC75 /* Matchers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Matchers.swift; path = Sources/Mockingjay/Matchers.swift; sourceTree = ""; }; - C56362AFEF41C22766FCA9A388D67097 /* Alamofire.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Alamofire.modulemap; sourceTree = ""; }; - C5AF7B034A2F64A782B231CA1A6AB8E9 /* FIRInstallationsIIDStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsIIDStore.m; path = FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDStore.m; sourceTree = ""; }; - C5B01BAEFAEADE454A183730175997E6 /* URITemplate-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "URITemplate-dummy.m"; sourceTree = ""; }; - C5FFEDFF1E3CCAEC18F6F42115674B81 /* SDAsyncBlockOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAsyncBlockOperation.m; path = SDWebImage/Private/SDAsyncBlockOperation.m; sourceTree = ""; }; - C6249D347AB4C83E1771ED8FAD3A35BF /* IQKeyboardManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardManager.swift; path = IQKeyboardManagerSwift/IQKeyboardManager.swift; sourceTree = ""; }; - C6724170FE5C0C60A4333BD83C440476 /* NoPadding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NoPadding.swift; path = Sources/CryptoSwift/NoPadding.swift; sourceTree = ""; }; - C73114023681C538F3827D2AF9603BB7 /* AEAD.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AEAD.swift; path = Sources/CryptoSwift/AEAD/AEAD.swift; sourceTree = ""; }; - C7B17512A55EB4D4F2C7FB23B9359A69 /* Notifications.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Notifications.swift; path = Source/Notifications.swift; sourceTree = ""; }; - C7B1E426E789030D51033FAE857F5C50 /* RLMPredicateUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMPredicateUtil.mm; path = Realm/RLMPredicateUtil.mm; sourceTree = ""; }; - C7DDFDEABDDD4D9131C3EA1AA73276AA /* SDImageLoadersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageLoadersManager.h; path = SDWebImage/Core/SDImageLoadersManager.h; sourceTree = ""; }; - C82101D4E07B21CCFF363C993140A86D /* Alamofire-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Alamofire-Info.plist"; sourceTree = ""; }; - C82A75B33BF7106A57AE8F6553AEEFA1 /* Toast-Swift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Toast-Swift-prefix.pch"; sourceTree = ""; }; - C858E330281A8411087DBF4B39103EEB /* sync_config.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_config.cpp; path = Realm/ObjectStore/src/sync/sync_config.cpp; sourceTree = ""; }; - C885D17E303681AA196E0B45CBD18D23 /* Realm.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Realm.release.xcconfig; sourceTree = ""; }; - C892B08EBE0C88B8F83C715610FE8093 /* SDDisplayLink.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDDisplayLink.h; path = SDWebImage/Private/SDDisplayLink.h; sourceTree = ""; }; - C8F83C27DF79F9E6F42D7D81AAFDE38F /* SDImageCacheDefine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCacheDefine.m; path = SDWebImage/Core/SDImageCacheDefine.m; sourceTree = ""; }; - C91DECFAA4FDF6B60D085BD99F012CFD /* Mockingjay-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Mockingjay-dummy.m"; sourceTree = ""; }; - C9B65D8C82364E71DD4C6C3AA6E75A42 /* Aliases.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Aliases.swift; path = RealmSwift/Aliases.swift; sourceTree = ""; }; - CA242EA30CDA168E307A6D2F48DD4270 /* FIRDependency.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDependency.h; path = FirebaseCore/Sources/Private/FIRDependency.h; sourceTree = ""; }; - CA57BEEEA6ECEE7083C11F89BB0A2C3B /* Mockingjay.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Mockingjay.modulemap; sourceTree = ""; }; - CB0A6A6A4F04DE2F8041628D4BBC034D /* String+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+Extension.swift"; path = "Sources/CryptoSwift/String+Extension.swift"; sourceTree = ""; }; - CB5A313428803E7EC91039A3F03CCAB2 /* Object.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Object.swift; path = RealmSwift/Object.swift; sourceTree = ""; }; - CBC1F6C1E105A67A37563B83B37F855E /* SDInternalMacros.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDInternalMacros.m; path = SDWebImage/Private/SDInternalMacros.m; sourceTree = ""; }; - CBD56A4891183CE1C7A470DA751FEE3E /* NSURLSession+GULPromises.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURLSession+GULPromises.h"; path = "GoogleUtilities/Environment/Public/GoogleUtilities/NSURLSession+GULPromises.h"; sourceTree = ""; }; - CBE5C53DDF67C42C5682CBBBEB5B5BD0 /* binding_callback_thread_observer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = binding_callback_thread_observer.cpp; path = Realm/ObjectStore/src/binding_callback_thread_observer.cpp; sourceTree = ""; }; - CBE96F3DD76CAD0C686276C339434CEA /* FIRMessagingCheckinPreferences.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingCheckinPreferences.m; path = FirebaseMessaging/Sources/Token/FIRMessagingCheckinPreferences.m; sourceTree = ""; }; - CC7C9A39C665AEC6CCD0D9A5443E1140 /* SDWebImageError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageError.m; path = SDWebImage/Core/SDWebImageError.m; sourceTree = ""; }; - CC853F3B3AC728F92B8B62D999FD3A8C /* SDWebImageDownloaderRequestModifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderRequestModifier.h; path = SDWebImage/Core/SDWebImageDownloaderRequestModifier.h; sourceTree = ""; }; - CD23C32EB4EECECF2AFF42CC6A4B85D0 /* OCB.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OCB.swift; path = Sources/CryptoSwift/BlockMode/OCB.swift; sourceTree = ""; }; - CD9BCE9E2C02D1D7013DDBFA6CAE016A /* RLMSyncSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncSession.h; path = include/RLMSyncSession.h; sourceTree = ""; }; - CDD52A7DF25E26DB48D7675A512D9F23 /* FIRHeartbeatInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRHeartbeatInfo.m; path = FirebaseCore/Sources/FIRHeartbeatInfo.m; sourceTree = ""; }; - CE511A10E2E27CB8CC18B9A1E433F5A4 /* RLMUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMUtil.mm; path = Realm/RLMUtil.mm; sourceTree = ""; }; - CE7ECEC0012DED25A293A50764593460 /* FBLPromise+Await.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Await.m"; path = "Sources/FBLPromises/FBLPromise+Await.m"; sourceTree = ""; }; - CEC0D8039B3C2C47ADAA62D10C906653 /* RLMSchema.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSchema.h; path = include/RLMSchema.h; sourceTree = ""; }; - CF44CDB03A657F06858912B8ADE089A7 /* IQBarButtonItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQBarButtonItem.swift; path = IQKeyboardManagerSwift/IQToolbar/IQBarButtonItem.swift; sourceTree = ""; }; - CF87B9AA4CF57A1C594525DAEB25F963 /* CryptoSwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CryptoSwift.debug.xcconfig; sourceTree = ""; }; - D02191707B9D8374D62A8B3F4DBEA4B0 /* GDTCOREvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCOREvent.m; path = GoogleDataTransport/GDTCORLibrary/GDTCOREvent.m; sourceTree = ""; }; - D0314417B4C5CD3C92C6DD04A12CE43D /* Array+Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Array+Foundation.swift"; path = "Sources/CryptoSwift/Foundation/Array+Foundation.swift"; sourceTree = ""; }; + BD6F5B92CA889A858AD40E373381079A /* RLMOptionalBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMOptionalBase.h; path = include/RLMOptionalBase.h; sourceTree = ""; }; + BDA2BFE10781E02461A0CD7490313A84 /* FirebaseCoreDiagnostics-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FirebaseCoreDiagnostics-umbrella.h"; sourceTree = ""; }; + BDC05F29BAB20E8E600B77B7261DF241 /* NSDictionary+FIRMessaging.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+FIRMessaging.m"; path = "FirebaseMessaging/Sources/NSDictionary+FIRMessaging.m"; sourceTree = ""; }; + BDFECEBF5147BD1E1DB1F92618AED902 /* ParameterEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParameterEncoder.swift; path = Source/ParameterEncoder.swift; sourceTree = ""; }; + BE37874066F59D4F4D263C0897CECD42 /* Builders.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Builders.swift; path = Sources/Mockingjay/Builders.swift; sourceTree = ""; }; + BE689F92EEBA35EB7EFA97BC1ED3019A /* Alamofire-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-prefix.pch"; sourceTree = ""; }; + BE849E713DD4116CC8BB99BD6F12B32B /* GDTCORUploadBatch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORUploadBatch.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadBatch.h; sourceTree = ""; }; + BEA243B61ECA424A61B75B0A11B5CEAC /* FIRMessagingPendingTopicsList.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingPendingTopicsList.h; path = FirebaseMessaging/Sources/FIRMessagingPendingTopicsList.h; sourceTree = ""; }; + C03112501E2BA6502535F88382C5DC1A /* FIRMessagingAuthService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingAuthService.m; path = FirebaseMessaging/Sources/Token/FIRMessagingAuthService.m; sourceTree = ""; }; + C036979652C1AA82DE35436C76112BC8 /* RLMRealmConfiguration.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMRealmConfiguration.mm; path = Realm/RLMRealmConfiguration.mm; sourceTree = ""; }; + C09AEF4A253EC803FEFEC7FE6A822F15 /* NSBezierPath+SDRoundedCorners.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSBezierPath+SDRoundedCorners.m"; path = "SDWebImage/Private/NSBezierPath+SDRoundedCorners.m"; sourceTree = ""; }; + C0CFAB0F316EAABE8BB39B89FB37A86E /* IQNSArray+Sort.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQNSArray+Sort.swift"; path = "IQKeyboardManagerSwift/Categories/IQNSArray+Sort.swift"; sourceTree = ""; }; + C10F452D45F2FEEC2ACB7F3906C0A2A3 /* GoogleDataTransport-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleDataTransport-umbrella.h"; sourceTree = ""; }; + C13A7982B95943369894B56EC6A3768F /* Mockingjay.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Mockingjay.release.xcconfig; sourceTree = ""; }; + C1547CA6C4A8C554D1BFBE94CF789B7D /* RLMArray_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMArray_Private.h; path = include/RLMArray_Private.h; sourceTree = ""; }; + C1715560CD6D3A25E429A0A260C5ADA5 /* FirebaseCore.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseCore.release.xcconfig; sourceTree = ""; }; + C1A1CA3A773F2431F8839062977F445D /* URITemplate.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = URITemplate.modulemap; sourceTree = ""; }; + C1A4A273996819FA4A366938FC3CFE06 /* HKDF.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HKDF.swift; path = Sources/CryptoSwift/HKDF.swift; sourceTree = ""; }; + C1B146413DC8F16AF335703ECC6F54BD /* Alamofire-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-umbrella.h"; sourceTree = ""; }; + C1BFA13E3438CCEB0C43E67A14650D22 /* URLRequest+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLRequest+Alamofire.swift"; path = "Source/URLRequest+Alamofire.swift"; sourceTree = ""; }; + C25452D28424FF460074B1390D4AE2E8 /* SDWebImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SDWebImage.modulemap; sourceTree = ""; }; + C25692C04D77AAB7221165CFC06D57DD /* UIImage+Transform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Transform.h"; path = "SDWebImage/Core/UIImage+Transform.h"; sourceTree = ""; }; + C26472FC5991B2348E55D270AB4FD33D /* GoogleUtilities-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleUtilities-umbrella.h"; sourceTree = ""; }; + C279945E25D218FFB7CC4A91481E7590 /* SDWebImageCacheKeyFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCacheKeyFilter.h; path = SDWebImage/Core/SDWebImageCacheKeyFilter.h; sourceTree = ""; }; + C351F4948DBDC7BCFA6D8DC546E61A7C /* SDWebImageError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageError.h; path = SDWebImage/Core/SDWebImageError.h; sourceTree = ""; }; + C36C6746AB974F043E7930AF68B52178 /* GDTCORLifecycle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORLifecycle.h; path = GoogleDataTransport/GDTCORLibrary/Internal/GDTCORLifecycle.h; sourceTree = ""; }; + C3869804421B279168DA26F3CF23A098 /* partial_sync.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = partial_sync.cpp; path = Realm/ObjectStore/src/sync/partial_sync.cpp; sourceTree = ""; }; + C394E1E8C0B31292091637DCD71392B9 /* GULKeychainUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULKeychainUtils.h; path = GoogleUtilities/Environment/Public/GoogleUtilities/GULKeychainUtils.h; sourceTree = ""; }; + C3C0FDDE8C3A29D14795B0CCDE8A64CE /* RLMProperty.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMProperty.mm; path = Realm/RLMProperty.mm; sourceTree = ""; }; + C4131218F8716A33D0DCF7F8569B9E9C /* ActionSheetPicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetPicker.h; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/ActionSheetPicker.h; sourceTree = ""; }; + C43D411B9DEA0E0E2EB27503351C98F3 /* SDWebImageError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageError.m; path = SDWebImage/Core/SDWebImageError.m; sourceTree = ""; }; + C48DB19EEC7823E486CE4E5F512CB1E5 /* FIROptions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIROptions.h; path = FirebaseCore/Sources/Public/FirebaseCore/FIROptions.h; sourceTree = ""; }; + C491DCC040BC52B90FB6568173F80167 /* SecureBytes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureBytes.swift; path = Sources/CryptoSwift/SecureBytes.swift; sourceTree = ""; }; + C497F2164DA557AE0D0AD1220A973615 /* FirebaseInstallations-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FirebaseInstallations-Info.plist"; sourceTree = ""; }; + C4F2EEAC8E682AF81649EDB99F4871B7 /* GDTCORAssert.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORAssert.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORAssert.m; sourceTree = ""; }; + C62434FD18A0162DD2EEC48E1977B333 /* ReachabilitySwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ReachabilitySwift.release.xcconfig; sourceTree = ""; }; + C657E082540A7D3E9C9C89BCB2237721 /* FirebaseCoreDiagnostics.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseCoreDiagnostics.release.xcconfig; sourceTree = ""; }; + C6A53FDACACA43B7CDF53D66D6334763 /* FIRMessagingTopicsCommon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingTopicsCommon.h; path = FirebaseMessaging/Sources/FIRMessagingTopicsCommon.h; sourceTree = ""; }; + C6CA19FAAE9C5CDC570FAFAB849010FC /* FIRLibrary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRLibrary.h; path = FirebaseCore/Sources/Private/FIRLibrary.h; sourceTree = ""; }; + C741CCA4ABA26F960A72AF9FB64BD97A /* GDTCORTransport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORTransport.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORTransport.m; sourceTree = ""; }; + C7423129F4E9D30FD62BBE7BE1E352E6 /* IQKeyboardManager+UITextFieldViewNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+UITextFieldViewNotification.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+UITextFieldViewNotification.swift"; sourceTree = ""; }; + C74AC6F44145A1174ADC3524004ECB59 /* FIRInstallations.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallations.h; path = FirebaseInstallations/Source/Library/Public/FirebaseInstallations/FIRInstallations.h; sourceTree = ""; }; + C7BA7048E4B4BC26C2DB3ACF7646C29F /* ChaCha20.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChaCha20.swift; path = Sources/CryptoSwift/ChaCha20.swift; sourceTree = ""; }; + C7E01CF0697350C146A56F6AE62EEC72 /* GDTCORRegistrar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORRegistrar.h; path = GoogleDataTransport/GDTCORLibrary/Internal/GDTCORRegistrar.h; sourceTree = ""; }; + C81E30A74ACA2EB0DE0F1B24DE663C1E /* Utils+Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Utils+Foundation.swift"; path = "Sources/CryptoSwift/Foundation/Utils+Foundation.swift"; sourceTree = ""; }; + C829701F6F289FF8547E6C5F0CA34690 /* FIRMessagingPubSub.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingPubSub.m; path = FirebaseMessaging/Sources/FIRMessagingPubSub.m; sourceTree = ""; }; + C847101AD300EFAFC10F780ADCA9E593 /* IQKeyboardManager+Debug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Debug.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+Debug.swift"; sourceTree = ""; }; + C889F533ED3626FEF20A7CF793684A3E /* SDWebImageOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageOperation.m; path = SDWebImage/Core/SDWebImageOperation.m; sourceTree = ""; }; + C8B18A0570D7BAC0A8F837133E2DDFD1 /* RLMRealm_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealm_Private.h; path = include/RLMRealm_Private.h; sourceTree = ""; }; + C8D587F795ADDA42E4AC9885CB957E2A /* SDImageGIFCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageGIFCoder.m; path = SDWebImage/Core/SDImageGIFCoder.m; sourceTree = ""; }; + C977FDAF3D1325FD03E94C2B1CED0412 /* GDTCORDirectorySizeTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORDirectorySizeTracker.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORDirectorySizeTracker.m; sourceTree = ""; }; + C9AB2627CF8C758388D4CE396E26B3DA /* ReachabilitySwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ReachabilitySwift.debug.xcconfig; sourceTree = ""; }; + C9CF4D0FD634A5A19AE5A39FB167DC6B /* schema.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = schema.cpp; path = Realm/ObjectStore/src/schema.cpp; sourceTree = ""; }; + CAA6054A2F5B34718BFFF6EF61795C0C /* FIRConfigurationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRConfigurationInternal.h; path = FirebaseCore/Sources/FIRConfigurationInternal.h; sourceTree = ""; }; + CAC6F836B72427D8993AA92EF501FBB7 /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/Core/UIImage+GIF.h"; sourceTree = ""; }; + CB24E464161714FB2F99431C96167D97 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; + CB7BF5B8A6859B6CD7367007310BDD3E /* StreamEncryptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StreamEncryptor.swift; path = Sources/CryptoSwift/StreamEncryptor.swift; sourceTree = ""; }; + CBFF1C771F5481B750F48730721180DA /* FIROptionsInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIROptionsInternal.h; path = FirebaseCore/Sources/Private/FIROptionsInternal.h; sourceTree = ""; }; + CBFFE86F79B3B7EE6D8884D80F71A42B /* CBC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CBC.swift; path = Sources/CryptoSwift/BlockMode/CBC.swift; sourceTree = ""; }; + CC55FDA8C07BEEC58E107A03F712E4EB /* FirebaseInstallations.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseInstallations.debug.xcconfig; sourceTree = ""; }; + CCBC26BBD5A53F46900FAD9DDC727261 /* Firebase.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Firebase.release.xcconfig; sourceTree = ""; }; + CD28F8B929445CB1D1D34E472D7292B8 /* FIRMessagingTokenInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingTokenInfo.h; path = FirebaseMessaging/Sources/Token/FIRMessagingTokenInfo.h; sourceTree = ""; }; + CDB0DA85ABB129CF78ECEBA518892920 /* IQKeyboardManager+Position.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Position.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+Position.swift"; sourceTree = ""; }; + CDE768EE370DFB9FFDDEF213EF4ED391 /* SDAnimatedImageRep.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImageRep.h; path = SDWebImage/Core/SDAnimatedImageRep.h; sourceTree = ""; }; + CDEB0E087A82FE00931F355ECE393524 /* GDTCOREvent+GDTCCTSupport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "GDTCOREvent+GDTCCTSupport.h"; path = "GoogleDataTransport/GDTCCTLibrary/Public/GDTCOREvent+GDTCCTSupport.h"; sourceTree = ""; }; + CE11F74B23EDE88076AB5451C9140B13 /* ActionSheetPicker-3.0.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "ActionSheetPicker-3.0.debug.xcconfig"; sourceTree = ""; }; + CE37B880083BF255F4315680913666F6 /* SDImageHEICCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageHEICCoder.h; path = SDWebImage/Core/SDImageHEICCoder.h; sourceTree = ""; }; + CE54066211663F8BA2F9D0AFF6BCE789 /* shared_realm.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = shared_realm.cpp; path = Realm/ObjectStore/src/shared_realm.cpp; sourceTree = ""; }; + CE9553704372BF90F3BE448C1C9E2DA6 /* SDWebImageDefine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDefine.m; path = SDWebImage/Core/SDWebImageDefine.m; sourceTree = ""; }; + CEBD247C3AA4F381E85ABB7C76BD7082 /* nanopb-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "nanopb-prefix.pch"; sourceTree = ""; }; + CF16163B647DB5CE463AB1C6E51B7FA7 /* SHA1.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SHA1.swift; path = Sources/CryptoSwift/SHA1.swift; sourceTree = ""; }; + CF301A5BEEBB2096296125C2BA9D4103 /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/Core/SDImageCache.h; sourceTree = ""; }; + CF4B25A7B37315886FEB08C03BD077FD /* GDTCORTransformer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORTransformer.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORTransformer.m; sourceTree = ""; }; + CFE717064F57B1216E27616F620D2A41 /* GULKeychainUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULKeychainUtils.m; path = GoogleUtilities/Environment/SecureStorage/GULKeychainUtils.m; sourceTree = ""; }; + D030D0BD373ED9195BFD874641E77761 /* FIRDependency.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDependency.m; path = FirebaseCore/Sources/FIRDependency.m; sourceTree = ""; }; + D0366AD7267CA6B0B8AE7BF6854BC334 /* XCTest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XCTest.swift; path = Sources/Mockingjay/XCTest.swift; sourceTree = ""; }; D04DECF0CA3846FAC6BC97C65C147981 /* Pods-MyStudiesTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MyStudiesTests-umbrella.h"; sourceTree = ""; }; - D0671CDE367305EC8D3EAA017AE75ECD /* RLMCollection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMCollection.h; path = include/RLMCollection.h; sourceTree = ""; }; - D16CEF36A0128B3057A296A717343973 /* CachedResponseHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CachedResponseHandler.swift; path = Source/CachedResponseHandler.swift; sourceTree = ""; }; - D1A0F280A48CC7207C6774F525F5E454 /* Firebase.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Firebase.release.xcconfig; sourceTree = ""; }; - D1E893D7791A8935FCFB1811A626A282 /* RLMObject.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMObject.mm; path = Realm/RLMObject.mm; sourceTree = ""; }; - D2232E8DB6FE89694044E929C31B8B5D /* ReachabilitySwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ReachabilitySwift-Info.plist"; sourceTree = ""; }; - D27490674032E7C6A038EE62334A451D /* SlideMenuControllerSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SlideMenuControllerSwift.modulemap; sourceTree = ""; }; - D29AD7CD2C0FE30DDE37C4CB8E6686D2 /* FIRComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponent.h; path = FirebaseCore/Sources/Private/FIRComponent.h; sourceTree = ""; }; - D2BC55250AA90DF7564DACAFFBF34618 /* CompactMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CompactMap.swift; path = Sources/CryptoSwift/CompactMap.swift; sourceTree = ""; }; - D32B1890FD584A4CC7C74B4D84BCB769 /* GULAppDelegateSwizzler_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULAppDelegateSwizzler_Private.h; path = GoogleUtilities/AppDelegateSwizzler/Internal/GULAppDelegateSwizzler_Private.h; sourceTree = ""; }; - D3A8464565A7ECC6BF1BF06174F21891 /* collection_notifications.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = collection_notifications.cpp; path = Realm/ObjectStore/src/collection_notifications.cpp; sourceTree = ""; }; - D40C1654DC72D6531177450E25F4823E /* CryptoSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CryptoSwift-prefix.pch"; sourceTree = ""; }; - D4C31B2AFB205FB407F3B601E20BF9B5 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - D4EFE58C8AF2B33D44C8483992CBFA5B /* SDWebImage.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.release.xcconfig; sourceTree = ""; }; - D5DDC2001E3FB091F054A22E136FC4BE /* FirebaseMessaging-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FirebaseMessaging-umbrella.h"; sourceTree = ""; }; - D5F7928600A9EF34D656DCCCB7C0D131 /* GULUserDefaults.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULUserDefaults.h; path = GoogleUtilities/UserDefaults/Public/GoogleUtilities/GULUserDefaults.h; sourceTree = ""; }; - D6043471C96F93DC41F7DD1E0D7D8B35 /* Toast_Swift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Toast_Swift.framework; path = "Toast-Swift.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - D67D9A0CD96B92698D3250CA761B01BE /* list_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = list_notifier.cpp; path = Realm/ObjectStore/src/impl/list_notifier.cpp; sourceTree = ""; }; - D6E470A0C684D4FBC08BDF7A28A2A38B /* ActionSheetPicker_3_0.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = ActionSheetPicker_3_0.framework; path = "ActionSheetPicker-3.0.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - D713750F69F8612EC13CA626C1DF01BC /* GDTCORLifecycle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORLifecycle.h; path = GoogleDataTransport/GDTCORLibrary/Internal/GDTCORLifecycle.h; sourceTree = ""; }; - D72238DAA72639A7992C8F254A311930 /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/Core/UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; - D72A32FF1E0AF7C9E1CA525F6558B163 /* external_commit_helper.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = external_commit_helper.cpp; path = Realm/ObjectStore/src/impl/apple/external_commit_helper.cpp; sourceTree = ""; }; - D75C8757814D0A31396016FFBE20DDC8 /* object_changeset.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = object_changeset.cpp; path = Realm/ObjectStore/src/object_changeset.cpp; sourceTree = ""; }; - D8202D3E060630CBB2F0B8F6D1E5BB78 /* GDTCORRegistrar_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORRegistrar_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORRegistrar_Private.h; sourceTree = ""; }; - D89A4E1938B16D8F672779FD42648F62 /* ParameterEncoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParameterEncoding.swift; path = Source/ParameterEncoding.swift; sourceTree = ""; }; - D931A50A8313166A033DE88D54656573 /* SDImageCoderHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCoderHelper.m; path = SDWebImage/Core/SDImageCoderHelper.m; sourceTree = ""; }; - D97BA2185CB65E882C56229F8E664B09 /* SDAnimatedImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImageView.h; path = SDWebImage/Core/SDAnimatedImageView.h; sourceTree = ""; }; - D9A808C2408C024D7F61E91427260FBD /* SDImageCachesManagerOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCachesManagerOperation.m; path = SDWebImage/Private/SDImageCachesManagerOperation.m; sourceTree = ""; }; - D9B4086214658B5946EA02E2752A0243 /* firebasecore.nanopb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = firebasecore.nanopb.h; path = Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.h; sourceTree = ""; }; - DA360603A68ECC2BD5C2B909D7B5A65F /* Mockingjay.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Mockingjay.debug.xcconfig; sourceTree = ""; }; - DA40032096D385282B2BF250E02ACF20 /* Mockingjay-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Mockingjay-Info.plist"; sourceTree = ""; }; - DA410E2E00B23764DBFA0C10549BB6FD /* GDTCOREvent_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCOREvent_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCOREvent_Private.h; sourceTree = ""; }; - DA4633699EB63381AC3E13445A2BB204 /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "SDWebImage/Core/NSData+ImageContentType.h"; sourceTree = ""; }; - DACAA87063E2D84D45DAFE1C3749B9BA /* index_set.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = index_set.cpp; path = Realm/ObjectStore/src/index_set.cpp; sourceTree = ""; }; - DB293053A331C555C618D86A7678ECD5 /* FIRInstallationsStoredItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsStoredItem.m; path = FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredItem.m; sourceTree = ""; }; - DB79AC3E6D402B145104D0F875B7EF7E /* ActionSheetStringPicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ActionSheetStringPicker.m; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/ActionSheetStringPicker.m; sourceTree = ""; }; - DB7A084B224E3CDC6293F2BA5141818B /* FIROptionsInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIROptionsInternal.h; path = FirebaseCore/Sources/Private/FIROptionsInternal.h; sourceTree = ""; }; - DB7D95E15D6BFA80111E9DB521CF9934 /* UIImage+Metadata.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Metadata.h"; path = "SDWebImage/Core/UIImage+Metadata.h"; sourceTree = ""; }; - DBA263F2A89E6E28909F8EFD35CAC717 /* SDImageCacheDefine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheDefine.h; path = SDWebImage/Core/SDImageCacheDefine.h; sourceTree = ""; }; - DC49EF44127A92CF133BD2E694CAA520 /* FBLPromise+Any.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Any.m"; path = "Sources/FBLPromises/FBLPromise+Any.m"; sourceTree = ""; }; - DC596FA8FEE460FAA58F43ACCB9AF76D /* FIRConfigurationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRConfigurationInternal.h; path = FirebaseCore/Sources/FIRConfigurationInternal.h; sourceTree = ""; }; - DCA78C13257ACA07AB6DBED25A4C2BC2 /* GULSecureCoding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULSecureCoding.h; path = GoogleUtilities/Environment/Public/GoogleUtilities/GULSecureCoding.h; sourceTree = ""; }; - DCEA8E0870E3EE66FD0DAFF6E1936593 /* async_open_task.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = async_open_task.cpp; path = Realm/ObjectStore/src/sync/async_open_task.cpp; sourceTree = ""; }; - DD11869F2347D7B0B5470D14832F092C /* GULNetworkConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULNetworkConstants.h; path = GoogleUtilities/Network/Public/GoogleUtilities/GULNetworkConstants.h; sourceTree = ""; }; - DD1D28BFBABD37808AB06777A4B728D0 /* FIRMessagingConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingConstants.m; path = FirebaseMessaging/Sources/FIRMessagingConstants.m; sourceTree = ""; }; - DD50C7D5BF2703CA1D4D4ADF6BA5F8EB /* FIRMessagingTopicsCommon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingTopicsCommon.h; path = FirebaseMessaging/Sources/FIRMessagingTopicsCommon.h; sourceTree = ""; }; - DD539CD04D5E57F34F39CDBD4775DBCD /* BlockModeOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlockModeOptions.swift; path = Sources/CryptoSwift/BlockMode/BlockModeOptions.swift; sourceTree = ""; }; - DD7E50B111AC009DB830CA127E155DE3 /* IQTitleBarButtonItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTitleBarButtonItem.swift; path = IQKeyboardManagerSwift/IQToolbar/IQTitleBarButtonItem.swift; sourceTree = ""; }; - DDE1797E8766BEC37E591A7A4625B895 /* SDWebImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-prefix.pch"; sourceTree = ""; }; - DE03DEF576E7122FCD234BDC0D66B806 /* FIRCoreDiagnosticsConnector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCoreDiagnosticsConnector.h; path = FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h; sourceTree = ""; }; - DE11C28AEB3EEDE16BD3291C54849806 /* weak_realm_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = weak_realm_notifier.cpp; path = Realm/ObjectStore/src/impl/weak_realm_notifier.cpp; sourceTree = ""; }; - DE15D00210E6D3671055247ABC05F216 /* MD5.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MD5.swift; path = Sources/CryptoSwift/MD5.swift; sourceTree = ""; }; - DE20DC127752ABD579380CDFB7DE2F89 /* RLMSyncConfiguration_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncConfiguration_Private.h; path = include/RLMSyncConfiguration_Private.h; sourceTree = ""; }; - DEE9BF2E150669C3B8731EAA7C6636C6 /* ActionSheetDistancePicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetDistancePicker.h; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/ActionSheetDistancePicker.h; sourceTree = ""; }; - DF89BA78D547469131E7663EF33DEFC2 /* FBLPromise+Then.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Then.m"; path = "Sources/FBLPromises/FBLPromise+Then.m"; sourceTree = ""; }; - DF9650B678A6570B0750ACA9453F0CD8 /* FIRInstallationsBackoffController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsBackoffController.h; path = FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsBackoffController.h; sourceTree = ""; }; - E008E02B364610E665AEFE4A2271A14D /* thread_safe_reference.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = thread_safe_reference.cpp; path = Realm/ObjectStore/src/thread_safe_reference.cpp; sourceTree = ""; }; - E07D31F71C77F24C8582889686041795 /* RLMResults.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMResults.mm; path = Realm/RLMResults.mm; sourceTree = ""; }; - E0949D2B637DAB0E1512728627D8EB43 /* FIRLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRLogger.h; path = FirebaseCore/Sources/Private/FIRLogger.h; sourceTree = ""; }; - E09A92565CB375B8703E40001DCD8EBD /* RLMNetworkClient.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMNetworkClient.mm; path = Realm/RLMNetworkClient.mm; sourceTree = ""; }; - E11C376BDDD54FF90A03E133A03A5564 /* FIRMessagingAPNSInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingAPNSInfo.h; path = FirebaseMessaging/Sources/Token/FIRMessagingAPNSInfo.h; sourceTree = ""; }; - E165E9F585FFB415E83EE2C519002B48 /* SDWebImageIndicator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageIndicator.h; path = SDWebImage/Core/SDWebImageIndicator.h; sourceTree = ""; }; - E16D1B384E3D86F15270DCC2209BFE02 /* RLMSwiftSupport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RLMSwiftSupport.m; path = Realm/RLMSwiftSupport.m; sourceTree = ""; }; - E16EF5514F69435C770664EF8AFE8954 /* FBLPromise+Recover.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Recover.m"; path = "Sources/FBLPromises/FBLPromise+Recover.m"; sourceTree = ""; }; - E18BE96E6BDE6F7BDC1D2E7BE8055B12 /* FirebaseInstallations-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FirebaseInstallations-dummy.m"; sourceTree = ""; }; - E1A5A76B3F15AE4C2C38A8D70C56BD7A /* RLMSyncSession.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMSyncSession.mm; path = Realm/RLMSyncSession.mm; sourceTree = ""; }; - E1E28F40CBE6494D99DA31DC36109A39 /* FBLPromise+Catch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Catch.m"; path = "Sources/FBLPromises/FBLPromise+Catch.m"; sourceTree = ""; }; - E20A0DBB1253EA7D9C737FA70AAEAF75 /* Combine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Combine.swift; path = Source/Combine.swift; sourceTree = ""; }; - E21317BDA8DABD937E215DDB772DCA10 /* HMAC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HMAC.swift; path = Sources/CryptoSwift/HMAC.swift; sourceTree = ""; }; - E23B01E1DC88EA5F9AE33163E889BDBF /* SDImageFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageFrame.h; path = SDWebImage/Core/SDImageFrame.h; sourceTree = ""; }; - E247D250D6F8A9B7176B64B470594FFF /* FIRInstallationsErrorUtil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsErrorUtil.m; path = FirebaseInstallations/Source/Library/Errors/FIRInstallationsErrorUtil.m; sourceTree = ""; }; - E2746E1C1EDE65A483F8029C2CFC1C01 /* FirebaseCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FirebaseCore-dummy.m"; sourceTree = ""; }; - E2B5098199A64E5AF67AA2D92BD03BFE /* FirebaseCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FirebaseCore-umbrella.h"; sourceTree = ""; }; - E2B63D462DB7F827C4B11FD51E4F8E2D /* FirebaseCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FirebaseCore.framework; path = FirebaseCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E2BAD63827AE0F6727E7562A0BCBCD7B /* Int+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Int+Extension.swift"; path = "Sources/CryptoSwift/Int+Extension.swift"; sourceTree = ""; }; - E3564D13907EDB487F2B041F734DCFD6 /* RLMRealm.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMRealm.mm; path = Realm/RLMRealm.mm; sourceTree = ""; }; - E375E189BF401CF23B0D83D10AC54EBB /* work_queue.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = work_queue.cpp; path = Realm/ObjectStore/src/sync/impl/work_queue.cpp; sourceTree = ""; }; - E3775A639F986F973A846594AF1C88A0 /* URITemplate.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = URITemplate.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E386B478878B90AA25501A8E3DB2B7B6 /* CryptoSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = CryptoSwift.modulemap; sourceTree = ""; }; - E44C857D4B400FBA7B1673DCB75C2B5B /* Mockingjay-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Mockingjay-prefix.pch"; sourceTree = ""; }; - E45899A00B8576F7513A7D0256223DF9 /* FIRInstallations.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallations.h; path = FirebaseInstallations/Source/Library/Public/FirebaseInstallations/FIRInstallations.h; sourceTree = ""; }; - E46208D1AC10E182C8188D3B8E0448BB /* SlideMenuControllerSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SlideMenuControllerSwift-dummy.m"; sourceTree = ""; }; - E4C6EFA2D288C791480494F39D8C43B3 /* GDTCORClock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORClock.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORClock.m; sourceTree = ""; }; - E508A477D236550D27A108691D6DACB6 /* FIRMessagingCheckinService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingCheckinService.m; path = FirebaseMessaging/Sources/Token/FIRMessagingCheckinService.m; sourceTree = ""; }; + D07AD83391CECE97E4B09275D8F81FCE /* Cryptors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cryptors.swift; path = Sources/CryptoSwift/Cryptors.swift; sourceTree = ""; }; + D0997C58D4DA7E95BDB868EB045E2BAE /* transact_log_handler.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = transact_log_handler.cpp; path = Realm/ObjectStore/src/impl/transact_log_handler.cpp; sourceTree = ""; }; + D0CF227755335D66B9049F01A3EDD78A /* FirebaseAnalytics.xcframework */ = {isa = PBXFileReference; includeInIndex = 1; name = FirebaseAnalytics.xcframework; path = Frameworks/FirebaseAnalytics.xcframework; sourceTree = ""; }; + D105C584FD61CDFBEBF928E7D917BAAC /* GDTCCTNanopbHelpers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCCTNanopbHelpers.h; path = GoogleDataTransport/GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h; sourceTree = ""; }; + D1264FF1CA23F00AA866F75C63C8A243 /* FIRMessagingRemoteNotificationsProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingRemoteNotificationsProxy.h; path = FirebaseMessaging/Sources/FIRMessagingRemoteNotificationsProxy.h; sourceTree = ""; }; + D13F9D7F1F1735B63F0A63ED08BCC615 /* FIRMessagingConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingConstants.m; path = FirebaseMessaging/Sources/FIRMessagingConstants.m; sourceTree = ""; }; + D159E29C20CC7B24722B84E9F728CABE /* RLMThreadSafeReference.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMThreadSafeReference.mm; path = Realm/RLMThreadSafeReference.mm; sourceTree = ""; }; + D168336F30C0E2A406284B659F0568FF /* Matchers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Matchers.swift; path = Sources/Mockingjay/Matchers.swift; sourceTree = ""; }; + D1978F49003D9C0015DD1D0166EFB2B5 /* NSButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSButton+WebCache.h"; path = "SDWebImage/Core/NSButton+WebCache.h"; sourceTree = ""; }; + D2496EF29FE53B89A69CEAC97C243516 /* Data+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+Extension.swift"; path = "Sources/CryptoSwift/Foundation/Data+Extension.swift"; sourceTree = ""; }; + D2DB2F4C9669065A8267441D87FABB24 /* UInt128.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UInt128.swift; path = Sources/CryptoSwift/UInt128.swift; sourceTree = ""; }; + D2ED4DE994D2B160D38E58A958983D1C /* GDTCORFlatFileStorage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORFlatFileStorage.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORFlatFileStorage.h; sourceTree = ""; }; + D33B844CD5264CC7D80AD15B940F6362 /* CBCMAC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CBCMAC.swift; path = Sources/CryptoSwift/CBCMAC.swift; sourceTree = ""; }; + D363522D0FA0C366797112BDA6705FD0 /* Concurrency.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Concurrency.swift; path = Source/Concurrency.swift; sourceTree = ""; }; + D39450137F8784D0DB4BC80C50DF27CA /* SDAnimatedImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImageView.h; path = SDWebImage/Core/SDAnimatedImageView.h; sourceTree = ""; }; + D3D909E3385713D218F8803B4B7AD478 /* FBLPromise+Catch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Catch.m"; path = "Sources/FBLPromises/FBLPromise+Catch.m"; sourceTree = ""; }; + D434C82D8CA4ED52633411631B2476BF /* CFB.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CFB.swift; path = Sources/CryptoSwift/BlockMode/CFB.swift; sourceTree = ""; }; + D46CABB6AA5C975EAD3BAB5B83B1DE48 /* Mockingjay-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Mockingjay-dummy.m"; sourceTree = ""; }; + D492C64A621E8EE00F0E7CCA09B07BD5 /* FirebaseAnalytics.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseAnalytics.debug.xcconfig; sourceTree = ""; }; + D520C9C73C22B14CE2B603ABC839F4EA /* FIRComponentContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponentContainer.h; path = FirebaseCore/Sources/Private/FIRComponentContainer.h; sourceTree = ""; }; + D544D8849EE98A44DCD33D61BC5A29C8 /* SlideMenuControllerSwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SlideMenuControllerSwift.release.xcconfig; sourceTree = ""; }; + D57B019B8248B7C05431DA8D1173BC10 /* FIRInstallationsIDController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsIDController.h; path = FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsIDController.h; sourceTree = ""; }; + D6043471C96F93DC41F7DD1E0D7D8B35 /* Toast-Swift */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Toast-Swift"; path = Toast_Swift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D6B7D958DC835D1AFDBE8FFABB896EC1 /* SDWebImageCacheSerializer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCacheSerializer.m; path = SDWebImage/Core/SDWebImageCacheSerializer.m; sourceTree = ""; }; + D6E470A0C684D4FBC08BDF7A28A2A38B /* ActionSheetPicker-3.0 */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "ActionSheetPicker-3.0"; path = ActionSheetPicker_3_0.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D765502D6EF2FB061089D72BCA244195 /* SDDisplayLink.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDDisplayLink.h; path = SDWebImage/Private/SDDisplayLink.h; sourceTree = ""; }; + D767348B7F76EF759DDB0A61E182E508 /* RLMObjectStore.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMObjectStore.mm; path = Realm/RLMObjectStore.mm; sourceTree = ""; }; + D7990988559D32F0F8E6A9A97E125901 /* ReachabilitySwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ReachabilitySwift-dummy.m"; sourceTree = ""; }; + D7B6359FA6FE4D1A19A2173369B213A1 /* SDWebImage-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-umbrella.h"; sourceTree = ""; }; + D7E59061A5E63AFC5011D57B20637056 /* SDImageLoadersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageLoadersManager.h; path = SDWebImage/Core/SDImageLoadersManager.h; sourceTree = ""; }; + D852FDBB41DE1D0A11B390F7E54C6A22 /* RLMSyncPermission.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMSyncPermission.mm; path = Realm/RLMSyncPermission.mm; sourceTree = ""; }; + D893114E596661E896FBB30F59553F3A /* NSURLSession+GULPromises.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURLSession+GULPromises.m"; path = "GoogleUtilities/Environment/URLSessionPromiseWrapper/NSURLSession+GULPromises.m"; sourceTree = ""; }; + D8A18183D15030981EFC0FA7B54235E3 /* FBLPromise+Delay.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Delay.m"; path = "Sources/FBLPromises/FBLPromise+Delay.m"; sourceTree = ""; }; + D8EA477F672052BB6D97EC482EC0DC84 /* Alamofire-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Alamofire-dummy.m"; sourceTree = ""; }; + D9185C3F7C8BCD19F5051C215471BBF9 /* Alamofire-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Alamofire-Info.plist"; sourceTree = ""; }; + D91BE1E22894A3B5977054DB74BC9DBE /* FIRMessagingTokenOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingTokenOperation.m; path = FirebaseMessaging/Sources/Token/FIRMessagingTokenOperation.m; sourceTree = ""; }; + D982878987DD1C6E5FC780F4C4DBB4FB /* RLMMigration.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMMigration.mm; path = Realm/RLMMigration.mm; sourceTree = ""; }; + D99E332B61B44EE99DB5E3A91B0052B6 /* FBLPromise+Retry.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Retry.m"; path = "Sources/FBLPromises/FBLPromise+Retry.m"; sourceTree = ""; }; + DA0AD2CDEE830266358B1DBFBAC8D0F7 /* SDWeakProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWeakProxy.m; path = SDWebImage/Private/SDWeakProxy.m; sourceTree = ""; }; + DA43C8631C77A49C3E363430C3B9D128 /* GCM.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GCM.swift; path = Sources/CryptoSwift/BlockMode/GCM.swift; sourceTree = ""; }; + DA441CDF43BF037EA940DB6B00989644 /* FIRFirebaseUserAgent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRFirebaseUserAgent.m; path = FirebaseCore/Sources/FIRFirebaseUserAgent.m; sourceTree = ""; }; + DAC769F049E891C0AE5F6BC853550FE3 /* FIRMessagingSyncMessageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingSyncMessageManager.h; path = FirebaseMessaging/Sources/FIRMessagingSyncMessageManager.h; sourceTree = ""; }; + DB81519529A7AABD9E01533EAE4B5BA4 /* AES.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AES.swift; path = Sources/CryptoSwift/AES.swift; sourceTree = ""; }; + DBAE4D4625DBCFBEC2DB4DC64A8C326B /* FBLPromise+Catch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Catch.h"; path = "Sources/FBLPromises/include/FBLPromise+Catch.h"; sourceTree = ""; }; + DBC07DCD17235CF916393C00C423339E /* GDTCORClock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORClock.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORClock.m; sourceTree = ""; }; + DBE6B60D6F4050CC31082057F8AA4CB3 /* FIROptionsInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIROptionsInternal.h; path = FirebaseCore/Sources/Private/FIROptionsInternal.h; sourceTree = ""; }; + DBF9FEF24E5FF7E80958F9625ED03E09 /* FIRAppInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAppInternal.h; path = FirebaseCore/Sources/Private/FIRAppInternal.h; sourceTree = ""; }; + DC5330AA32F04680A63A134AE981E995 /* SDAnimatedImageRep.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImageRep.m; path = SDWebImage/Core/SDAnimatedImageRep.m; sourceTree = ""; }; + DCB67F419572AC3ABBE0EF5A1B764982 /* FIRAppAssociationRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAppAssociationRegistration.h; path = FirebaseCore/Sources/FIRAppAssociationRegistration.h; sourceTree = ""; }; + DDFECB516E488E30B43E119CA8BDC97E /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; + DE9409EC623C435E876DA13DADCA40D8 /* SDImageGraphics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageGraphics.h; path = SDWebImage/Core/SDImageGraphics.h; sourceTree = ""; }; + DEDBB15D64C22759CCD7CB5E6DDCB684 /* ActionSheetMultipleStringPicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ActionSheetMultipleStringPicker.m; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/ActionSheetMultipleStringPicker.m; sourceTree = ""; }; + DF1CB46179AE6BDB8AAA002E621C3BD6 /* PBKDF2.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PBKDF2.swift; path = Sources/CryptoSwift/PKCS/PBKDF2.swift; sourceTree = ""; }; + DFA827099EF53464E4AB2AF1FCFE736A /* FIRInstallationsAPIService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsAPIService.h; path = FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsAPIService.h; sourceTree = ""; }; + E0436201DA1D5CD87F67AF22447954AC /* RLMObject_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObject_Private.h; path = include/RLMObject_Private.h; sourceTree = ""; }; + E0B1574B2487C73208DF456F13985904 /* SDImageCodersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCodersManager.h; path = SDWebImage/Core/SDImageCodersManager.h; sourceTree = ""; }; + E0DCBFDA516CDEF5881AEFE5AD280BAD /* ReachabilitySwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ReachabilitySwift-umbrella.h"; sourceTree = ""; }; + E14A6B6C80B5DCE17D79BFE0E12CBBE2 /* FIRInstallationsItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsItem.m; path = FirebaseInstallations/Source/Library/FIRInstallationsItem.m; sourceTree = ""; }; + E16645BBC6EB041B291C580CC97E79ED /* UIImage+ForceDecode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+ForceDecode.m"; path = "SDWebImage/Core/UIImage+ForceDecode.m"; sourceTree = ""; }; + E1ADFDC48B5E76B1144C314CD46892DB /* GDTCORStorageEventSelector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORStorageEventSelector.h; path = GoogleDataTransport/GDTCORLibrary/Internal/GDTCORStorageEventSelector.h; sourceTree = ""; }; + E1D026F32D91E6EA758EF0D37A17435A /* NSURLSession+GULPromises.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURLSession+GULPromises.h"; path = "GoogleUtilities/Environment/Public/GoogleUtilities/NSURLSession+GULPromises.h"; sourceTree = ""; }; + E2028BF64601B91158E796CAAA81AC77 /* URITemplate-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "URITemplate-prefix.pch"; sourceTree = ""; }; + E2277B5E5A01B117A4AD52D5ED613704 /* HMAC+Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "HMAC+Foundation.swift"; path = "Sources/CryptoSwift/Foundation/HMAC+Foundation.swift"; sourceTree = ""; }; + E231A7D05DD155CA705DAD98DF2A1D80 /* GULKeychainStorage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULKeychainStorage.m; path = GoogleUtilities/Environment/SecureStorage/GULKeychainStorage.m; sourceTree = ""; }; + E2B63D462DB7F827C4B11FD51E4F8E2D /* FirebaseCore */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FirebaseCore; path = FirebaseCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E2C5920E1D549C69F3C3E06BE1EA02FB /* FIRAnalyticsInteropListener.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAnalyticsInteropListener.h; path = Interop/Analytics/Public/FIRAnalyticsInteropListener.h; sourceTree = ""; }; + E341AB0D145F406F4CCD0266358D789C /* FIRComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponent.h; path = FirebaseCore/Sources/Private/FIRComponent.h; sourceTree = ""; }; + E35DFA92475BBC4A08C692D9EE7295DA /* FIRMessagingTokenOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingTokenOperation.h; path = FirebaseMessaging/Sources/Token/FIRMessagingTokenOperation.h; sourceTree = ""; }; + E3CB1D0A96B45733D2DF9DD1FD249EC8 /* FIRMessagingPersistentSyncMessage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingPersistentSyncMessage.h; path = FirebaseMessaging/Sources/FIRMessagingPersistentSyncMessage.h; sourceTree = ""; }; + E3FD1DF521E0D20B96890E50642F08A4 /* SDWebImageTransition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageTransition.h; path = SDWebImage/Core/SDWebImageTransition.h; sourceTree = ""; }; + E41E301F92647C576F44D654E1304912 /* Realm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Realm.h; path = include/Realm.h; sourceTree = ""; }; + E453C157683D721DF09A49130CC7A5C6 /* FIRCoreDiagnosticsConnector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCoreDiagnosticsConnector.h; path = FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h; sourceTree = ""; }; + E45C1A9E6A45E344F40EB2AFB6EC4BE7 /* SDInternalMacros.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDInternalMacros.m; path = SDWebImage/Private/SDInternalMacros.m; sourceTree = ""; }; + E4CDC40665BBA0AFC6509C4BA8F17494 /* FIRLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRLogger.m; path = FirebaseCore/Sources/FIRLogger.m; sourceTree = ""; }; + E4EECA729804FE1A1D527714244ABF47 /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/Core/SDWebImageDownloader.h; sourceTree = ""; }; + E4FAF77A0C5352DBB8DF36B550909EC7 /* FIRInstallationsAuthTokenResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsAuthTokenResult.m; path = FirebaseInstallations/Source/Library/FIRInstallationsAuthTokenResult.m; sourceTree = ""; }; + E52317FBFA44FA01BB15E1E1683B7FC3 /* SDImageCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCoder.m; path = SDWebImage/Core/SDImageCoder.m; sourceTree = ""; }; + E586C409771F16D0B6118D81101A0E8B /* FBLPromiseError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBLPromiseError.m; path = Sources/FBLPromises/FBLPromiseError.m; sourceTree = ""; }; + E5FCBC73AD8F633E9B0216936F43D60C /* RLMAccessor.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMAccessor.mm; path = Realm/RLMAccessor.mm; sourceTree = ""; }; + E618FF7571C2884B36433B66CED7315A /* nanopb-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "nanopb-Info.plist"; sourceTree = ""; }; + E63D476F2C4C7D46C359BE02D399BCF8 /* HMAC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HMAC.swift; path = Sources/CryptoSwift/HMAC.swift; sourceTree = ""; }; E648106F52E86A993F59468A3E4AF018 /* Pods-MyStudies-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MyStudies-acknowledgements.plist"; sourceTree = ""; }; - E69DC70F3A47E177698024A5C0471C1F /* Realm.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Realm.swift; path = RealmSwift/Realm.swift; sourceTree = ""; }; - E6B6866183DD1153A5C8570538D70487 /* SDImageAPNGCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageAPNGCoder.h; path = SDWebImage/Core/SDImageAPNGCoder.h; sourceTree = ""; }; - E6C2C2DE3380A72031C11CB50818CF56 /* PromisesObjC.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PromisesObjC.debug.xcconfig; sourceTree = ""; }; - E704752616B93BE1422EB5F7F84F13F9 /* ECB.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ECB.swift; path = Sources/CryptoSwift/BlockMode/ECB.swift; sourceTree = ""; }; - E7087108465B18382AFFFBCCB2245FC0 /* sync_file.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_file.cpp; path = Realm/ObjectStore/src/sync/impl/sync_file.cpp; sourceTree = ""; }; - E74B565793856E2868A88EFFF929A1EB /* FIRMessagingTokenInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingTokenInfo.h; path = FirebaseMessaging/Sources/Token/FIRMessagingTokenInfo.h; sourceTree = ""; }; - E7C6B800A7EFF50A9A1DCBA6601E5E35 /* GULLoggerCodes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULLoggerCodes.h; path = GoogleUtilities/Common/GULLoggerCodes.h; sourceTree = ""; }; - E7F9256D1CA12C6E149A86DA80E9F0F4 /* SDWebImageDownloaderConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderConfig.m; path = SDWebImage/Core/SDWebImageDownloaderConfig.m; sourceTree = ""; }; - E7FF5F7015E1BE438F1EACEB0519506D /* FIRInstallationsStoredItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsStoredItem.h; path = FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredItem.h; sourceTree = ""; }; - E845E378BFA5EDB33413995A63775D1E /* SDImageTransformer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageTransformer.h; path = SDWebImage/Core/SDImageTransformer.h; sourceTree = ""; }; - E88CA31B7293EE064978112B11BB5F14 /* RequestInterceptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestInterceptor.swift; path = Source/RequestInterceptor.swift; sourceTree = ""; }; - E8B462E640B9975288E437271C0C6824 /* SDImageCachesManagerOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCachesManagerOperation.h; path = SDWebImage/Private/SDImageCachesManagerOperation.h; sourceTree = ""; }; - E8C6F2DEC642A24F2BE7C47EB26325D8 /* FBLPromise+Do.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Do.m"; path = "Sources/FBLPromises/FBLPromise+Do.m"; sourceTree = ""; }; - E90B933539CBEAA65AE4B02FDB3E02A3 /* FirebaseCoreDiagnostics-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FirebaseCoreDiagnostics-umbrella.h"; sourceTree = ""; }; - E916E009B186A1E251F964603947E671 /* nanopb-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "nanopb-umbrella.h"; sourceTree = ""; }; - EA34BF97FF7FDABA9337BB0A8A9589F0 /* MockingjayProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MockingjayProtocol.swift; path = Sources/Mockingjay/MockingjayProtocol.swift; sourceTree = ""; }; - EA80FDBE78E82B959D7B7B8181643434 /* GULLoggerLevel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULLoggerLevel.h; path = GoogleUtilities/Logger/Public/GoogleUtilities/GULLoggerLevel.h; sourceTree = ""; }; - EAB3B56FD78BBCC2CDE4D36D230DD5FA /* URITemplate-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "URITemplate-Info.plist"; sourceTree = ""; }; - EAB7611EE3E28B26836A61E16106C1F3 /* FIRAppAssociationRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAppAssociationRegistration.h; path = FirebaseCore/Sources/FIRAppAssociationRegistration.h; sourceTree = ""; }; + E65BA7C811211DAE0BE2469448A0706D /* SDImageCacheDefine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCacheDefine.m; path = SDWebImage/Core/SDImageCacheDefine.m; sourceTree = ""; }; + E68AEF1534C586A35CD176A466EDD12C /* RLMRealm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealm.h; path = include/RLMRealm.h; sourceTree = ""; }; + E750C0538DA22CCA0E7F5C46F37F78CF /* ActionSheetDatePicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ActionSheetDatePicker.m; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/ActionSheetDatePicker.m; sourceTree = ""; }; + E7871376CEAB6CF4AF675C223A79838D /* GDTCORConsoleLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORConsoleLogger.h; path = GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCORConsoleLogger.h; sourceTree = ""; }; + E78D3D6738AD9F6C8DE839EA6F9E8257 /* SDAssociatedObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAssociatedObject.h; path = SDWebImage/Private/SDAssociatedObject.h; sourceTree = ""; }; + E81B6ED242E2EE14683340BFB2B3DAD8 /* GULNetwork.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULNetwork.m; path = GoogleUtilities/Network/GULNetwork.m; sourceTree = ""; }; + E82BAD2A000A217297075BCC2AA48367 /* AEADChaCha20Poly1305.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AEADChaCha20Poly1305.swift; path = Sources/CryptoSwift/AEAD/AEADChaCha20Poly1305.swift; sourceTree = ""; }; + E8995ADD90CF0D3B446C426A30A79B9E /* FIRComponentContainerInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponentContainerInternal.h; path = FirebaseCore/Sources/FIRComponentContainerInternal.h; sourceTree = ""; }; + E911E1512DC1789EF12C0939FAA54077 /* FIRMessagingLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingLogger.h; path = FirebaseMessaging/Sources/FIRMessagingLogger.h; sourceTree = ""; }; + E99E7B8DC9F776A9425E9DFED7F2273D /* SDImageAssetManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageAssetManager.h; path = SDWebImage/Private/SDImageAssetManager.h; sourceTree = ""; }; + E9AE0074EF4226A0D021C823A296A9AB /* FIRLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRLogger.h; path = FirebaseCore/Sources/Private/FIRLogger.h; sourceTree = ""; }; + E9AE969F0B095AA9193301C3D5E993CC /* NoPadding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NoPadding.swift; path = Sources/CryptoSwift/NoPadding.swift; sourceTree = ""; }; + E9EFA400AF46093F84CD72A36C3DFF13 /* GDTCORPlatform.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORPlatform.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORPlatform.m; sourceTree = ""; }; + EA490B13588476F88AB81643E638781D /* URITemplate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URITemplate.swift; path = Sources/URITemplate.swift; sourceTree = ""; }; + EA54B28C4D4E52C16DC958F270EB7AA2 /* FIRCoreDiagnosticsConnector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCoreDiagnosticsConnector.h; path = FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h; sourceTree = ""; }; + EA76E4E1C7AE825FF51F1BEF26F1BC5D /* FBLPromise+Any.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Any.h"; path = "Sources/FBLPromises/include/FBLPromise+Any.h"; sourceTree = ""; }; EABFFCBBD27342BE3DE7772BB970F883 /* Pods-MyStudiesTests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MyStudiesTests-Info.plist"; sourceTree = ""; }; - EADD60FED881357516021098D8EF0962 /* FIRInstallationsAPIService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsAPIService.m; path = FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsAPIService.m; sourceTree = ""; }; - EADFDE7F9C12CBF0002DBBA81A85CBA3 /* FIRVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRVersion.h; path = FirebaseCore/Sources/Public/FirebaseCore/FIRVersion.h; sourceTree = ""; }; - EAEAF8A048D5FD3079B6343723732A41 /* PBKDF1.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PBKDF1.swift; path = Sources/CryptoSwift/PKCS/PBKDF1.swift; sourceTree = ""; }; - EB5276B55E74AF4EB1ADDA192309AC05 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; - EB562A2FC602C65927A2A18558947319 /* Toast-Swift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Toast-Swift-Info.plist"; sourceTree = ""; }; - EC1B4799178433D78A075EB95D9D91AB /* pb_decode.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pb_decode.c; sourceTree = ""; }; - ECC4A99F4EA0D649D04F060078261415 /* SWActionSheet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SWActionSheet.h; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/SWActionSheet.h; sourceTree = ""; }; - ED13BC6550F444112F0A9CFFAAFF7B91 /* SDImageGraphics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageGraphics.h; path = SDWebImage/Core/SDImageGraphics.h; sourceTree = ""; }; - EDDF42B19D39219577B569C1A69CCEE0 /* GDTCORFlatFileStorage+Promises.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "GDTCORFlatFileStorage+Promises.m"; path = "GoogleDataTransport/GDTCORLibrary/GDTCORFlatFileStorage+Promises.m"; sourceTree = ""; }; - EE15263CF4C2C2818F862152C0AD12FF /* FBLPromises.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBLPromises.h; path = Sources/FBLPromises/include/FBLPromises.h; sourceTree = ""; }; - EE496E95D1ED63E863567F9940177647 /* NSDictionary+FIRMessaging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+FIRMessaging.h"; path = "FirebaseMessaging/Sources/NSDictionary+FIRMessaging.h"; sourceTree = ""; }; - EE6BF39133A61032FF73A6916EC58D0F /* FirebaseMessaging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseMessaging.h; path = FirebaseMessaging/Sources/FirebaseMessaging.h; sourceTree = ""; }; - EEF0415B5FB58AFE32EFE358CE6B6C30 /* RequestTaskMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestTaskMap.swift; path = Source/RequestTaskMap.swift; sourceTree = ""; }; - EF0F7CD5348758F4B3EB9FA1057F6796 /* SDImageIOCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOCoder.h; path = SDWebImage/Core/SDImageIOCoder.h; sourceTree = ""; }; - EF46A00F83F3A0CFDCF78A6B466FDA6B /* RLMRealmConfiguration.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMRealmConfiguration.mm; path = Realm/RLMRealmConfiguration.mm; sourceTree = ""; }; - EFECAA0BD6E8BC83B9E9BD7E06E81BE4 /* FIRMessagingUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingUtilities.m; path = FirebaseMessaging/Sources/FIRMessagingUtilities.m; sourceTree = ""; }; - F03D10A08DA8315D03CC490CDA425E58 /* FIRApp.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRApp.m; path = FirebaseCore/Sources/FIRApp.m; sourceTree = ""; }; - F0757F725C090A38471D1EFAA15662A2 /* Cryptors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cryptors.swift; path = Sources/CryptoSwift/Cryptors.swift; sourceTree = ""; }; - F09822678CB10BD1A74A26920FFC83A1 /* CCM.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CCM.swift; path = Sources/CryptoSwift/BlockMode/CCM.swift; sourceTree = ""; }; - F0EED7E4A4DF2AF6825AD5A8E644F43E /* FIRInstallationsHTTPError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsHTTPError.m; path = FirebaseInstallations/Source/Library/Errors/FIRInstallationsHTTPError.m; sourceTree = ""; }; - F13E723A6559F6029C1EAC208E644205 /* GULUserDefaults.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULUserDefaults.m; path = GoogleUtilities/UserDefaults/GULUserDefaults.m; sourceTree = ""; }; - F14102388813EC6EC3107DEDC8F1BE4C /* LinkingObjects.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LinkingObjects.swift; path = RealmSwift/LinkingObjects.swift; sourceTree = ""; }; - F191F57D7F4EDC91BF6BD986F5AEA994 /* FIRInstallationsItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsItem.h; path = FirebaseInstallations/Source/Library/FIRInstallationsItem.h; sourceTree = ""; }; - F1C1F992D547B3D1C656477FD164A8CB /* NSError+RLMSync.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSError+RLMSync.m"; path = "Realm/NSError+RLMSync.m"; sourceTree = ""; }; - F1C9D20BC0685850FD85B8F43A978FD3 /* NetworkReachabilityManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkReachabilityManager.swift; path = Source/NetworkReachabilityManager.swift; sourceTree = ""; }; - F1D1E3FB57B02C8734195A17446F2FF4 /* RLMOptionalBase.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMOptionalBase.mm; path = Realm/RLMOptionalBase.mm; sourceTree = ""; }; - F1DBB638F494D88CBE86A646A5978997 /* GULLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULLogger.h; path = GoogleUtilities/Logger/Public/GoogleUtilities/GULLogger.h; sourceTree = ""; }; - F1EFD664168014D5F3A61C7B88B0C7E3 /* collection_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = collection_notifier.cpp; path = Realm/ObjectStore/src/impl/collection_notifier.cpp; sourceTree = ""; }; - F223157149EF109E4C6DD2D757BD138E /* GoogleDataTransport.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleDataTransport.release.xcconfig; sourceTree = ""; }; - F247FB6072E07EF70725C239EAA60351 /* RLMAccessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMAccessor.h; path = include/RLMAccessor.h; sourceTree = ""; }; - F28EC10942D0859D7E8F88348FC72073 /* SDWebImageDownloaderResponseModifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderResponseModifier.m; path = SDWebImage/Core/SDWebImageDownloaderResponseModifier.m; sourceTree = ""; }; - F2D2AACFEAD202B1C62A847D4D03F99A /* FIRLoggerLevel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRLoggerLevel.h; path = FirebaseCore/Sources/Public/FirebaseCore/FIRLoggerLevel.h; sourceTree = ""; }; - F2DC808541F9BCBC45519EFAD1AD5868 /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "SDWebImage/Core/UIButton+WebCache.h"; sourceTree = ""; }; - F3580C2F14133C643FE100409FF6EC1E /* GDTCORTransformer_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORTransformer_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer_Private.h; sourceTree = ""; }; - F38C3E4D7A601EF763EBC6B1E2BAE42E /* FIRMessagingAPNSInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingAPNSInfo.m; path = FirebaseMessaging/Sources/Token/FIRMessagingAPNSInfo.m; sourceTree = ""; }; - F3AAD3CA55A5155C99A46096C20D0021 /* FIRMessagingTokenDeleteOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingTokenDeleteOperation.m; path = FirebaseMessaging/Sources/Token/FIRMessagingTokenDeleteOperation.m; sourceTree = ""; }; - F40BEA5ED46C65202A9CEE3E5D3CAF74 /* ActionSheetPicker-3.0-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ActionSheetPicker-3.0-Info.plist"; sourceTree = ""; }; - F4460AD4590695003C175BEC83A18700 /* SDImageCoderHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCoderHelper.h; path = SDWebImage/Core/SDImageCoderHelper.h; sourceTree = ""; }; - F4B3DED2C5B8E55CEE4D4809A4D0F342 /* ActionSheetPicker-3.0-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ActionSheetPicker-3.0-dummy.m"; sourceTree = ""; }; - F4EC58E5D9A8638DD7B8814580AAF685 /* FIRCoreDiagnosticsInterop.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCoreDiagnosticsInterop.h; path = Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h; sourceTree = ""; }; - F5526109A3EFACE19B484D5620D7D1D5 /* RLMSyncSubscription.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncSubscription.h; path = include/RLMSyncSubscription.h; sourceTree = ""; }; - F5BFCE0451A8A03DDEAF58131950B5EC /* FIRMessaging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessaging.h; path = FirebaseMessaging/Sources/Public/FirebaseMessaging/FIRMessaging.h; sourceTree = ""; }; - F5F6919901B78E15C08AAF7BE2B59C93 /* GULHeartbeatDateStorable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULHeartbeatDateStorable.h; path = GoogleUtilities/Environment/Public/GoogleUtilities/GULHeartbeatDateStorable.h; sourceTree = ""; }; - F6489F2C1EF781D870469199EB3869D6 /* RLMRealmConfiguration_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealmConfiguration_Private.h; path = include/RLMRealmConfiguration_Private.h; sourceTree = ""; }; - F6644CDBF39A33650B04A1D545BE7012 /* RedirectHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RedirectHandler.swift; path = Source/RedirectHandler.swift; sourceTree = ""; }; - F721BF0B8B5CB6392AB9A455233EA7D1 /* RLMSyncUser.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMSyncUser.mm; path = Realm/RLMSyncUser.mm; sourceTree = ""; }; - F72403B4A012D71CF64CFE363C1444DD /* Result+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Result+Alamofire.swift"; path = "Source/Result+Alamofire.swift"; sourceTree = ""; }; - F7333952F0DE992CC89C4FF6EDE9E34C /* SlideMenuControllerSwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SlideMenuControllerSwift.release.xcconfig; sourceTree = ""; }; - F73C5B7E4C35698D7FF385B7D4BA390A /* AlamofireExtended.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlamofireExtended.swift; path = Source/AlamofireExtended.swift; sourceTree = ""; }; - F7683C233198F76119B2913778EDC888 /* Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Alamofire.swift; path = Source/Alamofire.swift; sourceTree = ""; }; - F7AABB46B143694DA5B009C52041CBA1 /* Authenticator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Authenticator.swift; path = Sources/CryptoSwift/Authenticator.swift; sourceTree = ""; }; - F7C580EF3F47E29E253BF2561C6319B8 /* IQKeyboardManagerSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManagerSwift-prefix.pch"; sourceTree = ""; }; - F7DD49CE3C62B9C9BF8E2B663A7CBF13 /* Scrypt.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Scrypt.swift; path = Sources/CryptoSwift/Scrypt.swift; sourceTree = ""; }; - F81274EDB681F11E7CB05F7DCA2BB33C /* CryptoSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = CryptoSwift.framework; path = CryptoSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F81D75DDED82AF551A1BC2FA6DDCEE3C /* Session.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Session.swift; path = Source/Session.swift; sourceTree = ""; }; - F8320D48C931F3AEBB83288DFE2354B5 /* SDImageCacheConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheConfig.h; path = SDWebImage/Core/SDImageCacheConfig.h; sourceTree = ""; }; - F835DF26614D9FC25363DB3CAEADF866 /* BatchedCollection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BatchedCollection.swift; path = Sources/CryptoSwift/BatchedCollection.swift; sourceTree = ""; }; - F8478F01670C32835F8395D701D4775D /* FIRMessagingAuthKeychain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingAuthKeychain.m; path = FirebaseMessaging/Sources/Token/FIRMessagingAuthKeychain.m; sourceTree = ""; }; - F862415FEBDD3C262FDBB2A7ACEA0884 /* FIRCoreDiagnosticsConnector.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCoreDiagnosticsConnector.m; path = FirebaseCore/Sources/FIRCoreDiagnosticsConnector.m; sourceTree = ""; }; - F8999C37548066850F14E1572DE3E743 /* RLMObjectSchema.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMObjectSchema.mm; path = Realm/RLMObjectSchema.mm; sourceTree = ""; }; - F8CBAB72694B30CF3F10C7908BDD1A6A /* FIRLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRLogger.h; path = FirebaseCore/Sources/Private/FIRLogger.h; sourceTree = ""; }; - F93E999A92D9AA579A16EB2FD5B57953 /* FIRMessagingLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingLogger.m; path = FirebaseMessaging/Sources/FIRMessagingLogger.m; sourceTree = ""; }; - F9479B7226D799C19CB6BC650C6A699A /* SDWebImageCacheKeyFilter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCacheKeyFilter.m; path = SDWebImage/Core/SDWebImageCacheKeyFilter.m; sourceTree = ""; }; - F96A7AA28331CFA0591F4AE02D73586F /* SDDisplayLink.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDDisplayLink.m; path = SDWebImage/Private/SDDisplayLink.m; sourceTree = ""; }; + EADDA360B6A9E5F06A4CDD630963309F /* FIRMessagingCheckinService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingCheckinService.h; path = FirebaseMessaging/Sources/Token/FIRMessagingCheckinService.h; sourceTree = ""; }; + EB12CD8A16F1640BF7DE35CB0E9A9491 /* RLMSyncPermission.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncPermission.h; path = include/RLMSyncPermission.h; sourceTree = ""; }; + EBBA7C0F72C12D0E9174320C669E0D06 /* GDTCORDirectorySizeTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORDirectorySizeTracker.h; path = GoogleDataTransport/GDTCORLibrary/Internal/GDTCORDirectorySizeTracker.h; sourceTree = ""; }; + EBBE97B22CEAD2CB6FC677808EE74719 /* FIRInstallationsIIDTokenStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsIIDTokenStore.m; path = FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDTokenStore.m; sourceTree = ""; }; + EBD1B54F860E526FDEF048BBEE5E4505 /* GDTCORAssert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORAssert.h; path = GoogleDataTransport/GDTCORLibrary/Internal/GDTCORAssert.h; sourceTree = ""; }; + EBD427BAD65E05CBFEE7AAD318686E4A /* CCM.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CCM.swift; path = Sources/CryptoSwift/BlockMode/CCM.swift; sourceTree = ""; }; + EC0D95CF0909041AD56E36B0770F241B /* FIRComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRComponent.m; path = FirebaseCore/Sources/FIRComponent.m; sourceTree = ""; }; + EC29CB017696B6FDBFE35398F74E8328 /* ActionSheetDistancePicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetDistancePicker.h; path = CoreActionSheetPicker/CoreActionSheetPicker/Pickers/ActionSheetDistancePicker.h; sourceTree = ""; }; + EC7E8B0D91F46695CBA9D35CE1FCD24D /* URITemplate-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "URITemplate-dummy.m"; sourceTree = ""; }; + EC89F8CE186B9940D2CBFF1F41145481 /* weak_realm_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = weak_realm_notifier.cpp; path = Realm/ObjectStore/src/impl/weak_realm_notifier.cpp; sourceTree = ""; }; + ED42773EC3BCF7A2482F486D028126CC /* FirebaseInstallationsInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseInstallationsInternal.h; path = FirebaseInstallations/Source/Library/Private/FirebaseInstallationsInternal.h; sourceTree = ""; }; + ED96B31B8F8C2BAF6896F2D27FBC5C3B /* FBLPromise+Wrap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Wrap.h"; path = "Sources/FBLPromises/include/FBLPromise+Wrap.h"; sourceTree = ""; }; + EE095E6BA8261824ED1F0EED91B5244C /* FirebaseMessaging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseMessaging.h; path = FirebaseMessaging/Sources/Public/FirebaseMessaging/FirebaseMessaging.h; sourceTree = ""; }; + EE22EC02A207B236C60B52B786AA9813 /* RLMSchema_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSchema_Private.h; path = include/RLMSchema_Private.h; sourceTree = ""; }; + EE5008516CEC8B41C429A3858D113055 /* SDImageCoderHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCoderHelper.h; path = SDWebImage/Core/SDImageCoderHelper.h; sourceTree = ""; }; + EEC8ED997E9EE6E0100B6B23CAB2E9EF /* FIRInstallationsBackoffController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsBackoffController.m; path = FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsBackoffController.m; sourceTree = ""; }; + EF983320F0CD0D802FFB0D358CDD49C2 /* GDTCORRegistrar_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORRegistrar_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORRegistrar_Private.h; sourceTree = ""; }; + EFED1FF6E72598E3090E9F6F4496DB84 /* Generics.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Generics.swift; path = Sources/CryptoSwift/Generics.swift; sourceTree = ""; }; + EFF5F6B7C7BCE54E0FCEF94864CD4E20 /* BlockCipher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlockCipher.swift; path = Sources/CryptoSwift/BlockCipher.swift; sourceTree = ""; }; + F0331EFD461AF386398155C0EF7D010E /* PromisesObjC-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "PromisesObjC-dummy.m"; sourceTree = ""; }; + F0661C4F83EA9E4497F47E235880FA6A /* GDTCORFlatFileStorage+Promises.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "GDTCORFlatFileStorage+Promises.m"; path = "GoogleDataTransport/GDTCORLibrary/GDTCORFlatFileStorage+Promises.m"; sourceTree = ""; }; + F09F1D24C21616F022F82709890350F6 /* ActionSheetPicker-3.0.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "ActionSheetPicker-3.0.release.xcconfig"; sourceTree = ""; }; + F0E9969E0A710B2EA86FE461BC91E41B /* FIRInstallationsStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsStore.h; path = FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStore.h; sourceTree = ""; }; + F0F6E8E48DF5FB4A3D79201C07F72644 /* object_store.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = object_store.cpp; path = Realm/ObjectStore/src/object_store.cpp; sourceTree = ""; }; + F11BA822A1B643B68EA1984341AE510D /* pb_decode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb_decode.h; sourceTree = ""; }; + F16E1A43F7F1E4B2E21C5C8768D933A1 /* SDWebImageCacheKeyFilter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCacheKeyFilter.m; path = SDWebImage/Core/SDWebImageCacheKeyFilter.m; sourceTree = ""; }; + F17EA4C0B097766DF4F4E4C353515C96 /* RLMRealm_Dynamic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealm_Dynamic.h; path = include/RLMRealm_Dynamic.h; sourceTree = ""; }; + F19659F8EFB5563A572BD0094F1053A4 /* SDWebImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-prefix.pch"; sourceTree = ""; }; + F1A3E524613CC50486ED48E109A2CC48 /* RLMListBase.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMListBase.mm; path = Realm/RLMListBase.mm; sourceTree = ""; }; + F3265C4F3670E855D40B858BE499BDD3 /* GULReachabilityChecker+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "GULReachabilityChecker+Internal.h"; path = "GoogleUtilities/Reachability/GULReachabilityChecker+Internal.h"; sourceTree = ""; }; + F373BB4DE52C0FBA6E91C75650D68641 /* collection_change_builder.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = collection_change_builder.cpp; path = Realm/ObjectStore/src/impl/collection_change_builder.cpp; sourceTree = ""; }; + F3A9CE2E0796F5AFC7992FEA16568017 /* FirebaseAnalytics.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseAnalytics.release.xcconfig; sourceTree = ""; }; + F49CF6E31F255EC612752A92D008252E /* nanopb.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = nanopb.release.xcconfig; sourceTree = ""; }; + F53088E8E52B8063C9F30147F3CF6256 /* Notifications.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Notifications.swift; path = Source/Notifications.swift; sourceTree = ""; }; + F55DC7793C9A35A4C62AE35322952BEE /* RequestInterceptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestInterceptor.swift; path = Source/RequestInterceptor.swift; sourceTree = ""; }; + F599FFC13E086A2315101A6ECEF8CDD7 /* RLMObservation.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMObservation.mm; path = Realm/RLMObservation.mm; sourceTree = ""; }; + F5ED064ED60C9AE4B23335CFCEB2F512 /* GDTCOREndpoints.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCOREndpoints.h; path = GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCOREndpoints.h; sourceTree = ""; }; + F6837A3E7B5FC94EC4CDC728C045D1A8 /* Cipher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cipher.swift; path = Sources/CryptoSwift/Cipher.swift; sourceTree = ""; }; + F6CFEA59AEA739790CFBD265E0D8B68D /* Collection+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Collection+Extension.swift"; path = "Sources/CryptoSwift/Collection+Extension.swift"; sourceTree = ""; }; + F741AEFF3E6C1F082229C1D03F778740 /* FIRDiagnosticsData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDiagnosticsData.h; path = FirebaseCore/Sources/FIRDiagnosticsData.h; sourceTree = ""; }; + F76E17FE12A073AEEE3E1D4B0C329494 /* FIRInstallationsItem+RegisterInstallationAPI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FIRInstallationsItem+RegisterInstallationAPI.m"; path = "FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsItem+RegisterInstallationAPI.m"; sourceTree = ""; }; + F81274EDB681F11E7CB05F7DCA2BB33C /* CryptoSwift */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = CryptoSwift; path = CryptoSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F87D3C31506443C1F43904C532941C90 /* GULKeychainStorage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULKeychainStorage.h; path = GoogleUtilities/Environment/Public/GoogleUtilities/GULKeychainStorage.h; sourceTree = ""; }; + F89C0D53C8855BE4A60CF26CD67CE094 /* nanopb.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = nanopb.debug.xcconfig; sourceTree = ""; }; + F8A789EE0AD6DC84DA0FDC3026C1F49F /* pb_decode.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pb_decode.c; sourceTree = ""; }; + F8C936FB15241989F2EF0BEC74137ACA /* FBLPromise+Validate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Validate.m"; path = "Sources/FBLPromises/FBLPromise+Validate.m"; sourceTree = ""; }; + F8C941EB3FA2CF7213B1962768178721 /* SessionDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDelegate.swift; path = Source/SessionDelegate.swift; sourceTree = ""; }; + F8FE1F84EE49BEEA3719D1D44CF09511 /* FBLPromise+Async.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Async.h"; path = "Sources/FBLPromises/include/FBLPromise+Async.h"; sourceTree = ""; }; + F96303E9E6CE1708F412C20D5F2B14C9 /* RequestTaskMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestTaskMap.swift; path = Source/RequestTaskMap.swift; sourceTree = ""; }; F973FEA34736EEB28901DC2EFBC6A748 /* Pods-MyStudiesTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MyStudiesTests.release.xcconfig"; sourceTree = ""; }; - F9BD464934D26FE23FC6D96831569C15 /* collection_change_builder.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = collection_change_builder.cpp; path = Realm/ObjectStore/src/impl/collection_change_builder.cpp; sourceTree = ""; }; - FA511C67CB5B0442362CC959A542F0BA /* GULMutableDictionary.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULMutableDictionary.m; path = GoogleUtilities/Network/GULMutableDictionary.m; sourceTree = ""; }; - FB11C2119CDFFAD882507DE400C57E14 /* FirebaseCoreDiagnostics.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseCoreDiagnostics.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FB16D133B15E74B820EC9F80CDB3F2AB /* GDTCCTNanopbHelpers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCCTNanopbHelpers.m; path = GoogleDataTransport/GDTCCTLibrary/GDTCCTNanopbHelpers.m; sourceTree = ""; }; - FB7465975D38C5C6724AA697079DA5F8 /* SessionDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDelegate.swift; path = Source/SessionDelegate.swift; sourceTree = ""; }; - FB92F49E5A82A09E0298ADFCD4A3C9B4 /* FIRMessagingAnalytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingAnalytics.h; path = FirebaseMessaging/Sources/FIRMessagingAnalytics.h; sourceTree = ""; }; - FBF8216C4BA0F5FAFCA4DF57ED6ED799 /* FIRInstallationsStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsStore.m; path = FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStore.m; sourceTree = ""; }; - FC5B6663F427A9E4FB041ADD91EE9D06 /* FIRComponentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRComponentType.m; path = FirebaseCore/Sources/FIRComponentType.m; sourceTree = ""; }; - FCE7B76546004A8A917269B63ED4B227 /* IQInvocation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQInvocation.swift; path = IQKeyboardManagerSwift/IQToolbar/IQInvocation.swift; sourceTree = ""; }; + F9890802352368079A87804738221C37 /* GDTCOREvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCOREvent.m; path = GoogleDataTransport/GDTCORLibrary/GDTCOREvent.m; sourceTree = ""; }; + F9D9AF5E0EF9FFF8CA211030D4A5AA9A /* Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Alamofire.swift; path = Source/Alamofire.swift; sourceTree = ""; }; + FA5F1C0536B9B401241D07209538E945 /* FirebaseCoreInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseCoreInternal.h; path = FirebaseCore/Sources/Private/FirebaseCoreInternal.h; sourceTree = ""; }; + FA75A6C30A9FCB9AF32B30600E4521EB /* NSBezierPath+SDRoundedCorners.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBezierPath+SDRoundedCorners.h"; path = "SDWebImage/Private/NSBezierPath+SDRoundedCorners.h"; sourceTree = ""; }; + FA7703C45051BFA79C1F4BAF925BA1A8 /* CachedResponseHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CachedResponseHandler.swift; path = Source/CachedResponseHandler.swift; sourceTree = ""; }; + FB10CA3DD76A25CCADFB195C2B82C608 /* GULHeartbeatDateStorage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULHeartbeatDateStorage.h; path = GoogleUtilities/Environment/Public/GoogleUtilities/GULHeartbeatDateStorage.h; sourceTree = ""; }; + FB1FD42E76E8060BE354FA1F8E647706 /* RLMObjectSchema.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectSchema.h; path = include/RLMObjectSchema.h; sourceTree = ""; }; + FB22C85C0139C5494193A2C764AE4974 /* RLMSyncCredentials.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RLMSyncCredentials.m; path = Realm/RLMSyncCredentials.m; sourceTree = ""; }; + FB3E0B2437EE2718D03A09946A639F24 /* RLMUpdateChecker.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMUpdateChecker.mm; path = Realm/RLMUpdateChecker.mm; sourceTree = ""; }; + FBBF78D6B3A1F82058C7E16A2FB8E5D3 /* Migration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Migration.swift; path = RealmSwift/Migration.swift; sourceTree = ""; }; + FC0EFDB5042C20A87E201DF6789DE66A /* FIRConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRConfiguration.h; path = FirebaseCore/Sources/Public/FirebaseCore/FIRConfiguration.h; sourceTree = ""; }; + FC73DE5F8515966AAF409FEB17AB72CF /* async_open_task.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = async_open_task.cpp; path = Realm/ObjectStore/src/sync/async_open_task.cpp; sourceTree = ""; }; + FC7B6B641EE4FC0F942F28C3F4D7F1D2 /* PKCS7Padding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PKCS7Padding.swift; path = Sources/CryptoSwift/PKCS/PKCS7Padding.swift; sourceTree = ""; }; + FCCBA313F9D44519610242CA85129447 /* BlockMode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlockMode.swift; path = Sources/CryptoSwift/BlockMode/BlockMode.swift; sourceTree = ""; }; FD1EC8D7F9CCD7A843145AB82130C8BB /* Pods-MyStudies.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MyStudies.debug.xcconfig"; sourceTree = ""; }; - FD45B7AD3F11C76DF980F3A728053A9F /* FIRMessagingCheckinService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingCheckinService.h; path = FirebaseMessaging/Sources/Token/FIRMessagingCheckinService.h; sourceTree = ""; }; - FD4ACED2DB8A4A140AB9A04983A6CAA3 /* NSError+RLMSync.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSError+RLMSync.h"; path = "include/NSError+RLMSync.h"; sourceTree = ""; }; - FD9FDAF2776A9225484C5B401514204A /* results.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = results.cpp; path = Realm/ObjectStore/src/results.cpp; sourceTree = ""; }; - FDCBAA1DFB140B197E960E4FF9392EA7 /* SwiftVersion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftVersion.swift; path = RealmSwift/SwiftVersion.swift; sourceTree = ""; }; - FEAE647E23B4B371510DE30A50F20F7F /* system_configuration.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = system_configuration.cpp; path = Realm/ObjectStore/src/sync/impl/apple/system_configuration.cpp; sourceTree = ""; }; - FEE1BC69EFE9E99DC39490C4C8274E81 /* SHA1.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SHA1.swift; path = Sources/CryptoSwift/SHA1.swift; sourceTree = ""; }; - FEF085D550281E8F9D45B3750525813F /* AFError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AFError.swift; path = Source/AFError.swift; sourceTree = ""; }; - FF366CEB33CB5CECB19ACB4F6F693422 /* SHA3.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SHA3.swift; path = Sources/CryptoSwift/SHA3.swift; sourceTree = ""; }; - FFDB12CEC054B42EF7B0CDDAC51AEC69 /* RLMSyncUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RLMSyncUtil.mm; path = Realm/RLMSyncUtil.mm; sourceTree = ""; }; - FFFFB607D5F07C81EB6219C82BFE0B43 /* NSButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSButton+WebCache.m"; path = "SDWebImage/Core/NSButton+WebCache.m"; sourceTree = ""; }; + FD525848D54648A0C5B39BE590CFB9C8 /* collection_notifications.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = collection_notifications.cpp; path = Realm/ObjectStore/src/collection_notifications.cpp; sourceTree = ""; }; + FD5A7A4A775F2FA9C153E805F913AA0D /* GDTCCTUploader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCCTUploader.m; path = GoogleDataTransport/GDTCCTLibrary/GDTCCTUploader.m; sourceTree = ""; }; + FD6EC4FE86BA4B04A3B5B1CD0573DB54 /* SDWeakProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWeakProxy.h; path = SDWebImage/Private/SDWeakProxy.h; sourceTree = ""; }; + FDA5BA6A89BFAEEA1781F097F58A9656 /* Realm.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Realm.release.xcconfig; sourceTree = ""; }; + FDBC074B06291393EE71C8963D2C1A59 /* FirebaseMessaging-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FirebaseMessaging-Info.plist"; sourceTree = ""; }; + FDCC4D1C12012DC0E1893B12D60724AB /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/Core/UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; + FDEA2897F27B3332B9757D887FFD9C38 /* FIRInstallationsItem+RegisterInstallationAPI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FIRInstallationsItem+RegisterInstallationAPI.h"; path = "FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsItem+RegisterInstallationAPI.h"; sourceTree = ""; }; + FE4CA524C28F954B2FFA2843A010E3EE /* FIRInstallationsAuthTokenResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsAuthTokenResult.h; path = FirebaseInstallations/Source/Library/Public/FirebaseInstallations/FIRInstallationsAuthTokenResult.h; sourceTree = ""; }; + FEA870B2BD2C2D79F7B2D94ED6215772 /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/Core/UIView+WebCacheOperation.m"; sourceTree = ""; }; + FF08565BA8FF4FB2B2B6087526AD6184 /* FIRInstallationsSingleOperationPromiseCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsSingleOperationPromiseCache.h; path = FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsSingleOperationPromiseCache.h; sourceTree = ""; }; + FF3AB2F574DB3AEC4222D125304A1EB0 /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/Core/SDImageCache.m; sourceTree = ""; }; + FF5EC48B116F6235D035340B55229B2A /* NSError+FIRMessaging.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSError+FIRMessaging.m"; path = "FirebaseMessaging/Sources/NSError+FIRMessaging.m"; sourceTree = ""; }; + FF7103830A0D8D42D9760A4ED44A2F83 /* GDTCCTNanopbHelpers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCCTNanopbHelpers.m; path = GoogleDataTransport/GDTCCTLibrary/GDTCCTNanopbHelpers.m; sourceTree = ""; }; + FF9C9DB3A1C9B1BFAB04DCBEB5314BF6 /* FIRComponentContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponentContainer.h; path = FirebaseCore/Sources/Private/FIRComponentContainer.h; sourceTree = ""; }; + FFBB53491A7735D5F57962E24123923F /* PromisesObjC-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PromisesObjC-umbrella.h"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 0E958456AD527DDAD119135A70AE6E79 /* Frameworks */ = { + 00E4C5F2F32661682D5A79F937DC0353 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C26CC83F0D4DC5A95E3684E15713A93D /* Foundation.framework in Frameworks */, + F49EA2F3BC378AF7500E84C124C657AD /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 1CA74251D54DBA92FED3C778B4EDF1C5 /* Frameworks */ = { + 02CD92F97F8710108D8B71E220EB53D7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4EF17B2F3C3696206B574F6719632FA2 /* Foundation.framework in Frameworks */, + F99989CA9C466470569D5A7F04A0FB82 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 2C2292E431F316076553538B7FBB63C3 /* Frameworks */ = { + 15827FAD75551BCCB5CBF53F637272E3 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 33483C1C427390BED308CBAB3EEEE277 /* CoreGraphics.framework in Frameworks */, - EEF066616EFE6EBC57541C1B92C6770A /* Foundation.framework in Frameworks */, - 2358B57B83BE526AED64799C6892B2CE /* QuartzCore.framework in Frameworks */, - 38EE0727B33503FD20E1363988E46AB2 /* UIKit.framework in Frameworks */, + 748465EBF7C7458C9935BFEA1179E11F /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 2DAC7140A608C44BA2AA7ADE9D1E446D /* Frameworks */ = { + 15DC142A7EE833251AA37FC8E2B8E01F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B37F65A535A43A4273A635A1E883E3DF /* Foundation.framework in Frameworks */, - 074F68B94FD8D42998CAE7979978E75B /* Realm.framework in Frameworks */, + 7B068137A8925891446203B5D3D6A4ED /* CFNetwork.framework in Frameworks */, + 0F4037DBF307AC8058BD0A3D35C7E7E9 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 37AF8D70B8EDFF5978837F9C68125BE6 /* Frameworks */ = { + 1BA04C318AF61CD5082AA414D23E9BB4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A9324976CCBA18CBD07F80CA82C5DF92 /* FirebaseCore.framework in Frameworks */, - F3D5AAC4AA228C421CF38CD4069EBAAB /* FirebaseInstallations.framework in Frameworks */, - A1958B16CCD091C60A8A3A05231A0761 /* Foundation.framework in Frameworks */, - 7A97CBCDC753DD704CC34ABAB32E5DBF /* GoogleUtilities.framework in Frameworks */, - D70D3A2B11DD4A323F1ECEC322EE4078 /* SystemConfiguration.framework in Frameworks */, + 3717882DCBD1310DA525FEC8AFFDD802 /* Foundation.framework in Frameworks */, + 10BEA734D6C46D97D09CFCEE7F7135C5 /* Security.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 3A4D727C36397BC42E9FD8331563BBBA /* Frameworks */ = { + 1C23E2775A268AF03AB4FB35BFC953FA /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 5408BE7DEC61C1A3AA80CED53B7BD1F5 /* Foundation.framework in Frameworks */, - 5CA2AC72A71CEF79A07FAAA283BE8A52 /* ImageIO.framework in Frameworks */, + 5433D9B1A7004CEBF4CA2F1FEEBCAB38 /* CoreTelephony.framework in Frameworks */, + 210DD290122BB0C7A0E83DC5148D724E /* Foundation.framework in Frameworks */, + 93DE5DC6D98B5DD09860532E35AE7C90 /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 521C1CF0D005DF29AB32E38926628382 /* Frameworks */ = { + 21FD294905779BB5267689B32AAF6666 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 34828E0377C5717331D00405EC4490A5 /* Foundation.framework in Frameworks */, - 5F66586F96CD74B0CEB0E936F31543FA /* Security.framework in Frameworks */, + 83C60CA008AD91AE0407500C0CB5EDD9 /* Foundation.framework in Frameworks */, + 56B580DCBF9C7128ED0F35EA385157AE /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 56DF31F78BB86ABEDA1E19C25CF5F82E /* Frameworks */ = { + 27AE6978B7DEAB3C99D6DD07D4532395 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - EB08B35698F3C829EBAECCE30D5F9FB2 /* Foundation.framework in Frameworks */, + 17E5507F92F0DF1DD5C3AB12E53F559F /* Foundation.framework in Frameworks */, + 87E3B15B2AA7D226CB60059610C1241A /* QuartzCore.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5CB46C5BAA16D47CA55D00459B31D084 /* Frameworks */ = { + 397C158BDA2716408B0A965B5AC3AF20 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F5EEA46FA461EBE1BA796BBECDECCCC2 /* Foundation.framework in Frameworks */, - 5E2E7D406AE90AD8C485F9546A12B9E2 /* UIKit.framework in Frameworks */, + 9E9F5012CFD5E47804BE4142C64BC163 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 6102CF7EA55F5A7D669F88BF0D1A701F /* Frameworks */ = { + 48424FE094852FCA8747A5331511824D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 753C8C42CEFBED94E1F1E752955F0254 /* Foundation.framework in Frameworks */, - E30AFF09BE355906C38B27B0CD35F806 /* QuartzCore.framework in Frameworks */, + 8DE577A685436BCE0AB20956A3D3F300 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 65F3226D93E11353CB3213C83E2CD37F /* Frameworks */ = { + 5E4A050C30D28AF2DD8460418F8E53E3 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BD2E6AF833ED00606D4FBB882E06A433 /* CoreTelephony.framework in Frameworks */, - 4343D6D57000C0E7234487422A71DF27 /* FBLPromises.framework in Frameworks */, - 425F0A7DB751E5FA66E9B04F924FD6CA /* Foundation.framework in Frameworks */, - 122DB9DE049753930486777CF3531DCE /* GoogleUtilities.framework in Frameworks */, - 64C1FF5CFE5CEAF41C0AB385310BD4AA /* nanopb.framework in Frameworks */, - F80E6BF205E403BAEF1F059D66848FB3 /* SystemConfiguration.framework in Frameworks */, + 06319451171B5365F1287A8FFCC3D63A /* Foundation.framework in Frameworks */, + F8882C34E671D16CE5A676C3C1BC68C1 /* Security.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 8CEFBC4EDE3A5DEC5BBF45FAF0E904F4 /* Frameworks */ = { + 669171E4774CD3EA3FD9C4DF8520531A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 030A530C18D9BD1B716A3FA0AD7CC36F /* Foundation.framework in Frameworks */, - 22F267075EB742245798F0669800F8CA /* URITemplate.framework in Frameworks */, - E9E09BA9C8A0F5FA7BBC96B2C705C4E1 /* XCTest.framework in Frameworks */, + 450FE477EEFDDBC71D6EACA2EAF3365A /* Foundation.framework in Frameworks */, + 248F118A0101075FF33C0CADDDB10EBB /* Security.framework in Frameworks */, + 53CF1799D7B8D29AD1017B6713F19698 /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 92A37A51219ED31062DE51A3E139BF37 /* Frameworks */ = { + 786D2BEBB917377ADEA762CD9F9E20D6 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 51E6D6EC168CEA630E9150DE56048363 /* CoreTelephony.framework in Frameworks */, - 65303FAC78F15F3CC8F26B67E550775E /* Foundation.framework in Frameworks */, - 4627935AED721C697210046C88CA8918 /* SystemConfiguration.framework in Frameworks */, + 455293CB3237E60314F28FC940E2E19E /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 932BF263B26515FD483633AA162F62AB /* Frameworks */ = { + 7AB5387A02AF3D1E5668DFE832D0FEB1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - DF1B326BA50D2A86E599DBC375E11363 /* FBLPromises.framework in Frameworks */, - E4C431B7EFEE77D030DE76DD5342CFDD /* FirebaseCore.framework in Frameworks */, - DDBA6F9E901A91BC23E33A3091D5A1C6 /* Foundation.framework in Frameworks */, - E5DD7F8E97DC431FE7A82438A946A12A /* GoogleUtilities.framework in Frameworks */, - 4F8A9C20777099FB43A24845886EDA2B /* Security.framework in Frameworks */, + 4D137099178F3E0AEA487ABD4361F1BB /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 9520B2916CFB492AB73DD8EE628ED2AA /* Frameworks */ = { + 90E37CDF61747A281FF200FA733BFE77 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7EF5370D59E3361250644CCB1E208B81 /* Foundation.framework in Frameworks */, - E151113651DC9FB98E501328D0AC5033 /* GoogleDataTransport.framework in Frameworks */, - 6CAF35FBBB97B7A5C1CAB0E7F409562C /* GoogleUtilities.framework in Frameworks */, - 5C56A58845045BE6A05F7A6390DC9D95 /* nanopb.framework in Frameworks */, + 208DBE44AB593CDED5BAD48E4F6419A6 /* CoreTelephony.framework in Frameworks */, + 57ADF70F76685EBBCB417076520B4E84 /* Foundation.framework in Frameworks */, + 41082441C0BD0EBC88912A0AD81CC2CA /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 9590D3FE7A79CD7CBEE3F346E8C19D4D /* Frameworks */ = { + 9A85722B4F5A9252D42BC3E32E323AD1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A9C7B29D4878F1690BBE3F8195CF0313 /* CFNetwork.framework in Frameworks */, - 476D5F33E25386C60D6BD75C4FA97C67 /* Foundation.framework in Frameworks */, + 4BBDAE80B2577F2F7312A6EC1FA23A30 /* Foundation.framework in Frameworks */, + 558986D0D52FC340DE534D4F38CA8D3B /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 9A9EE97954E8C848485F3070D0B4C4CB /* Frameworks */ = { + A3B77577C54970218F8F8340516D00F2 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F6B0A57A52FEDB44EA3835D93ED54165 /* Foundation.framework in Frameworks */, + B1B6A2491AC437909DABE20C71BECDBC /* CoreGraphics.framework in Frameworks */, + 60C6606FF8176EE5A38870CFD9F649C8 /* Foundation.framework in Frameworks */, + B6EC6D40823E66D5B389ACEAC9FD7AAE /* QuartzCore.framework in Frameworks */, + 2E5138271A6C79BDA3C0835F2596219B /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - BA265A13865EF35BBB483D9D2DF94FD6 /* Frameworks */ = { + AF88530F994CA31997C06D9916470690 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 76573CB88EE288E3DBD2215A8D397AA6 /* Foundation.framework in Frameworks */, + 9E81C3F56C26E0DEC392E072F5A6775D /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - BE0E7EC0EC1F6CE6C498053A0AA82C9B /* Frameworks */ = { + CCF4A333808D26E76064C562A1B13DAF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0C9AF2D4C05CA86E42673E4880BC1EE1 /* Foundation.framework in Frameworks */, + 3795AB02403CE995C3680532D4FFA4A6 /* Foundation.framework in Frameworks */, + ABBC05E95A0E02478869C3F01385B566 /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C8C6881BDD86B365CFAF089BE4B77050 /* Frameworks */ = { + CD3F6085AA737DEB37409BD76647EAD1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 850D8CCF038F541CB2B367EC9C0F90FD /* Foundation.framework in Frameworks */, + AF6A598A2E23D651E27D4F4209424D01 /* Foundation.framework in Frameworks */, + 83324B09F2BF212B212D9E2883E6FE00 /* XCTest.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - EF5C6849B67415540D8E4967E14974D9 /* Frameworks */ = { + D8323D9ABF88F8602902A5F3C1B33417 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C7860C4C8C9CAA4A184CA26A94AB672E /* FBLPromises.framework in Frameworks */, - F7833A1501240CBE423074476953FAC9 /* Foundation.framework in Frameworks */, - D53FB1F0EDA7C2473AC2F6B5D2C6DD6E /* Security.framework in Frameworks */, - 176543C8FCC06E8BAD9CFB2BAD51D065 /* SystemConfiguration.framework in Frameworks */, + 8EC115F3F4632FA11422DEE8C8F6FA94 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - FEF0D62F4261792A77A260AC6BF91BC3 /* Frameworks */ = { + FB6A1E8A43CF1D3ADFB49BA355F0DEA1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 037125AD9957D1DC984920699FBAE5E4 /* FirebaseCoreDiagnostics.framework in Frameworks */, - 695448157AFA78983586B8164B1C1DBC /* Foundation.framework in Frameworks */, - 44EE786DB4F692B94E18F45B43A6C5C7 /* GoogleUtilities.framework in Frameworks */, - 4D62BFF1AA120D6EF6675418121226AE /* UIKit.framework in Frameworks */, + 5A3E5B854E8188DDF4E958BBC9198600 /* Foundation.framework in Frameworks */, + 51F891EA712D8F14CF1DD77BF20B62A9 /* ImageIO.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 02E3DCFB9DF61C66DC0FF5E62544A142 /* Support Files */ = { + 00A4D64C66AFA413CBC0BB09BA4D19EF /* Support Files */ = { isa = PBXGroup; children = ( - 86FFF55BE2496BBBC81C722F31BF1077 /* URITemplate.modulemap */, - C5B01BAEFAEADE454A183730175997E6 /* URITemplate-dummy.m */, - EAB3B56FD78BBCC2CDE4D36D230DD5FA /* URITemplate-Info.plist */, - C34E41E4E9B02895DC94A028A94AA4DB /* URITemplate-prefix.pch */, - 3A3AFEA306C07447240F9D4673A276EB /* URITemplate-umbrella.h */, - AE8A14963C233404956363CE226BA105 /* URITemplate.debug.xcconfig */, - 4CB2DBF25A1D17A1A07269F5E6EAE563 /* URITemplate.release.xcconfig */, + 480EC9AF5B7086DDB29AB46E776457ED /* RealmSwift.modulemap */, + 382FB60C7C4EF1852D91C66987515F4D /* RealmSwift-dummy.m */, + 81F5B8E4DC040480EF60B2727FA27617 /* RealmSwift-Info.plist */, + 87731DACC37E460E5C08A2A2D090BE1A /* RealmSwift-prefix.pch */, + 458788B0053BA4922324B24001F1BFCE /* RealmSwift-umbrella.h */, + 1BD50408843A7D771E39BFF6691FA5A9 /* RealmSwift.debug.xcconfig */, + 442BA6B70F4E697581837AF370FAD30A /* RealmSwift.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/URITemplate"; + path = "../Target Support Files/RealmSwift"; + sourceTree = ""; + }; + 0217EC6F6F2E16536DFE38DC65825D7C /* WithoutAdIdSupport */ = { + isa = PBXGroup; + children = ( + 1A339F434D2E7EE28E98AF7C4041F87F /* Frameworks */, + ); + name = WithoutAdIdSupport; sourceTree = ""; }; - 08F0D60A636B2F64102050EBF894A61F /* Support Files */ = { + 02584A58C12A25F7F4981EEB6BE66859 /* Support Files */ = { isa = PBXGroup; children = ( - ADF6E9DB9FCF3DC90EAD64D6670803C3 /* GoogleUtilities.modulemap */, - 4E3897F7232EC713A7B9F337E71E3CD3 /* GoogleUtilities-dummy.m */, - AC8E886CC9110DEAB0D4A3EB8DF9F13F /* GoogleUtilities-Info.plist */, - 991A5EC838D809DC10D814B9E8DEC3BF /* GoogleUtilities-umbrella.h */, - 87D773189F499ACEE8B53BC884B1DC3A /* GoogleUtilities.debug.xcconfig */, - 2E4633F715CC7B0679E989FFB9D17EEB /* GoogleUtilities.release.xcconfig */, + 7568AB73CC8B6075CA253466A1030840 /* PromisesObjC.modulemap */, + F0331EFD461AF386398155C0EF7D010E /* PromisesObjC-dummy.m */, + 202CADAFA25D2D647E8966451802FB7A /* PromisesObjC-Info.plist */, + FFBB53491A7735D5F57962E24123923F /* PromisesObjC-umbrella.h */, + 08F97D6DE4F5E987AFC48A4AE0A515F6 /* PromisesObjC.debug.xcconfig */, + A220E535E4466885D9933D023263EB53 /* PromisesObjC.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/GoogleUtilities"; + path = "../Target Support Files/PromisesObjC"; + sourceTree = ""; + }; + 129A394FEF16D9945E08EDA56F5FC134 /* Support Files */ = { + isa = PBXGroup; + children = ( + 2BC9A12907B21FFD6019EEBD418A1916 /* ActionSheetPicker-3.0.modulemap */, + 756597C91955E64CC985D9E555E4356F /* ActionSheetPicker-3.0-dummy.m */, + 55C8BFB9370B8516909387087FBFE624 /* ActionSheetPicker-3.0-Info.plist */, + 83081663FE44BEB82E6AEE91711F74B4 /* ActionSheetPicker-3.0-prefix.pch */, + 57061E940006E9984AD984E51EA242F0 /* ActionSheetPicker-3.0-umbrella.h */, + CE11F74B23EDE88076AB5451C9140B13 /* ActionSheetPicker-3.0.debug.xcconfig */, + F09F1D24C21616F022F82709890350F6 /* ActionSheetPicker-3.0.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/ActionSheetPicker-3.0"; sourceTree = ""; }; - 0F93D8449E83AC46F967B1D20F3C6463 /* Logger */ = { + 15128E8F88C2AB6E6E46A75C94D90149 /* Logger */ = { isa = PBXGroup; children = ( - F1DBB638F494D88CBE86A646A5978997 /* GULLogger.h */, - 544C4177378510804A127246BCF8EDCF /* GULLogger.m */, - EA80FDBE78E82B959D7B7B8181643434 /* GULLoggerLevel.h */, + B4F046BA3CC8D32499F052FE25306C9E /* GULLogger.h */, + 7A269D3541CAC22B2C1EF187F11CE357 /* GULLogger.m */, + B770A412737D8D809530424D9D956AAD /* GULLoggerLevel.h */, ); name = Logger; sourceTree = ""; }; - 131B02707D120AFC36A6A62523CCFBFB /* Support Files */ = { + 15A72BB20814C2FFEB57F71E84EE7121 /* Firebase */ = { isa = PBXGroup; children = ( - 3B96489B2A8704F7FD5BA2909A35C612 /* SDWebImage.modulemap */, - C27B76FAE090920E1B0DEB9129733631 /* SDWebImage-dummy.m */, - 0DDD930CFA2058C6D7FB9D707278BD77 /* SDWebImage-Info.plist */, - DDE1797E8766BEC37E591A7A4625B895 /* SDWebImage-prefix.pch */, - 6D61EAA7BA118557928346B039256C36 /* SDWebImage-umbrella.h */, - 64826FB20BEA4BD8003565B41D7A9BD1 /* SDWebImage.debug.xcconfig */, - D4EFE58C8AF2B33D44C8483992CBFA5B /* SDWebImage.release.xcconfig */, + 3F05E287E1E9A9C86B8DFEE347946DE7 /* CoreOnly */, + B4CFD9142515DE181B82FF5707AD953E /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/SDWebImage"; + name = Firebase; + path = Firebase; sourceTree = ""; }; - 134D0EF84E25B5B745B97B9AAFC0879D /* nanopb */ = { + 1A339F434D2E7EE28E98AF7C4041F87F /* Frameworks */ = { isa = PBXGroup; children = ( - 5697BCE5F0F65CCD7FFCBCAE48D4A8DA /* pb.h */, - B43991BF814E2ED59BC3F25D772B175E /* pb_common.c */, - 06BFCF2C6211AF4CCCCCF67A9C4536E6 /* pb_common.h */, - EC1B4799178433D78A075EB95D9D91AB /* pb_decode.c */, - 4DFC44C94BC39670C0A4DAB333B3C9DB /* pb_decode.h */, - 19C6D3E6DF2F6FFB52BBEC824847250F /* pb_encode.c */, - 684B1C7C88075B9B348E69A61640F129 /* pb_encode.h */, - 5E49854E537401BF5A94A18C53DB8F42 /* decode */, - F937CDC3E256D366A1C88C7B8326B09E /* encode */, - CA78F0C08594D9ABB23B87C2CF7216EA /* Support Files */, + 8F3F4D0CAD61DECA7DF8680481BD9590 /* GoogleAppMeasurement.xcframework */, ); - name = nanopb; - path = nanopb; + name = Frameworks; sourceTree = ""; }; - 14018DAD4C47F8484F53CE3A517FBAFD /* Support Files */ = { + 1CD9AE90BB9F0506A5EBA2800B66802B /* Pods */ = { isa = PBXGroup; children = ( - 902515A56C2EA6CDDE1BA78D70FE62D2 /* FirebaseCore.modulemap */, - E2746E1C1EDE65A483F8029C2CFC1C01 /* FirebaseCore-dummy.m */, - B57D8594305681F87152A11E2BD8017B /* FirebaseCore-Info.plist */, - E2B5098199A64E5AF67AA2D92BD03BFE /* FirebaseCore-umbrella.h */, - 4358653149756F5FB1FBFF4F16A78A6E /* FirebaseCore.debug.xcconfig */, - A106256A5764B60C95B44AD82EFEED22 /* FirebaseCore.release.xcconfig */, + FF8BBE90EB607C1ACA40036A6B4331F0 /* ActionSheetPicker-3.0 */, + E00BE29DC66EB1638C658B09E5233067 /* Alamofire */, + 76AC5B0232D5907C0CFB7FAC9BCC42AB /* CryptoSwift */, + 15A72BB20814C2FFEB57F71E84EE7121 /* Firebase */, + E9A2D36B8B99B3B427DC34724C139C42 /* FirebaseAnalytics */, + BAB879B44C7A948B7DAADF1A40AA4966 /* FirebaseCore */, + 30666959C34E4395D8D36E5F4B08B29D /* FirebaseCoreDiagnostics */, + C36811C066E36BDF059E8055F7934544 /* FirebaseInstallations */, + 4D70AA93EEDBFE33E3C909F2D9562BFD /* FirebaseMessaging */, + 69256622391C60975B12CA9140AF910C /* GoogleAppMeasurement */, + A851C75B9670B681AFE534BC936A8BE7 /* GoogleDataTransport */, + B5E2B3B6321FA70167DBC5839850AAAE /* GoogleUtilities */, + 9DD82AB53B5DD795397E84AD2CDD5890 /* IQKeyboardManagerSwift */, + 3700F7EC666C16CCE48512F15407B151 /* Mockingjay */, + FF5F107802F72467AD0BAE4947C9FB36 /* nanopb */, + 35EA0ACF1E0F10D4C4FF9BFC7A0EE118 /* PromisesObjC */, + 670A99D083D3B51BBDF3E64A0A8D299B /* ReachabilitySwift */, + C6B7B36BBB6431B0C553386D757F9F59 /* Realm */, + F66AF11C039001D21154D4ACE0690DAD /* RealmSwift */, + 78DA88C60E83E122D1216C2986B5E19E /* SDWebImage */, + 494F5C0719DC7E154940B5E5380294DE /* SlideMenuControllerSwift */, + AAD03B42B541E5ECC4BD16673B7D1538 /* Toast-Swift */, + C40C6A76DEFA319E4230274A2A2F3AB3 /* URITemplate */, ); - name = "Support Files"; - path = "../Target Support Files/FirebaseCore"; + name = Pods; sourceTree = ""; }; - 1D828E227565F4D5E73469FDA90C97CC /* SDWebImage */ = { + 1D03D99A9E757375362C67B79CF5A86E /* AdIdSupport */ = { isa = PBXGroup; children = ( - 2F9225561680FB5834836B4295290BBC /* Core */, - 131B02707D120AFC36A6A62523CCFBFB /* Support Files */, + 546FC2C38E71365FE829D274C5E0163A /* Frameworks */, ); - name = SDWebImage; - path = SDWebImage; + name = AdIdSupport; sourceTree = ""; }; - 226BF3C2B278328E816877FAB6BC4816 /* Mockingjay */ = { + 1D2746DF182073992C9FADA1965E40CD /* Support Files */ = { isa = PBXGroup; children = ( - C11DB2ABE66F0D316B701B9043AC393D /* Core */, - F37046380E09933C2CA72C302B05D03A /* Support Files */, - FCDC2A80D438692ABB377F93B24BDB10 /* XCTest */, + 5A8F6E644CB4E340546DD02D99C1D316 /* Realm.modulemap */, + 8ADA08729FDC8982DBBCE7528189BB54 /* Realm-dummy.m */, + B724474D370CE0618116FC1DA311C756 /* Realm-Info.plist */, + 093E6929BCC0A3171A565B4BE665067C /* Realm-prefix.pch */, + 8B8EFF73E21B2FFAEEDA96C777B6D3E2 /* Realm.debug.xcconfig */, + FDA5BA6A89BFAEEA1781F097F58A9656 /* Realm.release.xcconfig */, ); - name = Mockingjay; - path = Mockingjay; + name = "Support Files"; + path = "../Target Support Files/Realm"; sourceTree = ""; }; - 273CD873FB4063C64DCCDCF8BAD83729 /* FirebaseMessaging */ = { + 1F67BD557AB98E59E1780AB27E0F72E1 /* Core */ = { isa = PBXGroup; children = ( - 5C708F3B35B6ED8BDF28F2D6A3119690 /* FIRAnalyticsInterop.h */, - 59BDAB41DB8A613F0C4A6D23D4D0DE29 /* FIRAnalyticsInteropListener.h */, - 85240B6EDDB1ABE5C7E06F2908E5D570 /* FIRAppInternal.h */, - D29AD7CD2C0FE30DDE37C4CB8E6686D2 /* FIRComponent.h */, - 4AD747B1B145F396CB866F7DEE0ACAFE /* FIRComponentContainer.h */, - 752D9B7CAEC6F057D70938FE33E2B68B /* FIRComponentType.h */, - 3420442C8E639DC4A7E3B39DA0EC211E /* FIRCoreDiagnosticsConnector.h */, - CA242EA30CDA168E307A6D2F48DD4270 /* FIRDependency.h */, - 33BB7DA6ECF2D95DA65F887C501E3D14 /* FirebaseCoreInternal.h */, - 042704367765D9F013F4E111BBB4D52A /* FirebaseInstallationsInternal.h */, - EE6BF39133A61032FF73A6916EC58D0F /* FirebaseMessaging.h */, - 2B12F578F735267B7742EB1678771172 /* FirebaseMessaging.h */, - 7783CE513EA70BA02007C2F7034279D8 /* FIRHeartbeatInfo.h */, - 0FE625ABED4A4A39E0B44EF3BB1B071F /* FIRInteropEventNames.h */, - 0A13357AB64AA63E60E55758E3789FFD /* FIRInteropParameterNames.h */, - A9386F39C17449D1C2CF204DB4A159AC /* FIRLibrary.h */, - F8CBAB72694B30CF3F10C7908BDD1A6A /* FIRLogger.h */, - F5BFCE0451A8A03DDEAF58131950B5EC /* FIRMessaging.h */, - 25CF384AECDAD25EED31BF97E9023453 /* FIRMessaging.m */, - 0CAB2A4CFB5E017CE31DB53C7B460D93 /* FIRMessaging_Private.h */, - FB92F49E5A82A09E0298ADFCD4A3C9B4 /* FIRMessagingAnalytics.h */, - 230C2DF16DF9C4FDA79D1828DA8465FD /* FIRMessagingAnalytics.m */, - E11C376BDDD54FF90A03E133A03A5564 /* FIRMessagingAPNSInfo.h */, - F38C3E4D7A601EF763EBC6B1E2BAE42E /* FIRMessagingAPNSInfo.m */, - 21EDB470C1B431BF3502D1AE1E257E30 /* FIRMessagingAuthKeychain.h */, - F8478F01670C32835F8395D701D4775D /* FIRMessagingAuthKeychain.m */, - 64B1C31A45C7B0ECA9401EC03254CC0B /* FIRMessagingAuthService.h */, - A52128AC7228CCA3280934D0B65C9672 /* FIRMessagingAuthService.m */, - 750A35F5B0BD3AC3D9E33AE92A598D5A /* FIRMessagingBackupExcludedPlist.h */, - 3FE9D4DD0EE5BEAA6BE3E7E4956A5697 /* FIRMessagingBackupExcludedPlist.m */, - 1F40D4228462660CA4BE37F18082E9E5 /* FIRMessagingCheckinPreferences.h */, - CBE96F3DD76CAD0C686276C339434CEA /* FIRMessagingCheckinPreferences.m */, - FD45B7AD3F11C76DF980F3A728053A9F /* FIRMessagingCheckinService.h */, - E508A477D236550D27A108691D6DACB6 /* FIRMessagingCheckinService.m */, - 5C61B4CDC53A86188A9DE1485A8DAEBC /* FIRMessagingCheckinStore.h */, - 1EBA825D4A1141948CDCC87E6B329704 /* FIRMessagingCheckinStore.m */, - 1F32596C6F9A5F92AFD232BC7ADBA323 /* FIRMessagingCode.h */, - 89EB908E14258DC16339D5FBA1E70EA4 /* FIRMessagingConstants.h */, - DD1D28BFBABD37808AB06777A4B728D0 /* FIRMessagingConstants.m */, - 4EF116B0168428A5BC33403A25DA22B5 /* FIRMessagingContextManagerService.h */, - BD2CC6EDE585E1DABF84ADFE93DD267B /* FIRMessagingContextManagerService.m */, - B7170B949773D5A043AE9A197C1B8788 /* FIRMessagingDefines.h */, - AD2A290D30BC155AF1CBC178D4BDF8C6 /* FIRMessagingExtensionHelper.h */, - AD03EAA7D8BF50D4963B73B1E429DEFE /* FIRMessagingExtensionHelper.m */, - BCC6D767E6AE84663104104B59CC4D84 /* FIRMessagingInterop.h */, - A5E571043247FB18FD5E5D658C927971 /* FIRMessagingKeychain.h */, - 8A34BDC83EA597FF87030DE81208FEC1 /* FIRMessagingKeychain.m */, - 1A426FA0C178F5D5B7385132447399A7 /* FIRMessagingLogger.h */, - F93E999A92D9AA579A16EB2FD5B57953 /* FIRMessagingLogger.m */, - 8F754AEB94FF9A7F96CB5EB9ED777103 /* FIRMessagingPendingTopicsList.h */, - 00CF16A360EEF1313C99FDF5AA421CBE /* FIRMessagingPendingTopicsList.m */, - 89447C893828D75B9A945EDDC78BA278 /* FIRMessagingPersistentSyncMessage.h */, - B08293C9E9F18CD8FE18653AE3C758FA /* FIRMessagingPersistentSyncMessage.m */, - 2DB460E7FFBC47ECE1095865956574CF /* FIRMessagingPubSub.h */, - 7225392A28F4E4D91F8C0154D3D7405A /* FIRMessagingPubSub.m */, - 71A11E4BE13756310BF288A29CA7CBFC /* FIRMessagingRemoteNotificationsProxy.h */, - 26686002C9D8C8EFE805D254868E0A1A /* FIRMessagingRemoteNotificationsProxy.m */, - 079BC76CDD3EA7B0E6EC6D0537065173 /* FIRMessagingRmqManager.h */, - 66A9764BDD7FF9FD8DFCC707C89DBDBB /* FIRMessagingRmqManager.m */, - 039B16C1C293A2DD65CC5798825A479B /* FIRMessagingSyncMessageManager.h */, - 1E25CF9E464B86FF2C956FB7C8DD9861 /* FIRMessagingSyncMessageManager.m */, - 090684D3599570B96499EBE901EAB822 /* FIRMessagingTokenDeleteOperation.h */, - F3AAD3CA55A5155C99A46096C20D0021 /* FIRMessagingTokenDeleteOperation.m */, - 4B11B517153CB418E80BD4DB887FF43C /* FIRMessagingTokenFetchOperation.h */, - 575AF376772B398A53BD47788A334E4C /* FIRMessagingTokenFetchOperation.m */, - E74B565793856E2868A88EFFF929A1EB /* FIRMessagingTokenInfo.h */, - 79DC9ED48A74ECA18DA00C9E9CBCE3EF /* FIRMessagingTokenInfo.m */, - BB07687790364ABC3F94C7179536982A /* FIRMessagingTokenManager.h */, - 53BFA135230FC31D40245189AF5E0C59 /* FIRMessagingTokenManager.m */, - 300D715D4DB5901B4FCB9514A11C40AA /* FIRMessagingTokenOperation.h */, - 2CC8055C65A814C00D776EEB246F07D1 /* FIRMessagingTokenOperation.m */, - 41E4B609B9ED90E731C3762FF56010F4 /* FIRMessagingTokenStore.h */, - 346099D94443E80FCAF9A2B788B1F37B /* FIRMessagingTokenStore.m */, - 2DC883C2E75107C200EB603B681CA0AA /* FIRMessagingTopicOperation.h */, - 6EAB78C3EBD08B79BB29F219DA1AD708 /* FIRMessagingTopicOperation.m */, - DD50C7D5BF2703CA1D4D4ADF6BA5F8EB /* FIRMessagingTopicsCommon.h */, - 3E9FF6DAC13EBDD63D463D4238028831 /* FIRMessagingUtilities.h */, - EFECAA0BD6E8BC83B9E9BD7E06E81BE4 /* FIRMessagingUtilities.m */, - 30B223C026C0CB3A27990245026E7451 /* FIROptionsInternal.h */, - EE496E95D1ED63E863567F9940177647 /* NSDictionary+FIRMessaging.h */, - 23B33242AB54F7FF88A556749925B47B /* NSDictionary+FIRMessaging.m */, - 18878089B49C4307981A487808368A62 /* NSError+FIRMessaging.h */, - 9AC02E49F7EBAC898B69CDF48AB33E95 /* NSError+FIRMessaging.m */, - 2C60D068897632085D3F73C686A61158 /* Support Files */, + FA75A6C30A9FCB9AF32B30600E4521EB /* NSBezierPath+SDRoundedCorners.h */, + C09AEF4A253EC803FEFEC7FE6A822F15 /* NSBezierPath+SDRoundedCorners.m */, + D1978F49003D9C0015DD1D0166EFB2B5 /* NSButton+WebCache.h */, + 152CA9F9887265F3C621276390D41295 /* NSButton+WebCache.m */, + 9EBC192CAA7BF36AFC45CC8E9CAA09E1 /* NSData+ImageContentType.h */, + 68C0ED1768A304DFA76334D03F6C4D83 /* NSData+ImageContentType.m */, + 5B9D5EE235CD65A5F5007B23B539F50C /* NSImage+Compatibility.h */, + 3356187259DB1C7293663BDDFDFCE292 /* NSImage+Compatibility.m */, + 22805B2E34D9DF8AA6F023CE27EE5621 /* SDAnimatedImage.h */, + 5CADE015322C7E72BCD9A93A0551B0B4 /* SDAnimatedImage.m */, + 689DE646188A608CD070FE34CEEFB3DD /* SDAnimatedImagePlayer.h */, + 57BD84FC5F011F36F49EAB98F3D2932B /* SDAnimatedImagePlayer.m */, + CDE768EE370DFB9FFDDEF213EF4ED391 /* SDAnimatedImageRep.h */, + DC5330AA32F04680A63A134AE981E995 /* SDAnimatedImageRep.m */, + D39450137F8784D0DB4BC80C50DF27CA /* SDAnimatedImageView.h */, + 9F3FE833D9B4BA58B0E72BF395BB34B8 /* SDAnimatedImageView.m */, + B771BA82C835F9C542044F7B93F2A464 /* SDAnimatedImageView+WebCache.h */, + 0B565E00C15800E354C0D1BD95C13739 /* SDAnimatedImageView+WebCache.m */, + E78D3D6738AD9F6C8DE839EA6F9E8257 /* SDAssociatedObject.h */, + 0C0ED09D78C79C0AB48BC0AD1372A340 /* SDAssociatedObject.m */, + 3EC9452D77ED1A96835CD67A80DF2F64 /* SDAsyncBlockOperation.h */, + 6E539DBB7888BE07E510D1839D688276 /* SDAsyncBlockOperation.m */, + 6C8F3F013C33334D4532CEB1EC0214A8 /* SDDeviceHelper.h */, + 03F9E1C9D345AFD0ACD2C0F00A77B859 /* SDDeviceHelper.m */, + 1B2F13C0805300E59B783FB5E222CBC2 /* SDDiskCache.h */, + 3CFF9B6EC3E61D2BEDFA053704DA00CA /* SDDiskCache.m */, + D765502D6EF2FB061089D72BCA244195 /* SDDisplayLink.h */, + 084A6973FD2037A5B548324E91FE74E0 /* SDDisplayLink.m */, + 22C045FA2E45CFF26482BA33B2CAC9B3 /* SDFileAttributeHelper.h */, + 12AE4111ACF34FAD59B19E2997E3D7FD /* SDFileAttributeHelper.m */, + 99C2B284313B2943DABAF9C37D0C27B2 /* SDGraphicsImageRenderer.h */, + 232E5758D238386213681400D75E7268 /* SDGraphicsImageRenderer.m */, + 84646ED7C395057C75C29BA382B9A62F /* SDImageAPNGCoder.h */, + 3BEE9BC20EAC927F80208F041F3D1BFA /* SDImageAPNGCoder.m */, + E99E7B8DC9F776A9425E9DFED7F2273D /* SDImageAssetManager.h */, + 44A3FB7C2F5B735151330F798B0B6DD1 /* SDImageAssetManager.m */, + 341D3D7FF38A52056B04B400FDA3A053 /* SDImageAWebPCoder.h */, + 16D2535B01337419DCB6B7AA7F357640 /* SDImageAWebPCoder.m */, + CF301A5BEEBB2096296125C2BA9D4103 /* SDImageCache.h */, + FF3AB2F574DB3AEC4222D125304A1EB0 /* SDImageCache.m */, + 40F739E2E783538510A8E71423F779DE /* SDImageCacheConfig.h */, + 7030496A6666BAA4AA30AD332A4FA9D7 /* SDImageCacheConfig.m */, + 521B61126D3583D4E3C48185CA518C2D /* SDImageCacheDefine.h */, + E65BA7C811211DAE0BE2469448A0706D /* SDImageCacheDefine.m */, + 6DE3B58FE3FB30F0F525EE261380B255 /* SDImageCachesManager.h */, + AEC5B4958AD92A73442C6946F45E74A2 /* SDImageCachesManager.m */, + 585EC19B11E0EA1E759120ACC50C30EA /* SDImageCachesManagerOperation.h */, + 55644CD902425893359FD8B06036045B /* SDImageCachesManagerOperation.m */, + AB9D58C883C7F638EEA3C2A49B4A8F49 /* SDImageCoder.h */, + E52317FBFA44FA01BB15E1E1683B7FC3 /* SDImageCoder.m */, + EE5008516CEC8B41C429A3858D113055 /* SDImageCoderHelper.h */, + 275B9FD49BD02C6B329A5F53A9515369 /* SDImageCoderHelper.m */, + E0B1574B2487C73208DF456F13985904 /* SDImageCodersManager.h */, + AB194A4B183438BBF214D274AE84C1CD /* SDImageCodersManager.m */, + 554B24F16943C1AD775CD7B8B7E95C84 /* SDImageFrame.h */, + 72A503470E248385EB0444FE80D5889C /* SDImageFrame.m */, + 52D3E3BF4B8CC880C28BF4A4BB913C50 /* SDImageGIFCoder.h */, + C8D587F795ADDA42E4AC9885CB957E2A /* SDImageGIFCoder.m */, + DE9409EC623C435E876DA13DADCA40D8 /* SDImageGraphics.h */, + 8673FA0542D5C499BED6689327506E41 /* SDImageGraphics.m */, + CE37B880083BF255F4315680913666F6 /* SDImageHEICCoder.h */, + B2F6EF5D8599FE975E8FC0C7A96DC7F5 /* SDImageHEICCoder.m */, + 5A0E033642613D92472CEECA180C86ED /* SDImageIOAnimatedCoder.h */, + 4532917F3A7C0BBA21971C2D56F1FD6F /* SDImageIOAnimatedCoder.m */, + BCAF6B0A1E45F7C95E5CA2DCDDE82795 /* SDImageIOAnimatedCoderInternal.h */, + 4F42CA0FB980DE6081660223095BDA43 /* SDImageIOCoder.h */, + 75FAA4A6DC235A402EAAD747DAF61360 /* SDImageIOCoder.m */, + 289B40B5569980B9DA8326D6E99F392E /* SDImageLoader.h */, + 719B0167BB6B1344BEA76D64A8FBD135 /* SDImageLoader.m */, + D7E59061A5E63AFC5011D57B20637056 /* SDImageLoadersManager.h */, + 62E2A196FA7C8AA84EFEBA4E419F2ACE /* SDImageLoadersManager.m */, + 4C8B5A5BB02807B3F5E2B7A57D170345 /* SDImageTransformer.h */, + 0A769A8769ED4E97B4898A90A9EF4869 /* SDImageTransformer.m */, + 6867281FD3DED3B1B74A7A631FC9AA08 /* SDInternalMacros.h */, + E45C1A9E6A45E344F40EB2AFB6EC4BE7 /* SDInternalMacros.m */, + 5014226C888D6621F88E6AB048FED245 /* SDMemoryCache.h */, + 76F434687E06090E9A0FD34A8D4F5404 /* SDMemoryCache.m */, + 593CB5ABE9D6AB2760979B81EFC78510 /* SDmetamacros.h */, + FD6EC4FE86BA4B04A3B5B1CD0573DB54 /* SDWeakProxy.h */, + DA0AD2CDEE830266358B1DBFBAC8D0F7 /* SDWeakProxy.m */, + 03546A03FBFFEFB5AEA3C6917F5E1648 /* SDWebImage.h */, + C279945E25D218FFB7CC4A91481E7590 /* SDWebImageCacheKeyFilter.h */, + F16E1A43F7F1E4B2E21C5C8768D933A1 /* SDWebImageCacheKeyFilter.m */, + B7F97C2181CC787B9FFDCED5D841E2DE /* SDWebImageCacheSerializer.h */, + D6B7D958DC835D1AFDBE8FFABB896EC1 /* SDWebImageCacheSerializer.m */, + 6CD7D7CB2F223CDAF8EC4B7F88CB9EBD /* SDWebImageCompat.h */, + AEF8DE56C227D7BCB241BC0C7E7AFF9B /* SDWebImageCompat.m */, + 74043E5CD70DD7C95FEF16DF6B47EBED /* SDWebImageDefine.h */, + CE9553704372BF90F3BE448C1C9E2DA6 /* SDWebImageDefine.m */, + E4EECA729804FE1A1D527714244ABF47 /* SDWebImageDownloader.h */, + 81735A75E6CF3056E326396EC1FC5ED0 /* SDWebImageDownloader.m */, + 588DA198B9FE9D130E7095049CE9DCFE /* SDWebImageDownloaderConfig.h */, + 4A6675DD47C74F5E1D12FB7A074C98D3 /* SDWebImageDownloaderConfig.m */, + 57ACF0797DFDA079729F8AD264A1761F /* SDWebImageDownloaderDecryptor.h */, + 6498E899ACC03B6A0A635255D09FC3EE /* SDWebImageDownloaderDecryptor.m */, + AE446C7E78D05F2B464DCADAE0114EC6 /* SDWebImageDownloaderOperation.h */, + A5B2012268ABAA70954EFBFDB1BB5A52 /* SDWebImageDownloaderOperation.m */, + A5A6CD9B84C410822D0E090B7DBFB3E2 /* SDWebImageDownloaderRequestModifier.h */, + 226800BF273B26990AA0FF5EF47E5E7E /* SDWebImageDownloaderRequestModifier.m */, + 3DE5E0BE7EB7E86E441E7F282B5C3B69 /* SDWebImageDownloaderResponseModifier.h */, + 6B31EB2C667E0759CAA8D7B5F3EE0F94 /* SDWebImageDownloaderResponseModifier.m */, + C351F4948DBDC7BCFA6D8DC546E61A7C /* SDWebImageError.h */, + C43D411B9DEA0E0E2EB27503351C98F3 /* SDWebImageError.m */, + 0716E30A0C360B72A550341ADE46F46E /* SDWebImageIndicator.h */, + 8C9DD17F7C6B6BFEE7352EE052C6EE7A /* SDWebImageIndicator.m */, + 1E6793ABEE4BCA72BFF1F256D49A61CC /* SDWebImageManager.h */, + 2103B96B229AC47E2173FD6D91A2FF8E /* SDWebImageManager.m */, + 2D528F0D8937E74B679CDBEB2E38580D /* SDWebImageOperation.h */, + C889F533ED3626FEF20A7CF793684A3E /* SDWebImageOperation.m */, + 85FE598E63B7634CB66D13C64741E67F /* SDWebImageOptionsProcessor.h */, + A9448AB1CF2D1DDD1ADD7DDB32FE8C0C /* SDWebImageOptionsProcessor.m */, + A968D6ADC5E00A3D9B1542D83FF9CE5D /* SDWebImagePrefetcher.h */, + B02937B0837E2477E5DDA9949D0523B0 /* SDWebImagePrefetcher.m */, + E3FD1DF521E0D20B96890E50642F08A4 /* SDWebImageTransition.h */, + 8B96F13690D2203E934030C0A77D2E09 /* SDWebImageTransition.m */, + 7C407C7210A89A7EA8C05D261CAF6C05 /* SDWebImageTransitionInternal.h */, + 1F4EAACD0E8EA6864328386047EAC1D0 /* UIButton+WebCache.h */, + 07E5446944D1981493AAD0EB936C93E4 /* UIButton+WebCache.m */, + 28863E45B912A9BC94254CE63EB18D85 /* UIColor+SDHexString.h */, + A4572C030E69C027DB7F698CFDC7E7BC /* UIColor+SDHexString.m */, + 844383CEA99AA38235AD8948C9C22D6C /* UIImage+ExtendedCacheData.h */, + 0DEC125BF3990BEA5CEC35EF26A96390 /* UIImage+ExtendedCacheData.m */, + 95BD75675CC5BA6799129F1026664498 /* UIImage+ForceDecode.h */, + E16645BBC6EB041B291C580CC97E79ED /* UIImage+ForceDecode.m */, + CAC6F836B72427D8993AA92EF501FBB7 /* UIImage+GIF.h */, + 64696D763EBA8C3B8985BDE10E30030C /* UIImage+GIF.m */, + 2B136F9C45BAE3737E765F915F354D86 /* UIImage+MemoryCacheCost.h */, + BAB318868EBA2F88A56A244FDF436352 /* UIImage+MemoryCacheCost.m */, + A3411950D357EFDC7A1CCDB6429E6AFF /* UIImage+Metadata.h */, + 20FAD7748BD61979750F439CC076A93A /* UIImage+Metadata.m */, + 21CD99DC88689CA38D69CB3C08DF3DE1 /* UIImage+MultiFormat.h */, + B3BC31858C019AA80EDBF19684DA6A4E /* UIImage+MultiFormat.m */, + C25692C04D77AAB7221165CFC06D57DD /* UIImage+Transform.h */, + 1AC05C3E033285B28AA91CD51CD960F2 /* UIImage+Transform.m */, + FDCC4D1C12012DC0E1893B12D60724AB /* UIImageView+HighlightedWebCache.h */, + A96AD85142773FA7DEF5D2F88C4DBDEC /* UIImageView+HighlightedWebCache.m */, + 07428F5C2C886973860D0B1E10A12457 /* UIImageView+WebCache.h */, + 1C80393FBAA2987B924AA1F484CD95D8 /* UIImageView+WebCache.m */, + 919441429B23C0D81323DFB6938C0A25 /* UIView+WebCache.h */, + 5402C1E7CCFF363C64A90E42B7723FDD /* UIView+WebCache.m */, + 24D52884ECAFD090E5D42AB429DBBFEF /* UIView+WebCacheOperation.h */, + FEA870B2BD2C2D79F7B2D94ED6215772 /* UIView+WebCacheOperation.m */, ); - name = FirebaseMessaging; - path = FirebaseMessaging; + name = Core; sourceTree = ""; }; - 2C60D068897632085D3F73C686A61158 /* Support Files */ = { + 202C384511EE022EA6419FF56AA8120D /* Support Files */ = { isa = PBXGroup; children = ( - 0936C0D1F782BB48EAC913B953C479B7 /* FirebaseMessaging.modulemap */, - 7EF8CE9BA5ABA56D54A2F16B7A2FCC06 /* FirebaseMessaging-dummy.m */, - 5A609A22563F4C47AB689C7F2639A538 /* FirebaseMessaging-Info.plist */, - D5DDC2001E3FB091F054A22E136FC4BE /* FirebaseMessaging-umbrella.h */, - 987CB935C61B01E507BD3F4E1394A0D5 /* FirebaseMessaging.debug.xcconfig */, - 2B93416F1EC7FF429DDC77D53CEAA687 /* FirebaseMessaging.release.xcconfig */, + 5488779E119BBCC926CF051E1FD1A3D6 /* FirebaseAnalytics-xcframeworks.sh */, + D492C64A621E8EE00F0E7CCA09B07BD5 /* FirebaseAnalytics.debug.xcconfig */, + F3A9CE2E0796F5AFC7992FEA16568017 /* FirebaseAnalytics.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/FirebaseMessaging"; + path = "../Target Support Files/FirebaseAnalytics"; sourceTree = ""; }; - 2DF80C8988B8F8BBCB2AD2C13EBB5B36 /* Products */ = { + 2A6FEA8514C9F0DA613565AEC611E622 /* XCTest */ = { isa = PBXGroup; children = ( - D6E470A0C684D4FBC08BDF7A28A2A38B /* ActionSheetPicker_3_0.framework */, - 5D797E9A5C5782CE845840781FA1CC81 /* Alamofire.framework */, - F81274EDB681F11E7CB05F7DCA2BB33C /* CryptoSwift.framework */, - 3347A1AB6546F0A3977529B8F199DC41 /* FBLPromises.framework */, - E2B63D462DB7F827C4B11FD51E4F8E2D /* FirebaseCore.framework */, - 8CC9178C366942FD6FF6A115604EAD58 /* FirebaseCoreDiagnostics.framework */, - 13C8C8B254851998F9289F71229B28A2 /* FirebaseInstallations.framework */, - 5B654B4B042BA7DC93766943A643E42B /* FirebaseMessaging.framework */, - 856B5CD56F194FAD26EA91620B66D614 /* GoogleDataTransport.framework */, - B43874C6CBB50E7134FBEC24BABFE14F /* GoogleUtilities.framework */, - A8E950A16D00F649C54FFB30F81D7842 /* IQKeyboardManagerSwift.framework */, - 3D24851DF2A7139150ADCA3F485D00DC /* Mockingjay.framework */, - 06FC5C9CF96D60C50FCD47D339C91951 /* nanopb.framework */, - 6E611D764C8C487C549D638A5B6A2D15 /* Pods_MyStudies.framework */, - 21CA59B37340EC61A8C33CF7650E10C7 /* Pods_MyStudiesTests.framework */, - 21B03CA622E690725A6626C088E1D09F /* Reachability.framework */, - 921BE4A82C4A7A5C72A0C6F8B8FEF200 /* Realm.framework */, - 437919EE08EC6BFCCBAC3BD346309742 /* RealmSwift.framework */, - B0B214D775196BA7CA8E17E53048A493 /* SDWebImage.framework */, - AA3D52B90DA35D0F7E1B931F0514B7B2 /* SlideMenuControllerSwift.framework */, - D6043471C96F93DC41F7DD1E0D7D8B35 /* Toast_Swift.framework */, - 6A92D13ACA76A198281BA4FC0F5CBAD0 /* URITemplate.framework */, + D0366AD7267CA6B0B8AE7BF6854BC334 /* XCTest.swift */, ); - name = Products; + name = XCTest; sourceTree = ""; }; - 2F4218C98D3993018E8E64A95F98FCB2 /* Toast-Swift */ = { + 2C81FA08262B9AEBE35BC73BE695DCD8 /* Support Files */ = { isa = PBXGroup; children = ( - 97C914084CB577A244C3ECAF9F612198 /* Toast.swift */, - F062BEAD199F8413CF1380BF80739FAC /* Support Files */, + B9988E8D31B70E61ACF6C6137E5471C2 /* GoogleUtilities.modulemap */, + 598A390AC37AD9F7070EAEFA20FE735C /* GoogleUtilities-dummy.m */, + 00360F12C385BC79E08324609EA070AA /* GoogleUtilities-Info.plist */, + C26472FC5991B2348E55D270AB4FD33D /* GoogleUtilities-umbrella.h */, + 793E492FDC6F5C0C2D55DBF5A137C7F7 /* GoogleUtilities.debug.xcconfig */, + 688307369B03E356928C679F0B4DC901 /* GoogleUtilities.release.xcconfig */, ); - name = "Toast-Swift"; - path = "Toast-Swift"; + name = "Support Files"; + path = "../Target Support Files/GoogleUtilities"; sourceTree = ""; }; - 2F9225561680FB5834836B4295290BBC /* Core */ = { + 2FE445AD883B9ABD3E0241A05A5B79FD /* Frameworks */ = { isa = PBXGroup; children = ( - 9614F848A50E867CD86634E87419BF1E /* NSBezierPath+SDRoundedCorners.h */, - 1AC79AEF663CE061B73BBC9C51CBD65F /* NSBezierPath+SDRoundedCorners.m */, - 8481B0727000CBFADA6B53DF5D7590E4 /* NSButton+WebCache.h */, - FFFFB607D5F07C81EB6219C82BFE0B43 /* NSButton+WebCache.m */, - DA4633699EB63381AC3E13445A2BB204 /* NSData+ImageContentType.h */, - 03E01B4F8255ECB27B91A7290C2C0581 /* NSData+ImageContentType.m */, - 05827744B1F4135B099BA652B9220212 /* NSImage+Compatibility.h */, - B2F9CBECAC5227C8AFD9F50489EB9FA0 /* NSImage+Compatibility.m */, - 76F3E7235301AEE7AA9B87E64DD1FB32 /* SDAnimatedImage.h */, - 9DF19DA9F7A7ED51656899AB5D859FBC /* SDAnimatedImage.m */, - 23B0AC2796C0D9DC98FF91206D3981DA /* SDAnimatedImagePlayer.h */, - 77A3D392E38E05B93A51C3C29F75430E /* SDAnimatedImagePlayer.m */, - 480AAB33A312CA82AE61F505F0AEF9B1 /* SDAnimatedImageRep.h */, - 1E2C40842B6E4C39E180D9207F1E17FB /* SDAnimatedImageRep.m */, - D97BA2185CB65E882C56229F8E664B09 /* SDAnimatedImageView.h */, - 0D4EA0A339B4C02E0528360927CE1AA7 /* SDAnimatedImageView.m */, - 3C71360D51309A6708D0136DA45D4A9A /* SDAnimatedImageView+WebCache.h */, - 4CA7613D1D20994E6A4F32EB8BB65BCA /* SDAnimatedImageView+WebCache.m */, - 86BE6B3F44465CD164284308AEEBA936 /* SDAssociatedObject.h */, - ADB4CFD15093B3AD75723D8771CB7FFE /* SDAssociatedObject.m */, - 5B68D177712773CE78129178A34ECA61 /* SDAsyncBlockOperation.h */, - C5FFEDFF1E3CCAEC18F6F42115674B81 /* SDAsyncBlockOperation.m */, - 3678D7EE39A50863492E94161B2802DA /* SDDeviceHelper.h */, - 7A3EA138EB4E4D0801CB209916A3AD5C /* SDDeviceHelper.m */, - 680890F3701AEE80516DAC78514F0B29 /* SDDiskCache.h */, - 61984E71B3C8DE01427EF4E43411EFE8 /* SDDiskCache.m */, - C892B08EBE0C88B8F83C715610FE8093 /* SDDisplayLink.h */, - F96A7AA28331CFA0591F4AE02D73586F /* SDDisplayLink.m */, - 94D149E6E63A5F33A2B58BCB8C87B83B /* SDFileAttributeHelper.h */, - A6EB6C08B9CF5E2401D26CC5C855B17E /* SDFileAttributeHelper.m */, - A7301257D3F72AC8BA18FAED3CEF641D /* SDGraphicsImageRenderer.h */, - 4A81D9BB1CDD86F8D47F1BCAE80233CB /* SDGraphicsImageRenderer.m */, - E6B6866183DD1153A5C8570538D70487 /* SDImageAPNGCoder.h */, - 4DACF37A31E17F90F1C66F2746050CBC /* SDImageAPNGCoder.m */, - 4CA3726D07BC30180D2666191E4C541F /* SDImageAssetManager.h */, - 766A4EDA4DCFD89068A9EE9E65A5373B /* SDImageAssetManager.m */, - 5646ED6F5BCD711B379A9F694D0A4B5A /* SDImageAWebPCoder.h */, - 56C8C0126D2AE3C78DD8297405088C5C /* SDImageAWebPCoder.m */, - 0C4C97B3D1D21A8E09EDE223D2A7ABCC /* SDImageCache.h */, - 7388B5A687333B951611AA629442DBDA /* SDImageCache.m */, - F8320D48C931F3AEBB83288DFE2354B5 /* SDImageCacheConfig.h */, - 7536B41CECCD77067EA9E061097DD791 /* SDImageCacheConfig.m */, - DBA263F2A89E6E28909F8EFD35CAC717 /* SDImageCacheDefine.h */, - C8F83C27DF79F9E6F42D7D81AAFDE38F /* SDImageCacheDefine.m */, - 289B3F758C08CB9E187E1BAA9FE98C45 /* SDImageCachesManager.h */, - 314252F48F4713320A94CD62EFC62116 /* SDImageCachesManager.m */, - E8B462E640B9975288E437271C0C6824 /* SDImageCachesManagerOperation.h */, - D9A808C2408C024D7F61E91427260FBD /* SDImageCachesManagerOperation.m */, - 50AFE4F61A458B99F602B8C0B16FD50F /* SDImageCoder.h */, - 67C1C2DD15E3F3ED592A6E43CBCF4BD5 /* SDImageCoder.m */, - F4460AD4590695003C175BEC83A18700 /* SDImageCoderHelper.h */, - D931A50A8313166A033DE88D54656573 /* SDImageCoderHelper.m */, - 9FBAE06143DB0136DDF58B9AA1D7313F /* SDImageCodersManager.h */, - AFBCA17E1FDBAA063E69EF9BC644066F /* SDImageCodersManager.m */, - E23B01E1DC88EA5F9AE33163E889BDBF /* SDImageFrame.h */, - BD67DCAA71CC35D1A4923924D76A0B7F /* SDImageFrame.m */, - 431D6AD2AD76F92D5553A4199AB4D083 /* SDImageGIFCoder.h */, - 8FA40879D66F09AE16AAC8B0BA85117D /* SDImageGIFCoder.m */, - ED13BC6550F444112F0A9CFFAAFF7B91 /* SDImageGraphics.h */, - 9BDAE9ECD2204684F06DB1E756BCCB1A /* SDImageGraphics.m */, - 773D5FAFA8378E3C7770F04F77B21883 /* SDImageHEICCoder.h */, - 9C2D53E51615226484159ACBC1E40A7F /* SDImageHEICCoder.m */, - 13A0D66F3E67C3A685C5BAAEAAF1736E /* SDImageIOAnimatedCoder.h */, - 4A0610993BF3A21BEDC0331AC74BCF08 /* SDImageIOAnimatedCoder.m */, - 16DE024C8CB16FA20C78D11CEE0D8750 /* SDImageIOAnimatedCoderInternal.h */, - EF0F7CD5348758F4B3EB9FA1057F6796 /* SDImageIOCoder.h */, - 0F1F787E1DF3FC6B64AC7A57CC9A182B /* SDImageIOCoder.m */, - BC47C3781E84B22F01FD7F0435E586B2 /* SDImageLoader.h */, - A8ABF5253D991FB679BF0B185CB0652B /* SDImageLoader.m */, - C7DDFDEABDDD4D9131C3EA1AA73276AA /* SDImageLoadersManager.h */, - 89A45638B734B51D38A0767EB8F60C70 /* SDImageLoadersManager.m */, - E845E378BFA5EDB33413995A63775D1E /* SDImageTransformer.h */, - 1DB26637B4C7A983E245460E1691AD12 /* SDImageTransformer.m */, - C2EA805BD42842ADC7097DF27FAB316F /* SDInternalMacros.h */, - CBC1F6C1E105A67A37563B83B37F855E /* SDInternalMacros.m */, - 206793060D969FA7496E5BC0F5CC0014 /* SDMemoryCache.h */, - 96C8813BD09278E35AF98C3BDDE23974 /* SDMemoryCache.m */, - 13A31AF4024C5C2FB927ED925C18222E /* SDmetamacros.h */, - 8751C239CC9CC196F977655F387F073C /* SDWeakProxy.h */, - 2EB83B09EF9F06403EE7B61ECF00D452 /* SDWeakProxy.m */, - A19A8ACB5EB013F9E0ED63C0BF6E5A47 /* SDWebImage.h */, - 28D350610060943E1A96A0EB1032685B /* SDWebImageCacheKeyFilter.h */, - F9479B7226D799C19CB6BC650C6A699A /* SDWebImageCacheKeyFilter.m */, - 6E46FBC12764A557BBF103DF0786B589 /* SDWebImageCacheSerializer.h */, - 1DBED427ED5F67FFC2FD84C7FE003EDB /* SDWebImageCacheSerializer.m */, - 2C630A712DBF2F3BD10E520AC73860CC /* SDWebImageCompat.h */, - 909D5174512FBEDF2F4438425DD6C3BF /* SDWebImageCompat.m */, - 6590F755CC81D11D01FC0AF9EA8D49AE /* SDWebImageDefine.h */, - B2E66B8856C66C55EC07AE0B0C619A93 /* SDWebImageDefine.m */, - B7BDDC4ACE32101054FA8B7FE53B8844 /* SDWebImageDownloader.h */, - B0B4B6463A2DB13327B5E0B745FFE213 /* SDWebImageDownloader.m */, - 97C210490C902F002D72B2CCEABA2775 /* SDWebImageDownloaderConfig.h */, - E7F9256D1CA12C6E149A86DA80E9F0F4 /* SDWebImageDownloaderConfig.m */, - B04E0C77E5DD2FA7CCF40974C841BBCD /* SDWebImageDownloaderDecryptor.h */, - 249FE35E9BC2F950342279D45727DFA8 /* SDWebImageDownloaderDecryptor.m */, - 177CAD5878399B14102554569E7C3B72 /* SDWebImageDownloaderOperation.h */, - 8E426A0418D1F71A0ACAE7FE5185949C /* SDWebImageDownloaderOperation.m */, - CC853F3B3AC728F92B8B62D999FD3A8C /* SDWebImageDownloaderRequestModifier.h */, - 5A336109209870C637555876732E12CA /* SDWebImageDownloaderRequestModifier.m */, - 166606002169D53DB590DCDC2402D8D4 /* SDWebImageDownloaderResponseModifier.h */, - F28EC10942D0859D7E8F88348FC72073 /* SDWebImageDownloaderResponseModifier.m */, - 45D8C0D80BD6AED0DF166BCD8BC0302F /* SDWebImageError.h */, - CC7C9A39C665AEC6CCD0D9A5443E1140 /* SDWebImageError.m */, - E165E9F585FFB415E83EE2C519002B48 /* SDWebImageIndicator.h */, - 05306FAF06C74D1F9998EFD834DF4409 /* SDWebImageIndicator.m */, - 424CC92A1DFE45CCE02FDA04EC73916F /* SDWebImageManager.h */, - C15943DC74ED80F7B29BCFDC74C2BD99 /* SDWebImageManager.m */, - 3DA4FD1697C659CE1EE345AD47DF790A /* SDWebImageOperation.h */, - 2880AA96B7C50CB14B78E254DA15B460 /* SDWebImageOperation.m */, - 4EB9F3A7FEC60780B14118789EAA1D4E /* SDWebImageOptionsProcessor.h */, - 33BBB4CE14C3DFD13215A8C7D7EB11D4 /* SDWebImageOptionsProcessor.m */, - 28F1C11AA3D4A6C9C4276D076B225AE8 /* SDWebImagePrefetcher.h */, - 4BE6DA74B44F1046517C807B43528A27 /* SDWebImagePrefetcher.m */, - 4A771BAFCBE02423B9261A03E8392C92 /* SDWebImageTransition.h */, - C4DCA0FCD3B91F7E34D6AF3F5D59750C /* SDWebImageTransition.m */, - 8E2758BCC92D424062539F9E983F9F56 /* SDWebImageTransitionInternal.h */, - F2DC808541F9BCBC45519EFAD1AD5868 /* UIButton+WebCache.h */, - 89B8D2823761EE3DB00B11BDD56D0074 /* UIButton+WebCache.m */, - 84FC29A540131AA60C7DCC83CC678DD2 /* UIColor+SDHexString.h */, - 00FCD86B688052CF5033C426C4CB015B /* UIColor+SDHexString.m */, - 0C1162B65AB5726FF65A08A5F6756D47 /* UIImage+ExtendedCacheData.h */, - 2BFA7B313874095AEA0F1CBBBCE6C7EF /* UIImage+ExtendedCacheData.m */, - 8E7F463FE2F325B3C6F61A56AFABBBE4 /* UIImage+ForceDecode.h */, - 0432627A142444D9A9B8665CF3ADB39B /* UIImage+ForceDecode.m */, - 13FCF797284FECE3A13B140BA7A6C5F5 /* UIImage+GIF.h */, - 0ECB7740A74C8DF087CC5CCAA9845ABB /* UIImage+GIF.m */, - 3E74C7F8E5CCF7349E76351E910A69CC /* UIImage+MemoryCacheCost.h */, - 401DED0A7A6F531F70739B837278EC78 /* UIImage+MemoryCacheCost.m */, - DB7D95E15D6BFA80111E9DB521CF9934 /* UIImage+Metadata.h */, - 95A10ED205450B356F0C4F723F4BD734 /* UIImage+Metadata.m */, - 846A54F6F1F1C1229CDE012D56ECA7D2 /* UIImage+MultiFormat.h */, - 467B20320803E6118AFD4D450CCA3CBB /* UIImage+MultiFormat.m */, - 9D5218F8B74DFC860B934E835C739EE1 /* UIImage+Transform.h */, - 4F1872D9097E8397C20B5A8D6DA18E50 /* UIImage+Transform.m */, - 08E7515E1263611536A1E91C40BED4F4 /* UIImageView+HighlightedWebCache.h */, - D72238DAA72639A7992C8F254A311930 /* UIImageView+HighlightedWebCache.m */, - 3F2A8344AC870E4E3DC8C5485DCE9324 /* UIImageView+WebCache.h */, - 407B19389CE8A310DD46D01A3D6C6823 /* UIImageView+WebCache.m */, - 89870C6B30A40925A5F6F66088475F68 /* UIView+WebCache.h */, - 13343565055CAF3120AD802619E91FCC /* UIView+WebCache.m */, - 6075031448B4C9CE0101FBB38F246DD7 /* UIView+WebCacheOperation.h */, - 237A0819F1D8DA8DB03588A5BF8CE083 /* UIView+WebCacheOperation.m */, + 840FAA976D5859431EF2615A56F5BBA8 /* iOS */, ); - name = Core; + name = Frameworks; + sourceTree = ""; + }; + 30666959C34E4395D8D36E5F4B08B29D /* FirebaseCoreDiagnostics */ = { + isa = PBXGroup; + children = ( + 43BDEB2895894AC4536960C7B57CD0C4 /* FIRCoreDiagnostics.h */, + 656C5F77188D1282E57C7F86B19899A9 /* FIRCoreDiagnostics.m */, + 1A92973F8132BBD460A9D3152327C5EB /* FIRCoreDiagnosticsData.h */, + AF1C0CDA75E84F42CF89784B4185A3F3 /* FIRCoreDiagnosticsInterop.h */, + 4BFD24E56E59506609D86F9ABBC6858F /* firebasecore.nanopb.c */, + 97B6A2A7EA6CB7F58C1A47411E33D1BB /* firebasecore.nanopb.h */, + FEFB50BA43EEDBA142A1B0D1D20C10BF /* Support Files */, + ); + name = FirebaseCoreDiagnostics; + path = FirebaseCoreDiagnostics; sourceTree = ""; }; 321107D2062DAAF3FF3C1E2864D48EE8 /* Targets Support Files */ = { @@ -2961,84 +3003,95 @@ name = "Targets Support Files"; sourceTree = ""; }; - 34801399DB82FAA7D73519A56F2A86BC /* FirebaseCore */ = { + 32518CB84AC2A2AF4E935F067C773B71 /* Frameworks */ = { isa = PBXGroup; children = ( - AE6D0A0E31FB692C3F70C8121F2B7916 /* FIRAnalyticsConfiguration.h */, - 50C4031B83BB4A01B75DB3D7B766E5B7 /* FIRAnalyticsConfiguration.m */, - 8A7516205E1AB74247C872744951D82F /* FIRApp.h */, - F03D10A08DA8315D03CC490CDA425E58 /* FIRApp.m */, - EAB7611EE3E28B26836A61E16106C1F3 /* FIRAppAssociationRegistration.h */, - 8557C3098119DEB8E40364362615D661 /* FIRAppAssociationRegistration.m */, - 3D864C8C01CC51B7F19D672BC99E2D5F /* FIRAppInternal.h */, - BA4EDEEE041A69815E9E58C00528EA4E /* FIRBundleUtil.h */, - 8DFEE6A7766C550A778CA539B2DF4AEA /* FIRBundleUtil.m */, - 1039C413C929A2D6D726AC6859120CDB /* FIRComponent.h */, - 0CD3BC32129764C7CA355D1BF01A99ED /* FIRComponent.m */, - 24DFFDE95AB183781DC4EA1DFF0D732E /* FIRComponentContainer.h */, - 133E546169AAE20A35B5BCC1520D9AE8 /* FIRComponentContainer.m */, - 857BCF93020CA518DE9EA34BD596A194 /* FIRComponentContainerInternal.h */, - 6E3EC9425FDB95292D63B027016260EE /* FIRComponentType.h */, - FC5B6663F427A9E4FB041ADD91EE9D06 /* FIRComponentType.m */, - 82B264AAB291711292025352DE361821 /* FIRConfiguration.h */, - 7137386EE9BF38B2B6483FA9C006247E /* FIRConfiguration.m */, - DC596FA8FEE460FAA58F43ACCB9AF76D /* FIRConfigurationInternal.h */, - DE03DEF576E7122FCD234BDC0D66B806 /* FIRCoreDiagnosticsConnector.h */, - F862415FEBDD3C262FDBB2A7ACEA0884 /* FIRCoreDiagnosticsConnector.m */, - 800E574A332A80D110655753B116A778 /* FIRCoreDiagnosticsData.h */, - F4EC58E5D9A8638DD7B8814580AAF685 /* FIRCoreDiagnosticsInterop.h */, - 8C8B4FE54AEA7F9E1C0D140112FF8BD5 /* FIRDependency.h */, - 6AAA9CC30F33C99575CEC0CFCACEDAF0 /* FIRDependency.m */, - 8CE39D808F6A30D49B0E13F49595B3D1 /* FIRDiagnosticsData.h */, - B5A5163FCB4FDD453B34F6E0DEC4F644 /* FIRDiagnosticsData.m */, - 86CE09E9CAE2F0425C7EC37256FA5A9D /* FirebaseCore.h */, - 4C78A2C49ECD2A029B535EADAF3DBE36 /* FirebaseCoreInternal.h */, - 20B308123DA60ABFD57905575B6018BE /* FIRFirebaseUserAgent.h */, - C3F59E45EF8F2EEDC090D425C40D0176 /* FIRFirebaseUserAgent.m */, - 2804786570BE3EE0349D1A823763B8DB /* FIRHeartbeatInfo.h */, - CDD52A7DF25E26DB48D7675A512D9F23 /* FIRHeartbeatInfo.m */, - 2F3EB1AA384BA51FBAB480339FC6F717 /* FIRLibrary.h */, - E0949D2B637DAB0E1512728627D8EB43 /* FIRLogger.h */, - 2286A916678C9D2E35D70ADD42A8508F /* FIRLogger.m */, - F2D2AACFEAD202B1C62A847D4D03F99A /* FIRLoggerLevel.h */, - 16DCA68A77792F71E4E233C3AAFA54E8 /* FIROptions.h */, - BB056D1BBDE11A544E29B87D799147D0 /* FIROptions.m */, - 28F533A4844BA7F1E3FC68433FDDF818 /* FIROptionsInternal.h */, - EADFDE7F9C12CBF0002DBBA81A85CBA3 /* FIRVersion.h */, - 82C895CD744D0DFD1DBBAE87075328E1 /* FIRVersion.m */, - 14018DAD4C47F8484F53CE3A517FBAFD /* Support Files */, + D0CF227755335D66B9049F01A3EDD78A /* FirebaseAnalytics.xcframework */, ); - name = FirebaseCore; - path = FirebaseCore; + name = Frameworks; sourceTree = ""; }; - 3665960B2EF2762592E2740831C6503B /* Support Files */ = { + 35EA0ACF1E0F10D4C4FF9BFC7A0EE118 /* PromisesObjC */ = { isa = PBXGroup; children = ( - A2263D7CC98667C11733A34D2C5DC4C6 /* ActionSheetPicker-3.0.modulemap */, - F4B3DED2C5B8E55CEE4D4809A4D0F342 /* ActionSheetPicker-3.0-dummy.m */, - F40BEA5ED46C65202A9CEE3E5D3CAF74 /* ActionSheetPicker-3.0-Info.plist */, - A28E305DEBD2717146F252B86FB3887E /* ActionSheetPicker-3.0-prefix.pch */, - 41CFA1918BE4241B1A1AC31D78516FBF /* ActionSheetPicker-3.0-umbrella.h */, - BC8D8ED1556DBA55F9EAD872236E8D7D /* ActionSheetPicker-3.0.debug.xcconfig */, - 09270FD276479DC159CD2F94B634C486 /* ActionSheetPicker-3.0.release.xcconfig */, + 1F3F4BE17084ED51B2F66919D5AA3314 /* FBLPromise.h */, + 863408B2E7182025F57F38D290871626 /* FBLPromise.m */, + 49FCAC0C133618FAE480D2B7371BDFB2 /* FBLPromise+All.h */, + 651889BB4A9EACEEEF3B5E89854DF17C /* FBLPromise+All.m */, + 6C51CF7B3A80351134D238F3608ADD8D /* FBLPromise+Always.h */, + 76B5DB2ADB6FFC91F27CB3037F369EAC /* FBLPromise+Always.m */, + EA76E4E1C7AE825FF51F1BEF26F1BC5D /* FBLPromise+Any.h */, + A50E7F631CDE15C236E4196C87BE523E /* FBLPromise+Any.m */, + F8FE1F84EE49BEEA3719D1D44CF09511 /* FBLPromise+Async.h */, + 53798DB9DC96F928D599839DA469095B /* FBLPromise+Async.m */, + 68E388DAEC380C6B69A42306861C03A8 /* FBLPromise+Await.h */, + 1455DB1506413AD7F20DB8A3C93B6AF8 /* FBLPromise+Await.m */, + DBAE4D4625DBCFBEC2DB4DC64A8C326B /* FBLPromise+Catch.h */, + D3D909E3385713D218F8803B4B7AD478 /* FBLPromise+Catch.m */, + 92C6D0B54C4429D514530F47D7C856B3 /* FBLPromise+Delay.h */, + D8A18183D15030981EFC0FA7B54235E3 /* FBLPromise+Delay.m */, + 50EAE3FD2BD1CB163C45B1B82C934B30 /* FBLPromise+Do.h */, + 49B3813670594A60E4ACE3E5CE4BA3F4 /* FBLPromise+Do.m */, + 36F163FEF5F10CDBABF75F0E402F4184 /* FBLPromise+Race.h */, + 1FFF05B3A924CA8BBEDDB3F284059A1C /* FBLPromise+Race.m */, + 2285C7BF5AA76D4D7094E6431B2FCC58 /* FBLPromise+Recover.h */, + 8124EE4EEB34148FB0A5D598BCEA43D6 /* FBLPromise+Recover.m */, + 28FE13834F2A78F2B96F8D97F12B7CDA /* FBLPromise+Reduce.h */, + 7277CBA3C84228F260FB07A8EB44ED67 /* FBLPromise+Reduce.m */, + 0CEF5D5C68FF22FC04888630F0CF74A7 /* FBLPromise+Retry.h */, + D99E332B61B44EE99DB5E3A91B0052B6 /* FBLPromise+Retry.m */, + B82C9BBA02B896199E357FD3CF478B94 /* FBLPromise+Testing.h */, + 81FE6F8FEE6CBEA03755FA07E116C399 /* FBLPromise+Testing.m */, + 7DE11A9D7AB89D3949A1741497809A5F /* FBLPromise+Then.h */, + 46B8F01201118ABFAF62692E92EC08E0 /* FBLPromise+Then.m */, + 850E31E97C95396F711505AA41F39D3E /* FBLPromise+Timeout.h */, + 2B6D52104C8C8971AD52BC7B175B1F5F /* FBLPromise+Timeout.m */, + 9DD22208761570BF96A5E1CD1729794E /* FBLPromise+Validate.h */, + F8C936FB15241989F2EF0BEC74137ACA /* FBLPromise+Validate.m */, + ED96B31B8F8C2BAF6896F2D27FBC5C3B /* FBLPromise+Wrap.h */, + 67FFD7D4314E904B675B4E1A9354281E /* FBLPromise+Wrap.m */, + 53A1AC2F6DBADD8B82AD675C56F3FE68 /* FBLPromiseError.h */, + E586C409771F16D0B6118D81101A0E8B /* FBLPromiseError.m */, + 41A20FC27E05100D81B5873C6766049B /* FBLPromisePrivate.h */, + 03EECABE8B2F2144165610F1A3B26DEE /* FBLPromises.h */, + 02584A58C12A25F7F4981EEB6BE66859 /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/ActionSheetPicker-3.0"; + name = PromisesObjC; + path = PromisesObjC; sourceTree = ""; }; - 3743DB1D12AA32391077F677A1B3ECE1 /* Support Files */ = { + 3700F7EC666C16CCE48512F15407B151 /* Mockingjay */ = { isa = PBXGroup; children = ( - 6A3A0034D029E88EFC9A2A929BBE04B2 /* FirebaseInstallations.modulemap */, - E18BE96E6BDE6F7BDC1D2E7BE8055B12 /* FirebaseInstallations-dummy.m */, - 13C907A07E4C375D07724A5939201DA1 /* FirebaseInstallations-Info.plist */, - C02635857EB5938F6B9153EA3F32DAA3 /* FirebaseInstallations-umbrella.h */, - 008C9E1E3B9656D135DC7B0E43EE71C2 /* FirebaseInstallations.debug.xcconfig */, - 9A4F43B9B838C9ED009A0AA82CF3E6EE /* FirebaseInstallations.release.xcconfig */, + 4EEE967D8710A7E5724550DCCA5C0BED /* Core */, + BC3A093A3552BA1FD895B4497C024BEC /* Support Files */, + 2A6FEA8514C9F0DA613565AEC611E622 /* XCTest */, ); - name = "Support Files"; - path = "../Target Support Files/FirebaseInstallations"; + name = Mockingjay; + path = Mockingjay; + sourceTree = ""; + }; + 3AF2334DE4E931A4D10F505600D49F04 /* Support Files */ = { + isa = PBXGroup; + children = ( + 1AE1274662E7A3145CB7B1B0A3504C55 /* Alamofire.modulemap */, + D8EA477F672052BB6D97EC482EC0DC84 /* Alamofire-dummy.m */, + D9185C3F7C8BCD19F5051C215471BBF9 /* Alamofire-Info.plist */, + BE689F92EEBA35EB7EFA97BC1ED3019A /* Alamofire-prefix.pch */, + C1B146413DC8F16AF335703ECC6F54BD /* Alamofire-umbrella.h */, + 14B3A02C631B5290BC8599CDD26DDA09 /* Alamofire.debug.xcconfig */, + 1E2D7D7BC83A0DB5B41A87BA2238B3F4 /* Alamofire.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/Alamofire"; + sourceTree = ""; + }; + 3F05E287E1E9A9C86B8DFEE347946DE7 /* CoreOnly */ = { + isa = PBXGroup; + children = ( + 352E5C3B9C4EE13565098E76A3F812BE /* Firebase.h */, + ); + name = CoreOnly; sourceTree = ""; }; 4045C2674D6826D665C7D1E71BBC37F2 /* Pods-MyStudiesTests */ = { @@ -3058,14 +3111,45 @@ path = "Target Support Files/Pods-MyStudiesTests"; sourceTree = ""; }; - 44DD0E8148C2D8D66AEA8DAF8974645B /* Support Files */ = { + 432E0DAF1E3907A18C3989D808679235 /* UserDefaults */ = { + isa = PBXGroup; + children = ( + 9CB9BB423AEB03FB77FD41865F954DEC /* GULUserDefaults.h */, + 79CD50386D6776EA19B2E6957632178B /* GULUserDefaults.m */, + ); + name = UserDefaults; + sourceTree = ""; + }; + 494F5C0719DC7E154940B5E5380294DE /* SlideMenuControllerSwift */ = { + isa = PBXGroup; + children = ( + 4FC4DA18ADD12B19BDF2018DCF5876DB /* SlideMenuController.swift */, + 4B894057FA1F65A493131AB5B0BBECFA /* Support Files */, + ); + name = SlideMenuControllerSwift; + path = SlideMenuControllerSwift; + sourceTree = ""; + }; + 4B894057FA1F65A493131AB5B0BBECFA /* Support Files */ = { isa = PBXGroup; children = ( - 5AA917770CC9A23BDC767A899ADB5FF3 /* Firebase.debug.xcconfig */, - D1A0F280A48CC7207C6774F525F5E454 /* Firebase.release.xcconfig */, + 11BF7B050361D037136A5EE4E8935E72 /* SlideMenuControllerSwift.modulemap */, + 47A0852693BEB55945FE14612DB17444 /* SlideMenuControllerSwift-dummy.m */, + 65F1D45714BE10127712F7805E738421 /* SlideMenuControllerSwift-Info.plist */, + 214363DB4E5E4ECD5ADF5761CB7F8FB1 /* SlideMenuControllerSwift-prefix.pch */, + 9D26E710F500DE7A77179FBD03CD9D77 /* SlideMenuControllerSwift-umbrella.h */, + ACE8206D5DD26D93C1F4307E689E4F2F /* SlideMenuControllerSwift.debug.xcconfig */, + D544D8849EE98A44DCD33D61BC5A29C8 /* SlideMenuControllerSwift.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/Firebase"; + path = "../Target Support Files/SlideMenuControllerSwift"; + sourceTree = ""; + }; + 4BDBF8083763843899514D7EC149F8F3 /* encode */ = { + isa = PBXGroup; + children = ( + ); + name = encode; sourceTree = ""; }; 4C6C972A9E547474E863618983C22162 /* Pods-MyStudies */ = { @@ -3085,1516 +3169,1647 @@ path = "Target Support Files/Pods-MyStudies"; sourceTree = ""; }; - 5097ACEC2E1EE552112AAB915B0327F8 /* Support Files */ = { + 4D70AA93EEDBFE33E3C909F2D9562BFD /* FirebaseMessaging */ = { isa = PBXGroup; children = ( - E386B478878B90AA25501A8E3DB2B7B6 /* CryptoSwift.modulemap */, - AED399ECD30AC6CD7939977E47D59C39 /* CryptoSwift-dummy.m */, - 4147ADC1C327B0092BFEB8CAC124A35D /* CryptoSwift-Info.plist */, - D40C1654DC72D6531177450E25F4823E /* CryptoSwift-prefix.pch */, - 82668E620DA82196DB6D63532C0190DA /* CryptoSwift-umbrella.h */, - CF87B9AA4CF57A1C594525DAEB25F963 /* CryptoSwift.debug.xcconfig */, - C3FB52841B0D7A1F78781BF79B570A6E /* CryptoSwift.release.xcconfig */, + 05F7ADE3ED81DA5115BA1688CF6E0832 /* FIRAnalyticsInterop.h */, + E2C5920E1D549C69F3C3E06BE1EA02FB /* FIRAnalyticsInteropListener.h */, + DBF9FEF24E5FF7E80958F9625ED03E09 /* FIRAppInternal.h */, + E341AB0D145F406F4CCD0266358D789C /* FIRComponent.h */, + FF9C9DB3A1C9B1BFAB04DCBEB5314BF6 /* FIRComponentContainer.h */, + 67087440EC98298BCBDA731514E05D16 /* FIRComponentType.h */, + EA54B28C4D4E52C16DC958F270EB7AA2 /* FIRCoreDiagnosticsConnector.h */, + AA1D8BC52D6CD4E6CFDC496B1E99AB26 /* FIRDependency.h */, + 238BADB8D2DF0E77C357F71B9765C968 /* FirebaseCoreInternal.h */, + ED42773EC3BCF7A2482F486D028126CC /* FirebaseInstallationsInternal.h */, + 3CEA5FB238F571B1F2A2ECE99154DB74 /* FirebaseMessaging.h */, + EE095E6BA8261824ED1F0EED91B5244C /* FirebaseMessaging.h */, + B8990846A8D29A5EBB6B8242841A362A /* FIRHeartbeatInfo.h */, + 1884FC6CA6542AAD8723028E471BCEF3 /* FIRInteropEventNames.h */, + 3916E6195CD4C68739B781772014C7E2 /* FIRInteropParameterNames.h */, + 2B8815694B91A8617C4797DE51CD3540 /* FIRLibrary.h */, + E9AE0074EF4226A0D021C823A296A9AB /* FIRLogger.h */, + 87629E31C47EEC3BD53180898BD2FC58 /* FIRMessaging.h */, + 8186047FFCBBCFB3F5329B15E1325BFF /* FIRMessaging.m */, + 61AA70F5CAA013CA9CB376BC0007F3D0 /* FIRMessaging_Private.h */, + 03953057E81A4640AB065537BFE27DB6 /* FIRMessagingAnalytics.h */, + 652D12158DE8D8B3CA0B200917A0619B /* FIRMessagingAnalytics.m */, + 1F50D564F28D21D151DDB136E192DDCD /* FIRMessagingAPNSInfo.h */, + 796764380BCCDD2B7C8B0AA3E307B0E3 /* FIRMessagingAPNSInfo.m */, + 8959290D65E52B6963D787F477D0D833 /* FIRMessagingAuthKeychain.h */, + 272291D466318A926383BA802F3FAA26 /* FIRMessagingAuthKeychain.m */, + 2B44FFC9B7D2F052D2EBFBA30D60EC31 /* FIRMessagingAuthService.h */, + C03112501E2BA6502535F88382C5DC1A /* FIRMessagingAuthService.m */, + 7DF1AF5E3CE3DE0779B0610F7BF31A85 /* FIRMessagingBackupExcludedPlist.h */, + 232FB2CE82A48CC029AFD0424C25D8C4 /* FIRMessagingBackupExcludedPlist.m */, + AC8CCE125405EC4F83D00EF1265C3E50 /* FIRMessagingCheckinPreferences.h */, + 55D3CFF5CC2AA8B1FC9A912E1C2EBB9F /* FIRMessagingCheckinPreferences.m */, + EADDA360B6A9E5F06A4CDD630963309F /* FIRMessagingCheckinService.h */, + 13245380613203823650C6D0DEA01867 /* FIRMessagingCheckinService.m */, + 841AE8A2609E4C62AF5D9F3B00214BAB /* FIRMessagingCheckinStore.h */, + A676E3CB72E97B8DF24E02804DD36ACA /* FIRMessagingCheckinStore.m */, + A1E81D9668A99EB28F6B452A37B91FD5 /* FIRMessagingCode.h */, + 63726E3EB65FAC84139E80F6F8C8BA11 /* FIRMessagingConstants.h */, + D13F9D7F1F1735B63F0A63ED08BCC615 /* FIRMessagingConstants.m */, + 9F0C7EC2129FADFA1F03573C4EADE97F /* FIRMessagingContextManagerService.h */, + 87560003B0C0EB44074950AFE351DFB4 /* FIRMessagingContextManagerService.m */, + 4C25ACBE0B3675BFAFFAB56CCF6B89CC /* FIRMessagingDefines.h */, + 3C8177666E8FD739690B4689F89755B3 /* FIRMessagingExtensionHelper.h */, + 1239C333B57CA601FFCCDE649028999A /* FIRMessagingExtensionHelper.m */, + 1C3245EC9BB084F5342B21D389C88E5F /* FIRMessagingInterop.h */, + 32C6AE4A06A83AFB21F4D6A5445F5089 /* FIRMessagingKeychain.h */, + 44521325C57A8EC6E076292D6C090CF0 /* FIRMessagingKeychain.m */, + E911E1512DC1789EF12C0939FAA54077 /* FIRMessagingLogger.h */, + B66DA96036A788D918F1123C8EADBB18 /* FIRMessagingLogger.m */, + BEA243B61ECA424A61B75B0A11B5CEAC /* FIRMessagingPendingTopicsList.h */, + ADF9919489D1F7C1769E3E295E87533E /* FIRMessagingPendingTopicsList.m */, + E3CB1D0A96B45733D2DF9DD1FD249EC8 /* FIRMessagingPersistentSyncMessage.h */, + 7BC0A720AAEF2D2E2A4E1C61BC6E01F6 /* FIRMessagingPersistentSyncMessage.m */, + A970973CC0EB4B10D9C8BC06021A62DC /* FIRMessagingPubSub.h */, + C829701F6F289FF8547E6C5F0CA34690 /* FIRMessagingPubSub.m */, + D1264FF1CA23F00AA866F75C63C8A243 /* FIRMessagingRemoteNotificationsProxy.h */, + 6B887F34F20ACE0F7B8B14175A65EDA9 /* FIRMessagingRemoteNotificationsProxy.m */, + 078782FFD727F30FE3A92A32B64A9C35 /* FIRMessagingRmqManager.h */, + 78A42D640A81DECF0F463A71FA26E6EB /* FIRMessagingRmqManager.m */, + DAC769F049E891C0AE5F6BC853550FE3 /* FIRMessagingSyncMessageManager.h */, + 328A5C96CF30412EB3C1B7EADE29BA33 /* FIRMessagingSyncMessageManager.m */, + 3575B3D52BABD185142F09359A0431AF /* FIRMessagingTokenDeleteOperation.h */, + 846A0AACA1227CFD7093B653A9CB28BB /* FIRMessagingTokenDeleteOperation.m */, + 18C80A43EB44F0E62A207FA78C04C3C3 /* FIRMessagingTokenFetchOperation.h */, + 3DE6A3C9B720D73EA03AA3BE4D3B9F02 /* FIRMessagingTokenFetchOperation.m */, + CD28F8B929445CB1D1D34E472D7292B8 /* FIRMessagingTokenInfo.h */, + 7996877D7C985123D64F885666119A76 /* FIRMessagingTokenInfo.m */, + 203B166F25E8E0184A8F9013523E33F9 /* FIRMessagingTokenManager.h */, + 95123A2DA35EAEB7351257F9949317F9 /* FIRMessagingTokenManager.m */, + E35DFA92475BBC4A08C692D9EE7295DA /* FIRMessagingTokenOperation.h */, + D91BE1E22894A3B5977054DB74BC9DBE /* FIRMessagingTokenOperation.m */, + 9CE3710E033FFF34407C6530C1A0B0F9 /* FIRMessagingTokenStore.h */, + 8642BF4C54A8593E54F33CCBDC4AB1D2 /* FIRMessagingTokenStore.m */, + 61B470CFE2F9EDF2A6ED97B7680762C6 /* FIRMessagingTopicOperation.h */, + 23A07E5EBF88626AF40A2A0DFE06399C /* FIRMessagingTopicOperation.m */, + C6A53FDACACA43B7CDF53D66D6334763 /* FIRMessagingTopicsCommon.h */, + 75BD193246E08BA4866D30885759C162 /* FIRMessagingUtilities.h */, + BD02E870F83599D0FB6A24F1E6B0119F /* FIRMessagingUtilities.m */, + CBFF1C771F5481B750F48730721180DA /* FIROptionsInternal.h */, + 66116F7F66CD6891D2B68144F8DE2337 /* me.nanopb.c */, + 5ECC23479B265674A6D2DA2C220214A9 /* me.nanopb.h */, + 0ACCA20C360D7CEB7B79938097F776FF /* NSDictionary+FIRMessaging.h */, + BDC05F29BAB20E8E600B77B7261DF241 /* NSDictionary+FIRMessaging.m */, + 36E86EA86E30E46E397612FA984D6EDB /* NSError+FIRMessaging.h */, + FF5EC48B116F6235D035340B55229B2A /* NSError+FIRMessaging.m */, + D8549065B359EA0FCE311C339EED96F6 /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/CryptoSwift"; + name = FirebaseMessaging; + path = FirebaseMessaging; sourceTree = ""; }; - 54375779C351404BD85956D4AE86A1F6 /* Realm */ = { + 4EEE967D8710A7E5724550DCCA5C0BED /* Core */ = { isa = PBXGroup; children = ( - DCEA8E0870E3EE66FD0DAFF6E1936593 /* async_open_task.cpp */, - CBE5C53DDF67C42C5682CBBBEB5B5BD0 /* binding_callback_thread_observer.cpp */, - F9BD464934D26FE23FC6D96831569C15 /* collection_change_builder.cpp */, - D3A8464565A7ECC6BF1BF06174F21891 /* collection_notifications.cpp */, - F1EFD664168014D5F3A61C7B88B0C7E3 /* collection_notifier.cpp */, - D72A32FF1E0AF7C9E1CA525F6558B163 /* external_commit_helper.cpp */, - DACAA87063E2D84D45DAFE1C3749B9BA /* index_set.cpp */, - 06F05F478C5C28C47471C05ED820757B /* keychain_helper.cpp */, - 431724020214A6F7A52D05A937BA68D4 /* list.cpp */, - D67D9A0CD96B92698D3250CA761B01BE /* list_notifier.cpp */, - 4727D23BEFA427118D70B96364985397 /* network_reachability_observer.cpp */, - F1C1F992D547B3D1C656477FD164A8CB /* NSError+RLMSync.m */, - 71597C20842E69E42CB41DDDA2580861 /* object.cpp */, - D75C8757814D0A31396016FFBE20DDC8 /* object_changeset.cpp */, - B5238574F58033CB7E245705FFA55623 /* object_notifier.cpp */, - B0532F43B14A813ACBCF29A2984DA9B6 /* object_schema.cpp */, - 83561A1BE550C60222567B8DBD7B9C9E /* object_store.cpp */, - 70739CE1C376A131C345089D41F7F08B /* partial_sync.cpp */, - 7914A904A8FB3E217B9E236A9BC0A928 /* placeholder.cpp */, - 0DD279B7473F2FE464717897860B7323 /* realm_coordinator.cpp */, - FD9FDAF2776A9225484C5B401514204A /* results.cpp */, - 9994D7EE2116F6014B4E9400C7C0BB95 /* results_notifier.cpp */, - F247FB6072E07EF70725C239EAA60351 /* RLMAccessor.h */, - B0C902E9152FD66B14D7F9D4817DC883 /* RLMAccessor.mm */, - 977B590CCBC383328EA42E97EC53B6C9 /* RLMAnalytics.mm */, - 56C371181087B6899177B4A563C53B84 /* RLMArray.mm */, - 29F79AD601A7A8B9B79F7169D2017A7F /* RLMArray_Private.h */, - 1BD2F315F65D74D0E9C9B15E315E96FD /* RLMClassInfo.mm */, - 805E92DED1B8DCA59C486F6854ED878F /* RLMCollection.mm */, - C0FCB85B5691EBB5E27760C8F1A8C524 /* RLMCollection_Private.h */, - 47043D749809A5D228A9CD83F859E4C4 /* RLMConstants.m */, - 6E03A51E166FA635F8C93FB0C9F09554 /* RLMJSONModels.m */, - 948ECC9052D503C98FAC88A033F93ED8 /* RLMListBase.h */, - A0A29B5CC59B0DB58210B087BC0A378C /* RLMListBase.mm */, - 0CE874A89AAF583128863BA1FCA5760C /* RLMManagedArray.mm */, - 8DB06E08793DF7A35C65E4DEC596D535 /* RLMMigration.mm */, - E09A92565CB375B8703E40001DCD8EBD /* RLMNetworkClient.mm */, - D1E893D7791A8935FCFB1811A626A282 /* RLMObject.mm */, - 55DFDE0D991180170E72C2CE72A8C63A /* RLMObject_Private.h */, - 6750073F3E208E4508427AA4E2A3C714 /* RLMObjectBase.mm */, - 03B30AC1CAAF899A6FEC51FDFFD9317E /* RLMObjectBase_Private.h */, - F8999C37548066850F14E1572DE3E743 /* RLMObjectSchema.mm */, - BBA081D88B3A8E08ADBD5DA995E2ABDF /* RLMObjectSchema_Private.h */, - 83713112EC0F90E41C8B23E88DFE5CA5 /* RLMObjectStore.h */, - 6CF59DCAC40F440B5B33C0E5A1548A08 /* RLMObjectStore.mm */, - 4698F5E317BE9BDBC28EB98E4D90D186 /* RLMObservation.mm */, - 0928E44AB241AA8AAB8DC0A33368B510 /* RLMOptionalBase.h */, - F1D1E3FB57B02C8734195A17446F2FF4 /* RLMOptionalBase.mm */, - C7B1E426E789030D51033FAE857F5C50 /* RLMPredicateUtil.mm */, - B8ADE224AEF88610C101F4CD39934CD3 /* RLMProperty.mm */, - 8CA0655A438232106484BF42EB014143 /* RLMProperty_Private.h */, - BA1C9450BC31E8BACA1A6AF6A13EC637 /* RLMQueryUtil.mm */, - E3564D13907EDB487F2B041F734DCFD6 /* RLMRealm.mm */, - 281D8FF15A1DFFF3DAFF10BDD480737C /* RLMRealm+Sync.mm */, - 85821A534382A8F22B0A7A69CA0E6B49 /* RLMRealm_Private.h */, - EF46A00F83F3A0CFDCF78A6B466FDA6B /* RLMRealmConfiguration.mm */, - 3BFA3AA7F1811156155860B2A54C4772 /* RLMRealmConfiguration+Sync.mm */, - F6489F2C1EF781D870469199EB3869D6 /* RLMRealmConfiguration_Private.h */, - 75D51599F64B9F4B2FD70F5E0D42708A /* RLMRealmUtil.mm */, - E07D31F71C77F24C8582889686041795 /* RLMResults.mm */, - 1AC288358E204E7C81EA626BDC43C342 /* RLMResults_Private.h */, - 68E71D44325D1EB91F8EA7D7A4C9BF43 /* RLMSchema.mm */, - B8EEE29B6D21F196FF2BC12DD5DD9D57 /* RLMSchema_Private.h */, - E16D1B384E3D86F15270DCC2209BFE02 /* RLMSwiftSupport.m */, - 2F26DBA70E2E7C4A161BDFA9A7F9FD52 /* RLMSyncConfiguration.mm */, - DE20DC127752ABD579380CDFB7DE2F89 /* RLMSyncConfiguration_Private.h */, - BB077B82D2A9A57FA42DC5C08DF91220 /* RLMSyncCredentials.m */, - C4DC6D23474A490E032C0DDF651AF66D /* RLMSyncManager.mm */, - 92537D6CD0B971AAAE38CA6FCA952824 /* RLMSyncPermission.mm */, - E1A5A76B3F15AE4C2C38A8D70C56BD7A /* RLMSyncSession.mm */, - 400AA4E8EB633D266394275ACB8B6627 /* RLMSyncSessionRefreshHandle.mm */, - B9C6687ED502E44AA73F9D0BB333E6FF /* RLMSyncSubscription.mm */, - F721BF0B8B5CB6392AB9A455233EA7D1 /* RLMSyncUser.mm */, - FFDB12CEC054B42EF7B0CDDAC51AEC69 /* RLMSyncUtil.mm */, - A08DA69B96F0B9F29FD22DD9358685AC /* RLMSyncUtil_Private.h */, - 407C0EA82D2794AFA141886522441A57 /* RLMThreadSafeReference.mm */, - 053AB860E5634039BAF88BD7E0FC5BE0 /* RLMUpdateChecker.mm */, - CE511A10E2E27CB8CC18B9A1E433F5A4 /* RLMUtil.mm */, - 059F94760C42A1A66ED75EAB3BC99B91 /* scheduler.cpp */, - 7CFFCB7D60C7B1F28BFBB156C93EF4FC /* schema.cpp */, - 18E2801B86E3023E1076B7EC71754C1A /* shared_realm.cpp */, - C858E330281A8411087DBF4B39103EEB /* sync_config.cpp */, - E7087108465B18382AFFFBCCB2245FC0 /* sync_file.cpp */, - 121C26A0E874B9D6FF380F044C384B99 /* sync_manager.cpp */, - 9D6A99168873D172AFD88F381EC1D06C /* sync_metadata.cpp */, - 5C436844E51243B738467F6554C1302E /* sync_session.cpp */, - 1F07AEA03081FA26561364FD6019DD67 /* sync_user.cpp */, - FEAE647E23B4B371510DE30A50F20F7F /* system_configuration.cpp */, - E008E02B364610E665AEFE4A2271A14D /* thread_safe_reference.cpp */, - 81D2B1002F82F7AF499F3D5A2CFE0492 /* transact_log_handler.cpp */, - 11722587FEA5F33027B6060D7B17F3C4 /* uuid.cpp */, - DE11C28AEB3EEDE16BD3291C54849806 /* weak_realm_notifier.cpp */, - E375E189BF401CF23B0D83D10AC54EBB /* work_queue.cpp */, - AEEFC69DEC95833198B4C65A942C0E94 /* Frameworks */, - AC7060B0C9CF1675B37A1ED9A33D638F /* Headers */, - C3EEB1167738230F06D981140D7EB03B /* Support Files */, + BE37874066F59D4F4D263C0897CECD42 /* Builders.swift */, + D168336F30C0E2A406284B659F0568FF /* Matchers.swift */, + 0F4D97C94386876B76AFCABA12EEAA01 /* Mockingjay.h */, + B38B99FAC7C60C3A7CA866B17FF061E7 /* Mockingjay.swift */, + 2FEF70CC1C3F3E0854F2D6D92936B15D /* MockingjayProtocol.swift */, + 6B0023AE6FB4975A029EE2A42CA165FF /* MockingjayURLSessionConfiguration.m */, + 53DB3472CB9FE8166030C604EB73A270 /* NSURLSessionConfiguration.swift */, ); - name = Realm; - path = Realm; + name = Core; sourceTree = ""; }; - 566EFA80A2800669F76D6B909FF4F9FF /* Support Files */ = { + 513820468E2FF18EB880B044D73749AD /* AppDelegateSwizzler */ = { isa = PBXGroup; children = ( - B70FA1C757B98A092A593114A7263C2C /* PromisesObjC.modulemap */, - 5353BF79D83F058DDEFEB38385407A7E /* PromisesObjC-dummy.m */, - 021C13EF73374C46D725AC51D4A46486 /* PromisesObjC-Info.plist */, - 1A9A3526CC4B3753BB8BDDD76F69886B /* PromisesObjC-umbrella.h */, - E6C2C2DE3380A72031C11CB50818CF56 /* PromisesObjC.debug.xcconfig */, - 5BD4D0AA9938C9E104775EFDF778F6E8 /* PromisesObjC.release.xcconfig */, + 8C6AF795D9AC7D35E093860A3B278048 /* GULAppDelegateSwizzler.h */, + 690C59EC5F552947A705CD99FC9C2708 /* GULAppDelegateSwizzler.m */, + 34929893181926D54E74552494C67DD8 /* GULAppDelegateSwizzler_Private.h */, + A8B54622D63E605A4B7FEC20FE38F5D0 /* GULApplication.h */, + 2253712B6523B037EEA43A5E861FD0F3 /* GULLoggerCodes.h */, + A3DEC82D5290A649190683E1419896E1 /* GULSceneDelegateSwizzler.h */, + 768AC73937772D944868FE8781922FA6 /* GULSceneDelegateSwizzler.m */, + B7A9F439CF96B7082986ECD26D018409 /* GULSceneDelegateSwizzler_Private.h */, ); - name = "Support Files"; - path = "../Target Support Files/PromisesObjC"; + name = AppDelegateSwizzler; sourceTree = ""; }; - 5BF366CBBE5AB44AAFF204FF1C6BACCD /* IQKeyboardManagerSwift */ = { + 51BA8B55BFFFC5E895856F59279EAA06 /* Headers */ = { isa = PBXGroup; children = ( - CF44CDB03A657F06858912B8ADE089A7 /* IQBarButtonItem.swift */, - FCE7B76546004A8A917269B63ED4B227 /* IQInvocation.swift */, - C6249D347AB4C83E1771ED8FAD3A35BF /* IQKeyboardManager.swift */, - 20C948E606D5CE44AD03A5C7366A9B1B /* IQKeyboardManagerConstants.swift */, - 072E25ED4BB736636C50A394C9F2FD5B /* IQKeyboardManagerConstantsInternal.swift */, - 25BA8C2BED9D71530658549424438F43 /* IQKeyboardReturnKeyHandler.swift */, - 8FB4806E23BA4462C4C689399A4C0EEB /* IQNSArray+Sort.swift */, - 8F63CCA1076F27B4DD0D3A0BEA2E5CC1 /* IQPreviousNextView.swift */, - 7456C30DEABC709056E38C830B328DC4 /* IQTextView.swift */, - DD7E50B111AC009DB830CA127E155DE3 /* IQTitleBarButtonItem.swift */, - 705A836C6E197175EA75D51A49850C63 /* IQToolbar.swift */, - 92ED901BD940887D5EECCE82872D08FE /* IQUIScrollView+Additions.swift */, - 68519E5F29D218784C27FC3B96BB54D7 /* IQUITextFieldView+Additions.swift */, - 91D643A984E8881A3AC8233310BA5ED5 /* IQUIView+Hierarchy.swift */, - 63053457BC7A712B1D849DA362C66A2C /* IQUIView+IQKeyboardToolbar.swift */, - A00A1102CDB3233B98ADD6CBB039733D /* IQUIViewController+Additions.swift */, - B632687F885461262B02539150FBDAD0 /* Support Files */, + 8BBBCA1BF6A934EAEC5F09C4902D0494 /* NSError+RLMSync.h */, + E41E301F92647C576F44D654E1304912 /* Realm.h */, + 4240A99561484EA9DEEF9707AAB5FA0F /* RLMArray.h */, + 0DB8D97A1CC79B909E92F91F475AAB99 /* RLMCollection.h */, + 1D0A126A6DC0299326169F5255EEC33C /* RLMConstants.h */, + 45C43C2847EAAB5879230B469A3C0E62 /* RLMMigration.h */, + A390F0EB031CC42ED74FE2EDD5D36BA9 /* RLMObject.h */, + 5E5A813886535DAFDAFD5ED2DC4A2063 /* RLMObjectBase.h */, + 1031E2C9F40B857CD36BEAC1D6486B76 /* RLMObjectBase_Dynamic.h */, + FB1FD42E76E8060BE354FA1F8E647706 /* RLMObjectSchema.h */, + 7FD95F6236A4C815A5460B7EA152E296 /* RLMPlatform.h */, + 24F449C44B57967C5D754656FF206DCC /* RLMProperty.h */, + E68AEF1534C586A35CD176A466EDD12C /* RLMRealm.h */, + 8D321850BFB472987C8920DDD847B563 /* RLMRealm+Sync.h */, + F17EA4C0B097766DF4F4E4C353515C96 /* RLMRealm_Dynamic.h */, + 09286A1C246966D08249E164E0089729 /* RLMRealmConfiguration.h */, + A0499A35DE68EEA7918378FB24898A52 /* RLMRealmConfiguration+Sync.h */, + 73605EA91DA311A4558468B17EF9A149 /* RLMResults.h */, + 040493368318D4DC8040E4115DE6D10A /* RLMSchema.h */, + 0F9A122A32FAC4BB79A362A9E767BE5B /* RLMSyncConfiguration.h */, + 261D533A9D09F851E4D6C4705A6BEC5A /* RLMSyncCredentials.h */, + 92A0DE7613A69DC7D76C1949596CE01E /* RLMSyncManager.h */, + EB12CD8A16F1640BF7DE35CB0E9A9491 /* RLMSyncPermission.h */, + 1048324F727445AC178416B6259CDC24 /* RLMSyncSession.h */, + 82C9A158D68EC8F991990F707AEA42E3 /* RLMSyncSubscription.h */, + 8FBBD10AFE907DF8B70531381BA8CEE0 /* RLMSyncUser.h */, + 6D058E2CB32929EB0BB21D2851DB8AF2 /* RLMSyncUtil.h */, + 13F17F6A453303FFFBABD0E97C75036A /* RLMThreadSafeReference.h */, ); - name = IQKeyboardManagerSwift; - path = IQKeyboardManagerSwift; + name = Headers; sourceTree = ""; }; - 5E49854E537401BF5A94A18C53DB8F42 /* decode */ = { + 53089901F83F23B2E3AA7B63CB10990D /* decode */ = { isa = PBXGroup; children = ( ); name = decode; sourceTree = ""; }; - 612706B0D312FA93542A5A3FA7D6A751 /* Support Files */ = { + 546FC2C38E71365FE829D274C5E0163A /* Frameworks */ = { isa = PBXGroup; children = ( - 3A71E9725D3A9ED066A2DC3E2EA3C0DA /* ReachabilitySwift.modulemap */, - 7BF688785C15162B30AA934AF388B86D /* ReachabilitySwift-dummy.m */, - D2232E8DB6FE89694044E929C31B8B5D /* ReachabilitySwift-Info.plist */, - 530CE1C0CF9E0EAE92FD2F8CEC3EEA35 /* ReachabilitySwift-prefix.pch */, - B3E6953895B94F7B91A9827DBA7B77FB /* ReachabilitySwift-umbrella.h */, - C1DDF12CD51B4BF51752949415EF4468 /* ReachabilitySwift.debug.xcconfig */, - 48FC60298EE0706240EE16412E87C195 /* ReachabilitySwift.release.xcconfig */, + 5BD836B8A63722C8720DC62D1E39E0FA /* GoogleAppMeasurementIdentitySupport.xcframework */, ); - name = "Support Files"; - path = "../Target Support Files/ReachabilitySwift"; + name = Frameworks; sourceTree = ""; }; - 660E16F790CDCFE38C71CF5DB9CD9AE8 /* Support Files */ = { + 670A99D083D3B51BBDF3E64A0A8D299B /* ReachabilitySwift */ = { isa = PBXGroup; children = ( - D27490674032E7C6A038EE62334A451D /* SlideMenuControllerSwift.modulemap */, - E46208D1AC10E182C8188D3B8E0448BB /* SlideMenuControllerSwift-dummy.m */, - 5E95F78E71818E5BDFB465BDB9138A3E /* SlideMenuControllerSwift-Info.plist */, - 5CF2D6C518135EA851EF0784343BD5CA /* SlideMenuControllerSwift-prefix.pch */, - 6C5EFFE1D4E98FECB12BEF710B058607 /* SlideMenuControllerSwift-umbrella.h */, - 3FE405049FC2FB29BF75B7A35C818115 /* SlideMenuControllerSwift.debug.xcconfig */, - F7333952F0DE992CC89C4FF6EDE9E34C /* SlideMenuControllerSwift.release.xcconfig */, + 813B7EE4B0772F93E3E4AD9C5153A317 /* Reachability.swift */, + 74534950D1A9091C53E34C7D87C36EAF /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/SlideMenuControllerSwift"; + name = ReachabilitySwift; + path = ReachabilitySwift; sourceTree = ""; }; - 756A4E5585673A0D0EEC03178D265DC2 /* Environment */ = { + 67402BF9ED12DE580B03F4F1416B8EF7 /* Support Files */ = { isa = PBXGroup; children = ( - 0EE2A87672FBAC31E7864C137E9CFFDE /* GULAppEnvironmentUtil.h */, - 60D0436CE6406CD207DCA38E5AD38946 /* GULAppEnvironmentUtil.m */, - F5F6919901B78E15C08AAF7BE2B59C93 /* GULHeartbeatDateStorable.h */, - ABB684A17E009AF9AE6F61C7CE779D7F /* GULHeartbeatDateStorage.h */, - 59491E5FBA95EB70D5B820565FC54551 /* GULHeartbeatDateStorage.m */, - 006EE801EF14194FBF196F3C3F777930 /* GULHeartbeatDateStorageUserDefaults.h */, - A7487C06E8DF34D80C44645115050649 /* GULHeartbeatDateStorageUserDefaults.m */, - 55FCDE25725ED190E78EA751F46C2B39 /* GULKeychainStorage.h */, - 170BF41F3D80EC5965A6679E24A00F04 /* GULKeychainStorage.m */, - 547E0F0E9C3FD84B7310D70A66C3C2B7 /* GULKeychainUtils.h */, - 8D556045E6E9E35001A9C8A2403A666A /* GULKeychainUtils.m */, - DCA78C13257ACA07AB6DBED25A4C2BC2 /* GULSecureCoding.h */, - B98CDEDD92AF09972CE95F3C4B875D57 /* GULSecureCoding.m */, - 55120C5C5BB01A700C2FCC53926BEB24 /* GULURLSessionDataResponse.h */, - 1901AA5F111195BCD92FC5A0D680BC91 /* GULURLSessionDataResponse.m */, - CBD56A4891183CE1C7A470DA751FEE3E /* NSURLSession+GULPromises.h */, - 031138CCD8D9D474F40D82801D921C55 /* NSURLSession+GULPromises.m */, + 333918872DEB5BF3A6E169A58B513191 /* FirebaseInstallations.modulemap */, + 4C56A8A3041B260E8C0EF3FCFA3A3C63 /* FirebaseInstallations-dummy.m */, + C497F2164DA557AE0D0AD1220A973615 /* FirebaseInstallations-Info.plist */, + 464D09382F45B4B64C6452662549CE4D /* FirebaseInstallations-umbrella.h */, + CC55FDA8C07BEEC58E107A03F712E4EB /* FirebaseInstallations.debug.xcconfig */, + A33F42324840BE40EE781E8445AA4B39 /* FirebaseInstallations.release.xcconfig */, ); - name = Environment; + name = "Support Files"; + path = "../Target Support Files/FirebaseInstallations"; sourceTree = ""; }; - 7A3DC58267D2A0C60CEE46DEA0635243 /* Support Files */ = { + 69256622391C60975B12CA9140AF910C /* GoogleAppMeasurement */ = { isa = PBXGroup; children = ( - 4855D9AD77F07FE71132A1617DD6ACE1 /* RealmSwift.modulemap */, - 76D9841C1E68CE9361A6992FF5315C12 /* RealmSwift-dummy.m */, - A1C257BF7E526AF65FADE370454FD531 /* RealmSwift-Info.plist */, - 013EAF5B8AA53D7DF81AEB9B4CB6CC37 /* RealmSwift-prefix.pch */, - 75CDDD2C741C2B3013B6135198196F5D /* RealmSwift-umbrella.h */, - 0D850BD593B8E52777A0374A1F5D37F3 /* RealmSwift.debug.xcconfig */, - 6AA0E91824FAEA1891606A904C5530F9 /* RealmSwift.release.xcconfig */, + 1D03D99A9E757375362C67B79CF5A86E /* AdIdSupport */, + B1899A90E6F7E8825433C8E003CF3A2A /* Support Files */, + 0217EC6F6F2E16536DFE38DC65825D7C /* WithoutAdIdSupport */, ); - name = "Support Files"; - path = "../Target Support Files/RealmSwift"; + name = GoogleAppMeasurement; + path = GoogleAppMeasurement; sourceTree = ""; }; - 7E64AEB44980613B3209DD31810DF782 /* Pods */ = { + 6C587762181DFE990B377E1970B2C5AF /* Frameworks */ = { isa = PBXGroup; children = ( - 89948A69C64A98E53BA5C5EC92EA0834 /* ActionSheetPicker-3.0 */, - BA902DE0A232094978B3B9AEC91C2D72 /* Alamofire */, - 98A74216574ED77C3FDD004EAD769664 /* CryptoSwift */, - CB02B0DF2F527E51B5BF287E230C10A2 /* Firebase */, - 34801399DB82FAA7D73519A56F2A86BC /* FirebaseCore */, - AEE92CCC6D5E71025FEAF6F7E6BDE086 /* FirebaseCoreDiagnostics */, - A44276650F8A05B8744D775802D5B198 /* FirebaseInstallations */, - 273CD873FB4063C64DCCDCF8BAD83729 /* FirebaseMessaging */, - 8449FEC2618BAC6AE0B4F3834331B171 /* GoogleDataTransport */, - 8571C8F456F4973613A934A088DDD41D /* GoogleUtilities */, - 5BF366CBBE5AB44AAFF204FF1C6BACCD /* IQKeyboardManagerSwift */, - 226BF3C2B278328E816877FAB6BC4816 /* Mockingjay */, - 134D0EF84E25B5B745B97B9AAFC0879D /* nanopb */, - A4EAC8059E2FBFF1ED00B50683897FAC /* PromisesObjC */, - E12180B6981489C7B4286DC5AAFCD684 /* ReachabilitySwift */, - 54375779C351404BD85956D4AE86A1F6 /* Realm */, - D8CC9D64548240A55F57F105C58BD61C /* RealmSwift */, - 1D828E227565F4D5E73469FDA90C97CC /* SDWebImage */, - EEEB97484914EA15C00DB558D31D5789 /* SlideMenuControllerSwift */, - 2F4218C98D3993018E8E64A95F98FCB2 /* Toast-Swift */, - BAEFBE3E4A316ECC5E1A85D0C430787E /* URITemplate */, + 31142395B647915A87438E257105247C /* librealmcore-ios.a */, ); - name = Pods; + name = Frameworks; sourceTree = ""; }; - 8449FEC2618BAC6AE0B4F3834331B171 /* GoogleDataTransport */ = { + 74534950D1A9091C53E34C7D87C36EAF /* Support Files */ = { isa = PBXGroup; children = ( - 738E1CDDE859CBEA8F97C5B308F73477 /* cct.nanopb.c */, - 38F70518F75132A097074E43D71C78CF /* cct.nanopb.h */, - 0D34FEFC52A7D1B53C98AC34A4C933D3 /* GDTCCTCompressionHelper.h */, - B22D80E91E4E6DAE0C4B9A4E38589EC5 /* GDTCCTCompressionHelper.m */, - B12C24DE5479F6BE3DE797E9097D4D7C /* GDTCCTNanopbHelpers.h */, - FB16D133B15E74B820EC9F80CDB3F2AB /* GDTCCTNanopbHelpers.m */, - 4B228E650F649CAA162CFDF44D7B78E7 /* GDTCCTUploader.h */, - 48CA79CE972CA130F3B98C5969E021BD /* GDTCCTUploader.m */, - 843039480971C4CBB9A2E439E96BB460 /* GDTCCTUploadOperation.h */, - B2FA33A54180E95615EF33A92C531DE9 /* GDTCCTUploadOperation.m */, - 581C0DABC4484037C6A839C72F26F953 /* GDTCORAssert.h */, - 9E1130D1E08F12920F389C2C21B1A69B /* GDTCORAssert.m */, - 0ED78A49E7C5A56E27CA0CB39145198F /* GDTCORClock.h */, - E4C6EFA2D288C791480494F39D8C43B3 /* GDTCORClock.m */, - 864038E8150C2C4AD1491AD1F3A1B980 /* GDTCORConsoleLogger.h */, - 790CA29C065DD0F0B4F0098A3292067D /* GDTCORConsoleLogger.m */, - 428318B3F24614FD364D1537B3E26350 /* GDTCORDirectorySizeTracker.h */, - 20857C9639D0B60308972014193BE7B4 /* GDTCORDirectorySizeTracker.m */, - 5D6A51F40E2E8F7B9FC79A9D96C40795 /* GDTCOREndpoints.h */, - 7F8EFF6ECDEDBC1C10BC83DDDAA3829C /* GDTCOREndpoints.m */, - C3D532EFBC6CF4F2679AD76983A3FDC5 /* GDTCOREndpoints_Private.h */, - A14220984AA9BFDD5349A39D88DDB703 /* GDTCOREvent.h */, - D02191707B9D8374D62A8B3F4DBEA4B0 /* GDTCOREvent.m */, - BC236C6E6F5BC7F453349B57E5CEBE51 /* GDTCOREvent+GDTCCTSupport.h */, - 63C619DE9BE3CCD0A0812566278340C4 /* GDTCOREvent+GDTCCTSupport.m */, - DA410E2E00B23764DBFA0C10549BB6FD /* GDTCOREvent_Private.h */, - A6E5710B018893B0D662AE53096C1EBE /* GDTCOREventDataObject.h */, - 911AAC52B85C0038A4170B924E4C1E6C /* GDTCOREventTransformer.h */, - 730F81D9DE531E5531DB90F3483175AE /* GDTCORFlatFileStorage.h */, - 78CD5A0B098764C81EC208C04DEDB25C /* GDTCORFlatFileStorage.m */, - 26D37C2815447D36E1833F62298C1C75 /* GDTCORFlatFileStorage+Promises.h */, - EDDF42B19D39219577B569C1A69CCEE0 /* GDTCORFlatFileStorage+Promises.m */, - D713750F69F8612EC13CA626C1DF01BC /* GDTCORLifecycle.h */, - 428D24AE27003C44D1F38A6606EF5B36 /* GDTCORLifecycle.m */, - BC8841F311DB3A4F05874165CC946CCA /* GDTCORPlatform.h */, - C21F899E0DBC32A67ADE34A66F7A2CF1 /* GDTCORPlatform.m */, - A2D23BEE13FE5ABA1847C33BA6D008CF /* GDTCORReachability.h */, - 9784D0880A821330DCF9CAA43952714F /* GDTCORReachability.m */, - 22F949F50295F4910C96683F61136A58 /* GDTCORReachability_Private.h */, - 19508D9635DEE7FED4030772670091C6 /* GDTCORRegistrar.h */, - 294ADF7051FB25145BD211B8BB8823A8 /* GDTCORRegistrar.m */, - D8202D3E060630CBB2F0B8F6D1E5BB78 /* GDTCORRegistrar_Private.h */, - A8362B5D872135BD70697E543AD15AF6 /* GDTCORStorageEventSelector.h */, - 44A787E2B38B6DD9272ECEB4FA30A7B0 /* GDTCORStorageEventSelector.m */, - B2669C5C82B7C0A22A84597EC0D19D89 /* GDTCORStorageProtocol.h */, - 79DC8F114A5797B8935C230E82661D3A /* GDTCORTargets.h */, - 1038ED066EC49DB4C900D898EBEA6E26 /* GDTCORTransformer.h */, - 6AE495A6DE9D91B2470DDB5F5798382C /* GDTCORTransformer.m */, - F3580C2F14133C643FE100409FF6EC1E /* GDTCORTransformer_Private.h */, - ACF39C778BE0B215EB6502F2D61801BD /* GDTCORTransport.h */, - 499EF5B8D28905B12B780B3CD61A9672 /* GDTCORTransport.m */, - 1C91D43FD5AEBC0D1AD1FFBD0128B8DD /* GDTCORTransport_Private.h */, - 886BC41C8712FF81292C4ADB9E0AF2EB /* GDTCORUploadBatch.h */, - 314DF40A6DB850AB51424A6F2B1D779C /* GDTCORUploadBatch.m */, - 0FDD5E1FCA6A592C9E96544E56D90D93 /* GDTCORUploadCoordinator.h */, - 03F5D2F51E06C31E2FBD08EC36CE4D2C /* GDTCORUploadCoordinator.m */, - 53980335770F8A09C4C7339EABEE8AFF /* GDTCORUploader.h */, - 9CCFC6DBEBDC7C6ED8E119D7177DFB7D /* GoogleDataTransport.h */, - B38BED8B4B866B25C28050CCA1E272AD /* Support Files */, + A27CE631C7B441588AD83DA189F46F1B /* ReachabilitySwift.modulemap */, + D7990988559D32F0F8E6A9A97E125901 /* ReachabilitySwift-dummy.m */, + 0E29CCEBECA32534EA64B9D6C77DE5E2 /* ReachabilitySwift-Info.plist */, + 00E5C9C2AFC1D9E2079B2831B49CFDB1 /* ReachabilitySwift-prefix.pch */, + E0DCBFDA516CDEF5881AEFE5AD280BAD /* ReachabilitySwift-umbrella.h */, + C9AB2627CF8C758388D4CE396E26B3DA /* ReachabilitySwift.debug.xcconfig */, + C62434FD18A0162DD2EEC48E1977B333 /* ReachabilitySwift.release.xcconfig */, ); - name = GoogleDataTransport; - path = GoogleDataTransport; + name = "Support Files"; + path = "../Target Support Files/ReachabilitySwift"; sourceTree = ""; }; - 8571C8F456F4973613A934A088DDD41D /* GoogleUtilities */ = { + 76AC5B0232D5907C0CFB7FAC9BCC42AB /* CryptoSwift */ = { isa = PBXGroup; children = ( - C5ABDAC6A3BFFD17932093D8AB878447 /* AppDelegateSwizzler */, - 756A4E5585673A0D0EEC03178D265DC2 /* Environment */, - 0F93D8449E83AC46F967B1D20F3C6463 /* Logger */, - FE038AE851F00EC01766742F1E18D07F /* Network */, - BF90C98772B4F00D6E6A390F22BFEADF /* NSData+zlib */, - CB9E3F370D189686EDEF239F68BFFF1C /* Reachability */, - 08F0D60A636B2F64102050EBF894A61F /* Support Files */, - 95EF177B7FEE4A61482CD52D96A5C7B2 /* UserDefaults */, + ABEAC198CE8166AEAE7E28DE988F7562 /* AEAD.swift */, + E82BAD2A000A217297075BCC2AA48367 /* AEADChaCha20Poly1305.swift */, + DB81519529A7AABD9E01533EAE4B5BA4 /* AES.swift */, + 634D852EB52F1539A9522067358D2E32 /* AES+Foundation.swift */, + 50DE2616C4EEBEED97B119F0B3B22684 /* AES.Cryptors.swift */, + 0836FBB35B723CA60E57A757D6ECC880 /* Array+Extension.swift */, + 7BED8CD028BF0BC150E6EC6C757B8ECB /* Array+Foundation.swift */, + 2D199AB7770FB1CA4CFA31E43161DFF9 /* Authenticator.swift */, + 6536FA0E22574FA5AA6C1BCB88DF3449 /* BatchedCollection.swift */, + 30F869B0D88AF4110FBDC7FCC3E14E18 /* Bit.swift */, + EFF5F6B7C7BCE54E0FCEF94864CD4E20 /* BlockCipher.swift */, + BC345F039C5725079705F6A9271A9470 /* BlockDecryptor.swift */, + 9F6FFE14F792DE9044A5F38021BA5B6A /* BlockEncryptor.swift */, + FCCBA313F9D44519610242CA85129447 /* BlockMode.swift */, + 17556347F56716DD69265DF5CE773998 /* BlockModeOptions.swift */, + AA81C9CF689AE79EB34AFBBDCB8CD768 /* Blowfish.swift */, + B602B85D1CC653F63C797D7CCFF0F21F /* Blowfish+Foundation.swift */, + CBFFE86F79B3B7EE6D8884D80F71A42B /* CBC.swift */, + D33B844CD5264CC7D80AD15B940F6362 /* CBCMAC.swift */, + EBD427BAD65E05CBFEE7AAD318686E4A /* CCM.swift */, + D434C82D8CA4ED52633411631B2476BF /* CFB.swift */, + C7BA7048E4B4BC26C2DB3ACF7646C29F /* ChaCha20.swift */, + 08B944858F8520734B6AB96BA217A2B2 /* ChaCha20+Foundation.swift */, + 07B1E0E662005D9C75ADC6BA4A8DBF71 /* Checksum.swift */, + F6837A3E7B5FC94EC4CDC728C045D1A8 /* Cipher.swift */, + A9D268FD4D7E49BAE640C9BD4FF78947 /* CipherModeWorker.swift */, + 7ECE80114DB78DBA42FDE6C4D000CED1 /* CMAC.swift */, + F6CFEA59AEA739790CFBD265E0D8B68D /* Collection+Extension.swift */, + AF1539083D412B0D78A9D7356FBB71D0 /* CompactMap.swift */, + 93427A736E77B72D9C425FBF565D7090 /* Cryptor.swift */, + D07AD83391CECE97E4B09275D8F81FCE /* Cryptors.swift */, + 5CEFB8688EFB229C202CBD8E83BA0BC6 /* CTR.swift */, + D2496EF29FE53B89A69CEAC97C243516 /* Data+Extension.swift */, + 35D9F1DFE1454CA4DCBFC097E92887E2 /* Digest.swift */, + 6A392146091E5BE7082F5B1F808838BF /* DigestType.swift */, + 636C461F716423711BC21B884F3588B8 /* ECB.swift */, + DA43C8631C77A49C3E363430C3B9D128 /* GCM.swift */, + EFED1FF6E72598E3090E9F6F4496DB84 /* Generics.swift */, + C1A4A273996819FA4A366938FC3CFE06 /* HKDF.swift */, + E63D476F2C4C7D46C359BE02D399BCF8 /* HMAC.swift */, + E2277B5E5A01B117A4AD52D5ED613704 /* HMAC+Foundation.swift */, + 8530C6A9835A439D33DDD56BCB777CBD /* Int+Extension.swift */, + A446D9F1EC72D5F0E00297AD2CD54B08 /* ISO10126Padding.swift */, + 2D9DF334AD742E96E98ACD959F55F76E /* ISO78164Padding.swift */, + 30941BDA5284148664051626E909A984 /* MD5.swift */, + E9AE969F0B095AA9193301C3D5E993CC /* NoPadding.swift */, + B5855953FE680CC2FAFABCEAE03620FF /* OCB.swift */, + 89C4C88114FFBC5E889FE474846974B8 /* OFB.swift */, + 0212D03CB4042D2280F3D688437E37C9 /* Operators.swift */, + A5489946F1EB3811DB451699DBCF3C2D /* Padding.swift */, + 095AB0EBBCEB9C57CE1EB42C47F03E22 /* PBKDF1.swift */, + DF1CB46179AE6BDB8AAA002E621C3BD6 /* PBKDF2.swift */, + 2C47955FAEBD057EF05A124649DA77DB /* PCBC.swift */, + 2BCF93BF622E68DD91D8085EDA79E224 /* PKCS5.swift */, + 19BF348B2456B511A825BA5257385DD1 /* PKCS7.swift */, + FC7B6B641EE4FC0F942F28C3F4D7F1D2 /* PKCS7Padding.swift */, + 5302DDB3EACA02979C5ED891D0C1779C /* Poly1305.swift */, + 72B83333C0AFB4A6E78AE7028737B54F /* Rabbit.swift */, + 5AD30745CF94914FA5AE9BA5A323D71F /* Rabbit+Foundation.swift */, + 87DC2214947702356F70EB5FA95ED714 /* Scrypt.swift */, + C491DCC040BC52B90FB6568173F80167 /* SecureBytes.swift */, + CF16163B647DB5CE463AB1C6E51B7FA7 /* SHA1.swift */, + A67F1ACB5315422C34CB97BBDE734FEA /* SHA2.swift */, + 916A614848833BFE81FD69ABD5E9ADFD /* SHA3.swift */, + 949E1956D736409B999B35B1D89857FD /* StreamDecryptor.swift */, + CB7BF5B8A6859B6CD7367007310BDD3E /* StreamEncryptor.swift */, + 9AC5A45B3B35233595CCBD1F65C086B9 /* String+Extension.swift */, + 1A8A2F06F0D82F51910105C8D83FB48A /* String+FoundationExtension.swift */, + D2DB2F4C9669065A8267441D87FABB24 /* UInt128.swift */, + 33F5E03D74F5AA320D0137028300DFD6 /* UInt16+Extension.swift */, + 8845D079BF4E1D468B7FE8D56D5618D1 /* UInt32+Extension.swift */, + 40B88C765D2533850E39D8F27A9AC327 /* UInt64+Extension.swift */, + 8D9645E9A4A1AA59D9DB66BD2872ACD7 /* UInt8+Extension.swift */, + 6144AD96804FD9CF5C15BDA80A55D007 /* Updatable.swift */, + 42DD581DCCF8F255485F1C1C6F091196 /* Utils.swift */, + C81E30A74ACA2EB0DE0F1B24DE663C1E /* Utils+Foundation.swift */, + 18D5BEA6637B5DE87ADD67760EF53F32 /* ZeroPadding.swift */, + 79FA305643083857F88D8A453687C69E /* Support Files */, ); - name = GoogleUtilities; - path = GoogleUtilities; + name = CryptoSwift; + path = CryptoSwift; sourceTree = ""; }; - 89948A69C64A98E53BA5C5EC92EA0834 /* ActionSheetPicker-3.0 */ = { + 78DA88C60E83E122D1216C2986B5E19E /* SDWebImage */ = { isa = PBXGroup; children = ( - 3230D4195CC6F7787F106E4E08891CA9 /* AbstractActionSheetPicker.h */, - 946A8858C9C1B580A7060540FC0FC329 /* AbstractActionSheetPicker.m */, - 567E7701F9C7D5D0CAFBC3BFFB405157 /* ActionSheetCustomPicker.h */, - 25DCFDDA5CA5EC617535E9A01B61348F /* ActionSheetCustomPicker.m */, - B0F1D178D3AE8FF89D6BD0ECE869396E /* ActionSheetCustomPickerDelegate.h */, - 38596DD1A62B86E3D0DFF6B6F9131A57 /* ActionSheetDatePicker.h */, - 9D95C7F99D2C68C5DBAAA51F236EBDBE /* ActionSheetDatePicker.m */, - DEE9BF2E150669C3B8731EAA7C6636C6 /* ActionSheetDistancePicker.h */, - 1F994B95A81C90C0D4A20E80C3158D3B /* ActionSheetDistancePicker.m */, - 243BE1AE2BBE963CF634290AE83B0735 /* ActionSheetLocalePicker.h */, - A93792CA49A4BE392FE79EEB74008676 /* ActionSheetLocalePicker.m */, - 0B895637F6FAB3E8B7F2A656CB34EFA5 /* ActionSheetMultipleStringPicker.h */, - 2C280205CE3A83276559BB5EB064D765 /* ActionSheetMultipleStringPicker.m */, - AD77789BDC2D0067E91B041D158F6D4C /* ActionSheetPicker.h */, - 9C42C646F7AD853933601D509EF6E930 /* ActionSheetStringPicker.h */, - DB79AC3E6D402B145104D0F875B7EF7E /* ActionSheetStringPicker.m */, - C1CCC1203C51EE52531784C112ADF8A4 /* DistancePickerView.h */, - 8D2A115BC6E7B8C642444CB0D7497979 /* DistancePickerView.m */, - ECC4A99F4EA0D649D04F060078261415 /* SWActionSheet.h */, - 56D278275B058F795A19B8A5284AB104 /* SWActionSheet.m */, - 3665960B2EF2762592E2740831C6503B /* Support Files */, + 1F67BD557AB98E59E1780AB27E0F72E1 /* Core */, + A4686910B10BD9982C97B8E70363334D /* Support Files */, ); - name = "ActionSheetPicker-3.0"; - path = "ActionSheetPicker-3.0"; + name = SDWebImage; + path = SDWebImage; sourceTree = ""; }; - 95EF177B7FEE4A61482CD52D96A5C7B2 /* UserDefaults */ = { + 79FA305643083857F88D8A453687C69E /* Support Files */ = { isa = PBXGroup; children = ( - D5F7928600A9EF34D656DCCCB7C0D131 /* GULUserDefaults.h */, - F13E723A6559F6029C1EAC208E644205 /* GULUserDefaults.m */, + A230B9124C314F06247B2F7BE1D6BF3F /* CryptoSwift.modulemap */, + 58395B772D53249E2BFA5632CB61ABA5 /* CryptoSwift-dummy.m */, + A03CA917F850F70E3EB8B7BA707E830A /* CryptoSwift-Info.plist */, + 5FDD6836072918EAB99194EE6F52F4B4 /* CryptoSwift-prefix.pch */, + 76D8E80C21A4CAF1EE2ABFE3F2506EF7 /* CryptoSwift-umbrella.h */, + 94E08B980255A3F6FA9965B95B8EE948 /* CryptoSwift.debug.xcconfig */, + 164FF34DC7E9A852524BA8F8889B253D /* CryptoSwift.release.xcconfig */, ); - name = UserDefaults; + name = "Support Files"; + path = "../Target Support Files/CryptoSwift"; sourceTree = ""; }; - 98A74216574ED77C3FDD004EAD769664 /* CryptoSwift */ = { + 840FAA976D5859431EF2615A56F5BBA8 /* iOS */ = { isa = PBXGroup; children = ( - C73114023681C538F3827D2AF9603BB7 /* AEAD.swift */, - 0ECFC83453F0ECB27A1E0234BCC2B4DF /* AEADChaCha20Poly1305.swift */, - 3CCBF9796C8E7B87420F14B71979E65B /* AES.swift */, - 162BA16DB4A07234409AF1C9FFB41A86 /* AES+Foundation.swift */, - 846E235F5DD469FF13FCB02D792DF232 /* AES.Cryptors.swift */, - C26A3535842C1D9FD0200D20A89A5241 /* Array+Extension.swift */, - D0314417B4C5CD3C92C6DD04A12CE43D /* Array+Foundation.swift */, - F7AABB46B143694DA5B009C52041CBA1 /* Authenticator.swift */, - F835DF26614D9FC25363DB3CAEADF866 /* BatchedCollection.swift */, - 68C898D63E58A393745FD6648B352DE9 /* Bit.swift */, - 1570F708658C3D5FC6B0F902008DC01C /* BlockCipher.swift */, - 8BC6A8964E6AE54EE1A4466B07D5B30F /* BlockDecryptor.swift */, - 78076D3D35AED2432FDBB05969D93FA0 /* BlockEncryptor.swift */, - 2FA01A3D389B8E45A5925456F5760E2B /* BlockMode.swift */, - DD539CD04D5E57F34F39CDBD4775DBCD /* BlockModeOptions.swift */, - 173324043D4D3BA47FCB6F18925B2C90 /* Blowfish.swift */, - 36D3CBD2B108BFD3BE648EA9CC38ABDD /* Blowfish+Foundation.swift */, - 77F188052E4D379660A93C519C66DB15 /* CBC.swift */, - 2873B53E0E594665AABD29242FD91B61 /* CBCMAC.swift */, - F09822678CB10BD1A74A26920FFC83A1 /* CCM.swift */, - 69917A87CC117A8C41D05AA9059D8C32 /* CFB.swift */, - B52099236CE09D85935F717A05915FFA /* ChaCha20.swift */, - 9751695F04AEFB9C3F95BB2E355F8090 /* ChaCha20+Foundation.swift */, - 0A0D2A5791B541D6FB60542F6A94DF63 /* Checksum.swift */, - 56CD4BBC18CE67C39A7CF12B8605C90C /* Cipher.swift */, - 6CC9746F7ACF148D70CB9F2A6FE7B209 /* CipherModeWorker.swift */, - AE7388F42531DF0394A844665C90EFA8 /* CMAC.swift */, - 0C200381FD7CABEC0F476BC0C00E3677 /* Collection+Extension.swift */, - D2BC55250AA90DF7564DACAFFBF34618 /* CompactMap.swift */, - 38238CF7AD890DAF8D919747BF49E4AD /* Cryptor.swift */, - F0757F725C090A38471D1EFAA15662A2 /* Cryptors.swift */, - 5AEA21C41773B656C22018B7F70EA7B5 /* CTR.swift */, - 41F835695A0055130E4008FC969C8042 /* Data+Extension.swift */, - 8E37A51859909C1F97D55A46978EEF6D /* Digest.swift */, - 06A993B3D361AC6CEC8E1A42D615F0C1 /* DigestType.swift */, - E704752616B93BE1422EB5F7F84F13F9 /* ECB.swift */, - 63080FFA2784DA24057BB18A90D0F3DA /* GCM.swift */, - 608C19CDF5F7F340220D2718615D51E2 /* Generics.swift */, - 24557FF343160ADBDAA497CA5CFB282E /* HKDF.swift */, - E21317BDA8DABD937E215DDB772DCA10 /* HMAC.swift */, - 3D1223B53F45937C2D8E549F844CE896 /* HMAC+Foundation.swift */, - E2BAD63827AE0F6727E7562A0BCBCD7B /* Int+Extension.swift */, - 9CB40D2C81289B679425DEDD1A0B1B01 /* ISO78164Padding.swift */, - DE15D00210E6D3671055247ABC05F216 /* MD5.swift */, - C6724170FE5C0C60A4333BD83C440476 /* NoPadding.swift */, - CD23C32EB4EECECF2AFF42CC6A4B85D0 /* OCB.swift */, - 9E1CE00C7B46C7D2CB3D4714DE216F8E /* OFB.swift */, - B7724FA1AEF17D65AE7D26CF86894844 /* Operators.swift */, - 46FE061DB976489F4B96875AE470D5C1 /* Padding.swift */, - EAEAF8A048D5FD3079B6343723732A41 /* PBKDF1.swift */, - 79ADDA42485AB4FD68719AC8787415E6 /* PBKDF2.swift */, - 8236EEB3FBE373CA368D5A2630A5EB9B /* PCBC.swift */, - 41557D2BDE7B328CD32E826C75C34482 /* PKCS5.swift */, - 531ECE962339B1BE353B1662749344A3 /* PKCS7.swift */, - A23F193AB67028E114671FED528F7A89 /* PKCS7Padding.swift */, - 884820B0ECC534A66736999395266BB4 /* Poly1305.swift */, - BBC3FCB3BA4009B9F4AD451705C16E5A /* Rabbit.swift */, - 2A17D40ACA8F8A042A04883C715D859B /* Rabbit+Foundation.swift */, - F7DD49CE3C62B9C9BF8E2B663A7CBF13 /* Scrypt.swift */, - 705407BDFC2ACF1648B6C0E3C1153880 /* SecureBytes.swift */, - FEE1BC69EFE9E99DC39490C4C8274E81 /* SHA1.swift */, - 37B54E70FA95282CF15A607B01677C05 /* SHA2.swift */, - FF366CEB33CB5CECB19ACB4F6F693422 /* SHA3.swift */, - 5991724F8BDE5DF993E8099E99EA827D /* StreamDecryptor.swift */, - 55B1EC469D3411172E2BADB83FAC81F4 /* StreamEncryptor.swift */, - CB0A6A6A4F04DE2F8041628D4BBC034D /* String+Extension.swift */, - 7C6C389801C071C67181351FBD1B6E3D /* String+FoundationExtension.swift */, - 5D4364CCF9E6A683282E4501A476CFE4 /* UInt128.swift */, - 8E311DBAB691A7D9C9279F13385CA37A /* UInt16+Extension.swift */, - B22D89A31859FC1C4911D8263FA0E866 /* UInt32+Extension.swift */, - 6C75E41399C25E0B0531FE0EB0A551DE /* UInt64+Extension.swift */, - 3A29068EA38DE61C3E2D666A647F2BE4 /* UInt8+Extension.swift */, - 5D62DC0C397687B9A3F30B1968806DB5 /* Updatable.swift */, - 4D7D14929A15F9D5B0176E9CDE24C9F0 /* Utils.swift */, - 691DA74C687A632003A5B9CE2E69CA14 /* Utils+Foundation.swift */, - B323C54A939899E339EAC33ECA8E6DAC /* ZeroPadding.swift */, - 5097ACEC2E1EE552112AAB915B0327F8 /* Support Files */, + 5DACDA66527627D9FC31F1B27F691ADF /* CFNetwork.framework */, + CB24E464161714FB2F99431C96167D97 /* CoreGraphics.framework */, + 3953AE17C7700CC8842FB26A55BF9B76 /* CoreTelephony.framework */, + 3263CAA0BC54D21B0E4A6596E847B597 /* Foundation.framework */, + 47E509C5408A326D4B97130D8CBDF654 /* ImageIO.framework */, + AD3CD06550FF4C8846B1AAFDDA71EB16 /* QuartzCore.framework */, + 8F9EEAD2CCB06E3D9F37D73E7DCA7FA4 /* Security.framework */, + 7C99E6FBF6014D74F7365E1B7DCBD57D /* SystemConfiguration.framework */, + A14D461519705DCA765D901C9DF2124A /* UIKit.framework */, + DDFECB516E488E30B43E119CA8BDC97E /* XCTest.framework */, ); - name = CryptoSwift; - path = CryptoSwift; + name = iOS; sourceTree = ""; }; - A44276650F8A05B8744D775802D5B198 /* FirebaseInstallations */ = { + 8AD12ADA42BF005BA9EBCE9418569B03 /* Reachability */ = { isa = PBXGroup; children = ( - A0A174561C82309A7D978CEB57ED4FFA /* FIRAppInternal.h */, - 6A918DA9646862A213968C27CC812379 /* FIRComponent.h */, - 757834CDFA774B2AF52F022F5AF33717 /* FIRComponentContainer.h */, - 9463D860456FB689C22804BED88D0803 /* FIRComponentType.h */, - 12E5B7CE0F5FCA93F58A864E85041CAE /* FIRCoreDiagnosticsConnector.h */, - 23FCC2666D8D2ECD43F8C6075C24AE98 /* FIRCurrentDateProvider.h */, - AAE36D9F05640A6F7C035A6D1680FBF6 /* FIRCurrentDateProvider.m */, - 864748984B96DE752B03C28D80A1CC88 /* FIRDependency.h */, - 60BEA434B31D101F866115A2D1CD943E /* FirebaseCoreInternal.h */, - 1CF20EA6B0DE3339FC2E7ECE9D5B5FEB /* FirebaseInstallations.h */, - 5B69A6CBE35A2F01D911572A4A3974A1 /* FirebaseInstallationsInternal.h */, - 2CD0BCA2633B549DF689C142B16127A4 /* FIRHeartbeatInfo.h */, - E45899A00B8576F7513A7D0256223DF9 /* FIRInstallations.h */, - 890947B98407FAF2248B81F88C9AD1F1 /* FIRInstallations.m */, - 3BDB3002AF727D595FE3C32DF44492E3 /* FIRInstallationsAPIService.h */, - EADD60FED881357516021098D8EF0962 /* FIRInstallationsAPIService.m */, - 3E5A2302A76BC97D7385934D695A5324 /* FIRInstallationsAuthTokenResult.h */, - 863D8F71CBCCAE8D6C3777B8987192B2 /* FIRInstallationsAuthTokenResult.m */, - 4FEC326411BC91F4F2B42B7A4666569E /* FIRInstallationsAuthTokenResultInternal.h */, - DF9650B678A6570B0750ACA9453F0CD8 /* FIRInstallationsBackoffController.h */, - 83EABF76579C3D6648BFE7A01EE7E49A /* FIRInstallationsBackoffController.m */, - AAA6D2A3329BA1F4EC69BFC39E6B7BC5 /* FIRInstallationsErrors.h */, - B9984B319B861B12714D3B5ECAFE9258 /* FIRInstallationsErrorUtil.h */, - E247D250D6F8A9B7176B64B470594FFF /* FIRInstallationsErrorUtil.m */, - B49AE6925612C4F7233E1FDC00585F58 /* FIRInstallationsHTTPError.h */, - F0EED7E4A4DF2AF6825AD5A8E644F43E /* FIRInstallationsHTTPError.m */, - 8B05AABF6DDBF7F0E609A84B3524925B /* FIRInstallationsIDController.h */, - 2DED94C46EED4DEF21674532BA1277BD /* FIRInstallationsIDController.m */, - 2283CDF983CC68D987E675E693EDAED0 /* FIRInstallationsIIDStore.h */, - C5AF7B034A2F64A782B231CA1A6AB8E9 /* FIRInstallationsIIDStore.m */, - 37667D87938175B0B9E0276B63D19F0B /* FIRInstallationsIIDTokenStore.h */, - 812FF8F54A2A5C5EA9A678C56FD72EC9 /* FIRInstallationsIIDTokenStore.m */, - F191F57D7F4EDC91BF6BD986F5AEA994 /* FIRInstallationsItem.h */, - 7BAD137506983EB9E1D80719D85FAC3F /* FIRInstallationsItem.m */, - 7BC4753105A074D6C50C2019A0D660CB /* FIRInstallationsItem+RegisterInstallationAPI.h */, - B090FEA8747328B3DC039D31125AE528 /* FIRInstallationsItem+RegisterInstallationAPI.m */, - A9798CF1901066462B184EED06FA1D80 /* FIRInstallationsLogger.h */, - A1EFF535572854DB51DDFBA01D060B42 /* FIRInstallationsLogger.m */, - 95E296B84D8CD03DCC39216A74A4C74C /* FIRInstallationsSingleOperationPromiseCache.h */, - 5CDE7329D9840C6731AA3C68D1D35C55 /* FIRInstallationsSingleOperationPromiseCache.m */, - 142D1E2C1BC5FC36978E0E70A1EBC1E9 /* FIRInstallationsStatus.h */, - A188D6768838E06D9E265C5C808681F7 /* FIRInstallationsStore.h */, - FBF8216C4BA0F5FAFCA4DF57ED6ED799 /* FIRInstallationsStore.m */, - A023B5549EDC5FF374C920FC470B075A /* FIRInstallationsStoredAuthToken.h */, - 2A3C712F0F9555A673A9FF81CBA60997 /* FIRInstallationsStoredAuthToken.m */, - E7FF5F7015E1BE438F1EACEB0519506D /* FIRInstallationsStoredItem.h */, - DB293053A331C555C618D86A7678ECD5 /* FIRInstallationsStoredItem.m */, - 43D9E69C9DB48743E32D1CED03F575B4 /* FIRLibrary.h */, - A5F58FBAF73CE2803158A5F029EC0585 /* FIRLogger.h */, - DB7A084B224E3CDC6293F2BA5141818B /* FIROptionsInternal.h */, - 3743DB1D12AA32391077F677A1B3ECE1 /* Support Files */, + 38DFB1BF9513F31663E962AFBFB94CEE /* GULReachabilityChecker.h */, + 5AE5A5DC96C77E5E7DE1F09EC7910E4A /* GULReachabilityChecker.m */, + F3265C4F3670E855D40B858BE499BDD3 /* GULReachabilityChecker+Internal.h */, + 2BE953515C8804F9559351E43F70B533 /* GULReachabilityMessageCode.h */, ); - name = FirebaseInstallations; - path = FirebaseInstallations; + name = Reachability; sourceTree = ""; }; - A4EAC8059E2FBFF1ED00B50683897FAC /* PromisesObjC */ = { + 8AD4530AD4E370F191ED337D64D55B07 /* Support Files */ = { isa = PBXGroup; children = ( - 00F1F168B4E790840B4C3B865A1A7A9F /* FBLPromise.h */, - 84B3479AC1BAC595E7B95332DB343B33 /* FBLPromise.m */, - 25FCF1FC11F99F41CC8FE1C400879559 /* FBLPromise+All.h */, - 7F7365CA24E185DB737A0919EBE10110 /* FBLPromise+All.m */, - BF3494D42C82FB5E482271BDF58BC576 /* FBLPromise+Always.h */, - 9929F6E4584CF052BD347801DD3B4642 /* FBLPromise+Always.m */, - 800E0C9B7CB1B577C7812930D92BA0CF /* FBLPromise+Any.h */, - DC49EF44127A92CF133BD2E694CAA520 /* FBLPromise+Any.m */, - 66FF5C7177402EF69F9E032898006650 /* FBLPromise+Async.h */, - 3B87A45E45815350DF624366426FBC52 /* FBLPromise+Async.m */, - 541DCEE9AC038D6D17A45DE00975B341 /* FBLPromise+Await.h */, - CE7ECEC0012DED25A293A50764593460 /* FBLPromise+Await.m */, - A243B843977D3FFA06D754093DA0527F /* FBLPromise+Catch.h */, - E1E28F40CBE6494D99DA31DC36109A39 /* FBLPromise+Catch.m */, - 2EA9CE05D1DFE28502DEBD3165F8C1E4 /* FBLPromise+Delay.h */, - 524035FA6C26E04B57BACCD9925A532B /* FBLPromise+Delay.m */, - 3A75C31C67E549259D25BDE159CEA0FE /* FBLPromise+Do.h */, - E8C6F2DEC642A24F2BE7C47EB26325D8 /* FBLPromise+Do.m */, - 05BFE78A90925045A780B3A8EB1F21DE /* FBLPromise+Race.h */, - A964D4988E284DA3B8D6DC7D430B561E /* FBLPromise+Race.m */, - BD0C7C30717E45F952F165E3BA7A9B7E /* FBLPromise+Recover.h */, - E16EF5514F69435C770664EF8AFE8954 /* FBLPromise+Recover.m */, - 07CCA0508B960E856C07AF0A9E944AEB /* FBLPromise+Reduce.h */, - 0DCB5DB463BB3BB168FA088925303516 /* FBLPromise+Reduce.m */, - 2685CB813C038E116759E794136F7D7F /* FBLPromise+Retry.h */, - 3A335F797F0FB9F0EC941DFFE5B83A51 /* FBLPromise+Retry.m */, - 939E77A1AA3787216ED5F1749D86D0B5 /* FBLPromise+Testing.h */, - A888E966597064B522ED26E1006DB2D2 /* FBLPromise+Testing.m */, - 1451B052EDF69823983D38AE91B6D78A /* FBLPromise+Then.h */, - DF89BA78D547469131E7663EF33DEFC2 /* FBLPromise+Then.m */, - 1318DAFB39FE3FA5EE1408916E5334B5 /* FBLPromise+Timeout.h */, - 2A8C388117B0AFE665668A5CDDF11762 /* FBLPromise+Timeout.m */, - 8A2E811D849E65D02560B4FD80EEBDD6 /* FBLPromise+Validate.h */, - 9C94965A419B71F22543CCAA2917B6D9 /* FBLPromise+Validate.m */, - 4A16F5E77A8F00736FC7EC916B21494D /* FBLPromise+Wrap.h */, - 887294FE52E59B5624DE24630AE49ACE /* FBLPromise+Wrap.m */, - BD71CCA7604C663CE9211AF74D84BE11 /* FBLPromiseError.h */, - 501AD06683AD4E27FF53EDDA150AD86C /* FBLPromiseError.m */, - 359A536046D13F9BF9A4977AA85528F9 /* FBLPromisePrivate.h */, - EE15263CF4C2C2818F862152C0AD12FF /* FBLPromises.h */, - 566EFA80A2800669F76D6B909FF4F9FF /* Support Files */, + BC1E107EAE78D582E58BD55DFE15A4EC /* GoogleDataTransport.modulemap */, + 67ED919753BA2A8CF8C1870264A7BEE7 /* GoogleDataTransport-dummy.m */, + 2C10DF7C79C9CECA6E502F5442898ADE /* GoogleDataTransport-Info.plist */, + C10F452D45F2FEEC2ACB7F3906C0A2A3 /* GoogleDataTransport-umbrella.h */, + A93B55389CE21A4C6DB378C0DBAB43C5 /* GoogleDataTransport.debug.xcconfig */, + BCA5A315512C480CE1FAB3429E3D5F53 /* GoogleDataTransport.release.xcconfig */, ); - name = PromisesObjC; - path = PromisesObjC; + name = "Support Files"; + path = "../Target Support Files/GoogleDataTransport"; sourceTree = ""; }; - AC7060B0C9CF1675B37A1ED9A33D638F /* Headers */ = { + 8F2DE65CCFF0458D0D92A0B6BFC6A8C6 /* Support Files */ = { isa = PBXGroup; children = ( - FD4ACED2DB8A4A140AB9A04983A6CAA3 /* NSError+RLMSync.h */, - 722A539D0917C5A6312EB00EE2B8107A /* Realm.h */, - 89FFF69FAB89315324004A48B8CFCEA9 /* RLMArray.h */, - D0671CDE367305EC8D3EAA017AE75ECD /* RLMCollection.h */, - 5148886951BEAF5EB22A32613ED23788 /* RLMConstants.h */, - AF0F699C939997A311DBF5CAC1FB2BE3 /* RLMMigration.h */, - C4A819A148B06A23D2615A4002E7B793 /* RLMObject.h */, - 8478BAB89219A419FF39EA29EA9E3DDB /* RLMObjectBase.h */, - 7A8F3246E32B49855933788771B1CF10 /* RLMObjectBase_Dynamic.h */, - 4C0B2031AC82B7BC3B12C3F628E06856 /* RLMObjectSchema.h */, - 8AF076A07B131408F8B113F5691D6D4A /* RLMPlatform.h */, - 928FE213F6BABD395070DBED6D711737 /* RLMProperty.h */, - C37A25646D2E45AE830BC18C39804542 /* RLMRealm.h */, - 155B23A4872917ACBE28F725DFF6F659 /* RLMRealm+Sync.h */, - 38BEFC79FC0B3038FC08CEAE376D479A /* RLMRealm_Dynamic.h */, - 2310F918A6725456B3386150ED5D4DA3 /* RLMRealmConfiguration.h */, - 9B664C77287C942F9E34C7D7D702F312 /* RLMRealmConfiguration+Sync.h */, - 1A5A8C27F0F94B75DF682413D266B486 /* RLMResults.h */, - CEC0D8039B3C2C47ADAA62D10C906653 /* RLMSchema.h */, - 2AD7C113B557EE5995A197AEC9EF624A /* RLMSyncConfiguration.h */, - 77779AED9FA8778B208FF7F453264092 /* RLMSyncCredentials.h */, - 32EDBEAFA27BF7105E9222E0C4C56E47 /* RLMSyncManager.h */, - 2F294EDF1531907DE680A2507F79C9FF /* RLMSyncPermission.h */, - CD9BCE9E2C02D1D7013DDBFA6CAE016A /* RLMSyncSession.h */, - F5526109A3EFACE19B484D5620D7D1D5 /* RLMSyncSubscription.h */, - 86FD6C2B4A05610AB2888A437DE632CA /* RLMSyncUser.h */, - 4AA413F046AFBAEA8AB95CE6974E2545 /* RLMSyncUtil.h */, - 3C46201584D8E0A2D22CBC11EB255C9A /* RLMThreadSafeReference.h */, + A4691749ACE03D3E4490D237508D0361 /* IQKeyboardManagerSwift.modulemap */, + 1CD14704836DFBBAA2A320D727DC5654 /* IQKeyboardManagerSwift-dummy.m */, + 1A0AE9E33952783CDA96AED14FD9B5D1 /* IQKeyboardManagerSwift-Info.plist */, + 6C221AF1B27128D4A7953E752AC5641E /* IQKeyboardManagerSwift-prefix.pch */, + 6794F4C1D41643AFFDCB2A9FFF834A87 /* IQKeyboardManagerSwift-umbrella.h */, + 2989F02D3A300DFBF9AE8B59A6FD2A39 /* IQKeyboardManagerSwift.debug.xcconfig */, + 239D66620DF32FD8BB09D702E83D275F /* IQKeyboardManagerSwift.release.xcconfig */, ); - name = Headers; + name = "Support Files"; + path = "../Target Support Files/IQKeyboardManagerSwift"; sourceTree = ""; }; - AEE92CCC6D5E71025FEAF6F7E6BDE086 /* FirebaseCoreDiagnostics */ = { + 8FA8922DAB2C0919055AA98B57C166DD /* Support Files */ = { isa = PBXGroup; children = ( - B874BE11309727AA21DC626A5F951215 /* FIRCoreDiagnostics.h */, - 5358FBDAF7303977A415971B059F538D /* FIRCoreDiagnostics.m */, - 659E51AD14E5565FB071605E73BE2BA0 /* FIRCoreDiagnosticsData.h */, - 581706FDA11032852763BF85646ED803 /* FIRCoreDiagnosticsInterop.h */, - 85F7AB2BB7587C5C389E17636045425D /* firebasecore.nanopb.c */, - D9B4086214658B5946EA02E2752A0243 /* firebasecore.nanopb.h */, - C852C2952632770EDFE442EE60514438 /* Support Files */, + 1253F99226CEEFA9B7E64A60720D033A /* FirebaseCore.modulemap */, + 7A4E2652D3A51538F369A7816AA75A9B /* FirebaseCore-dummy.m */, + 41C0DB8A35FCF8AC9736A6044FFB28F3 /* FirebaseCore-Info.plist */, + B6FA7B9BF5B0983846E6E5E452BB8A81 /* FirebaseCore-umbrella.h */, + 3AFF407D41F79B206C4ED6F608AC9214 /* FirebaseCore.debug.xcconfig */, + C1715560CD6D3A25E429A0A260C5ADA5 /* FirebaseCore.release.xcconfig */, ); - name = FirebaseCoreDiagnostics; - path = FirebaseCoreDiagnostics; + name = "Support Files"; + path = "../Target Support Files/FirebaseCore"; sourceTree = ""; }; - AEEFC69DEC95833198B4C65A942C0E94 /* Frameworks */ = { + 9DD82AB53B5DD795397E84AD2CDD5890 /* IQKeyboardManagerSwift */ = { isa = PBXGroup; children = ( - 58B57B98CE0FC88B70A4F95937983B2F /* librealmcore-ios.a */, + 1271A1543FC34B052F555BCCB28A5380 /* IQBarButtonItem.swift */, + 39685141D196933DC50441D7F8CC70C6 /* IQInvocation.swift */, + 96D337AE4A370ACFEF6EFFFDF7E98259 /* IQKeyboardManager.swift */, + C847101AD300EFAFC10F780ADCA9E593 /* IQKeyboardManager+Debug.swift */, + 0D844984E98E7424570911761BD9B9B7 /* IQKeyboardManager+Internal.swift */, + A54711595F78D8E4A4C98B920C25EE07 /* IQKeyboardManager+OrientationNotification.swift */, + CDB0DA85ABB129CF78ECEBA518892920 /* IQKeyboardManager+Position.swift */, + 9EE659580816A7DD04738971D08C481D /* IQKeyboardManager+Toolbar.swift */, + A3D98957A559D62480662DA35BA325AE /* IQKeyboardManager+UIKeyboardNotification.swift */, + C7423129F4E9D30FD62BBE7BE1E352E6 /* IQKeyboardManager+UITextFieldViewNotification.swift */, + ADBF783F176F3612588EA416FDD05F2F /* IQKeyboardManagerConstants.swift */, + B662C14AA32764258248147132467EA1 /* IQKeyboardManagerConstantsInternal.swift */, + 7FCA132268E23CE5CC40BF77BC455EC2 /* IQKeyboardReturnKeyHandler.swift */, + C0CFAB0F316EAABE8BB39B89FB37A86E /* IQNSArray+Sort.swift */, + 652B9C49262C1D41786BA997BB665585 /* IQPreviousNextView.swift */, + 8607A349742D091607CE66A99A57A798 /* IQTextView.swift */, + 0C5EAE6515A98F6798C3877BE70EC989 /* IQTitleBarButtonItem.swift */, + 2516768042410629379B76D78BCDABF0 /* IQToolbar.swift */, + 59A9022453BEFEFA7662103158E162BB /* IQUIScrollView+Additions.swift */, + 5F05DD265455B69C332AAEE9DE02AE04 /* IQUITextFieldView+Additions.swift */, + 9C093E21AEEC109D6569BE9FC473A434 /* IQUIView+Hierarchy.swift */, + 6CD46BAE712C73065009FCB58F13B4F2 /* IQUIView+IQKeyboardToolbar.swift */, + 24F4020A274C6C9968F96807F3298F5B /* IQUIViewController+Additions.swift */, + 8F2DE65CCFF0458D0D92A0B6BFC6A8C6 /* Support Files */, ); - name = Frameworks; + name = IQKeyboardManagerSwift; + path = IQKeyboardManagerSwift; sourceTree = ""; }; - B38BED8B4B866B25C28050CCA1E272AD /* Support Files */ = { + A4686910B10BD9982C97B8E70363334D /* Support Files */ = { isa = PBXGroup; children = ( - 5D1052EB83107367AB1BEB6C72F23502 /* GoogleDataTransport.modulemap */, - 2188C48F8C4870DB2ADA3BFE10060920 /* GoogleDataTransport-dummy.m */, - 2DAEF97FD92E359D4F8B69972A55DC01 /* GoogleDataTransport-Info.plist */, - 8838114C26F8D66D8AFD974AEE78EE20 /* GoogleDataTransport-umbrella.h */, - 748C44B0F30FF0C186DDF67405F8E1E6 /* GoogleDataTransport.debug.xcconfig */, - F223157149EF109E4C6DD2D757BD138E /* GoogleDataTransport.release.xcconfig */, + C25452D28424FF460074B1390D4AE2E8 /* SDWebImage.modulemap */, + 03C3BF23D82E8C0C06EBB0DAD4BD8D07 /* SDWebImage-dummy.m */, + 8FBDCFA96754F62BC07FDDCA84D6551E /* SDWebImage-Info.plist */, + F19659F8EFB5563A572BD0094F1053A4 /* SDWebImage-prefix.pch */, + D7B6359FA6FE4D1A19A2173369B213A1 /* SDWebImage-umbrella.h */, + 253EAAF31418DB93D32BB190E09A5E61 /* SDWebImage.debug.xcconfig */, + 196ACE4F3702EB309112A01BAAA80186 /* SDWebImage.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/GoogleDataTransport"; + path = "../Target Support Files/SDWebImage"; sourceTree = ""; }; - B632687F885461262B02539150FBDAD0 /* Support Files */ = { + A851C75B9670B681AFE534BC936A8BE7 /* GoogleDataTransport */ = { isa = PBXGroup; children = ( - 819B7BE18B15159139374F5ECBD24101 /* IQKeyboardManagerSwift.modulemap */, - AF45B79E4B0FBA86E0B6467CBD42CEE1 /* IQKeyboardManagerSwift-dummy.m */, - 228997D5E6396605D390F8D4345155E4 /* IQKeyboardManagerSwift-Info.plist */, - F7C580EF3F47E29E253BF2561C6319B8 /* IQKeyboardManagerSwift-prefix.pch */, - 0F8884BB64A79D96185E4A06A46C0141 /* IQKeyboardManagerSwift-umbrella.h */, - 1E95D11E343E352E861832FC81DBD7A9 /* IQKeyboardManagerSwift.debug.xcconfig */, - 4D7A158188945A292C7229C1B0F81CCD /* IQKeyboardManagerSwift.release.xcconfig */, + 301DC1A682D522356B7B05C682A2178B /* cct.nanopb.c */, + 9A385DA5505B3D33CCDE3B8AD93AB7B5 /* cct.nanopb.h */, + 6B106CDB4B99099BA2C08B7C4EA25BEA /* GDTCCTCompressionHelper.h */, + 6EF0F8E949D61223B76B4D795E8D9010 /* GDTCCTCompressionHelper.m */, + D105C584FD61CDFBEBF928E7D917BAAC /* GDTCCTNanopbHelpers.h */, + FF7103830A0D8D42D9760A4ED44A2F83 /* GDTCCTNanopbHelpers.m */, + 6F7EB1F9ECCD5AE03E5F10FCE68FF1BE /* GDTCCTUploader.h */, + FD5A7A4A775F2FA9C153E805F913AA0D /* GDTCCTUploader.m */, + 02A3D844B9131010E4CE4782112088B1 /* GDTCCTUploadOperation.h */, + 2BBFBE048CC7616F01FCDFD89F2EC8FD /* GDTCCTUploadOperation.m */, + EBD1B54F860E526FDEF048BBEE5E4505 /* GDTCORAssert.h */, + C4F2EEAC8E682AF81649EDB99F4871B7 /* GDTCORAssert.m */, + 9D344218986461A48E21BA64D17721FC /* GDTCORClock.h */, + DBC07DCD17235CF916393C00C423339E /* GDTCORClock.m */, + E7871376CEAB6CF4AF675C223A79838D /* GDTCORConsoleLogger.h */, + 35350DE1440D129F75DD619CFA52EEFC /* GDTCORConsoleLogger.m */, + EBBA7C0F72C12D0E9174320C669E0D06 /* GDTCORDirectorySizeTracker.h */, + C977FDAF3D1325FD03E94C2B1CED0412 /* GDTCORDirectorySizeTracker.m */, + F5ED064ED60C9AE4B23335CFCEB2F512 /* GDTCOREndpoints.h */, + 158F6B7F337E16D60C6EC42CAC92B984 /* GDTCOREndpoints.m */, + 677F023889847F06D08B9418023C07D4 /* GDTCOREndpoints_Private.h */, + 05A65261C9148BCCE7C935337988C5C5 /* GDTCOREvent.h */, + F9890802352368079A87804738221C37 /* GDTCOREvent.m */, + CDEB0E087A82FE00931F355ECE393524 /* GDTCOREvent+GDTCCTSupport.h */, + 433AB0250C2751F438843DC418BFACEF /* GDTCOREvent+GDTCCTSupport.m */, + AFE7068B91963A64D7C4128874DDB6F7 /* GDTCOREvent_Private.h */, + 7DA9B39A2B90F367E7A6BC98125FC30C /* GDTCOREventDataObject.h */, + 6E79D5F823F26490736D3ACF33562F10 /* GDTCOREventTransformer.h */, + D2ED4DE994D2B160D38E58A958983D1C /* GDTCORFlatFileStorage.h */, + 66CC2499398F88BBC4623E0C724E9441 /* GDTCORFlatFileStorage.m */, + 173BB89C74EDF388533011E15206D618 /* GDTCORFlatFileStorage+Promises.h */, + F0661C4F83EA9E4497F47E235880FA6A /* GDTCORFlatFileStorage+Promises.m */, + C36C6746AB974F043E7930AF68B52178 /* GDTCORLifecycle.h */, + 175D841F6C2A409853B98E88723029A5 /* GDTCORLifecycle.m */, + 2EA46C16911E09AA35F596EB0ECD3431 /* GDTCORPlatform.h */, + E9EFA400AF46093F84CD72A36C3DFF13 /* GDTCORPlatform.m */, + 8207D25452E8B924F7358EB025B3FC8C /* GDTCORReachability.h */, + 4AA20EA1311ADE78FD1CF8BB0EA8276D /* GDTCORReachability.m */, + AC431187E16C2E3F6A7050C2FDA0B447 /* GDTCORReachability_Private.h */, + C7E01CF0697350C146A56F6AE62EEC72 /* GDTCORRegistrar.h */, + BBC9DFBCF8FCF44430F1F97EB402FB05 /* GDTCORRegistrar.m */, + EF983320F0CD0D802FFB0D358CDD49C2 /* GDTCORRegistrar_Private.h */, + E1ADFDC48B5E76B1144C314CD46892DB /* GDTCORStorageEventSelector.h */, + 2310543941A54A3646D841D1F49AB2BD /* GDTCORStorageEventSelector.m */, + 747C2C807F81EBA99E2020E69BA5B31C /* GDTCORStorageProtocol.h */, + 5828C1BB14128916DE0B5C809ACDA0BD /* GDTCORTargets.h */, + A6B262D269D710E9578DA2177B9B1F07 /* GDTCORTransformer.h */, + CF4B25A7B37315886FEB08C03BD077FD /* GDTCORTransformer.m */, + 714F94EB2642B5ED903E63F27E37BA7D /* GDTCORTransformer_Private.h */, + 2046ECE5BE6FA08DD97CEBC197948AA4 /* GDTCORTransport.h */, + C741CCA4ABA26F960A72AF9FB64BD97A /* GDTCORTransport.m */, + 1510CC3127861D6044166660206EA1E4 /* GDTCORTransport_Private.h */, + BE849E713DD4116CC8BB99BD6F12B32B /* GDTCORUploadBatch.h */, + 7439F217070FB579B7E2900147758F09 /* GDTCORUploadBatch.m */, + 2EC53384D4743591FB5FE0E9F8D0F85A /* GDTCORUploadCoordinator.h */, + 089A750ED63C64F3A5DB59A500EF5F76 /* GDTCORUploadCoordinator.m */, + 3C5C0C38CF10DAC937D84A8B98840B30 /* GDTCORUploader.h */, + A4BDD17ED4FF436E7A853091CC3CBAD6 /* GoogleDataTransport.h */, + 8AD4530AD4E370F191ED337D64D55B07 /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/IQKeyboardManagerSwift"; + name = GoogleDataTransport; + path = GoogleDataTransport; sourceTree = ""; }; - B85B4A80089BF7D27E06C407C8FDC71E /* Frameworks */ = { + AAD03B42B541E5ECC4BD16673B7D1538 /* Toast-Swift */ = { isa = PBXGroup; children = ( - 474FDBF5FF8966AFDB911BACA2C5BA7F /* FBLPromises.framework */, - BEEEF23218AACC11863C1A3E2EC98785 /* FirebaseCore.framework */, - FB11C2119CDFFAD882507DE400C57E14 /* FirebaseCoreDiagnostics.framework */, - 3E4A7C20A6E2E91AB1AB49340B5A6FFB /* FirebaseInstallations.framework */, - 94EEDDE0868EDDF2409DB678DFA0047C /* GoogleDataTransport.framework */, - 660A5577CA9AAF26647707D912A886CC /* GoogleUtilities.framework */, - 4AFC5C54F905DDB55FDA199F580E0FF1 /* nanopb.framework */, - 1FC94920448D483EBCEEFD5A74D40405 /* Realm.framework */, - E3775A639F986F973A846594AF1C88A0 /* URITemplate.framework */, - D24CFBE657599F21ABB2E00B7B43D841 /* iOS */, + 9AAF5A18737624C27C29A00C2B1C2EE4 /* Toast.swift */, + C38EB31C0F7A60D93BB031842CF60403 /* Support Files */, ); - name = Frameworks; + name = "Toast-Swift"; + path = "Toast-Swift"; sourceTree = ""; }; - BA902DE0A232094978B3B9AEC91C2D72 /* Alamofire */ = { + AF921DF3DF498C48BD63CA5ECA8AB7B6 /* NSData+zlib */ = { isa = PBXGroup; children = ( - FEF085D550281E8F9D45B3750525813F /* AFError.swift */, - F7683C233198F76119B2913778EDC888 /* Alamofire.swift */, - F73C5B7E4C35698D7FF385B7D4BA390A /* AlamofireExtended.swift */, - 418077CEAAD453A2CE0566D5E5509F1F /* AuthenticationInterceptor.swift */, - D16CEF36A0128B3057A296A717343973 /* CachedResponseHandler.swift */, - E20A0DBB1253EA7D9C737FA70AAEAF75 /* Combine.swift */, - 6E92F316CA8D3C689A4B512AC5541A4C /* DispatchQueue+Alamofire.swift */, - 8A81254465733788AF582A774ADB2F8E /* EventMonitor.swift */, - 041F6080E6F1B8BA523C6C2E5F0CC9D9 /* HTTPHeaders.swift */, - 30E2B292ED156DC221F0CDE53D2CBA2B /* HTTPMethod.swift */, - AFD5D75C949346B5A675325C42941FAB /* MultipartFormData.swift */, - 7A9141B5DBAFD79279A115AFCA1750D9 /* MultipartUpload.swift */, - F1C9D20BC0685850FD85B8F43A978FD3 /* NetworkReachabilityManager.swift */, - C7B17512A55EB4D4F2C7FB23B9359A69 /* Notifications.swift */, - 593E670A8A84C0577E491FD16DF8F4CD /* OperationQueue+Alamofire.swift */, - 0692B33FFCFE498DB4CA452B9728A3B6 /* ParameterEncoder.swift */, - D89A4E1938B16D8F672779FD42648F62 /* ParameterEncoding.swift */, - 5A8B1E2C47B8DCFA7C15A6BC6FFF8E79 /* Protected.swift */, - F6644CDBF39A33650B04A1D545BE7012 /* RedirectHandler.swift */, - 36F9D0013D1BED072F46FB7E4D1C6081 /* Request.swift */, - E88CA31B7293EE064978112B11BB5F14 /* RequestInterceptor.swift */, - EEF0415B5FB58AFE32EFE358CE6B6C30 /* RequestTaskMap.swift */, - 626528A463AED29883E476C13F15A539 /* Response.swift */, - 9944EADD281B8543B43FC6FF7856CD2E /* ResponseSerialization.swift */, - F72403B4A012D71CF64CFE363C1444DD /* Result+Alamofire.swift */, - 47BBD24AF2DFA5C4B802260B7E1085C9 /* RetryPolicy.swift */, - 6F7589184FD469326D0CDDEE6348B467 /* ServerTrustEvaluation.swift */, - F81D75DDED82AF551A1BC2FA6DDCEE3C /* Session.swift */, - FB7465975D38C5C6724AA697079DA5F8 /* SessionDelegate.swift */, - 3F511A39ADC1E231659A49E1436A6C0A /* StringEncoding+Alamofire.swift */, - ACD44C588D10AA6CA23A48117EE36567 /* URLConvertible+URLRequestConvertible.swift */, - 4345FCEF681F59EF390184CE72D0E6CC /* URLEncodedFormEncoder.swift */, - 71492E04EE0DDE32FA529F56DBAD25D9 /* URLRequest+Alamofire.swift */, - 5D8933C06F028BDDEECF70B616763139 /* URLSessionConfiguration+Alamofire.swift */, - 969774418A140466BFBA6A018E612159 /* Validation.swift */, - EF0381700BD8A60BE9DF18237689FA97 /* Support Files */, + 0D87293269F3DB091255FFC22359A44A /* GULNSData+zlib.h */, + 1FC66F48CACC09AAC6190A0D13F6C8CB /* GULNSData+zlib.m */, ); - name = Alamofire; - path = Alamofire; + name = "NSData+zlib"; sourceTree = ""; }; - BAEFBE3E4A316ECC5E1A85D0C430787E /* URITemplate */ = { + B1899A90E6F7E8825433C8E003CF3A2A /* Support Files */ = { isa = PBXGroup; children = ( - 0C19E2A60F3775C60A9664BA403F4135 /* URITemplate.swift */, - 02E3DCFB9DF61C66DC0FF5E62544A142 /* Support Files */, + 118CAEC0E0CE6DFF0DEB62741D592ADF /* GoogleAppMeasurement-xcframeworks.sh */, + 91A7812DE61C21F1BBB8FE1A9A3CE839 /* GoogleAppMeasurement.debug.xcconfig */, + 997C62088E31C19A6E01FD622DF9C368 /* GoogleAppMeasurement.release.xcconfig */, ); - name = URITemplate; - path = URITemplate; + name = "Support Files"; + path = "../Target Support Files/GoogleAppMeasurement"; sourceTree = ""; }; - BF90C98772B4F00D6E6A390F22BFEADF /* NSData+zlib */ = { + B4CFD9142515DE181B82FF5707AD953E /* Support Files */ = { isa = PBXGroup; children = ( - 80F21AA0F6A19D1C67E18AC6699D10D1 /* GULNSData+zlib.h */, - 958A521B7187AF658E3D39DBCF912ACF /* GULNSData+zlib.m */, + 46E3F6903676E051C59EBAF339DC56B5 /* Firebase.debug.xcconfig */, + CCBC26BBD5A53F46900FAD9DDC727261 /* Firebase.release.xcconfig */, ); - name = "NSData+zlib"; + name = "Support Files"; + path = "../Target Support Files/Firebase"; sourceTree = ""; }; - C11DB2ABE66F0D316B701B9043AC393D /* Core */ = { + B540582CF641A3A2086686F24D8B98FD /* Products */ = { isa = PBXGroup; children = ( - 8B270A963EE131B68F100CA2D61652BE /* Builders.swift */, - C5233055C26DB8D380E7619D877CFC75 /* Matchers.swift */, - 31EED164FF5843CCDDBF9C914BD41B35 /* Mockingjay.h */, - 35CADD0DB9B3DF2FC6ADB24779449323 /* Mockingjay.swift */, - EA34BF97FF7FDABA9337BB0A8A9589F0 /* MockingjayProtocol.swift */, - 36CCB995FB5B9BF5BA18B6B93BE6421C /* MockingjayURLSessionConfiguration.m */, - A05F4580ED3412CA66F556B74BA1DCA5 /* NSURLSessionConfiguration.swift */, + D6E470A0C684D4FBC08BDF7A28A2A38B /* ActionSheetPicker-3.0 */, + 5D797E9A5C5782CE845840781FA1CC81 /* Alamofire */, + F81274EDB681F11E7CB05F7DCA2BB33C /* CryptoSwift */, + E2B63D462DB7F827C4B11FD51E4F8E2D /* FirebaseCore */, + 8CC9178C366942FD6FF6A115604EAD58 /* FirebaseCoreDiagnostics */, + 13C8C8B254851998F9289F71229B28A2 /* FirebaseInstallations */, + 5B654B4B042BA7DC93766943A643E42B /* FirebaseMessaging */, + 856B5CD56F194FAD26EA91620B66D614 /* GoogleDataTransport */, + B43874C6CBB50E7134FBEC24BABFE14F /* GoogleUtilities */, + A8E950A16D00F649C54FFB30F81D7842 /* IQKeyboardManagerSwift */, + 3D24851DF2A7139150ADCA3F485D00DC /* Mockingjay */, + 06FC5C9CF96D60C50FCD47D339C91951 /* nanopb */, + 6E611D764C8C487C549D638A5B6A2D15 /* Pods-MyStudies */, + 21CA59B37340EC61A8C33CF7650E10C7 /* Pods-MyStudiesTests */, + 3347A1AB6546F0A3977529B8F199DC41 /* PromisesObjC */, + 21B03CA622E690725A6626C088E1D09F /* ReachabilitySwift */, + 921BE4A82C4A7A5C72A0C6F8B8FEF200 /* Realm */, + 437919EE08EC6BFCCBAC3BD346309742 /* RealmSwift */, + B0B214D775196BA7CA8E17E53048A493 /* SDWebImage */, + AA3D52B90DA35D0F7E1B931F0514B7B2 /* SlideMenuControllerSwift */, + D6043471C96F93DC41F7DD1E0D7D8B35 /* Toast-Swift */, + 6A92D13ACA76A198281BA4FC0F5CBAD0 /* URITemplate */, ); - name = Core; + name = Products; sourceTree = ""; }; - C3EEB1167738230F06D981140D7EB03B /* Support Files */ = { + B5E2B3B6321FA70167DBC5839850AAAE /* GoogleUtilities */ = { isa = PBXGroup; children = ( - 63F1678CFD09A6C1192E25AF692DE257 /* Realm.modulemap */, - 947B7AB29E527E934E6960DB9EDB8202 /* Realm-dummy.m */, - 347C1F87E1B278AAC467E3F75112F018 /* Realm-Info.plist */, - 0E4D6D92C3C044BBB1AFC0B639A10849 /* Realm-prefix.pch */, - A5AE73314B78EE62CD2BB6BB6C2EB58A /* Realm.debug.xcconfig */, - C885D17E303681AA196E0B45CBD18D23 /* Realm.release.xcconfig */, + 513820468E2FF18EB880B044D73749AD /* AppDelegateSwizzler */, + DB2AC6813FFF74B73DF08DF7D736C407 /* Environment */, + 15128E8F88C2AB6E6E46A75C94D90149 /* Logger */, + E013BC099E72750F36D07B3BFB9F0000 /* MethodSwizzler */, + D99143A6A120C2492FC7D5C160088BF4 /* Network */, + AF921DF3DF498C48BD63CA5ECA8AB7B6 /* NSData+zlib */, + 8AD12ADA42BF005BA9EBCE9418569B03 /* Reachability */, + 2C81FA08262B9AEBE35BC73BE695DCD8 /* Support Files */, + 432E0DAF1E3907A18C3989D808679235 /* UserDefaults */, ); - name = "Support Files"; - path = "../Target Support Files/Realm"; + name = GoogleUtilities; + path = GoogleUtilities; sourceTree = ""; }; - C5ABDAC6A3BFFD17932093D8AB878447 /* AppDelegateSwizzler */ = { + BAB879B44C7A948B7DAADF1A40AA4966 /* FirebaseCore */ = { isa = PBXGroup; children = ( - 9E38033C3311FDBF035B7AC4D172C929 /* GULAppDelegateSwizzler.h */, - C4A4E6AA5752EAB9E5560907951CC854 /* GULAppDelegateSwizzler.m */, - D32B1890FD584A4CC7C74B4D84BCB769 /* GULAppDelegateSwizzler_Private.h */, - 49F2621FB242E5BE194D8ED62819185E /* GULApplication.h */, - E7C6B800A7EFF50A9A1DCBA6601E5E35 /* GULLoggerCodes.h */, - 9EF6C70D9C692FDA7EF6AFFE0C205737 /* GULSceneDelegateSwizzler.h */, - 49704C776C03DB5D973207C9C54D0E7A /* GULSceneDelegateSwizzler.m */, - 105F0F4818FB674A5888D58E8BBCD69E /* GULSceneDelegateSwizzler_Private.h */, + 9217E55EEAC79CDDFFA16D67DC738B35 /* FIRAnalyticsConfiguration.h */, + 15A0BCF2B12B2799651BFAC082027F15 /* FIRAnalyticsConfiguration.m */, + 61561838FE4384FD4971B7FBC488CCBC /* FIRApp.h */, + 7F4E01FCAD0DC75A625B94AECD417659 /* FIRApp.m */, + DCB67F419572AC3ABBE0EF5A1B764982 /* FIRAppAssociationRegistration.h */, + AC5D7ECB262E7A59B1C880493F798D61 /* FIRAppAssociationRegistration.m */, + 4C6A257FF276CE5534AD997BCB16EB70 /* FIRAppInternal.h */, + 087EA6523FE31CCFA6065FE327F8C347 /* FIRBundleUtil.h */, + 586F8346074F0F8A9D76F6CC518E2807 /* FIRBundleUtil.m */, + 66456E822A392BF9E98C839A7B878610 /* FIRComponent.h */, + EC0D95CF0909041AD56E36B0770F241B /* FIRComponent.m */, + D520C9C73C22B14CE2B603ABC839F4EA /* FIRComponentContainer.h */, + 11B2F1350462148ECF81B6564429DC5C /* FIRComponentContainer.m */, + E8995ADD90CF0D3B446C426A30A79B9E /* FIRComponentContainerInternal.h */, + A5AF03F87480F24C4F0E615FFB805B95 /* FIRComponentType.h */, + 005415C2416F043F336BC633C2E71162 /* FIRComponentType.m */, + FC0EFDB5042C20A87E201DF6789DE66A /* FIRConfiguration.h */, + 27DEA7D794F00A123D85FE61B4C7F6B0 /* FIRConfiguration.m */, + CAA6054A2F5B34718BFFF6EF61795C0C /* FIRConfigurationInternal.h */, + E453C157683D721DF09A49130CC7A5C6 /* FIRCoreDiagnosticsConnector.h */, + 486335F788645CFE83B2FE7E48A018B9 /* FIRCoreDiagnosticsConnector.m */, + A48BDEDD3B08E868AF5E71FB76873D30 /* FIRCoreDiagnosticsData.h */, + 0982B24C7A90D05306A76DDAF3CA0F61 /* FIRCoreDiagnosticsInterop.h */, + 4AC980C3C48910AE631078552DF53515 /* FIRDependency.h */, + D030D0BD373ED9195BFD874641E77761 /* FIRDependency.m */, + F741AEFF3E6C1F082229C1D03F778740 /* FIRDiagnosticsData.h */, + 78F701D011E4E0AE6BBCE0C13A9639D5 /* FIRDiagnosticsData.m */, + 026726DB5A61D8558D133CAD606BD6EF /* FirebaseCore.h */, + 8B73F422130E3173C51DACD28AF77628 /* FirebaseCoreInternal.h */, + 784D1561B788F0DCA445E4B459D70610 /* FIRFirebaseUserAgent.h */, + DA441CDF43BF037EA940DB6B00989644 /* FIRFirebaseUserAgent.m */, + B664FA00888280F042E3716933B5B584 /* FIRHeartbeatInfo.h */, + 8B141D56D9E09D8D0EAC98D26ACC4FCD /* FIRHeartbeatInfo.m */, + B31A25F13A5D459B1F14D725B54383F9 /* FIRLibrary.h */, + 09B0014F0D58BBA420CE6E37538B4761 /* FIRLogger.h */, + E4CDC40665BBA0AFC6509C4BA8F17494 /* FIRLogger.m */, + 37AB95B73B3E07FBC1C21E8C11FD64D5 /* FIRLoggerLevel.h */, + C48DB19EEC7823E486CE4E5F512CB1E5 /* FIROptions.h */, + 0EC6C19B7F3FAD3D16CA4E97360D0E5D /* FIROptions.m */, + DBE6B60D6F4050CC31082057F8AA4CB3 /* FIROptionsInternal.h */, + 2C84B9FBADEAED841694D655A99B8923 /* FIRVersion.h */, + 69BB52D815D0D5F759691A96723B1F1B /* FIRVersion.m */, + 8FA8922DAB2C0919055AA98B57C166DD /* Support Files */, ); - name = AppDelegateSwizzler; + name = FirebaseCore; + path = FirebaseCore; sourceTree = ""; }; - C8250A0718CB6A9C83E7670FA1D398DB /* CoreOnly */ = { + BC3A093A3552BA1FD895B4497C024BEC /* Support Files */ = { isa = PBXGroup; children = ( - 2926C8352FEFD9E4E4A0A5C4841CF3B6 /* Firebase.h */, + 950DAECD0F1B40F2774FAA292CB28D23 /* Mockingjay.modulemap */, + D46CABB6AA5C975EAD3BAB5B83B1DE48 /* Mockingjay-dummy.m */, + 50F95FD971FA0EF0B15A6714A629D84A /* Mockingjay-Info.plist */, + 6062F87D1BE8728BF0C977EB8B3085C6 /* Mockingjay-prefix.pch */, + 548AC30CD88D0FF1EF91B1F7458FC1CE /* Mockingjay-umbrella.h */, + 49D9C32DF72C2034EEF6B470123FC589 /* Mockingjay.debug.xcconfig */, + C13A7982B95943369894B56EC6A3768F /* Mockingjay.release.xcconfig */, ); - name = CoreOnly; + name = "Support Files"; + path = "../Target Support Files/Mockingjay"; sourceTree = ""; }; - C852C2952632770EDFE442EE60514438 /* Support Files */ = { + C36811C066E36BDF059E8055F7934544 /* FirebaseInstallations */ = { isa = PBXGroup; children = ( - 6B21A569299928E991D5A12EB57C3E89 /* FirebaseCoreDiagnostics.modulemap */, - 4C658F80BADD9BF0AFF419083A18A3F0 /* FirebaseCoreDiagnostics-dummy.m */, - 2348BB82646E9C334BA33BC1391D23B7 /* FirebaseCoreDiagnostics-Info.plist */, - E90B933539CBEAA65AE4B02FDB3E02A3 /* FirebaseCoreDiagnostics-umbrella.h */, - BB1390DC0B6FE19D06D3CD0F0F9018D6 /* FirebaseCoreDiagnostics.debug.xcconfig */, - 18E1D6D55119A8A07D1CBC8E856AB124 /* FirebaseCoreDiagnostics.release.xcconfig */, + A29E0AEB7A9DFCB7DCB70CD1139E55AF /* FIRAppInternal.h */, + 132A884C065390DEDD73CF188A337C69 /* FIRComponent.h */, + B6365B07E1474F38E235B0BFA41235A3 /* FIRComponentContainer.h */, + A43B584962FB87A9150DED9737AE77DD /* FIRComponentType.h */, + 427735807BF753B50B7BC8E4D8EAB63A /* FIRCoreDiagnosticsConnector.h */, + 46CD44D8B32167812095788FC33F28C9 /* FIRCurrentDateProvider.h */, + A9863CC699E01F4C113719512EC56875 /* FIRCurrentDateProvider.m */, + 1925FF0F5EEC34AE2C4AAA1C6226AC70 /* FIRDependency.h */, + FA5F1C0536B9B401241D07209538E945 /* FirebaseCoreInternal.h */, + 140F933732FF837397C6367587633C1F /* FirebaseInstallations.h */, + 5FA13C0279C883576F45A9BF6C23D2C4 /* FirebaseInstallationsInternal.h */, + 56CACBBF9EB3EEBF42A892D32515ABC9 /* FIRHeartbeatInfo.h */, + C74AC6F44145A1174ADC3524004ECB59 /* FIRInstallations.h */, + 602237D7A9DA1D545D0DF0DF8D21C58F /* FIRInstallations.m */, + DFA827099EF53464E4AB2AF1FCFE736A /* FIRInstallationsAPIService.h */, + 63602BB28A0255038A646BEEC0159C32 /* FIRInstallationsAPIService.m */, + FE4CA524C28F954B2FFA2843A010E3EE /* FIRInstallationsAuthTokenResult.h */, + E4FAF77A0C5352DBB8DF36B550909EC7 /* FIRInstallationsAuthTokenResult.m */, + 147A20BCBAAABC8CA2DF2DE1A3BC7DF2 /* FIRInstallationsAuthTokenResultInternal.h */, + 29CF6BAC9C5524BEE6735290DE18A7C1 /* FIRInstallationsBackoffController.h */, + EEC8ED997E9EE6E0100B6B23CAB2E9EF /* FIRInstallationsBackoffController.m */, + 0C708CC7FEEA0AFC0ECF4BC6F05C2EA8 /* FIRInstallationsErrors.h */, + BA3D5F08617F4431081E3A2BA17C9571 /* FIRInstallationsErrorUtil.h */, + 3CA89701332D4E50361C72D1A0839ACD /* FIRInstallationsErrorUtil.m */, + 2AF4AB6D6C07698036A9FBDCB500EAA6 /* FIRInstallationsHTTPError.h */, + 2052C40B6071A9CB9E6B8D76A0AE30C0 /* FIRInstallationsHTTPError.m */, + D57B019B8248B7C05431DA8D1173BC10 /* FIRInstallationsIDController.h */, + 363BE38567B7028F170130B1B981D6CE /* FIRInstallationsIDController.m */, + 9C4BAD4FBF7AABC17A63713E4D8A60E2 /* FIRInstallationsIIDStore.h */, + 686B1F616D2D3CED7750A0D9071D8EF2 /* FIRInstallationsIIDStore.m */, + 885B5658215645D47FAECA22A261F827 /* FIRInstallationsIIDTokenStore.h */, + EBBE97B22CEAD2CB6FC677808EE74719 /* FIRInstallationsIIDTokenStore.m */, + 846EE9201BAD3CE3317DFAD5D53A3E48 /* FIRInstallationsItem.h */, + E14A6B6C80B5DCE17D79BFE0E12CBBE2 /* FIRInstallationsItem.m */, + FDEA2897F27B3332B9757D887FFD9C38 /* FIRInstallationsItem+RegisterInstallationAPI.h */, + F76E17FE12A073AEEE3E1D4B0C329494 /* FIRInstallationsItem+RegisterInstallationAPI.m */, + 6CBF2212D72C4FDCABDD41EAE473C741 /* FIRInstallationsLogger.h */, + 6B4BB533058FE937737E9954037611C7 /* FIRInstallationsLogger.m */, + FF08565BA8FF4FB2B2B6087526AD6184 /* FIRInstallationsSingleOperationPromiseCache.h */, + 2B6641D11BC7AC86FB0829F329CD9610 /* FIRInstallationsSingleOperationPromiseCache.m */, + 02805E74472A36252E661179D4F2BC08 /* FIRInstallationsStatus.h */, + F0E9969E0A710B2EA86FE461BC91E41B /* FIRInstallationsStore.h */, + B8B924018F65BFB3F44814382A590837 /* FIRInstallationsStore.m */, + 72A9B93B24EAB754E87D4959978F5193 /* FIRInstallationsStoredAuthToken.h */, + 615E3A444EE37594627883F244711AD8 /* FIRInstallationsStoredAuthToken.m */, + A3F5694700CDE9DBBBBCA7EC5A96B1DB /* FIRInstallationsStoredItem.h */, + AB86C6C2A0C8AB4560B91A98D5E6EA54 /* FIRInstallationsStoredItem.m */, + C6CA19FAAE9C5CDC570FAFAB849010FC /* FIRLibrary.h */, + A03E41D63456BE46AA54BC5B6EC02C84 /* FIRLogger.h */, + 04C3178B389F61C6A8327FAFAF0A4D7B /* FIROptionsInternal.h */, + 67402BF9ED12DE580B03F4F1416B8EF7 /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/FirebaseCoreDiagnostics"; + name = FirebaseInstallations; + path = FirebaseInstallations; sourceTree = ""; }; - CA78F0C08594D9ABB23B87C2CF7216EA /* Support Files */ = { + C38EB31C0F7A60D93BB031842CF60403 /* Support Files */ = { isa = PBXGroup; children = ( - 4AB99F15401665EED48F2DCB2FB2F122 /* nanopb.modulemap */, - 386DE82B6615203FECE5C4CA67E66DF4 /* nanopb-dummy.m */, - 6984E3A265318374C18C92B277030130 /* nanopb-Info.plist */, - 23B2179510831837DFEEEDE340AD8646 /* nanopb-prefix.pch */, - E916E009B186A1E251F964603947E671 /* nanopb-umbrella.h */, - BC7DC13ADB8C72B54E0F6BD9CD66CE69 /* nanopb.debug.xcconfig */, - 901BFCF017E527D8CE1C06227E6CD344 /* nanopb.release.xcconfig */, + 53FD448BF9AA064AEA9DD8D12BCE6D84 /* Toast-Swift.modulemap */, + 5CA71DBDD2BE853B0EA3B8ECDA9BA6EF /* Toast-Swift-dummy.m */, + 098ADCDD0F84837A726FE07A8BEE2882 /* Toast-Swift-Info.plist */, + 4AE58B349D1534C90080FC30892B1FD3 /* Toast-Swift-prefix.pch */, + 2182CACFEEDBB7D7AE3233A901E28526 /* Toast-Swift-umbrella.h */, + 21FEDA89A23387679FAD97F0EFB38224 /* Toast-Swift.debug.xcconfig */, + A26050B8CF3CBAF05B5E6E1EDC3155A2 /* Toast-Swift.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/nanopb"; + path = "../Target Support Files/Toast-Swift"; sourceTree = ""; }; - CB02B0DF2F527E51B5BF287E230C10A2 /* Firebase */ = { + C40C6A76DEFA319E4230274A2A2F3AB3 /* URITemplate */ = { isa = PBXGroup; children = ( - C8250A0718CB6A9C83E7670FA1D398DB /* CoreOnly */, - 44DD0E8148C2D8D66AEA8DAF8974645B /* Support Files */, + EA490B13588476F88AB81643E638781D /* URITemplate.swift */, + F50421E765806A4890EC3B09CEB2BF9C /* Support Files */, ); - name = Firebase; - path = Firebase; + name = URITemplate; + path = URITemplate; sourceTree = ""; }; - CB9E3F370D189686EDEF239F68BFFF1C /* Reachability */ = { + C6B7B36BBB6431B0C553386D757F9F59 /* Realm */ = { isa = PBXGroup; children = ( - BFC5A78D5AAFC9E274644C98F1BE51C3 /* GULReachabilityChecker.h */, - 941EBA9CC982E351DBA271BBB7EB5AAD /* GULReachabilityChecker.m */, - 54063735C36300832D5415AC24D83590 /* GULReachabilityChecker+Internal.h */, - B7E03D90F08417E443B3C51B6964D25F /* GULReachabilityMessageCode.h */, + FC73DE5F8515966AAF409FEB17AB72CF /* async_open_task.cpp */, + A3F99181DAF40B6CF938E94C407F7C37 /* binding_callback_thread_observer.cpp */, + F373BB4DE52C0FBA6E91C75650D68641 /* collection_change_builder.cpp */, + FD525848D54648A0C5B39BE590CFB9C8 /* collection_notifications.cpp */, + A51499D2C2EB0CA3F302A88F0CE96444 /* collection_notifier.cpp */, + 3A3BE509D836FC3C6D2387EF3B506E26 /* external_commit_helper.cpp */, + 5E43D6407F194F3198F56B37230D7DF3 /* index_set.cpp */, + 9E2E660D7A08202AC7308B44862A5EF2 /* keychain_helper.cpp */, + 44C094511E941EC792C1BEEC22786E00 /* list.cpp */, + 81E7276C2FC19FC4571F27F8AA8D0F2E /* list_notifier.cpp */, + A31E24A6A601B6770990552B1C590B24 /* network_reachability_observer.cpp */, + 796BB9D72FDB0293F6C2B7CDB92B60AB /* NSError+RLMSync.m */, + 345358275926E6904CA8446BB1CA1700 /* object.cpp */, + 92A3F71221BE3E85393BAAD68B35A5FF /* object_changeset.cpp */, + B5D1C66CA1FB494054F9FEC030CDFF04 /* object_notifier.cpp */, + 5C6C4BA0487C33053C0FF67C5E65978B /* object_schema.cpp */, + F0F6E8E48DF5FB4A3D79201C07F72644 /* object_store.cpp */, + C3869804421B279168DA26F3CF23A098 /* partial_sync.cpp */, + 5CF55EE1E62635B4548DA43FFC36D7A1 /* placeholder.cpp */, + 0BB962BA20D0D1B8D652060CB58DD072 /* realm_coordinator.cpp */, + 60AFF9B3EDFE25A4524E146097A5999C /* results.cpp */, + 6E865C5F4D351F90D3D88FF2CD01C211 /* results_notifier.cpp */, + 532A13E80977AC6F241DE314550DC0CA /* RLMAccessor.h */, + E5FCBC73AD8F633E9B0216936F43D60C /* RLMAccessor.mm */, + 8EBC005486B3ABDD3CDB504FF5E0639E /* RLMAnalytics.mm */, + 186522BBE623AD946669C9A507583BD7 /* RLMArray.mm */, + C1547CA6C4A8C554D1BFBE94CF789B7D /* RLMArray_Private.h */, + 3CD68B8EFC8D06054D1FDB35C873FBD6 /* RLMClassInfo.mm */, + 68F814DD29A36E913885105CC75D57AD /* RLMCollection.mm */, + 76A7BEE9490C63F4A43F4C083A2314F6 /* RLMCollection_Private.h */, + BBCFB94BDDF9E2EF2D3775D8B0149F4F /* RLMConstants.m */, + 788CF763F6B8CEF22383BB833C14EFDB /* RLMJSONModels.m */, + AAE233D5B3FE1F32D73E6A2778EFD329 /* RLMListBase.h */, + F1A3E524613CC50486ED48E109A2CC48 /* RLMListBase.mm */, + 02753C69DF0810D06A54AF6D39AAADAF /* RLMManagedArray.mm */, + D982878987DD1C6E5FC780F4C4DBB4FB /* RLMMigration.mm */, + 23275A4BFFC38771F513E7CAABEF6129 /* RLMNetworkClient.mm */, + B0330C8A000DC358C098C10096A52674 /* RLMObject.mm */, + E0436201DA1D5CD87F67AF22447954AC /* RLMObject_Private.h */, + 54C80F4D471943D79144805C9E36DCDB /* RLMObjectBase.mm */, + 034E8659175E77FD8858B78104CBDDD2 /* RLMObjectBase_Private.h */, + 113F1B2DA7303DC2420D6440869234DA /* RLMObjectSchema.mm */, + 5ED3FF30321054D07F68F68444603A7E /* RLMObjectSchema_Private.h */, + 52B81E9570B59806F994DD9A65C241A3 /* RLMObjectStore.h */, + D767348B7F76EF759DDB0A61E182E508 /* RLMObjectStore.mm */, + F599FFC13E086A2315101A6ECEF8CDD7 /* RLMObservation.mm */, + BD6F5B92CA889A858AD40E373381079A /* RLMOptionalBase.h */, + 607E6499DE7AF4C3172D4FE3A794E676 /* RLMOptionalBase.mm */, + 1F75ED21D56BA218674B25FE4E05FA63 /* RLMPredicateUtil.mm */, + C3C0FDDE8C3A29D14795B0CCDE8A64CE /* RLMProperty.mm */, + 66335C8A5AF18D0C031D33F089435222 /* RLMProperty_Private.h */, + 3082551530D4F9F80AF74AAE1613F888 /* RLMQueryUtil.mm */, + B4D2BDF9D48B7824405D884616379A53 /* RLMRealm.mm */, + 479E153B1350EF15C02E6FC76272FDCA /* RLMRealm+Sync.mm */, + C8B18A0570D7BAC0A8F837133E2DDFD1 /* RLMRealm_Private.h */, + C036979652C1AA82DE35436C76112BC8 /* RLMRealmConfiguration.mm */, + 24CD7F1F6A9EFAC4207F37E6A723C3F0 /* RLMRealmConfiguration+Sync.mm */, + 4BF11280898471488315C7ABEC946BCE /* RLMRealmConfiguration_Private.h */, + 2C96889F60BFA511A54235EF1F4EFF20 /* RLMRealmUtil.mm */, + 0146A24DBA3D4DDCF113EE93C863ACF6 /* RLMResults.mm */, + 8413BC54D9D681E1EA2B3A8CEABA7DCB /* RLMResults_Private.h */, + 0578D8EEFBD28A2BEF6C79D840F382D0 /* RLMSchema.mm */, + EE22EC02A207B236C60B52B786AA9813 /* RLMSchema_Private.h */, + 2A8E14937455517AE7C4DAB052E2081B /* RLMSwiftSupport.m */, + 47DA34530389E50A8F3E0058A206EB8F /* RLMSyncConfiguration.mm */, + B21C3FFB257241762DEF4BBE0D8E1A0B /* RLMSyncConfiguration_Private.h */, + FB22C85C0139C5494193A2C764AE4974 /* RLMSyncCredentials.m */, + A980A30A29A11151B83C3CE1E1758FA9 /* RLMSyncManager.mm */, + D852FDBB41DE1D0A11B390F7E54C6A22 /* RLMSyncPermission.mm */, + 3CEDAA9A43552D4E84683F56728904E6 /* RLMSyncSession.mm */, + 0F6CEB8E4A2699C012797C2CB8208382 /* RLMSyncSessionRefreshHandle.mm */, + 12879C29FF49723AA1A8917275D96091 /* RLMSyncSubscription.mm */, + 9B62C630E6350F365DAB53F4E4128891 /* RLMSyncUser.mm */, + B099F852040462F40FA3A9723F46B9A6 /* RLMSyncUtil.mm */, + 890CC9F4A0110C71D23B765C18804F6E /* RLMSyncUtil_Private.h */, + D159E29C20CC7B24722B84E9F728CABE /* RLMThreadSafeReference.mm */, + FB3E0B2437EE2718D03A09946A639F24 /* RLMUpdateChecker.mm */, + 26CAA31B99921D7EEC52278EEF31B2BC /* RLMUtil.mm */, + A38538CC04BC57EB74D2370BF048CF9A /* scheduler.cpp */, + C9CF4D0FD634A5A19AE5A39FB167DC6B /* schema.cpp */, + CE54066211663F8BA2F9D0AFF6BCE789 /* shared_realm.cpp */, + 109E6F6D680ADE61B9A5613128BA6864 /* sync_config.cpp */, + 646EDA5D1B0389E4B968DF5E2CB461D7 /* sync_file.cpp */, + A0F76F81C970B6D1BDCCA4917FF7EE58 /* sync_manager.cpp */, + 99BE132ADCFA4E9B0FCD9173BBFC4AE1 /* sync_metadata.cpp */, + 9D8DAE703C91F108652E2315F02D5E54 /* sync_session.cpp */, + A766B91C855FE70C180EBF007FFE216A /* sync_user.cpp */, + 0D2F4EAC2F5189DB9445256EE720D554 /* system_configuration.cpp */, + A16B6AF7C53EDDBD94158FC1C153D5E9 /* thread_safe_reference.cpp */, + D0997C58D4DA7E95BDB868EB045E2BAE /* transact_log_handler.cpp */, + A1653080FEEAAFCDA6FDE565F7B16BED /* uuid.cpp */, + EC89F8CE186B9940D2CBFF1F41145481 /* weak_realm_notifier.cpp */, + 4E09113C715CD978820B9D409361614A /* work_queue.cpp */, + 6C587762181DFE990B377E1970B2C5AF /* Frameworks */, + 51BA8B55BFFFC5E895856F59279EAA06 /* Headers */, + 1D2746DF182073992C9FADA1965E40CD /* Support Files */, ); - name = Reachability; + name = Realm; + path = Realm; sourceTree = ""; }; CF1408CF629C7361332E53B88F7BD30C = { isa = PBXGroup; children = ( 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, - B85B4A80089BF7D27E06C407C8FDC71E /* Frameworks */, - 7E64AEB44980613B3209DD31810DF782 /* Pods */, - 2DF80C8988B8F8BBCB2AD2C13EBB5B36 /* Products */, + 2FE445AD883B9ABD3E0241A05A5B79FD /* Frameworks */, + 1CD9AE90BB9F0506A5EBA2800B66802B /* Pods */, + B540582CF641A3A2086686F24D8B98FD /* Products */, 321107D2062DAAF3FF3C1E2864D48EE8 /* Targets Support Files */, ); sourceTree = ""; }; - D24CFBE657599F21ABB2E00B7B43D841 /* iOS */ = { + D8549065B359EA0FCE311C339EED96F6 /* Support Files */ = { isa = PBXGroup; children = ( - EB5276B55E74AF4EB1ADDA192309AC05 /* CFNetwork.framework */, - 8EAA64E8C95C7D0DDF75E931838E9BA4 /* CoreGraphics.framework */, - 13B1AA9A64AEFCDE68FEBB56B60AE309 /* CoreTelephony.framework */, - 96CE92E5425AE24E39E7772E791A1F9F /* Foundation.framework */, - A6620FB2CF03CE44DC554132934E15FC /* ImageIO.framework */, - 8ADD59B7A4F54D4DDA367047E513B60A /* QuartzCore.framework */, - 1BAA874222D307237209F71090049BE3 /* Security.framework */, - 06AFDF03F9C1D8B9F4CF9B8D0016C73C /* SystemConfiguration.framework */, - D4C31B2AFB205FB407F3B601E20BF9B5 /* UIKit.framework */, - 7D9DCAB1A8C069E91446710E04970738 /* XCTest.framework */, + 0880DC2E05B89810EF2DA307BE3A5684 /* FirebaseMessaging.modulemap */, + 058E011CE5E12E690AB9C2234F9A4156 /* FirebaseMessaging-dummy.m */, + FDBC074B06291393EE71C8963D2C1A59 /* FirebaseMessaging-Info.plist */, + 6B434A1EDAF09571A7BB0FA340012517 /* FirebaseMessaging-umbrella.h */, + 16B4A9A6BED7E99535ABC2962B36BCF0 /* FirebaseMessaging.debug.xcconfig */, + 254B7E87A46E81B959B878436D36FF40 /* FirebaseMessaging.release.xcconfig */, ); - name = iOS; + name = "Support Files"; + path = "../Target Support Files/FirebaseMessaging"; sourceTree = ""; }; - D8CC9D64548240A55F57F105C58BD61C /* RealmSwift */ = { + D99143A6A120C2492FC7D5C160088BF4 /* Network */ = { isa = PBXGroup; children = ( - C9B65D8C82364E71DD4C6C3AA6E75A42 /* Aliases.swift */, - AA30EB748D8C3BC89AAC2548E407B000 /* Combine.swift */, - 90F19DCB0ACA9EC4BCCEC8C7BB005FAC /* Error.swift */, - F14102388813EC6EC3107DEDC8F1BE4C /* LinkingObjects.swift */, - 6875F93BA1C041F7E8C8CC62F9648826 /* List.swift */, - A6D1FF0163C1D9D60E0A8CB6C5E18027 /* Migration.swift */, - CB5A313428803E7EC91039A3F03CCAB2 /* Object.swift */, - 4F580D47F58651D2034D6C0F44074450 /* ObjectiveCSupport.swift */, - 3AE488274939C10B2FA5F802F96755AD /* ObjectiveCSupport+Sync.swift */, - B1755D4550CE4A9020E5A8FABBB4F9C7 /* ObjectSchema.swift */, - 9B6E53A68A8A0D378E546FC8AB43BB6E /* Optional.swift */, - B500924F6C17D237612151C8A0B82036 /* Property.swift */, - E69DC70F3A47E177698024A5C0471C1F /* Realm.swift */, - 78569820395287E24D614961947852A6 /* RealmCollection.swift */, - 792DFC751461DE2A6E29F9023B572B68 /* RealmConfiguration.swift */, - 5952E889205D2329C14CE59B7F11BB2B /* Results.swift */, - 497B1E09724BEF3FF7FD7EBC64ACAB21 /* Schema.swift */, - 0CC326724D40B9B65C3C1A8E79E9F1FE /* SortDescriptor.swift */, - FDCBAA1DFB140B197E960E4FF9392EA7 /* SwiftVersion.swift */, - 5E0C4E1EFC05808108934BE32EB223A8 /* Sync.swift */, - B317CB43DF56DDE5623FAEE16531F3BD /* ThreadSafeReference.swift */, - 8D3599CF550F9EB034877E67421264CC /* Util.swift */, - 7A3DC58267D2A0C60CEE46DEA0635243 /* Support Files */, + 7CBF26F21FA8038EDEFBA83395CE9299 /* GULMutableDictionary.h */, + 17E112F213728306929ABAAA0BBAD6AE /* GULMutableDictionary.m */, + 72BA9E3807ADD6D72285C03EA594D389 /* GULNetwork.h */, + E81B6ED242E2EE14683340BFB2B3DAD8 /* GULNetwork.m */, + 2E547766466E019AF9920490BDAFF80B /* GULNetworkConstants.h */, + 1B42558C32A1FD2F89049E3384432943 /* GULNetworkConstants.m */, + 3889DA1D77D0CC868F31535ECE1FA026 /* GULNetworkInternal.h */, + 5FB10D3D2C3AB2BB11550F7F1F9C46C1 /* GULNetworkLoggerProtocol.h */, + 768E1282EC4221F70894BA62C11481BF /* GULNetworkMessageCode.h */, + 5B95E2BBA62EB0149FD16A87340BAB1F /* GULNetworkURLSession.h */, + 1DC690A50A8FC6E3664DCCA6A2F66E78 /* GULNetworkURLSession.m */, ); - name = RealmSwift; - path = RealmSwift; + name = Network; sourceTree = ""; }; - E12180B6981489C7B4286DC5AAFCD684 /* ReachabilitySwift */ = { + DB2AC6813FFF74B73DF08DF7D736C407 /* Environment */ = { isa = PBXGroup; children = ( - 64A4F9BBFD4C2230F01C4D849748E623 /* Reachability.swift */, - 612706B0D312FA93542A5A3FA7D6A751 /* Support Files */, + B3BC07700F2814C5BA7CE4BE00FB6553 /* GULAppEnvironmentUtil.h */, + 1653E6C2BE2B7BEBEB61883E847EF596 /* GULAppEnvironmentUtil.m */, + 12DFEAFE7BFF2D26F1194BE8C0EB07A8 /* GULHeartbeatDateStorable.h */, + FB10CA3DD76A25CCADFB195C2B82C608 /* GULHeartbeatDateStorage.h */, + 2653098F7F86B721C8AEB33773CADE4A /* GULHeartbeatDateStorage.m */, + 0366496CA3470F9B2B2F511EFCCA8B11 /* GULHeartbeatDateStorageUserDefaults.h */, + 3AD14E581B487F55BD9C584A14D04B94 /* GULHeartbeatDateStorageUserDefaults.m */, + F87D3C31506443C1F43904C532941C90 /* GULKeychainStorage.h */, + E231A7D05DD155CA705DAD98DF2A1D80 /* GULKeychainStorage.m */, + C394E1E8C0B31292091637DCD71392B9 /* GULKeychainUtils.h */, + CFE717064F57B1216E27616F620D2A41 /* GULKeychainUtils.m */, + 35772521BDF8213DF50045F39ADA084A /* GULSecureCoding.h */, + A6359EC24CB1E1FB06510CD17C8D0EED /* GULSecureCoding.m */, + 721285D0E389639F42212E7E22F096D4 /* GULURLSessionDataResponse.h */, + 6C4A528B80B96962B92572AA74612457 /* GULURLSessionDataResponse.m */, + E1D026F32D91E6EA758EF0D37A17435A /* NSURLSession+GULPromises.h */, + D893114E596661E896FBB30F59553F3A /* NSURLSession+GULPromises.m */, ); - name = ReachabilitySwift; - path = ReachabilitySwift; + name = Environment; sourceTree = ""; }; - EEEB97484914EA15C00DB558D31D5789 /* SlideMenuControllerSwift */ = { + E00BE29DC66EB1638C658B09E5233067 /* Alamofire */ = { isa = PBXGroup; children = ( - A83DD4F2C208EB2E9B9F9B982ABA86AA /* SlideMenuController.swift */, - 660E16F790CDCFE38C71CF5DB9CD9AE8 /* Support Files */, + 67F228FDC6A2CAFCE7BD7CDC55ECDFD0 /* AFError.swift */, + F9D9AF5E0EF9FFF8CA211030D4A5AA9A /* Alamofire.swift */, + 0D86C8CBCE4B0E7F64C1D31B2DAC6DF8 /* AlamofireExtended.swift */, + 7C0E6F5235C42D703058437E93A25F4A /* AuthenticationInterceptor.swift */, + FA7703C45051BFA79C1F4BAF925BA1A8 /* CachedResponseHandler.swift */, + 2C3797347C2210AC6AB2BA4B8874341F /* Combine.swift */, + D363522D0FA0C366797112BDA6705FD0 /* Concurrency.swift */, + 783FC92A0BC431551685935131EE1C34 /* DispatchQueue+Alamofire.swift */, + 7DF2124421CBBA4A2029D5609BC36AE4 /* EventMonitor.swift */, + 50CBD6F7E1D609D0EEB6BE8CA7CA85D7 /* HTTPHeaders.swift */, + 8DD665A0F87DBA3DC018D522EFBBCA05 /* HTTPMethod.swift */, + 3A142289F8D7C9C05BA9D87FF751F846 /* MultipartFormData.swift */, + 02073E7407EAD96EC98B83467F0AF66D /* MultipartUpload.swift */, + A157E35C9483F6D633C143ABF79C995D /* NetworkReachabilityManager.swift */, + F53088E8E52B8063C9F30147F3CF6256 /* Notifications.swift */, + 5338663A029341ADD610774A4C917D5D /* OperationQueue+Alamofire.swift */, + BDFECEBF5147BD1E1DB1F92618AED902 /* ParameterEncoder.swift */, + B60E3053144A8B4C5BD31849BFA16CF6 /* ParameterEncoding.swift */, + 4865576F1547E1DE111654A4A0F10081 /* Protected.swift */, + 8AFAA3F4BCBF5CAF1ED6A01A0CF001EB /* RedirectHandler.swift */, + 69C2C2AF66ED23BE43387CAD7013D175 /* Request.swift */, + F55DC7793C9A35A4C62AE35322952BEE /* RequestInterceptor.swift */, + F96303E9E6CE1708F412C20D5F2B14C9 /* RequestTaskMap.swift */, + AC1DA9799D80B61CC9A00C151FABD1B3 /* Response.swift */, + AD6E9C9CDC2181BB7F255FEBE0C1FD90 /* ResponseSerialization.swift */, + 89B62DF893489A8ABB7DBF594E70E36B /* Result+Alamofire.swift */, + A29417FE62A3FC70235F1062E62971E1 /* RetryPolicy.swift */, + B6949FFF62A5950370EB517EDBAAA21E /* ServerTrustEvaluation.swift */, + 64C77D75F4599EB7A0286913B20C5E12 /* Session.swift */, + F8C941EB3FA2CF7213B1962768178721 /* SessionDelegate.swift */, + A54EA876A39ACED7DC664C709B462662 /* StringEncoding+Alamofire.swift */, + 9EFAAC73DDC1A85B6987CB688EF5984B /* URLConvertible+URLRequestConvertible.swift */, + B521232F1F5112AE975E3B5195386F76 /* URLEncodedFormEncoder.swift */, + C1BFA13E3438CCEB0C43E67A14650D22 /* URLRequest+Alamofire.swift */, + 96EE22ACD1B156368FD85BEFB2860D8B /* URLSessionConfiguration+Alamofire.swift */, + 7ED80882A44DDDA71D422827D3E6CC66 /* Validation.swift */, + 3AF2334DE4E931A4D10F505600D49F04 /* Support Files */, ); - name = SlideMenuControllerSwift; - path = SlideMenuControllerSwift; + name = Alamofire; + path = Alamofire; sourceTree = ""; }; - EF0381700BD8A60BE9DF18237689FA97 /* Support Files */ = { + E013BC099E72750F36D07B3BFB9F0000 /* MethodSwizzler */ = { isa = PBXGroup; children = ( - C56362AFEF41C22766FCA9A388D67097 /* Alamofire.modulemap */, - B0F4AC7BB8AE303CA3DF523F14B53F81 /* Alamofire-dummy.m */, - C82101D4E07B21CCFF363C993140A86D /* Alamofire-Info.plist */, - 0BCA1447D9C0AA7C6461DD5A75E4FE30 /* Alamofire-prefix.pch */, - 9F944120A3E07CE8238DEE468F649D71 /* Alamofire-umbrella.h */, - 14FBAB99FC765178FFE8550C4BC3EF7A /* Alamofire.debug.xcconfig */, - 8276FB26ED80CAD78CF5A647F8687E9B /* Alamofire.release.xcconfig */, + 4DDC985D03E7F1E3A3AE06F64A21A539 /* GULOriginalIMPConvenienceMacros.h */, + 457383C7455207390EB207746C863D1F /* GULSwizzler.h */, + 2D37BB179447B790A4451862B6AA9763 /* GULSwizzler.m */, ); - name = "Support Files"; - path = "../Target Support Files/Alamofire"; + name = MethodSwizzler; + sourceTree = ""; + }; + E1210F76C0D822931F6C5EC89FE2D4B8 /* AdIdSupport */ = { + isa = PBXGroup; + children = ( + 32518CB84AC2A2AF4E935F067C773B71 /* Frameworks */, + ); + name = AdIdSupport; + sourceTree = ""; + }; + E9A2D36B8B99B3B427DC34724C139C42 /* FirebaseAnalytics */ = { + isa = PBXGroup; + children = ( + E1210F76C0D822931F6C5EC89FE2D4B8 /* AdIdSupport */, + 202C384511EE022EA6419FF56AA8120D /* Support Files */, + ); + name = FirebaseAnalytics; + path = FirebaseAnalytics; sourceTree = ""; }; - F062BEAD199F8413CF1380BF80739FAC /* Support Files */ = { + F50421E765806A4890EC3B09CEB2BF9C /* Support Files */ = { isa = PBXGroup; children = ( - 4B4CCEE7D7BB836DA8FF55E0F983157F /* Toast-Swift.modulemap */, - 21B756D504A1CD0C1B8DB189A1C7D930 /* Toast-Swift-dummy.m */, - EB562A2FC602C65927A2A18558947319 /* Toast-Swift-Info.plist */, - C82A75B33BF7106A57AE8F6553AEEFA1 /* Toast-Swift-prefix.pch */, - 15796A8F6EE2C795704B1242ADE8D4D7 /* Toast-Swift-umbrella.h */, - 3A9AE4009397240F73870331DE9EC85C /* Toast-Swift.debug.xcconfig */, - 9C86A9F959BAAB05EAABFD80BE01F80D /* Toast-Swift.release.xcconfig */, + C1A1CA3A773F2431F8839062977F445D /* URITemplate.modulemap */, + EC7E8B0D91F46695CBA9D35CE1FCD24D /* URITemplate-dummy.m */, + 448A7FB587AAC6F435DA74D64E96FAF3 /* URITemplate-Info.plist */, + E2028BF64601B91158E796CAAA81AC77 /* URITemplate-prefix.pch */, + 803DDA4CB2AE4EBEA523C42066CE8E10 /* URITemplate-umbrella.h */, + 1AE3EE2DEE883E075187AD4918626511 /* URITemplate.debug.xcconfig */, + 4C0F6A6A8715F88728809EAED4034D59 /* URITemplate.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/Toast-Swift"; + path = "../Target Support Files/URITemplate"; sourceTree = ""; }; - F37046380E09933C2CA72C302B05D03A /* Support Files */ = { + F66AF11C039001D21154D4ACE0690DAD /* RealmSwift */ = { isa = PBXGroup; children = ( - CA57BEEEA6ECEE7083C11F89BB0A2C3B /* Mockingjay.modulemap */, - C91DECFAA4FDF6B60D085BD99F012CFD /* Mockingjay-dummy.m */, - DA40032096D385282B2BF250E02ACF20 /* Mockingjay-Info.plist */, - E44C857D4B400FBA7B1673DCB75C2B5B /* Mockingjay-prefix.pch */, - 9B1D21F0F5D94A4F560149D736A160D5 /* Mockingjay-umbrella.h */, - DA360603A68ECC2BD5C2B909D7B5A65F /* Mockingjay.debug.xcconfig */, - 2F47B9623AD99AFA45CFFE3DA971247A /* Mockingjay.release.xcconfig */, + 17F0DE74F11971DCF93741D2AE964BAD /* Aliases.swift */, + 298C17E2B96E1102A88DD9FEF27F77AE /* Combine.swift */, + 7095FDE29741CCD0A3ACA5F104C904A8 /* Error.swift */, + 314C749436D4A87B600D47700AE7BCF3 /* LinkingObjects.swift */, + 31461360C6B500E9622692F038BD599C /* List.swift */, + FBBF78D6B3A1F82058C7E16A2FB8E5D3 /* Migration.swift */, + 710A260513A82DD95EE9C188BF553F35 /* Object.swift */, + 8B4F1082E4616E9F4125CE579148B55D /* ObjectiveCSupport.swift */, + 2ED122F473D59CA33CE6B81ED4B9F82A /* ObjectiveCSupport+Sync.swift */, + 6896074E62F776B5D9C75C5B86435842 /* ObjectSchema.swift */, + 71E09580BB6015B43244BE82E6F0D3EE /* Optional.swift */, + 183916BA5832B1125690D63520919F70 /* Property.swift */, + 76334FBCEC2DBBC92E967539B58A9436 /* Realm.swift */, + 2976707D92DC19E2837FD3A16CFCAEB0 /* RealmCollection.swift */, + B999AF169C60FEBE8211DFED3BDBF06C /* RealmConfiguration.swift */, + 3CFFCCBBB80B3B1B568ACBEE9C15039E /* Results.swift */, + 607AACAC41381E74F0EE5FA8ABF17666 /* Schema.swift */, + 4F67EA96581F7CC63A063CFE294809C6 /* SortDescriptor.swift */, + 9AD526A021FFB96406ED14530104D96C /* SwiftVersion.swift */, + 2FD7CDFFB7B9502E730382217BEED0F7 /* Sync.swift */, + 3C2524A45BA16D2EAC721535AB1E62E8 /* ThreadSafeReference.swift */, + 639712B03B02179C165E44277C5453F4 /* Util.swift */, + 00A4D64C66AFA413CBC0BB09BA4D19EF /* Support Files */, + ); + name = RealmSwift; + path = RealmSwift; + sourceTree = ""; + }; + FB0BC65ADA9572A01AABCB1BB204DD76 /* Support Files */ = { + isa = PBXGroup; + children = ( + 45E1B02C85E81345337E53888B6E6B7A /* nanopb.modulemap */, + 307B04FF0227E17EC7DC590F992BC7A0 /* nanopb-dummy.m */, + E618FF7571C2884B36433B66CED7315A /* nanopb-Info.plist */, + CEBD247C3AA4F381E85ABB7C76BD7082 /* nanopb-prefix.pch */, + 4B8ECFDC2CF94E9D88FEDE1620B74DB8 /* nanopb-umbrella.h */, + F89C0D53C8855BE4A60CF26CD67CE094 /* nanopb.debug.xcconfig */, + F49CF6E31F255EC612752A92D008252E /* nanopb.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/Mockingjay"; + path = "../Target Support Files/nanopb"; sourceTree = ""; }; - F937CDC3E256D366A1C88C7B8326B09E /* encode */ = { + FEFB50BA43EEDBA142A1B0D1D20C10BF /* Support Files */ = { isa = PBXGroup; children = ( + 0E1C73229087CE619C0EE8F95220D703 /* FirebaseCoreDiagnostics.modulemap */, + 913F780036799F671CCFDEBD0667A97F /* FirebaseCoreDiagnostics-dummy.m */, + 2A34F287062DAEA8F748AA7B037F2BCB /* FirebaseCoreDiagnostics-Info.plist */, + BDA2BFE10781E02461A0CD7490313A84 /* FirebaseCoreDiagnostics-umbrella.h */, + 895E940E9ACACE9310DD41557B9BD8CD /* FirebaseCoreDiagnostics.debug.xcconfig */, + C657E082540A7D3E9C9C89BCB2237721 /* FirebaseCoreDiagnostics.release.xcconfig */, ); - name = encode; + name = "Support Files"; + path = "../Target Support Files/FirebaseCoreDiagnostics"; sourceTree = ""; }; - FCDC2A80D438692ABB377F93B24BDB10 /* XCTest */ = { + FF5F107802F72467AD0BAE4947C9FB36 /* nanopb */ = { isa = PBXGroup; children = ( - 0B593AB8B2EACC688BA648D23B96EF20 /* XCTest.swift */, + A3A8AAE72354973FC10658F51CB5666B /* pb.h */, + 32647D8C004CBADF70621F2769336BBD /* pb_common.c */, + A00EEF8B7B1B90E3F6C2667815AE35BC /* pb_common.h */, + F8A789EE0AD6DC84DA0FDC3026C1F49F /* pb_decode.c */, + F11BA822A1B643B68EA1984341AE510D /* pb_decode.h */, + 6B168909D065D0207116EC9091DAD8D6 /* pb_encode.c */, + 7F2EAE1C713FC99BDC19E819DF65833E /* pb_encode.h */, + 53089901F83F23B2E3AA7B63CB10990D /* decode */, + 4BDBF8083763843899514D7EC149F8F3 /* encode */, + FB0BC65ADA9572A01AABCB1BB204DD76 /* Support Files */, ); - name = XCTest; + name = nanopb; + path = nanopb; sourceTree = ""; }; - FE038AE851F00EC01766742F1E18D07F /* Network */ = { + FF8BBE90EB607C1ACA40036A6B4331F0 /* ActionSheetPicker-3.0 */ = { isa = PBXGroup; children = ( - BBF4B7A90623E68E7C9CD3CC24437F98 /* GULMutableDictionary.h */, - FA511C67CB5B0442362CC959A542F0BA /* GULMutableDictionary.m */, - 251AC437E4AB28CADCAB834D92DD672D /* GULNetwork.h */, - 67758097F5B9C13C52FE595322FAE27B /* GULNetwork.m */, - DD11869F2347D7B0B5470D14832F092C /* GULNetworkConstants.h */, - 3B9ADF3C3A0BAD3C891E96F90C0ADD15 /* GULNetworkConstants.m */, - 8EDEDEB38B59652322819840B7D510F4 /* GULNetworkInternal.h */, - 791FD2358CCF061FA9DEF6F541E41F2E /* GULNetworkLoggerProtocol.h */, - 219946A35B05998559D841DFC5C9877B /* GULNetworkMessageCode.h */, - 01904FF8D07C58EFF3F7DC7B38664C95 /* GULNetworkURLSession.h */, - 5F0E0BBFEFA9A057DD473421975D6133 /* GULNetworkURLSession.m */, + 867B5EA3966123FC40EE3299924AEFAD /* AbstractActionSheetPicker.h */, + AD98C0B6BE9A80826D248CA211DE379D /* AbstractActionSheetPicker.m */, + 03F7CD223F0E708E5C1AC45005C3F52A /* ActionSheetCustomPicker.h */, + 910D84297AEC7F97CE8D7E1ECD2E82FD /* ActionSheetCustomPicker.m */, + 80733B1467ECCE8ECCA96788C8D79917 /* ActionSheetCustomPickerDelegate.h */, + 0A7056C0B785C11028021B59CECD0E6E /* ActionSheetDatePicker.h */, + E750C0538DA22CCA0E7F5C46F37F78CF /* ActionSheetDatePicker.m */, + EC29CB017696B6FDBFE35398F74E8328 /* ActionSheetDistancePicker.h */, + 7847BF5210321D030D694AD9BC21EEFF /* ActionSheetDistancePicker.m */, + 525B65287859DDD7112EBF6E0F802636 /* ActionSheetLocalePicker.h */, + 0BE55C4B55F2D2ADDE4DA989E9402F66 /* ActionSheetLocalePicker.m */, + 00EB32FE19B31E7E4447F0DC63F002F2 /* ActionSheetMultipleStringPicker.h */, + DEDBB15D64C22759CCD7CB5E6DDCB684 /* ActionSheetMultipleStringPicker.m */, + C4131218F8716A33D0DCF7F8569B9E9C /* ActionSheetPicker.h */, + 8BD894247BBFFB5B9BC564749CB1AC66 /* ActionSheetStringPicker.h */, + 9D0A3C2C50C122450267C4D688CF97D5 /* ActionSheetStringPicker.m */, + BD07A2135989221B678D6CCE9AF6679C /* DistancePickerView.h */, + 29162A0581521628960574A01316BDF0 /* DistancePickerView.m */, + B905FF11B41659CD1D66780ED7574A5B /* SWActionSheet.h */, + 1DA9B4A60A50F7D770689F1613B2ADDD /* SWActionSheet.m */, + 129A394FEF16D9945E08EDA56F5FC134 /* Support Files */, ); - name = Network; + name = "ActionSheetPicker-3.0"; + path = "ActionSheetPicker-3.0"; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 08E144DE30153326FB1017167CE0B6BA /* Headers */ = { + 104737A7F2F8176AF07A40A019B4DC37 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 41C2719D703841F6828E22B5C35AE6EF /* RealmSwift-umbrella.h in Headers */, + 6C93ABDF963DDA7C78AADD9F22CD5CB1 /* NSBezierPath+SDRoundedCorners.h in Headers */, + 7E6862A73246BB1A0E7BCEBAF50FFBE1 /* NSButton+WebCache.h in Headers */, + BD074722CD72470954ADB5B1198E01C5 /* NSData+ImageContentType.h in Headers */, + E8CE28499C17965A931605D4F47AAEBF /* NSImage+Compatibility.h in Headers */, + 38CF7D5EE6C28780FE3F9C1E63CFF3D4 /* SDAnimatedImage.h in Headers */, + 57E1C476BA5F8DD1ED740FE8DBC05D8A /* SDAnimatedImagePlayer.h in Headers */, + 4FB353F2B2E7D7AE0811D7C538DA2B36 /* SDAnimatedImageRep.h in Headers */, + F463DEB020D5C466D4613947AE4BE16F /* SDAnimatedImageView.h in Headers */, + 42822E48A1441AD8E0011D37C1625B36 /* SDAnimatedImageView+WebCache.h in Headers */, + 84B624227D73D3746CEFD48E49D74635 /* SDAssociatedObject.h in Headers */, + 18303B692A81A7D708973A6B9CBA75D8 /* SDAsyncBlockOperation.h in Headers */, + F161112B04B9AC7D276D9F588BA6E313 /* SDDeviceHelper.h in Headers */, + FE0189D2FE038AD82C4CCF5A801A50A3 /* SDDiskCache.h in Headers */, + A24B4B60656BA387B9979BD877A23983 /* SDDisplayLink.h in Headers */, + F077E74D9855D0D7FCF570F8E8ED4A1E /* SDFileAttributeHelper.h in Headers */, + A2CE92DE43AB450DE1AAA129BFBADCBE /* SDGraphicsImageRenderer.h in Headers */, + 809A09224ABB6A00BEF6B72EFAB30B4E /* SDImageAPNGCoder.h in Headers */, + 336BA7F271A33087B951BA4C6C6B2C6F /* SDImageAssetManager.h in Headers */, + 33C0E2EFD1C8046A2020D25FD1F1611F /* SDImageAWebPCoder.h in Headers */, + 0F4322740A001E3D7BFD2C333BCF907D /* SDImageCache.h in Headers */, + E7FA1E1CD066D0335A95376C73E3F8ED /* SDImageCacheConfig.h in Headers */, + 5BBE7719912593F1DEFF8E763EAD4ED6 /* SDImageCacheDefine.h in Headers */, + 909CBA577868D6E976AC82340B50343E /* SDImageCachesManager.h in Headers */, + E8D519B63C2077979F799769F9A35072 /* SDImageCachesManagerOperation.h in Headers */, + 0FFA0C960F26666918569059FB8E92BC /* SDImageCoder.h in Headers */, + 519B33DCAE0FB73CC313A2C2AD434449 /* SDImageCoderHelper.h in Headers */, + 8821E3636BB86560FC2F2D2CFF545F16 /* SDImageCodersManager.h in Headers */, + 523861A018452CE8BB166B59A7872BDA /* SDImageFrame.h in Headers */, + C7E8A80BE6BE5452380D8CA71F278B8A /* SDImageGIFCoder.h in Headers */, + 80D4A72C26C2EF865F9DCA400D2F1E70 /* SDImageGraphics.h in Headers */, + 99709E1C4991C49EE5601FF9461B2969 /* SDImageHEICCoder.h in Headers */, + 11E79385CD0DA86166E63D21E7E078E9 /* SDImageIOAnimatedCoder.h in Headers */, + 168AB5EA0EBEB75D0434B55D0B97AD47 /* SDImageIOAnimatedCoderInternal.h in Headers */, + E5C6051933677CDF392BF6356271A92E /* SDImageIOCoder.h in Headers */, + 67B3DCBA30FDEDA18E0D4E3B2C16C911 /* SDImageLoader.h in Headers */, + C4A78B8FC2DC76FBCF43D9D53BF90767 /* SDImageLoadersManager.h in Headers */, + 8C5D0B2A7B52DF68D03820244993E91B /* SDImageTransformer.h in Headers */, + 8433F353F3016EFF0316F48188D6B651 /* SDInternalMacros.h in Headers */, + C2D82385F4FDB67F6613CBBE8E2BD850 /* SDMemoryCache.h in Headers */, + E556832E0C191FCFABB9E97C87D243EF /* SDmetamacros.h in Headers */, + 9C096C865369C21D252A0F4F90BE21D9 /* SDWeakProxy.h in Headers */, + E515780850EBAD40342EBF2997BFC2D2 /* SDWebImage.h in Headers */, + 48920AFFC7C0E2FEA632DAA2BD63287D /* SDWebImage-umbrella.h in Headers */, + B128DE666CCA7CF6B0F09411D8209A92 /* SDWebImageCacheKeyFilter.h in Headers */, + DECA57AF64C5C257919649ECBB75F0B9 /* SDWebImageCacheSerializer.h in Headers */, + FED292AF8AD5924263FC0A8D0B8AF26D /* SDWebImageCompat.h in Headers */, + 7D9E8F8A5D02148FCC2DBD6319BCC3D1 /* SDWebImageDefine.h in Headers */, + 5B69919844A3BD774BAABB186D6A524F /* SDWebImageDownloader.h in Headers */, + F7289F163C285103D6CCAB39447153CA /* SDWebImageDownloaderConfig.h in Headers */, + 05D76FA82DD3C37B76FFC1689CEF9981 /* SDWebImageDownloaderDecryptor.h in Headers */, + 20004B99F5050F59E747AB8DFAD7E891 /* SDWebImageDownloaderOperation.h in Headers */, + AD0CFDA140E346502935BA58225E6EF3 /* SDWebImageDownloaderRequestModifier.h in Headers */, + 2D7E7D5F025A1006C0D373B5884B6E52 /* SDWebImageDownloaderResponseModifier.h in Headers */, + 9917CEAD8CE1CEB7FEC031255AED8FA8 /* SDWebImageError.h in Headers */, + 8F88549F032EFFEA9C281860520CC879 /* SDWebImageIndicator.h in Headers */, + 07A41F67B40B3C6C6C3DB862F1F633F8 /* SDWebImageManager.h in Headers */, + 36F35669F3AFF65477B2366FC09A1B3F /* SDWebImageOperation.h in Headers */, + 6F4B172730B7293C1D988FBE34B45E20 /* SDWebImageOptionsProcessor.h in Headers */, + 8C9D609988FE2993BB116B4B00FAC57B /* SDWebImagePrefetcher.h in Headers */, + 0311D5903A8C13AE6158796BC69AD994 /* SDWebImageTransition.h in Headers */, + B04279CC3476C6D75EDE63B360B89DEC /* SDWebImageTransitionInternal.h in Headers */, + A083AAC3481062E5DE223D480757A83B /* UIButton+WebCache.h in Headers */, + F4811CFAC05932CE436CC2C32BAD91E6 /* UIColor+SDHexString.h in Headers */, + D7BA04ADFE3104907F100E9370184A65 /* UIImage+ExtendedCacheData.h in Headers */, + 4A27F890C33243C4548A25318264B375 /* UIImage+ForceDecode.h in Headers */, + DBBAC864AD405BED53782364E0F0D5F3 /* UIImage+GIF.h in Headers */, + 26BF15D648EFA59FCA18AE285AC5B2A1 /* UIImage+MemoryCacheCost.h in Headers */, + 73F2DE8B48DC2F7C87529AB3901B9E94 /* UIImage+Metadata.h in Headers */, + 278F5B2C01E923AA0C691D79BD0F321F /* UIImage+MultiFormat.h in Headers */, + D556C63635E7A83C7A9B04FB104F7339 /* UIImage+Transform.h in Headers */, + 37E3C820BC838123661E1391BEAF8092 /* UIImageView+HighlightedWebCache.h in Headers */, + 0BFA90EFCD3407716FFC60D140325188 /* UIImageView+WebCache.h in Headers */, + D975B260AB44081399BCB612916CE675 /* UIView+WebCache.h in Headers */, + 2F85FF5597762E2E3C6961C6DD690A60 /* UIView+WebCacheOperation.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 09F7B7D04C454C16C0015640CF269F7E /* Headers */ = { + 10A2204B7AC7A6DF19781B9112A5BDBA /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 09944176280C980EB49784DBCA380462 /* ReachabilitySwift-umbrella.h in Headers */, + C10A947619692BA200EC6D8A18ACB80E /* FBLPromise.h in Headers */, + 48011BD30580A5EAC315CCB2A38ACCB7 /* FBLPromise+All.h in Headers */, + 77FA7EBCFC035EE27EE725DEF5A26726 /* FBLPromise+Always.h in Headers */, + 80E6CCD552151D41C4ADFA2502B355BE /* FBLPromise+Any.h in Headers */, + 9708637F449A08489252F916791BAE0E /* FBLPromise+Async.h in Headers */, + 958CB2EC6B317D1B719C106EE46E61B9 /* FBLPromise+Await.h in Headers */, + A07BE34DD7BA088811E2BB9D036C098D /* FBLPromise+Catch.h in Headers */, + A082EBD6881A9405F9C6C9983EB8D2A7 /* FBLPromise+Delay.h in Headers */, + FAF2E02CDCD35F70362DF58ECFF3CE8C /* FBLPromise+Do.h in Headers */, + C73F45B2515924AF76B273849E0151FB /* FBLPromise+Race.h in Headers */, + BCCDB1D0F65D85E8E1842244D825D5D7 /* FBLPromise+Recover.h in Headers */, + E09F6EA995970558C2760C5669E3375C /* FBLPromise+Reduce.h in Headers */, + 5F9A52091616FD9C66D6CD21B40742CE /* FBLPromise+Retry.h in Headers */, + A7D237A7C7A6F17490FA1D1E73191713 /* FBLPromise+Testing.h in Headers */, + D4931C8834963305D17F0ECB5388D705 /* FBLPromise+Then.h in Headers */, + 22B4A919F838CB8354864D3520925414 /* FBLPromise+Timeout.h in Headers */, + B58F9ED652AF253CFB9FEAC1B3998551 /* FBLPromise+Validate.h in Headers */, + 6BBD6A841631C2748BEFB50475BD9EEF /* FBLPromise+Wrap.h in Headers */, + 8C193A77E9748D5B823ECF534A7A5183 /* FBLPromiseError.h in Headers */, + D01BDAE093EB73097FB17398C1A68F6B /* FBLPromisePrivate.h in Headers */, + 2A0F2EA07B0925C976B4E82084BE6322 /* FBLPromises.h in Headers */, + E61A729B25227A44AB5D8B31B1D659EF /* PromisesObjC-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 3601E8EA98CEDB2051473E49CE0444DC /* Headers */ = { + 29CF7428E6E9D094596AAA5683FF1231 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 7CB7E8617E68914B5749A06E07DC068A /* Pods-MyStudiesTests-umbrella.h in Headers */, + 11F027107AFC7EE7637F23DB902F689D /* FIRAppInternal.h in Headers */, + CA42DD2DF65AA84CD0F61AFABA379C40 /* FIRComponent.h in Headers */, + 8E0F58CE9F6C01F6F417BEA5FB9CC87F /* FIRComponentContainer.h in Headers */, + 53484A3512CFDCFF407CBDBC174B7680 /* FIRComponentType.h in Headers */, + E2C50CA38760109247FE8624452C2C97 /* FIRCoreDiagnosticsConnector.h in Headers */, + 9C3A9F6D9ABAC3441E0F96B541C654E0 /* FIRCurrentDateProvider.h in Headers */, + C352B41442214CAF7F14B2C25954DF70 /* FIRDependency.h in Headers */, + EF2CD3F572064582E2BDEECDC0AA8D49 /* FirebaseCoreInternal.h in Headers */, + 98E9AEBB637DCA4A9244945AD9F4DAF3 /* FirebaseInstallations.h in Headers */, + 44FF9B46629AFDA304297D85D59A1B50 /* FirebaseInstallations-umbrella.h in Headers */, + 6DF9B2C51AF97E90EACC51B3A2F0C540 /* FirebaseInstallationsInternal.h in Headers */, + EE13A2A7B16AE51CF70EB499F06170B2 /* FIRHeartbeatInfo.h in Headers */, + 1D9DC5D979C9A640EBCFF6F15A2E839F /* FIRInstallations.h in Headers */, + 6BAD42BE9B5129F576C4217EB38DB3A3 /* FIRInstallationsAPIService.h in Headers */, + 1B6D74056AEA0DFDA3EF13A0AA7C05B0 /* FIRInstallationsAuthTokenResult.h in Headers */, + B619161884EE544AC4431D5DB6136BC4 /* FIRInstallationsAuthTokenResultInternal.h in Headers */, + D93C4C639C38C9C0ECA7A14C86524652 /* FIRInstallationsBackoffController.h in Headers */, + 0EA17AA3C56E498D2338C52B9AE5AAB1 /* FIRInstallationsErrors.h in Headers */, + 131D5923843E94CF395F1FA0AB5E694B /* FIRInstallationsErrorUtil.h in Headers */, + BDC8AEBDF3F86A28500F9C67FC016ADA /* FIRInstallationsHTTPError.h in Headers */, + 2C224BC579A71FE1C15030047144A128 /* FIRInstallationsIDController.h in Headers */, + 12EB4EBF4807E214A73870408440963A /* FIRInstallationsIIDStore.h in Headers */, + F4DF5059CA5D71EA3B87BE05CB7D76ED /* FIRInstallationsIIDTokenStore.h in Headers */, + 0922CA046CA2754693C83ECA8B163829 /* FIRInstallationsItem.h in Headers */, + 697D4305956CC10256194F5777C43843 /* FIRInstallationsItem+RegisterInstallationAPI.h in Headers */, + ACBD4EC1FF29AF9763F2CB8735FF4C87 /* FIRInstallationsLogger.h in Headers */, + 17D5DC913572AE36E04F533ADDD56B4B /* FIRInstallationsSingleOperationPromiseCache.h in Headers */, + 930B3A34DCD7CC70C104680EF22C9AFE /* FIRInstallationsStatus.h in Headers */, + F80A57B529CF5B35E68F18A629FE0AF5 /* FIRInstallationsStore.h in Headers */, + 4FE825E3C109DBDB1E67A6BA64531C4D /* FIRInstallationsStoredAuthToken.h in Headers */, + 1CEAE810DD2F12797F715DE23EDD790A /* FIRInstallationsStoredItem.h in Headers */, + 8D8CDBA945B69C9A3052CDB67FAAF0F2 /* FIRLibrary.h in Headers */, + 15DBCC0CC1957BDBB3D2C8D7C636A338 /* FIRLogger.h in Headers */, + FAF1D2E2C00824EA57393D93AB58CEBB /* FIROptionsInternal.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 3798B3E18C4FEC584434682C92306D48 /* Headers */ = { + 2DE9398ABFF6A384ABD2CD5B56F40031 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 1ED64B745AF6E5FC003D7B1137ED2370 /* Mockingjay-umbrella.h in Headers */, - A603DE41248AC559FCF2D9D77F805BDC /* Mockingjay.h in Headers */, + D580FDF91FEE9760DE95A720569B463A /* nanopb-umbrella.h in Headers */, + 6FA080986CB1CA05904B19B7C5F30577 /* pb.h in Headers */, + 2D6BDED3EF02886757CC1D166C9E27CF /* pb_common.h in Headers */, + 6B06932C623D4C5053889F764067E3BC /* pb_decode.h in Headers */, + 1E42234523CADF3435C47FFE755FAD55 /* pb_encode.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 41DDE0C50EC322B2C9CB02556FC1B909 /* Headers */ = { + 2E6DC957F5857813460BB4562459093A /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 857EC95ED85C3DE68D05D2B493051AB5 /* FIRAppInternal.h in Headers */, - CC1E29A6A0086A77A6CA0DAE1F5BBF1A /* FIRComponent.h in Headers */, - 3D536376AFDA5E11EE45953044B0F300 /* FIRComponentContainer.h in Headers */, - BCCA9A17578C2ADF025AEC53F4B87CCA /* FIRComponentType.h in Headers */, - 722F585CFB02B9D9D2305E076D871727 /* FIRCoreDiagnosticsConnector.h in Headers */, - 866D090E89CB45DDBF4169EB7154BED0 /* FIRCurrentDateProvider.h in Headers */, - AD10A2B8CAD9EAC4B3DAF1E710CA5979 /* FIRDependency.h in Headers */, - A014EFB9EB506400512F270752BBEBB1 /* FirebaseCoreInternal.h in Headers */, - 04FA5D74D23CF3377C224605BF6A398B /* FirebaseInstallations-umbrella.h in Headers */, - 2EEB6A0E637980229EB99F3F9244E844 /* FirebaseInstallations.h in Headers */, - C30559DFA8C102425C0D1DA1D2FD9F58 /* FirebaseInstallationsInternal.h in Headers */, - 44403F010BD599F5C7BB62B23AF28680 /* FIRHeartbeatInfo.h in Headers */, - D11F694EEE8807273043D886A11DAE18 /* FIRInstallations.h in Headers */, - F74F16BB167E342E92415FBB1C4ED984 /* FIRInstallationsAPIService.h in Headers */, - 0F69B7376CA8B0F98593472DCC9FF559 /* FIRInstallationsAuthTokenResult.h in Headers */, - 07D9B35CAE77FEA7A433025B33420136 /* FIRInstallationsAuthTokenResultInternal.h in Headers */, - B079158A2D911929C36CF73B30595926 /* FIRInstallationsBackoffController.h in Headers */, - 535864D0DD2D3B6432EA9450B056F791 /* FIRInstallationsErrors.h in Headers */, - 1CF6DBCE2AC02FC280637F3C00E1D0D8 /* FIRInstallationsErrorUtil.h in Headers */, - E6E1630857625BE80CE8F00719907500 /* FIRInstallationsHTTPError.h in Headers */, - 7F4081329351149DB6ED185A4F19A613 /* FIRInstallationsIDController.h in Headers */, - 9F2D718441BA031E1A0EF9DD1A16F1FF /* FIRInstallationsIIDStore.h in Headers */, - 3A01B7A79B844758AEC2EE3C4FE3A07F /* FIRInstallationsIIDTokenStore.h in Headers */, - 8131DAE0F52114C1AEE72F7993B6AA70 /* FIRInstallationsItem+RegisterInstallationAPI.h in Headers */, - 1E680017B0D5CDF056F59880F56051A9 /* FIRInstallationsItem.h in Headers */, - CC71580C36A881BAAD8005CD96E1135B /* FIRInstallationsLogger.h in Headers */, - E2C30AB4979AA3406CD76F15EF1D428E /* FIRInstallationsSingleOperationPromiseCache.h in Headers */, - 85C53EE2F839CCDDF8B46C40821D8751 /* FIRInstallationsStatus.h in Headers */, - 438C6CA3D5D8FC5994D2C68ABD72BCB2 /* FIRInstallationsStore.h in Headers */, - 5CB6BFCD480F026E4AFFC8821AA30F4F /* FIRInstallationsStoredAuthToken.h in Headers */, - B3FEF06F8ED5C55909CD99FF6A529DAD /* FIRInstallationsStoredItem.h in Headers */, - B26F156640ED2B61B7660159B09C4C84 /* FIRLibrary.h in Headers */, - E589A3BD933873AFC6CC5EE60C2ACF85 /* FIRLogger.h in Headers */, - C6718FC8DA44E15B8F7F022FC42B06B6 /* FIROptionsInternal.h in Headers */, + 181F90B9A9AB68AE755A9B5A07992A52 /* GoogleUtilities-umbrella.h in Headers */, + 6E62B8DE17958275015A65B59107D442 /* GULAppDelegateSwizzler.h in Headers */, + 5D9B22D83F739FD4419F2EF16D0E340A /* GULAppDelegateSwizzler_Private.h in Headers */, + D2FA73EF2DE9EA921E64DF9AE051A8EF /* GULAppEnvironmentUtil.h in Headers */, + 84CF908A7C0FB163379EDC5657A9E922 /* GULApplication.h in Headers */, + B2A057A1A09E5715B6AE0F41AFA32830 /* GULHeartbeatDateStorable.h in Headers */, + DB9E89DBF9F853CF9E764843C41FC22B /* GULHeartbeatDateStorage.h in Headers */, + D67F859F956A7C43BB910167DDAD42DA /* GULHeartbeatDateStorageUserDefaults.h in Headers */, + ED915EA4C9B934A4D749E2331D417B03 /* GULKeychainStorage.h in Headers */, + BE61E3911D987988113617F1CF613F41 /* GULKeychainUtils.h in Headers */, + C81285F9109DEE70D627BD4C30409070 /* GULLogger.h in Headers */, + 131782336E42CEA618F4F8B5B3C70AFE /* GULLoggerCodes.h in Headers */, + C8DDDE5AB94536AFB7EB4C48AE1FFCE1 /* GULLoggerLevel.h in Headers */, + 0AC5BBDF61BA26492AA56E53C7EFB77B /* GULMutableDictionary.h in Headers */, + 9449B4D558F2B0B10E9F8F63EB7BF626 /* GULNetwork.h in Headers */, + 94A45D29C476E9A1365AE9BB40227F52 /* GULNetworkConstants.h in Headers */, + E7D9FFD14B425686DF956275B061D89A /* GULNetworkInternal.h in Headers */, + 4479869DCE2FE4B8514072179B58E29A /* GULNetworkLoggerProtocol.h in Headers */, + 1DE2FF51BBCAFABCE7180F2F6E0BCA0D /* GULNetworkMessageCode.h in Headers */, + 009B6BA1A00E96A1CFE991E831DBC433 /* GULNetworkURLSession.h in Headers */, + 6BE018A3D326FA19E00A647C9C2AD547 /* GULNSData+zlib.h in Headers */, + CF942317588A7CF5B0892451EF08AADB /* GULOriginalIMPConvenienceMacros.h in Headers */, + 67D188B129FB5B5A69E4164E76C50E10 /* GULReachabilityChecker.h in Headers */, + B391DF4313B1ED99A547DE573F0AADDB /* GULReachabilityChecker+Internal.h in Headers */, + ABBACAE988E1D0EAEDC91B5AC6CAF0E6 /* GULReachabilityMessageCode.h in Headers */, + 869F7CDAC31D0F5ABAA03072768775D9 /* GULSceneDelegateSwizzler.h in Headers */, + 148B50A8A437CB18B556826943889F16 /* GULSceneDelegateSwizzler_Private.h in Headers */, + 29CEED3F765AAF5EA85A27AE6D4BC10F /* GULSecureCoding.h in Headers */, + 9A2EFDEAA3CC254A708D5DA3B5577E1C /* GULSwizzler.h in Headers */, + 88CBC3844A05BECE66B34A0153B00DDF /* GULURLSessionDataResponse.h in Headers */, + 19B4EE289C70BEB3AEB308F18DD7624D /* GULUserDefaults.h in Headers */, + D223ADD60F7C67B4B7444655991ECB8C /* NSURLSession+GULPromises.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 4F11AD97738323D005D2553648857FFC /* Headers */ = { + 3A56ACB11484ADD600197D5772352BA1 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 251266E7B772DC468474BE9752DED7D9 /* Pods-MyStudies-umbrella.h in Headers */, + CDDA4333D7063A9EB29859DF27C97C28 /* SlideMenuControllerSwift-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5121191B4867E549C894049C9A449BCC /* Headers */ = { + 43AAB06A25CAA6E234153D910EBC7435 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 363EFECB0B868F7274F0EF5DB17F8C54 /* cct.nanopb.h in Headers */, - 4050433E8D7A40858EBA244B30D7BC15 /* GDTCCTCompressionHelper.h in Headers */, - 3B4232527625707E8C4D9B69333152A0 /* GDTCCTNanopbHelpers.h in Headers */, - F4006D1332BC060D0D7F5B39A665CCEE /* GDTCCTUploader.h in Headers */, - 718233E7BDF2451A812BBC20EF3046F1 /* GDTCCTUploadOperation.h in Headers */, - EE5C04201171435EDE74B3C60532FB8F /* GDTCORAssert.h in Headers */, - 7BEDB171741DB3BA9BF2D7BC78DCAC45 /* GDTCORClock.h in Headers */, - C5463F67C1CABB160D29A58E0FE0FB30 /* GDTCORConsoleLogger.h in Headers */, - 10D2DBE24817C4FC3A01488A70B496F2 /* GDTCORDirectorySizeTracker.h in Headers */, - CC198E7E5F2ED16B38BE86D1773DFE0E /* GDTCOREndpoints.h in Headers */, - 7D39562A9D7DC8AA960AA57E75D42BFD /* GDTCOREndpoints_Private.h in Headers */, - FD1182FBA08843D918BC5CCEF5BD0A60 /* GDTCOREvent+GDTCCTSupport.h in Headers */, - F1B8557390B3D8D45864E9DE8EE16F30 /* GDTCOREvent.h in Headers */, - 811C09CAC85C41137EFD684E7A9002E6 /* GDTCOREvent_Private.h in Headers */, - 1BC79350CE6CA31DF3D3ADD1F1835B4C /* GDTCOREventDataObject.h in Headers */, - 58E77A72F9E710AB315C85FA14D19652 /* GDTCOREventTransformer.h in Headers */, - FDF381C3C44CEB95B443FD843151DC5B /* GDTCORFlatFileStorage+Promises.h in Headers */, - 3F9FABD968C3211CFE64ECB162D082F6 /* GDTCORFlatFileStorage.h in Headers */, - 614FBE52FEDC787E6F63391F0CDD9717 /* GDTCORLifecycle.h in Headers */, - 8F503167F5162EFCC3E0EA4318EE2B5E /* GDTCORPlatform.h in Headers */, - AC25F92038CB582CDAD8E8BF70FB4643 /* GDTCORReachability.h in Headers */, - FBA5A1C56BC8B78B2BBF7E18BD121CFF /* GDTCORReachability_Private.h in Headers */, - A0688D453FBE70CFC56032E1C58878A4 /* GDTCORRegistrar.h in Headers */, - CFCEE27B4FD86C55B5A923D3FAD919DB /* GDTCORRegistrar_Private.h in Headers */, - 88FFF338367BCC56F7C5D0148639193E /* GDTCORStorageEventSelector.h in Headers */, - 4DBCDDEE8921B3FE4EDBBA7ABB9BA606 /* GDTCORStorageProtocol.h in Headers */, - FD603DABECC06352533EFACD2D8D5BB3 /* GDTCORTargets.h in Headers */, - 4A66907E934400C2896E866F40EE6D43 /* GDTCORTransformer.h in Headers */, - AF542701F5DEB1C20076CECCCB774FB4 /* GDTCORTransformer_Private.h in Headers */, - F88A18D103EA114FFAE58D8001427A8A /* GDTCORTransport.h in Headers */, - 070F8166036AAD3F043CDF03BC200742 /* GDTCORTransport_Private.h in Headers */, - DEC6A6441AE4219BC277A8B0954A68AD /* GDTCORUploadBatch.h in Headers */, - D196D8C0815BEC987C7101B188B3F6CE /* GDTCORUploadCoordinator.h in Headers */, - 76B77668C3FBDE3C968DAD27D65FF71C /* GDTCORUploader.h in Headers */, - 71E8440CBEA56EFD2A64FCBD3DF8D315 /* GoogleDataTransport-umbrella.h in Headers */, - 3540C176FD4DFFFF2E6FF0D5D28E2F13 /* GoogleDataTransport.h in Headers */, + 17D8D0248FE7067505351521D2100C7F /* NSError+RLMSync.h in Headers */, + EA70261DFE74CABB1710447DABE8A25D /* Realm.h in Headers */, + 90F2E15762D90EB16AA37EE563BFBAE4 /* RLMAccessor.h in Headers */, + 0DF46FC20B149F5A9A560302A31E9365 /* RLMArray.h in Headers */, + 19087B7C41C929B099F9342FBCA1933F /* RLMArray_Private.h in Headers */, + D05086EDFBAAD9D00782C48F51646D97 /* RLMCollection.h in Headers */, + 5240A27C4248AE08E365122807886E96 /* RLMCollection_Private.h in Headers */, + 3B23B464E145E2B7E69CBE5E1561CA96 /* RLMConstants.h in Headers */, + 1A471C777497006B86E3C53A601F23B9 /* RLMListBase.h in Headers */, + 785EB92BED63AA0577F5CD8C0A3DA0F7 /* RLMMigration.h in Headers */, + EB0E9F3AD13CD1AB244456A8E80E660B /* RLMObject.h in Headers */, + 67B9CFE3CF6988B42AAF494A2D813ADF /* RLMObject_Private.h in Headers */, + 900FDF45B55F6C449865147A917AA714 /* RLMObjectBase.h in Headers */, + CB09C9C9878B1605B72EC552B8D29E7D /* RLMObjectBase_Dynamic.h in Headers */, + 078C9C2D13F201165254169ABA275FEF /* RLMObjectBase_Private.h in Headers */, + 3CBB4B4C13FB6375FDD851A947B9797A /* RLMObjectSchema.h in Headers */, + 090C028B2EAF044880820DF73FCA845D /* RLMObjectSchema_Private.h in Headers */, + 004F9820215FA800150286D89A4D044E /* RLMObjectStore.h in Headers */, + 72DC3D4ABADFF479B4262B4EC1B6D4D0 /* RLMOptionalBase.h in Headers */, + C7C9A0C7565E081B79FE95731798D109 /* RLMPlatform.h in Headers */, + 2647AE584D61722690737AB21AA9E27C /* RLMProperty.h in Headers */, + 3789D81FC4EEF2A1AF6BDFE1269A7B94 /* RLMProperty_Private.h in Headers */, + 3CD5FF4405400BBF79AB8266A86C927F /* RLMRealm.h in Headers */, + DB2115ACB523D7D853B91FDE842C8CBB /* RLMRealm+Sync.h in Headers */, + 1C327C94BF8B90E95F4AD0C040F6AFA9 /* RLMRealm_Dynamic.h in Headers */, + E8D93D8B7FCD1E4AB8C5DA94280C3422 /* RLMRealm_Private.h in Headers */, + EC54AC9692C0BCC18326B0FA0FC15638 /* RLMRealmConfiguration.h in Headers */, + 61D81F9731D0F739A57665F93FF17A7F /* RLMRealmConfiguration+Sync.h in Headers */, + 098FED5CD72233AA22FDFBD9FE9F15E9 /* RLMRealmConfiguration_Private.h in Headers */, + FD805AC3316F8953F09EEA0CB2310674 /* RLMResults.h in Headers */, + D53530A54A33CA8FF8F7CA22A6F485C8 /* RLMResults_Private.h in Headers */, + 4C7AABE17C583A37959B333DC2D47F80 /* RLMSchema.h in Headers */, + 6FA0EF29F4147999331046B9E2BF0192 /* RLMSchema_Private.h in Headers */, + 68BBB9AAAEDA32D83F54C7164626B56B /* RLMSyncConfiguration.h in Headers */, + 2AB8DEF2845DA08DAEC0841831B300F0 /* RLMSyncConfiguration_Private.h in Headers */, + 2A454A60CA430740DA92535023731BC2 /* RLMSyncCredentials.h in Headers */, + 6F2790CB7916ABC802F06AB26773172C /* RLMSyncManager.h in Headers */, + CD6046D905D981D308DE79E53A47F83C /* RLMSyncPermission.h in Headers */, + 803FE98FDB2E616670DFB5A93885F57D /* RLMSyncSession.h in Headers */, + 797091C0936A23C98342C2BA50464378 /* RLMSyncSubscription.h in Headers */, + 062BFDE7F34E06051F74A9745B988E1B /* RLMSyncUser.h in Headers */, + 8AE7F78784E5BFF2E0D9A23E89DFC478 /* RLMSyncUtil.h in Headers */, + 999714C1F46C4964F86054E6C47CEDEC /* RLMSyncUtil_Private.h in Headers */, + A759E48B057ADB0ED5322F1C4C198638 /* RLMThreadSafeReference.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 541A0721D8D26374CF7CF04B1473A45A /* Headers */ = { + 4827AD47643570415A14BECDBABDE826 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 2024EE5E265681137A9FEBC630E6E0F1 /* Toast-Swift-umbrella.h in Headers */, + 50FCC3C44B374B848F710065239F1C1E /* FIRCoreDiagnostics.h in Headers */, + FEDF459AADCFB85294A55B24AD5803FE /* FIRCoreDiagnosticsData.h in Headers */, + F70D3ADD697E1D8C8E6E514ED8A7C4A3 /* FIRCoreDiagnosticsInterop.h in Headers */, + 8C1B2AB9514407FB53079F91ECF24BDE /* firebasecore.nanopb.h in Headers */, + 115B6FF8F130E798038B3309070A885C /* FirebaseCoreDiagnostics-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 66095ECEC43A72E1A068220503753F50 /* Headers */ = { + 48D2850F036A810DF01C825FE903C636 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - CC81204D03046B2432A1D9687468DC8B /* CryptoSwift-umbrella.h in Headers */, + A2A4B9698B2D4AFF38D5184BE0CA9C3D /* AbstractActionSheetPicker.h in Headers */, + B779C5D0133D2074CB2EDAC61C4C5475 /* ActionSheetCustomPicker.h in Headers */, + 3FB00B6187FADACF9F2E2463C6CB37D3 /* ActionSheetCustomPickerDelegate.h in Headers */, + 5ED8F5A7087CB6ABC1D1261752BA4D77 /* ActionSheetDatePicker.h in Headers */, + CD151B24C25809170DECD96AA3F2989E /* ActionSheetDistancePicker.h in Headers */, + 3E20ACBD443C2D7BBF17DBE83CBC521F /* ActionSheetLocalePicker.h in Headers */, + EEC7477ABC2DC5D98E61613141784919 /* ActionSheetMultipleStringPicker.h in Headers */, + BC92DAA5EA59849601A1080AA7671D4E /* ActionSheetPicker.h in Headers */, + 30B9706BE643B5F0A0530D55403692A2 /* ActionSheetPicker-3.0-umbrella.h in Headers */, + 9D59535CF4F4C867E488363A17D18809 /* ActionSheetStringPicker.h in Headers */, + 0091E4134A0D7F54CCE654E1EFB490BE /* DistancePickerView.h in Headers */, + 4007288570A129B4E922875A51663243 /* SWActionSheet.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 6B56AC07C112BF7CFE14972CD78C745C /* Headers */ = { + 52E6F7B26483BE3BC9393C6C05D32424 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 49FB090354FB9C77E089C345B020AE2D /* nanopb-umbrella.h in Headers */, - AFE3D356D8740816BC98243041D0A5BD /* pb.h in Headers */, - C291089ABC2480FF25CDBA76E2B65976 /* pb_common.h in Headers */, - 03307BCBA6557A848EB43AC538499356 /* pb_decode.h in Headers */, - C5A96F960FBC6CC9EFC9E500253DF39E /* pb_encode.h in Headers */, + 005B319B494ED2DAA239B9939A504DFC /* Alamofire-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 7B53465677CC184EAC9F343861E02C49 /* Headers */ = { + 5C793DD4621DE9070282F5033269411F /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 5D7A107C490EC35A0508AD4E043F415D /* NSError+RLMSync.h in Headers */, - 3D0F8A096CDEDFF8FA3AA85905686F95 /* Realm.h in Headers */, - 1A63B63F36883B0C1CD7D6A08DF256A7 /* RLMAccessor.h in Headers */, - 29886F05CA1B4402BBC29E898010E329 /* RLMArray.h in Headers */, - 3C70C6D6DF3FE7EC4B591116E1320CF3 /* RLMArray_Private.h in Headers */, - B80CAAC6DC6ACB98AFA2D5FED2D71682 /* RLMCollection.h in Headers */, - 0F6929A72D9693406E884B2FC75438DA /* RLMCollection_Private.h in Headers */, - 16742EA83FB56B70EE936B33B776337F /* RLMConstants.h in Headers */, - D1F37DF2D3CA50FE7E74B56642705B5B /* RLMListBase.h in Headers */, - DDAE4BCED7BE239C249141CBBB8F9498 /* RLMMigration.h in Headers */, - 1C0B434DD60DF6ADC5E9B8BE1B8522AE /* RLMObject.h in Headers */, - 86C561A41EC3F10654AD322BD3CFCA86 /* RLMObject_Private.h in Headers */, - 443370C9B6108F9D48DB89CBF5D2146D /* RLMObjectBase.h in Headers */, - 85A4032A88982139D3F0A5B19F9163B6 /* RLMObjectBase_Dynamic.h in Headers */, - 5A67BD99039E153A8919A0F45C7BE7D7 /* RLMObjectBase_Private.h in Headers */, - FC0AB702D6C9E665293C6CA89B0FF40D /* RLMObjectSchema.h in Headers */, - DF30402C4352CEF575DBEB20BB0D0C35 /* RLMObjectSchema_Private.h in Headers */, - 2CF565BE2E3A5218A4FE075D1642CC26 /* RLMObjectStore.h in Headers */, - 66FE089B9952440D85C06BCDF82CDFFB /* RLMOptionalBase.h in Headers */, - F430332762627D34874BE3357367E8FF /* RLMPlatform.h in Headers */, - 460EC7B7F9CC0D07EF1644609BEF95F8 /* RLMProperty.h in Headers */, - 188017F725B43970E7ACE6AB8EF78536 /* RLMProperty_Private.h in Headers */, - 2222F144D4CF4425188A8D26B1176682 /* RLMRealm+Sync.h in Headers */, - EEC5644157CAB9372198988D470620D4 /* RLMRealm.h in Headers */, - D4D4466507E46650DAB4FD9719D7B8B2 /* RLMRealm_Dynamic.h in Headers */, - 3A4F26B8301DB5D994EC167101327F28 /* RLMRealm_Private.h in Headers */, - A8F064C66E4C4BA4A31BF7DFB02A374B /* RLMRealmConfiguration+Sync.h in Headers */, - 5E8056FC30438B2472365ABA67F70EA2 /* RLMRealmConfiguration.h in Headers */, - A7390BF1B8D151185450902D4F855E18 /* RLMRealmConfiguration_Private.h in Headers */, - 76570E3AC348AFE2FC4415508AD12B7D /* RLMResults.h in Headers */, - D3248707F2E64484B63112751F8EAE4B /* RLMResults_Private.h in Headers */, - 0C9DCF940239CA5E5EC4450A69697F0F /* RLMSchema.h in Headers */, - 193937B8765E069B6840E374D80EEF7E /* RLMSchema_Private.h in Headers */, - B303A74A554AE72EBBDD6A8B3E4274A2 /* RLMSyncConfiguration.h in Headers */, - 6E784AAE54EF542E1B1B6D13C6DA206C /* RLMSyncConfiguration_Private.h in Headers */, - 47E0AD754FAB78368C50325AE2BEF618 /* RLMSyncCredentials.h in Headers */, - EA679976974CDF7D44D1A647074BDAB1 /* RLMSyncManager.h in Headers */, - 7F706BAD57226F216A0FAAD0301FF5BC /* RLMSyncPermission.h in Headers */, - BBD6D52922E9F850D24D66704634C001 /* RLMSyncSession.h in Headers */, - 8F8C24D0CFAD03A5DDD4DB6534FCF113 /* RLMSyncSubscription.h in Headers */, - CCE908BC864E54CC218088E55CA4DE38 /* RLMSyncUser.h in Headers */, - 26534C75DC62EA310B5910C6FCC9AE20 /* RLMSyncUtil.h in Headers */, - 8146B70FAB2BF5F31B73452B2A0A4D15 /* RLMSyncUtil_Private.h in Headers */, - EF8FCB0A98D690A3304EA72DFA7D092E /* RLMThreadSafeReference.h in Headers */, + 01904530FAEB2C422B3382B9E93524A8 /* RealmSwift-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 7B92BF631DA2FA004D9B1052A0B5C2E0 /* Headers */ = { + 63D019064C2255A3D74C25BDF1937802 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 79E50CC87928D8CCEFE26766F084D07D /* SlideMenuControllerSwift-umbrella.h in Headers */, + BF20C741EBB18F936CA31F2E41DC9F23 /* Toast-Swift-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 8070B01910C64B9AFD0DB550EDE38D6B /* Headers */ = { + 675839AB3E77DED0308C64123A4657A3 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 7D3DD4A8BB36733BA15868F7FB8C56CE /* Alamofire-umbrella.h in Headers */, + 24FEFF1E340500CEF776607FAF31F9E8 /* FIRAnalyticsConfiguration.h in Headers */, + 148F21F597BB0B232859EE95ABC5B1DC /* FIRApp.h in Headers */, + 4E088DB1749C12BA9883CE8DAFA013AB /* FIRAppAssociationRegistration.h in Headers */, + 3F63D5EF8485315BB40D599D3E1CBF8B /* FIRAppInternal.h in Headers */, + 6E9BBDA8435DAE3202479D6A3017A210 /* FIRBundleUtil.h in Headers */, + E9BFBE4D5642CFC361EBC20E4647772B /* FIRComponent.h in Headers */, + 567A460C2060450EB27B03995D420F5F /* FIRComponentContainer.h in Headers */, + 36E5E663265DE9296BA7EBFBF325CAC9 /* FIRComponentContainerInternal.h in Headers */, + 2C88653A4099608CB83382B451E50F79 /* FIRComponentType.h in Headers */, + 0E74D33A20B4225CFF96FDE00FC5A43B /* FIRConfiguration.h in Headers */, + C19024EAF7E0812854AA02CA90034FDC /* FIRConfigurationInternal.h in Headers */, + B484EDAFA852B01BD6B0E1068115833E /* FIRCoreDiagnosticsConnector.h in Headers */, + DDB34D9815F0577DB66673859CC0088A /* FIRCoreDiagnosticsData.h in Headers */, + 7AF2A77E60099EEF04833B4096AD0AE8 /* FIRCoreDiagnosticsInterop.h in Headers */, + 04117C1A2868236093CEE87C003D9190 /* FIRDependency.h in Headers */, + 56C147D365D58C471BB777C26600CB35 /* FIRDiagnosticsData.h in Headers */, + 789945CFBDA7F0E917029A5F2AFD5F0E /* FirebaseCore.h in Headers */, + 2FD4B64A2DC9E026987C6877EE8B4C24 /* FirebaseCore-umbrella.h in Headers */, + A40B8EA22C62CFF11C50728DC9B04D4D /* FirebaseCoreInternal.h in Headers */, + 814FC41A64F4380C153C886EC733E349 /* FIRFirebaseUserAgent.h in Headers */, + C9086E0A22363785AD517EDFB0890173 /* FIRHeartbeatInfo.h in Headers */, + 6B1C76015C3F1D20665E807BA26E8DBF /* FIRLibrary.h in Headers */, + FDD207124D7A22912DFD9D876922B06D /* FIRLogger.h in Headers */, + 98FAF8EF0E18686897E79A1505CA0D1D /* FIRLoggerLevel.h in Headers */, + 08A4733A23A71DC2B937F173F76B4BAD /* FIROptions.h in Headers */, + 06D1E17D4DC34EEECABD81BFF27BC0C6 /* FIROptionsInternal.h in Headers */, + F0E3DB07AD35A6E33D04DB14704F1268 /* FIRVersion.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 98925827824EDBA39B5F6B84C31E9B3A /* Headers */ = { + 6A7BB6AF36FCE03733D028661957DB1E /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - D595CC3952ACA3D447CE1D36F7AFA8B2 /* URITemplate-umbrella.h in Headers */, + 32DF053AF55490DBBCC8F5A4135E7A48 /* CryptoSwift-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 9E7E0E6A430F7EBB19F02EBE7B6F1547 /* Headers */ = { + 71D024A8F90AAFCC09A8D55A8E8875A5 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - D6E9170631C6F926E40DB284A36829D4 /* GoogleUtilities-umbrella.h in Headers */, - D8F61F11DD352FF0DF8320F8EE5139D5 /* GULAppDelegateSwizzler.h in Headers */, - 429131FA89BBE71745DBD255843B9D76 /* GULAppDelegateSwizzler_Private.h in Headers */, - D06DD64C3EAA181EF4FDC9A8A3FF66FC /* GULAppEnvironmentUtil.h in Headers */, - D8D3971B1E3EF334029CF9139D4434A5 /* GULApplication.h in Headers */, - 39F424B577461FE3BE795EE3A7C43CAA /* GULHeartbeatDateStorable.h in Headers */, - 237543F114E97EE0A44F2A98D05CFB01 /* GULHeartbeatDateStorage.h in Headers */, - 8DF7495E628A544D507BB03A16038FF4 /* GULHeartbeatDateStorageUserDefaults.h in Headers */, - 096C42228A54BA98986DC889864BEE14 /* GULKeychainStorage.h in Headers */, - D671837C30530F9EE635650C75D7C522 /* GULKeychainUtils.h in Headers */, - C1DED19C51EBD7400D401BF04D2C43DB /* GULLogger.h in Headers */, - A409CFAD2489671BEE79B165FA2B87CD /* GULLoggerCodes.h in Headers */, - 01B9052F948E7258215220AEC5A03DA1 /* GULLoggerLevel.h in Headers */, - B66105101971D716385568E5DD94AA2B /* GULMutableDictionary.h in Headers */, - 9D31BF5783A298CB85D5ABFBC868A319 /* GULNetwork.h in Headers */, - FB0D991F9D9C7BD64FCF7615BE36BF36 /* GULNetworkConstants.h in Headers */, - B544C14FBC64FA191A718D0994398BE2 /* GULNetworkInternal.h in Headers */, - 7621291436B4266E6803AC9165DA8613 /* GULNetworkLoggerProtocol.h in Headers */, - 7422CCE898C2CA983C6A9625F84D8A77 /* GULNetworkMessageCode.h in Headers */, - D2CDB2227FC185093565DD8CAC32AB5D /* GULNetworkURLSession.h in Headers */, - 5F0DF070A417AFD8AB18631CB9E80EF5 /* GULNSData+zlib.h in Headers */, - 2F8B0412FF66064D67137E05C1596A32 /* GULReachabilityChecker+Internal.h in Headers */, - 16778F9B4D2A04C819CC3CE3ABDA63FF /* GULReachabilityChecker.h in Headers */, - 508A2A3BE4E32BD31141B81FB77390BE /* GULReachabilityMessageCode.h in Headers */, - E056AC81CC47414BEE81655CBF0D55FF /* GULSceneDelegateSwizzler.h in Headers */, - CE0E4942AD3BA8B5AD41B08524DBE718 /* GULSceneDelegateSwizzler_Private.h in Headers */, - 9337ECE19A1746F1A23ADB843C09BD2D /* GULSecureCoding.h in Headers */, - 9F7EC9C2489547130F7A9EB31CF9B16E /* GULURLSessionDataResponse.h in Headers */, - 46DDBE7209F2486DC0076CF8F584D04D /* GULUserDefaults.h in Headers */, - A0760C7C41C66CF40E1D2860907765A9 /* NSURLSession+GULPromises.h in Headers */, + F7E57DD98E63C5DEE7CB3DF9C628E2E4 /* cct.nanopb.h in Headers */, + AD9C71B103839DAD8D2A67AA9095B7E5 /* GDTCCTCompressionHelper.h in Headers */, + 5EFEFF466AB8AA7027C9513CA8FEC86A /* GDTCCTNanopbHelpers.h in Headers */, + 379331597F530A4E49B5FE32665E9F0F /* GDTCCTUploader.h in Headers */, + 68A8BEA694A5A6BD92DF2C220AAC80B3 /* GDTCCTUploadOperation.h in Headers */, + F39C188DB7358A76600C6F1DAE4F91CC /* GDTCORAssert.h in Headers */, + 1DF48DE01868B007A415E0F7582B5ADD /* GDTCORClock.h in Headers */, + 9E49EF1E36AF0CA44BE7E74450EE1BAB /* GDTCORConsoleLogger.h in Headers */, + 00BBA4140A0360CA9D4C316A58E314AC /* GDTCORDirectorySizeTracker.h in Headers */, + A6D746883D720C5A0A30A8CB9F229340 /* GDTCOREndpoints.h in Headers */, + 22CA25A7175111ED7235F4F78D66ED81 /* GDTCOREndpoints_Private.h in Headers */, + 0865316AE04C0482055E9EF55724B075 /* GDTCOREvent.h in Headers */, + 8CAA340BECEF77F3709111EB9AD7DAF1 /* GDTCOREvent+GDTCCTSupport.h in Headers */, + 31063283AE72D1D94208272CCB778752 /* GDTCOREvent_Private.h in Headers */, + 71FDD399101DB9561E8B7C543FD5C177 /* GDTCOREventDataObject.h in Headers */, + AE0D955CAEAF282248A964F82E61A59D /* GDTCOREventTransformer.h in Headers */, + 6B98A32D807A7E5C15512A0B96C7570D /* GDTCORFlatFileStorage.h in Headers */, + 5F5558766C37635AE2A3C63BD2926FAF /* GDTCORFlatFileStorage+Promises.h in Headers */, + 9F18CD942A6388A54C0AC3EFA18670D3 /* GDTCORLifecycle.h in Headers */, + 2E59E507E7081930F680F579B3210D15 /* GDTCORPlatform.h in Headers */, + B40D9F620ECCDCB1B2BF6AA49E3F6740 /* GDTCORReachability.h in Headers */, + BDF34B687D9FF14F3BD9FE870C5FD87C /* GDTCORReachability_Private.h in Headers */, + C7B0D955485AD1A47A2E179D0470B067 /* GDTCORRegistrar.h in Headers */, + 8D9329946F0AF5B5E43E55B2043EA0EB /* GDTCORRegistrar_Private.h in Headers */, + 882E20FA17B71515C3FD621A27E5116D /* GDTCORStorageEventSelector.h in Headers */, + E0CD793ACD03F02004FFD7ABACF9047C /* GDTCORStorageProtocol.h in Headers */, + 56322B4562A5B096C72F1E5BE1EDA721 /* GDTCORTargets.h in Headers */, + 575C37A0158B2CAC145109F6CB87DE8C /* GDTCORTransformer.h in Headers */, + FAB3DF6A6CE7D8DDBA1056C02E7E304D /* GDTCORTransformer_Private.h in Headers */, + F816E33023F03ADACE585B75DA769F8C /* GDTCORTransport.h in Headers */, + 2ABCE2D794F54E42CB36B7335FDFD49D /* GDTCORTransport_Private.h in Headers */, + DF7B503059D5E8013F13DEB0D3BD22D4 /* GDTCORUploadBatch.h in Headers */, + 52EE94C5E58E2EB448C2092E05E46BCB /* GDTCORUploadCoordinator.h in Headers */, + AFB51A56D385E66FE45EC7766C95C734 /* GDTCORUploader.h in Headers */, + A6EE415CD7F5FBF6438E6B87731B5F56 /* GoogleDataTransport.h in Headers */, + 6837CB930DDB3831690BA72BC4789B7D /* GoogleDataTransport-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - B006EED12ACD09D83F22B69EC37954DE /* Headers */ = { + 78327A86346B4C3BFE9C3B5386044896 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 1B696AEFE3B558E33F816DFF8A263997 /* FBLPromise+All.h in Headers */, - 772957B8FAD9FA2E780037409D8F7F25 /* FBLPromise+Always.h in Headers */, - 5DADE82EAC2E0C8A77E2AC4A3C029171 /* FBLPromise+Any.h in Headers */, - BAAF14E52869F9E47F5CAAB4AE02427A /* FBLPromise+Async.h in Headers */, - 433FDCCAA259FF89BCE71C73BC985C71 /* FBLPromise+Await.h in Headers */, - 93E52B4CE4C0A9445086C395DC520BB8 /* FBLPromise+Catch.h in Headers */, - EF64912DE4515E17FD4016AC72E0F8D1 /* FBLPromise+Delay.h in Headers */, - BB5F6E268F138999CD9B5A3A34957FFF /* FBLPromise+Do.h in Headers */, - B8D301219688D37DF2DD382916003419 /* FBLPromise+Race.h in Headers */, - 1C18E0CA018BE89ADB75AA36FA32EB3A /* FBLPromise+Recover.h in Headers */, - D465C8CCF79D14CB3CF922BF60DC444C /* FBLPromise+Reduce.h in Headers */, - FE7C63F7B90A7592723638EE7EFB96C4 /* FBLPromise+Retry.h in Headers */, - CF2AC5461B991D1E18D0E47C50FCB3FC /* FBLPromise+Testing.h in Headers */, - 35FAC4DCA52E9D9EADAC951AFA3D4638 /* FBLPromise+Then.h in Headers */, - 2E51FE4FACE07C7E54A35FC5A0F8FDA9 /* FBLPromise+Timeout.h in Headers */, - C7452EED9D42BCD77E43AFF8A13014F7 /* FBLPromise+Validate.h in Headers */, - F2C132485B09F269B735E35AE713B7C2 /* FBLPromise+Wrap.h in Headers */, - 936429706F0382340C6EF1803ABC21E6 /* FBLPromise.h in Headers */, - 711093EDE5CDF062B681578996AA63CF /* FBLPromiseError.h in Headers */, - 5C549BC759227E46AECAE19D5AA77912 /* FBLPromisePrivate.h in Headers */, - 942DD3B86D9153FCBA8746A665EA1BD0 /* FBLPromises.h in Headers */, - 1E4BAB40C757F0ABC30ECC7863C007AE /* PromisesObjC-umbrella.h in Headers */, + 7473A506F7F3A235D9A7945DCE9D09C6 /* Pods-MyStudies-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - B5EFDF0F959FC66FFC5745798BE0ADA6 /* Headers */ = { + A07235E1E88D103EFDEB6510A0BCE7A8 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 8B5758DF4B13538BD14B5923B2FCF70A /* NSBezierPath+SDRoundedCorners.h in Headers */, - 78EAF5EB18481BBCC1FE7DB38E929746 /* NSButton+WebCache.h in Headers */, - 710B099BD183D22DC6138DEF0D82F478 /* NSData+ImageContentType.h in Headers */, - AE950A6E392E01E728AAE5D5D7997D60 /* NSImage+Compatibility.h in Headers */, - 1F55097C4490DCFB8BA4B3D8D284ED33 /* SDAnimatedImage.h in Headers */, - DDABCEDA1455A7213CC6411BEE294CCB /* SDAnimatedImagePlayer.h in Headers */, - B74F4E473F8A8EE8922DE009ADBA3AB0 /* SDAnimatedImageRep.h in Headers */, - 18D1D252617EE8076F60E5F13462A79F /* SDAnimatedImageView+WebCache.h in Headers */, - 870F8CC125713185231805CA5F1A3005 /* SDAnimatedImageView.h in Headers */, - 6D807F4E3245C11DF14F39F681BAEA23 /* SDAssociatedObject.h in Headers */, - 71C95FB341142F6C81587F4A60DC189F /* SDAsyncBlockOperation.h in Headers */, - 7771562E8212237F9D71DFA61B548766 /* SDDeviceHelper.h in Headers */, - 1F5A96B3EF393FE66CAA63900C7B0D56 /* SDDiskCache.h in Headers */, - DF32AA01A71E3AAAF2F476873A472838 /* SDDisplayLink.h in Headers */, - 739D94DB13626873E4F91055ADFF76A5 /* SDFileAttributeHelper.h in Headers */, - B7E17DB82CEFFEE5D3EF0327A919FC57 /* SDGraphicsImageRenderer.h in Headers */, - A89A92F1A42E55D16D68F8C61956B738 /* SDImageAPNGCoder.h in Headers */, - F5B2194F8954EB26405AC5EE15D4B673 /* SDImageAssetManager.h in Headers */, - 1B6CF5D1D8FCF530E4889E7A24D3D359 /* SDImageAWebPCoder.h in Headers */, - E3F51CB54A45249F79A9C49F02039CC5 /* SDImageCache.h in Headers */, - 7E98F6C822C3BC874C2BBDAA21EDE6EC /* SDImageCacheConfig.h in Headers */, - 970A6BB5BF8D5909D1BF00E3FD0BDDE8 /* SDImageCacheDefine.h in Headers */, - 6670CE21A07A8FE1D74FAD1F5103A93B /* SDImageCachesManager.h in Headers */, - A3957E12BFFD41402737EC9CB044D96E /* SDImageCachesManagerOperation.h in Headers */, - 26D9C9FFCDC18618DC92736439FAD58A /* SDImageCoder.h in Headers */, - 3A61543E124318E17FF811C66C7FE8F1 /* SDImageCoderHelper.h in Headers */, - 10B5A5FF74C577DB66C759DE898D39D2 /* SDImageCodersManager.h in Headers */, - B3750289C10AD65DFE5F79C135CDC02D /* SDImageFrame.h in Headers */, - 934A350851291541BFD22A75C146A6F1 /* SDImageGIFCoder.h in Headers */, - F8C32F37DC56462D29CA113B078ADF99 /* SDImageGraphics.h in Headers */, - B5D6F3E34540D26973E78445BC8667CF /* SDImageHEICCoder.h in Headers */, - 092E352F77C5306E82961E8844CCB231 /* SDImageIOAnimatedCoder.h in Headers */, - 4D3D9AA5E2ABCB9F87CD0A59AE536CC6 /* SDImageIOAnimatedCoderInternal.h in Headers */, - FCE4B93B3ACF7D9349F4604EB0BFA2A7 /* SDImageIOCoder.h in Headers */, - 5E0D570A78EF2D89B442D62B266B275E /* SDImageLoader.h in Headers */, - 565FFF620CE785D5F264F0C35121D578 /* SDImageLoadersManager.h in Headers */, - 274968CAE2ADC9D4A4FEBCF184148C6D /* SDImageTransformer.h in Headers */, - AE9A894C45B1F40A0585B51D241DD2A6 /* SDInternalMacros.h in Headers */, - 482390939D521EDC7E4197436C13C005 /* SDMemoryCache.h in Headers */, - B13000184102BC002BDF251521D52FBE /* SDmetamacros.h in Headers */, - 3D375A85D8162BC44D045F53781D006A /* SDWeakProxy.h in Headers */, - B964F75E0BEC223C3DDD199C6342AE0F /* SDWebImage-umbrella.h in Headers */, - A128F49AA0C69EC677B7CBE89E876B42 /* SDWebImage.h in Headers */, - 04762E2F6696F6B57AC647288F800D2D /* SDWebImageCacheKeyFilter.h in Headers */, - 08414C28164CC487E519E30C48342B08 /* SDWebImageCacheSerializer.h in Headers */, - 84B3C925CCA883C89A4FAF942D952371 /* SDWebImageCompat.h in Headers */, - 660751AEAE8DBBF4FBEC77223AC2C69C /* SDWebImageDefine.h in Headers */, - C311E505311BAEA04C896AD42725298D /* SDWebImageDownloader.h in Headers */, - 0FE4EBA08A8135658EE3FEE7198FF686 /* SDWebImageDownloaderConfig.h in Headers */, - FFAFA85A6E470FF29C6F4B433762E61C /* SDWebImageDownloaderDecryptor.h in Headers */, - 354ED7FE2CF541313426DDB96EC41B5D /* SDWebImageDownloaderOperation.h in Headers */, - 29C11EBD5BA1F4AB95FE233E96AFA3E6 /* SDWebImageDownloaderRequestModifier.h in Headers */, - A3199CC12B338BDC13DA57D595EE0B44 /* SDWebImageDownloaderResponseModifier.h in Headers */, - FF798D8A4E72564785D4FFB3D474EDA7 /* SDWebImageError.h in Headers */, - DA6895F97E7A188A1086A604D704181B /* SDWebImageIndicator.h in Headers */, - F3F1E68D641B571814463C6224C4EBD5 /* SDWebImageManager.h in Headers */, - AAABA6909E7E218399B8D18C8D6E5233 /* SDWebImageOperation.h in Headers */, - 44B4F51B018F0039263D2DD796E2F467 /* SDWebImageOptionsProcessor.h in Headers */, - 07E6EA5D5054822A93A14BEFBA02174D /* SDWebImagePrefetcher.h in Headers */, - 388578341C510BD6E0323A526C8D171D /* SDWebImageTransition.h in Headers */, - D178E7A915C804DC54F57BE6050E2CFE /* SDWebImageTransitionInternal.h in Headers */, - 26AFA2DD186558E28CCAC2EF248B4E56 /* UIButton+WebCache.h in Headers */, - FE3DA5677D1F398C686BF698344DFAC2 /* UIColor+SDHexString.h in Headers */, - 919698B67A879DF4B1D27ADEC113E4EB /* UIImage+ExtendedCacheData.h in Headers */, - 4F9B8F367350FE6F02486D6B0AFC0D0C /* UIImage+ForceDecode.h in Headers */, - 9A7902828F49BD78A454AA95FF89DAC7 /* UIImage+GIF.h in Headers */, - AD0A33625275683C2658F7C34B410BCB /* UIImage+MemoryCacheCost.h in Headers */, - 694569BA69DB36D7AFF27367F5ED3A36 /* UIImage+Metadata.h in Headers */, - C76B0E50CBC62A5D037B6A194E087E74 /* UIImage+MultiFormat.h in Headers */, - 35D7349FA198504825E3602C4941EF4D /* UIImage+Transform.h in Headers */, - A7164BC1D4458DF39F884C4FABD3CBAB /* UIImageView+HighlightedWebCache.h in Headers */, - 15F0D404DF94F1546A17142E40A8F3B1 /* UIImageView+WebCache.h in Headers */, - 40A5F8B62507885E01DB3FE0EDE93706 /* UIView+WebCache.h in Headers */, - 72A80124A9E9F0F28B5949657D31E328 /* UIView+WebCacheOperation.h in Headers */, + 17DE87344CAD319DE6AA0F7BE1BA10C7 /* ReachabilitySwift-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - D53BF4B2C08B05086541CFB3D49D416D /* Headers */ = { + C23AD40D0B17DCDFCFED5991F3A234A2 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - E9ED9388D407E53D8DCEBF43C8E7A979 /* FIRAnalyticsConfiguration.h in Headers */, - 3FA6E2E7FCC7A2F0A92D11A788F44063 /* FIRApp.h in Headers */, - FBB70918C8FF95B9BD66EED715D66C94 /* FIRAppAssociationRegistration.h in Headers */, - D0D2DE8A288C5BB1E66C1ACC5E0B3313 /* FIRAppInternal.h in Headers */, - 15EE6FA6688DB3A6157997A8D15F2EE3 /* FIRBundleUtil.h in Headers */, - 7091579FF22C64EE740ECFBEAB6A600A /* FIRComponent.h in Headers */, - 6C2BBA41B17029E7569C6FFB48FA669E /* FIRComponentContainer.h in Headers */, - EA4FA9DF2A9DC9ABFAD947E564E4137C /* FIRComponentContainerInternal.h in Headers */, - C179CB663E8AFAE06C417D0AC1152FC5 /* FIRComponentType.h in Headers */, - 1856927FAC2ED3C399E67DA568EC7A30 /* FIRConfiguration.h in Headers */, - 2C6B29E8E771456930B190F7A6CB3794 /* FIRConfigurationInternal.h in Headers */, - 09B4201E76C9673175C474F5A0274B81 /* FIRCoreDiagnosticsConnector.h in Headers */, - F036534EAC3FDC369D7C96C89D9F6C5D /* FIRCoreDiagnosticsData.h in Headers */, - A8C06A0F8EEDD99F979D1C5D656FB0C6 /* FIRCoreDiagnosticsInterop.h in Headers */, - 46DC0B1353F58957086389C257219062 /* FIRDependency.h in Headers */, - 48A649A7A62A0DC5A3FEC60DE76D4A80 /* FIRDiagnosticsData.h in Headers */, - 18170681E5A5403B5DBB92099BBB3C7E /* FirebaseCore-umbrella.h in Headers */, - 3000BB7D3F6F498126A0479704F32F29 /* FirebaseCore.h in Headers */, - 3F7F76FB116AD0F755FC511BED59D897 /* FirebaseCoreInternal.h in Headers */, - A1AD9FA0392FEE390B0AE6D3FAD31C1F /* FIRFirebaseUserAgent.h in Headers */, - 1207F91A5851F6F88B9AF40B941BD833 /* FIRHeartbeatInfo.h in Headers */, - 7E2FE531B3FF59794C398F6024DFC968 /* FIRLibrary.h in Headers */, - 74479A06DA2E8BA094138F2EAAEC94E9 /* FIRLogger.h in Headers */, - 72EA1E3A0FF44A316408197BB2548220 /* FIRLoggerLevel.h in Headers */, - 4F211BF5DF132622C586DD05EF342E63 /* FIROptions.h in Headers */, - 6E9DED9EB93CA3DACF0589297355E53F /* FIROptionsInternal.h in Headers */, - 42C8D19CD26B1E59F8C5746B1A5B885C /* FIRVersion.h in Headers */, + 75F032FDBB6348F7E3FBEAB0E7B83CD5 /* Pods-MyStudiesTests-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - F4A6429FF0F9608A16E4D96813E85F23 /* Headers */ = { + CCEEFAA8C63580C9CB8978EDA9312BDF /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 62A85277D0462C43B80A05E8822794BB /* IQKeyboardManagerSwift-umbrella.h in Headers */, + B6B43B1B78EC0E52CC08F82841A22A31 /* IQKeyboardManagerSwift-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - F797236E9943400DC9B18DA5F8395299 /* Headers */ = { + E3FA355FC870E78E397446EAD676A99D /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - A1626C63DC98ECE49ADCE50F5C7F74BF /* AbstractActionSheetPicker.h in Headers */, - FC959A2B60814107144EA59FE92D3748 /* ActionSheetCustomPicker.h in Headers */, - 4BB9C836A68DC72EAADB50AC55C99D42 /* ActionSheetCustomPickerDelegate.h in Headers */, - 51204A385DF5C502BAA27ECE86719C7D /* ActionSheetDatePicker.h in Headers */, - 41D299C22C18A78D39EB788D3311974A /* ActionSheetDistancePicker.h in Headers */, - A10C64E4402E96AA72E98D92FC06B334 /* ActionSheetLocalePicker.h in Headers */, - A233FC9783903408A8F2A620895DB36D /* ActionSheetMultipleStringPicker.h in Headers */, - 59789CE08DF6F1682B65A0DB845F18BE /* ActionSheetPicker-3.0-umbrella.h in Headers */, - 14F561BF016628D16C6D89E8CE83E4C8 /* ActionSheetPicker.h in Headers */, - 58CF9A606A3CE3F0CC0CA8A42C4C77E6 /* ActionSheetStringPicker.h in Headers */, - 8C0467D6F35F276E1A62D7C28BD95E46 /* DistancePickerView.h in Headers */, - C95D091FC52554ECE223F92C4A5BCBF6 /* SWActionSheet.h in Headers */, + BE09B05827F66151D154800E41EE3FC6 /* Mockingjay.h in Headers */, + B3190AD0FD14EAE155BA86FE1CDE51BE /* Mockingjay-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - F99306677A024258BAF3C95CE66F458C /* Headers */ = { + E86BCE9C44CCB608E71FBBCA299ED066 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 2BA28611DBF65CF01FCAE4C223FE235A /* FIRAnalyticsInterop.h in Headers */, - D66624350E8CB7C35B57C939973778F0 /* FIRAnalyticsInteropListener.h in Headers */, - 209503149D04A5683F58C51050CE8F83 /* FIRAppInternal.h in Headers */, - FD274400A1A1FCCD4D8AD7D1CC89D45B /* FIRComponent.h in Headers */, - EF95F1E045CFB26512F5606AD14410B3 /* FIRComponentContainer.h in Headers */, - 9D4868165D1303B34B276E46B8B44EE7 /* FIRComponentType.h in Headers */, - 01EE178D8EE78444952B3AEBA17848E1 /* FIRCoreDiagnosticsConnector.h in Headers */, - 86198FCF0327BC18E1437BDC1C3D0909 /* FIRDependency.h in Headers */, - 30794BBEF4048C860E9EB86DBBE56607 /* FirebaseCoreInternal.h in Headers */, - BF6EF2858D7A812CB13F357B45FFC9A9 /* FirebaseInstallationsInternal.h in Headers */, - 2BB2B6F804D20EB708C049189F34EBAC /* FirebaseMessaging-umbrella.h in Headers */, - B817EC1870B352D890AEA691DE49F608 /* FirebaseMessaging.h in Headers */, - 83A6C2BCA806CC1C4A3A709553B8E6B4 /* FirebaseMessaging.h in Headers */, - BE53AAB411FB81808F00AC52DEB8E05D /* FIRHeartbeatInfo.h in Headers */, - 96E0830E29D37BFB6ACDAE6069387D06 /* FIRInteropEventNames.h in Headers */, - 0ED4B4B33722E253444C3F69186286D8 /* FIRInteropParameterNames.h in Headers */, - 5E5379979F0884B49C030C5C1E351A0D /* FIRLibrary.h in Headers */, - 2508CCD26AB0E21EBC9BF6B9A18252EB /* FIRLogger.h in Headers */, - 62DB17592BCAD587CC2777344B21202C /* FIRMessaging.h in Headers */, - 6BE82344F6F4685BED66FC63C002C958 /* FIRMessaging_Private.h in Headers */, - 86DEB7839281B6C1B4D2D838218822B3 /* FIRMessagingAnalytics.h in Headers */, - 4F73877DBB190162C09521B6A8A070B0 /* FIRMessagingAPNSInfo.h in Headers */, - D0DD1B84477FCFB3338CD59D4E0C0308 /* FIRMessagingAuthKeychain.h in Headers */, - CB32C609B5CE4EC09F7E2704F669189F /* FIRMessagingAuthService.h in Headers */, - 37FE33695A6CE95847CF1BBFF8D33A06 /* FIRMessagingBackupExcludedPlist.h in Headers */, - 98B2E0859F459AB01AB265840F8CE4A6 /* FIRMessagingCheckinPreferences.h in Headers */, - 8B4B131D287852548B269C8A8B549D4D /* FIRMessagingCheckinService.h in Headers */, - 14DF9C62C4B8C92FDEB06B3A9A3F81C0 /* FIRMessagingCheckinStore.h in Headers */, - 9488F5569F7BD4563860AB64D6DE2737 /* FIRMessagingCode.h in Headers */, - DF5097AC574AB484A1F7B8740CBC50E9 /* FIRMessagingConstants.h in Headers */, - 0F7162E35E217621D810B3B580D6692B /* FIRMessagingContextManagerService.h in Headers */, - CBFE710FC8E896C221DA2DB69B2B0DCF /* FIRMessagingDefines.h in Headers */, - B3A68A641702DF832A66B0B20DA33DB2 /* FIRMessagingExtensionHelper.h in Headers */, - FE02FFBAA9B8711F4CF3E86AFC68D04E /* FIRMessagingInterop.h in Headers */, - 1C2DA6A472F40360B30EF4BBF3B083FA /* FIRMessagingKeychain.h in Headers */, - 23E7FB7B8CDF4F211224E3C8D071A882 /* FIRMessagingLogger.h in Headers */, - 591AE303B15F774C835262F757E8166F /* FIRMessagingPendingTopicsList.h in Headers */, - D1750DE36EE5BC8B40D828262ED69047 /* FIRMessagingPersistentSyncMessage.h in Headers */, - 8F069CCA5F7C7D3EC2E0115019F9E311 /* FIRMessagingPubSub.h in Headers */, - A5F181E0CB5960423BF1BF0CB4FC91F0 /* FIRMessagingRemoteNotificationsProxy.h in Headers */, - EDCBD73A38CDEB9D5692E573237FA8D6 /* FIRMessagingRmqManager.h in Headers */, - 0E8A8CEAB4D4F23CAC31063F4CA4B2E2 /* FIRMessagingSyncMessageManager.h in Headers */, - EF551337C42E5845870F503B2A262B03 /* FIRMessagingTokenDeleteOperation.h in Headers */, - D3D77BEE08C25095BC183D9443A81B05 /* FIRMessagingTokenFetchOperation.h in Headers */, - 7D729D314EA2673691A1457A79F7A98E /* FIRMessagingTokenInfo.h in Headers */, - 24995E39505872AA8B99364C1E8BA2C6 /* FIRMessagingTokenManager.h in Headers */, - 6804677C03455FD50D0069CD5F95D219 /* FIRMessagingTokenOperation.h in Headers */, - 42C8D0174C82150F6C82AC03393C65AC /* FIRMessagingTokenStore.h in Headers */, - 5B99208B26CC2A16CEA068A6DD56329E /* FIRMessagingTopicOperation.h in Headers */, - 8601D0ED871E1186A5EC1D8CCACBFAB6 /* FIRMessagingTopicsCommon.h in Headers */, - 8722567F2B6B9B77588026CF467DC33B /* FIRMessagingUtilities.h in Headers */, - F6739D5BCAC5562B25E39404E35B4257 /* FIROptionsInternal.h in Headers */, - 0ED62F8DF63B1ED1D3FF30A64FB071C8 /* NSDictionary+FIRMessaging.h in Headers */, - 58C172E532B41414133CBD7DB10E325F /* NSError+FIRMessaging.h in Headers */, + 445AD3633961BD376EE09B02307B088B /* URITemplate-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - FA6D6466CD4DD8B2AE4575F9AE8EB08B /* Headers */ = { + F4E694D84B1BB64E9B3B7FF033114A38 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 11FCB976B1ED05F140F02EC566A34C5C /* FIRCoreDiagnostics.h in Headers */, - 9459C83E2BC5E4D41B9B935D254146F8 /* FIRCoreDiagnosticsData.h in Headers */, - 28700A73DBE6787AF05954F379569A1C /* FIRCoreDiagnosticsInterop.h in Headers */, - 6B299224588A89A72CC867C2D1002523 /* firebasecore.nanopb.h in Headers */, - 4C63985796E8B613763C1E832BF3E6AA /* FirebaseCoreDiagnostics-umbrella.h in Headers */, + E60E46BC303B4B4F1249ADEB56B32B79 /* FIRAnalyticsInterop.h in Headers */, + A8F08228388A321F201B4D41AA7B6CBA /* FIRAnalyticsInteropListener.h in Headers */, + A931377263645CAF10AF923524EBF0B4 /* FIRAppInternal.h in Headers */, + B4DBC9F2903BCF3C8CAC7FCF9C04CE23 /* FIRComponent.h in Headers */, + 59E01E666184A267CD9EEEE421D3AE82 /* FIRComponentContainer.h in Headers */, + 8E968F871C8609D40AC6AC112A4E10CF /* FIRComponentType.h in Headers */, + 6F33CDF659744D4E0351AAD83A17A8F8 /* FIRCoreDiagnosticsConnector.h in Headers */, + 519EA55DB73A4DE25817A0BE00249A85 /* FIRDependency.h in Headers */, + D334208BC91A64ECE579C9017D62DC30 /* FirebaseCoreInternal.h in Headers */, + 2766B3C02382FEDD5FC31E0FD9EED908 /* FirebaseInstallationsInternal.h in Headers */, + D69D3B884B204281F946D4DE9040A5DD /* FirebaseMessaging.h in Headers */, + 4E125E593475BE3851EFE18C1609675B /* FirebaseMessaging.h in Headers */, + E92276E579BE2DB5DADEFEB59EE0F86D /* FirebaseMessaging-umbrella.h in Headers */, + 5905338F8CB8887351F03AFDCB899AC5 /* FIRHeartbeatInfo.h in Headers */, + A354DD0D6AF8E956C39A1AFD6E3B42A4 /* FIRInteropEventNames.h in Headers */, + 2C3397B146B5DAFBF5973518F40CC80E /* FIRInteropParameterNames.h in Headers */, + 325323AD93DEFA1B863E377C129FE430 /* FIRLibrary.h in Headers */, + 25F940187B693B142ADE471F82C4C3EF /* FIRLogger.h in Headers */, + DFEB3EDFEA7B82012C8C4F442C41380E /* FIRMessaging.h in Headers */, + 311C91C6CCDB0E1AEB0FF8BE631BA064 /* FIRMessaging_Private.h in Headers */, + 79070C529D7E514DAEAD35398DD21A7D /* FIRMessagingAnalytics.h in Headers */, + BC0B588DF8678F90C4FB762EC4766FC4 /* FIRMessagingAPNSInfo.h in Headers */, + 763DF38F8CBC5685429B850C62CFF751 /* FIRMessagingAuthKeychain.h in Headers */, + 2687A6EB9C99DAA8A0FED7659089E350 /* FIRMessagingAuthService.h in Headers */, + 7DBF74CC6DB4FDF2D7E338E942789CE7 /* FIRMessagingBackupExcludedPlist.h in Headers */, + 784F2E1DCB636DD130DBB41B26EB6F20 /* FIRMessagingCheckinPreferences.h in Headers */, + 717725C005C2D6B27174A47F7D064783 /* FIRMessagingCheckinService.h in Headers */, + B0E18F568E095951B6209C6F9346503F /* FIRMessagingCheckinStore.h in Headers */, + 1A643B2FCDEC80489C892D9F78DDC815 /* FIRMessagingCode.h in Headers */, + EF1DE0CA52B7C08866DC2A5805B3D260 /* FIRMessagingConstants.h in Headers */, + A4036587FE569E6D1E2C4C91DD77CF75 /* FIRMessagingContextManagerService.h in Headers */, + 05ED6AEA5F905BDA3C631E85A9C77B63 /* FIRMessagingDefines.h in Headers */, + 75E3F368A8766A504C0126FA8069724D /* FIRMessagingExtensionHelper.h in Headers */, + D25B344F3C3A0399C3BFF0AE3349CEB9 /* FIRMessagingInterop.h in Headers */, + 121D13CC663EE7667BD89122577F613D /* FIRMessagingKeychain.h in Headers */, + 1263142A680084136E180B7178F40225 /* FIRMessagingLogger.h in Headers */, + 67DEA6DFEA5489223F863F8B88CC72FE /* FIRMessagingPendingTopicsList.h in Headers */, + C8E5DC1E2E7830BBE767106AC78EFFF0 /* FIRMessagingPersistentSyncMessage.h in Headers */, + BE69DABFBD5C72D179FB2DD11D6F3C5C /* FIRMessagingPubSub.h in Headers */, + 2A389D9D1BC1EA338C7247C8B37720CF /* FIRMessagingRemoteNotificationsProxy.h in Headers */, + 55182D1853881A344A45E3130F583E1D /* FIRMessagingRmqManager.h in Headers */, + 780BAF2630A38446807CB0DE55E4FE4F /* FIRMessagingSyncMessageManager.h in Headers */, + CE1AA7729613A17F2A2C6C992A5C1610 /* FIRMessagingTokenDeleteOperation.h in Headers */, + 81EB697C14A3E0E14F739BA40586EE05 /* FIRMessagingTokenFetchOperation.h in Headers */, + 12665864A3ED3832F5E422A0B418F947 /* FIRMessagingTokenInfo.h in Headers */, + 4E0A419C441256D2E03CB51477F13B23 /* FIRMessagingTokenManager.h in Headers */, + 4482EC007A9C73515CB5B1469AB8316A /* FIRMessagingTokenOperation.h in Headers */, + F3339CACE6609C80B8B12FC20503992D /* FIRMessagingTokenStore.h in Headers */, + D8274DA60B387CCD1116C9611C0BBCFA /* FIRMessagingTopicOperation.h in Headers */, + 44D57DDCE3471403FF0B837C1E5CF9FA /* FIRMessagingTopicsCommon.h in Headers */, + E55AD85C0D738B4863E72358E0630788 /* FIRMessagingUtilities.h in Headers */, + 4C8B71FCBD6EF8ECDCF98ACF8D0A320E /* FIROptionsInternal.h in Headers */, + 9A3447377AFE08514914C27B40DF1924 /* me.nanopb.h in Headers */, + 2CEE4BF55F76FAE36127882ECB9224DC /* NSDictionary+FIRMessaging.h in Headers */, + 2DEEECC278356273A202A4866598938F /* NSError+FIRMessaging.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4603,50 +4818,51 @@ /* Begin PBXNativeTarget section */ 0B00B2C167CD783351BD1D00BD5AD1F8 /* ReachabilitySwift */ = { isa = PBXNativeTarget; - buildConfigurationList = E50A4613BA081C4F47DEEC1F9B9176BA /* Build configuration list for PBXNativeTarget "ReachabilitySwift" */; + buildConfigurationList = 14DE1166A8B9C02D036523FB495E1984 /* Build configuration list for PBXNativeTarget "ReachabilitySwift" */; buildPhases = ( - 09F7B7D04C454C16C0015640CF269F7E /* Headers */, - 9C9FF78F6878BCE13B73B6BB5DD0A609 /* Sources */, - 92A37A51219ED31062DE51A3E139BF37 /* Frameworks */, - 1EA4E360633A1D5CC11F6E9C4EEC2475 /* Resources */, + A07235E1E88D103EFDEB6510A0BCE7A8 /* Headers */, + 000885395D0D686A060DD76E35D874C2 /* Sources */, + 1C23E2775A268AF03AB4FB35BFC953FA /* Frameworks */, + 332B7A37F1A79B4B578E4145341A0E1C /* Resources */, ); buildRules = ( ); dependencies = ( ); name = ReachabilitySwift; - productName = ReachabilitySwift; - productReference = 21B03CA622E690725A6626C088E1D09F /* Reachability.framework */; + productName = Reachability; + productReference = 21B03CA622E690725A6626C088E1D09F /* ReachabilitySwift */; productType = "com.apple.product-type.framework"; }; 2BBF7206D7FAC92C82A042A99C4A98F8 /* PromisesObjC */ = { isa = PBXNativeTarget; - buildConfigurationList = 3DB26EC2C797CC7F40BB1EEACAA8D293 /* Build configuration list for PBXNativeTarget "PromisesObjC" */; + buildConfigurationList = F90CB9D87FC02500E658C6B5571C73A2 /* Build configuration list for PBXNativeTarget "PromisesObjC" */; buildPhases = ( - B006EED12ACD09D83F22B69EC37954DE /* Headers */, - B5776472897589D50EDA86274F31557B /* Copy . Private Headers */, - CC23D841BF35FA9B1DD08A96C811F229 /* Copy . Public Headers */, - E89E2BB1EDC2828E8062F6F178F4F20E /* Sources */, - C8C6881BDD86B365CFAF089BE4B77050 /* Frameworks */, - 53EE48017D0E940338E72C69B7218404 /* Resources */, + 10A2204B7AC7A6DF19781B9112A5BDBA /* Headers */, + 5A7BE0885DD67A9486E42A8B5FB8795A /* Copy . Private Headers */, + 6149C8B6C6BCEFD0BA3F100392EDB406 /* Copy . Public Headers */, + ABB47DB07F3E4DFA971B1788FC670AB6 /* Sources */, + 02CD92F97F8710108D8B71E220EB53D7 /* Frameworks */, + 348319E1303227D7F1E9E53B5799DF79 /* Resources */, + FB5568A2818BBCF0BAC05DBF971D7C70 /* Create Symlinks to Header Folders */, ); buildRules = ( ); dependencies = ( ); name = PromisesObjC; - productName = PromisesObjC; - productReference = 3347A1AB6546F0A3977529B8F199DC41 /* FBLPromises.framework */; + productName = FBLPromises; + productReference = 3347A1AB6546F0A3977529B8F199DC41 /* PromisesObjC */; productType = "com.apple.product-type.framework"; }; 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */ = { isa = PBXNativeTarget; - buildConfigurationList = F7647E2BDF8B9DF44AD8E949386796A7 /* Build configuration list for PBXNativeTarget "SDWebImage" */; + buildConfigurationList = BABD4A24CFCBE5B6FE4680AA062FCF04 /* Build configuration list for PBXNativeTarget "SDWebImage" */; buildPhases = ( - B5EFDF0F959FC66FFC5745798BE0ADA6 /* Headers */, - 5B348A58F743D86566FF6223B24C8A97 /* Sources */, - 3A4D727C36397BC42E9FD8331563BBBA /* Frameworks */, - 728FF2A4CDAFD0B0CDAA210105C25BF6 /* Resources */, + 104737A7F2F8176AF07A40A019B4DC37 /* Headers */, + 4B6FB7A17469A2800E7231A1444746CB /* Sources */, + FB6A1E8A43CF1D3ADFB49BA355F0DEA1 /* Frameworks */, + DC20DB2B5A8B3C34EAC16992C6449775 /* Resources */, ); buildRules = ( ); @@ -4654,102 +4870,105 @@ ); name = SDWebImage; productName = SDWebImage; - productReference = B0B214D775196BA7CA8E17E53048A493 /* SDWebImage.framework */; + productReference = B0B214D775196BA7CA8E17E53048A493 /* SDWebImage */; productType = "com.apple.product-type.framework"; }; 4402AFF83DBDC4DD07E198685FDC2DF2 /* FirebaseCore */ = { isa = PBXNativeTarget; - buildConfigurationList = FC15135A9AED755FEA63921649F2AE21 /* Build configuration list for PBXNativeTarget "FirebaseCore" */; + buildConfigurationList = 3B7EC7BB1E2E0CFFAB00CC30CA42D83B /* Build configuration list for PBXNativeTarget "FirebaseCore" */; buildPhases = ( - D53BF4B2C08B05086541CFB3D49D416D /* Headers */, - 3585CE38FFDB6BEE9CEFB168DCCCD011 /* Sources */, - FEF0D62F4261792A77A260AC6BF91BC3 /* Frameworks */, - 671833D3C3DD7D6DB86F032F45F654F5 /* Resources */, + 675839AB3E77DED0308C64123A4657A3 /* Headers */, + DC9A777E97760CA0B6CD6C3808E87840 /* Sources */, + CCF4A333808D26E76064C562A1B13DAF /* Frameworks */, + BE42176CB85079FEF1A44B70FDB38140 /* Resources */, ); buildRules = ( ); dependencies = ( - 7125813573AC42C087AC6A8C66D3A970 /* PBXTargetDependency */, - 689C7FC37CD07D7E0B071E97BD6D3AA7 /* PBXTargetDependency */, + B7181D8C96DE0AC8C023555040E75854 /* PBXTargetDependency */, + 8AF53A20F99AAB9070CA436964493870 /* PBXTargetDependency */, ); name = FirebaseCore; productName = FirebaseCore; - productReference = E2B63D462DB7F827C4B11FD51E4F8E2D /* FirebaseCore.framework */; + productReference = E2B63D462DB7F827C4B11FD51E4F8E2D /* FirebaseCore */; productType = "com.apple.product-type.framework"; }; 5895B432FE4D2F6826C8FF25A09DB6D2 /* FirebaseMessaging */ = { isa = PBXNativeTarget; - buildConfigurationList = 60155EC14FAFB3BBFB4BCF6D807A41F5 /* Build configuration list for PBXNativeTarget "FirebaseMessaging" */; + buildConfigurationList = 2CC84AB94560185BC0A2986148490EB3 /* Build configuration list for PBXNativeTarget "FirebaseMessaging" */; buildPhases = ( - F99306677A024258BAF3C95CE66F458C /* Headers */, - 7D8BAEE571026E1415CD0E83BBAF064A /* Sources */, - 37AF8D70B8EDFF5978837F9C68125BE6 /* Frameworks */, - B014ABC3EE941C8B994687BF948E6C82 /* Resources */, + F4E694D84B1BB64E9B3B7FF033114A38 /* Headers */, + DCE73ECF4F5FF4736EA0A1D00FC0EC11 /* Sources */, + 21FD294905779BB5267689B32AAF6666 /* Frameworks */, + 057E566441F8B061F43211991B84F9BC /* Resources */, ); buildRules = ( ); dependencies = ( - B57FC409F0C31A4ADDD19E85962E014C /* PBXTargetDependency */, - 58686F9B6CD726AC36EC57CD58ED778F /* PBXTargetDependency */, - 892D1650FA1DD617A7116DC8152D8A0F /* PBXTargetDependency */, + 85AAC6C644956A73D8328073989D6A43 /* PBXTargetDependency */, + 6775EB7F4F2F0097275E27374F0734D8 /* PBXTargetDependency */, + 7A35C7147B8D80E6312A0AA712450496 /* PBXTargetDependency */, + 9739E728EBC3FA332135C45F8C51D2F8 /* PBXTargetDependency */, + 36DE47E2105C56FA63261315357CE9A8 /* PBXTargetDependency */, ); name = FirebaseMessaging; productName = FirebaseMessaging; - productReference = 5B654B4B042BA7DC93766943A643E42B /* FirebaseMessaging.framework */; + productReference = 5B654B4B042BA7DC93766943A643E42B /* FirebaseMessaging */; productType = "com.apple.product-type.framework"; }; 5C0371EE948D0357B8EE0E34ABB44BF0 /* GoogleDataTransport */ = { isa = PBXNativeTarget; - buildConfigurationList = 89857914B49B6F2D94C9CDE09F341532 /* Build configuration list for PBXNativeTarget "GoogleDataTransport" */; + buildConfigurationList = D6E764259752E2AE8E4DDB4FAF06537B /* Build configuration list for PBXNativeTarget "GoogleDataTransport" */; buildPhases = ( - 5121191B4867E549C894049C9A449BCC /* Headers */, - D8A5C037D67438BBB6839E15DB70D608 /* Sources */, - 65F3226D93E11353CB3213C83E2CD37F /* Frameworks */, - 0378215E7F9E7308AE75FAA63837925B /* Resources */, + 71D024A8F90AAFCC09A8D55A8E8875A5 /* Headers */, + 419DAC46AD9365471191FAEA06F8F300 /* Sources */, + 90E37CDF61747A281FF200FA733BFE77 /* Frameworks */, + DC0D407CF7EF269B2B2BD265DB7CD685 /* Resources */, ); buildRules = ( ); dependencies = ( - FD11D5E2DF3BF6F19957C23134D22F92 /* PBXTargetDependency */, - 84FE2347B1D604DB78DBD6037FE37590 /* PBXTargetDependency */, - C1B1F108794E6E308D28CCFA54E8C8E0 /* PBXTargetDependency */, + 957A2E260BF3E0DC2396AAEB4377AC38 /* PBXTargetDependency */, + 5F218F6EBFFFCF15CF8E7E561B15A94B /* PBXTargetDependency */, + 32E900D6FABC630616A12F98E900B554 /* PBXTargetDependency */, ); name = GoogleDataTransport; productName = GoogleDataTransport; - productReference = 856B5CD56F194FAD26EA91620B66D614 /* GoogleDataTransport.framework */; + productReference = 856B5CD56F194FAD26EA91620B66D614 /* GoogleDataTransport */; productType = "com.apple.product-type.framework"; }; 620E05868772C10B4920DC7E324F2C87 /* FirebaseCoreDiagnostics */ = { isa = PBXNativeTarget; - buildConfigurationList = 0703FC20C3265AC4433F9CD95828A874 /* Build configuration list for PBXNativeTarget "FirebaseCoreDiagnostics" */; + buildConfigurationList = 29B3394DEB53A6FE9FC44A690405427B /* Build configuration list for PBXNativeTarget "FirebaseCoreDiagnostics" */; buildPhases = ( - FA6D6466CD4DD8B2AE4575F9AE8EB08B /* Headers */, - 5B37F666075AB81C02BBE22E9B39853D /* Sources */, - 9520B2916CFB492AB73DD8EE628ED2AA /* Frameworks */, - 06CB819390CF5420BB4A87C16415C3FB /* Resources */, + 4827AD47643570415A14BECDBABDE826 /* Headers */, + E7D087F3666C8000DF127676059D1DEC /* Sources */, + AF88530F994CA31997C06D9916470690 /* Frameworks */, + F9FA2400F2C44148C482C18BE713469D /* Resources */, ); buildRules = ( ); dependencies = ( - 9F3543D0198E93B139FEA8069C77F629 /* PBXTargetDependency */, - 9EC3C530BEAF7F8020620E2726F0B384 /* PBXTargetDependency */, - 18BCE6C0361515C02FC6F922B8A632B6 /* PBXTargetDependency */, + 17D2C4DFCB6E882EC55B32FE22C7202B /* PBXTargetDependency */, + 4C75EE59A170CB1EC487B7B59B52DB3C /* PBXTargetDependency */, + 5B2A895E6FD2CEC82E116B028A75E92C /* PBXTargetDependency */, ); name = FirebaseCoreDiagnostics; productName = FirebaseCoreDiagnostics; - productReference = 8CC9178C366942FD6FF6A115604EAD58 /* FirebaseCoreDiagnostics.framework */; + productReference = 8CC9178C366942FD6FF6A115604EAD58 /* FirebaseCoreDiagnostics */; productType = "com.apple.product-type.framework"; }; 68494F30B4A13F8E5E88BCCAEC25B0A4 /* Realm */ = { isa = PBXNativeTarget; - buildConfigurationList = 365CC5A17D0BC52F4129081E53D0A205 /* Build configuration list for PBXNativeTarget "Realm" */; + buildConfigurationList = E4517760B74D777B9A07A99348F18DDA /* Build configuration list for PBXNativeTarget "Realm" */; buildPhases = ( - 7B53465677CC184EAC9F343861E02C49 /* Headers */, - 9BF95FC27B4278CCA0D4C90B11CF284B /* Copy . Private Headers */, - 3ED5637A90AE1E7B986421EE0B890A8C /* Copy . Public Headers */, - FFD90E5BB37C94074A952DAA8A24523D /* Sources */, - 521C1CF0D005DF29AB32E38926628382 /* Frameworks */, - E779BC5F46E090294C71421E6A122578 /* Resources */, + 43AAB06A25CAA6E234153D910EBC7435 /* Headers */, + 8EE93581EC6C395F2FAA8587A9A02DF6 /* Copy . Private Headers */, + E50269A2EEF9C03FB419614905D4FC24 /* Copy . Public Headers */, + 48E251F17EBF382FD0BF92A72469A5E9 /* Sources */, + 1BA04C318AF61CD5082AA414D23E9BB4 /* Frameworks */, + 259325E40875172A155967B91CDF0158 /* Resources */, + 63FB0A2340C3474A4FA9D399322B395E /* Create Symlinks to Header Folders */, ); buildRules = ( ); @@ -4757,55 +4976,55 @@ ); name = Realm; productName = Realm; - productReference = 921BE4A82C4A7A5C72A0C6F8B8FEF200 /* Realm.framework */; + productReference = 921BE4A82C4A7A5C72A0C6F8B8FEF200 /* Realm */; productType = "com.apple.product-type.framework"; }; 782725687624F8665247B84AB581BEB1 /* RealmSwift */ = { isa = PBXNativeTarget; - buildConfigurationList = 03171E4A0A39968144759D1C0A13EB19 /* Build configuration list for PBXNativeTarget "RealmSwift" */; + buildConfigurationList = FA064A19E533562EB20256D7D44D4A0A /* Build configuration list for PBXNativeTarget "RealmSwift" */; buildPhases = ( - 08E144DE30153326FB1017167CE0B6BA /* Headers */, - 598CDF7A6E86968B9AB191F87024BE44 /* Sources */, - 2DAC7140A608C44BA2AA7ADE9D1E446D /* Frameworks */, - 273AC2EC1A4C81114B86CA9342CE37CF /* Resources */, + 5C793DD4621DE9070282F5033269411F /* Headers */, + 64F0BD5007E6B896AD4ED804AD8D9D85 /* Sources */, + 48424FE094852FCA8747A5331511824D /* Frameworks */, + DCB8E71D7BA66963BCB89BA92E1AFE12 /* Resources */, ); buildRules = ( ); dependencies = ( - C915A932E2CBE45A3E3C7937B709D416 /* PBXTargetDependency */, + 3C3EACF84BCF4EBDEA8F7946A646114A /* PBXTargetDependency */, ); name = RealmSwift; productName = RealmSwift; - productReference = 437919EE08EC6BFCCBAC3BD346309742 /* RealmSwift.framework */; + productReference = 437919EE08EC6BFCCBAC3BD346309742 /* RealmSwift */; productType = "com.apple.product-type.framework"; }; 7996D4D780FF8A38ECB1C58253B87C8F /* Mockingjay */ = { isa = PBXNativeTarget; - buildConfigurationList = F7485EA3857FD96A9FC9A05A8053C2AB /* Build configuration list for PBXNativeTarget "Mockingjay" */; + buildConfigurationList = E455E1793A1987C14F63188D2CE58D66 /* Build configuration list for PBXNativeTarget "Mockingjay" */; buildPhases = ( - 3798B3E18C4FEC584434682C92306D48 /* Headers */, - E83F0DEA5B4EA08D2D83AA299B83C01D /* Sources */, - 8CEFBC4EDE3A5DEC5BBF45FAF0E904F4 /* Frameworks */, - 3D2CB64996A3864C52487A9F729E3761 /* Resources */, + E3FA355FC870E78E397446EAD676A99D /* Headers */, + 7B07FE21CFFDC507D2BA42379F6CC90A /* Sources */, + CD3F6085AA737DEB37409BD76647EAD1 /* Frameworks */, + 26BF62DF0EC031F1A95BC6F5066B2173 /* Resources */, ); buildRules = ( ); dependencies = ( - 6C527B3BC933BA3B2B5A4DE60C8140E7 /* PBXTargetDependency */, + 1D8822E8755954A8E8906C5D5F7E3B84 /* PBXTargetDependency */, ); name = Mockingjay; productName = Mockingjay; - productReference = 3D24851DF2A7139150ADCA3F485D00DC /* Mockingjay.framework */; + productReference = 3D24851DF2A7139150ADCA3F485D00DC /* Mockingjay */; productType = "com.apple.product-type.framework"; }; 7B571FD072D3CCB32EC015AE483FCCD0 /* SlideMenuControllerSwift */ = { isa = PBXNativeTarget; - buildConfigurationList = 552F8A3DA42779EF218F2BBADB70816F /* Build configuration list for PBXNativeTarget "SlideMenuControllerSwift" */; + buildConfigurationList = 1CFF699CBEB6B32FD26D8277642C9F21 /* Build configuration list for PBXNativeTarget "SlideMenuControllerSwift" */; buildPhases = ( - 7B92BF631DA2FA004D9B1052A0B5C2E0 /* Headers */, - 66EA8F0010861E42ED54CDB212068C25 /* Sources */, - 1CA74251D54DBA92FED3C778B4EDF1C5 /* Frameworks */, - 216836D29E563ECB273C93D42EFDEE83 /* Resources */, + 3A56ACB11484ADD600197D5772352BA1 /* Headers */, + 67EF8D7220E3BF8B0232359A1B56C73F /* Sources */, + 7AB5387A02AF3D1E5668DFE832D0FEB1 /* Frameworks */, + 8A17F8CD262F9E66D2AD70640DA8BF36 /* Resources */, ); buildRules = ( ); @@ -4813,57 +5032,57 @@ ); name = SlideMenuControllerSwift; productName = SlideMenuControllerSwift; - productReference = AA3D52B90DA35D0F7E1B931F0514B7B2 /* SlideMenuControllerSwift.framework */; + productReference = AA3D52B90DA35D0F7E1B931F0514B7B2 /* SlideMenuControllerSwift */; productType = "com.apple.product-type.framework"; }; 87803597EB3F20FC46472B85392EC4FD /* FirebaseInstallations */ = { isa = PBXNativeTarget; - buildConfigurationList = 4569779631A127832FF034DC61B57173 /* Build configuration list for PBXNativeTarget "FirebaseInstallations" */; + buildConfigurationList = 3AF11E9DDE0C0C0A5DEDB367151BEC9A /* Build configuration list for PBXNativeTarget "FirebaseInstallations" */; buildPhases = ( - 41DDE0C50EC322B2C9CB02556FC1B909 /* Headers */, - 69D52C3339F09C34B333C9CE5A6D7C99 /* Sources */, - 932BF263B26515FD483633AA162F62AB /* Frameworks */, - D8AC959F668AD784F8E08D3E58A0EA0A /* Resources */, + 29CF7428E6E9D094596AAA5683FF1231 /* Headers */, + 4BE1CA5945BBF2DAE016FACE1050E1E5 /* Sources */, + 5E4A050C30D28AF2DD8460418F8E53E3 /* Frameworks */, + B5958D239A5CAD936F4C297AC7814179 /* Resources */, ); buildRules = ( ); dependencies = ( - D2E88232E7575673E67A4A49585F7F99 /* PBXTargetDependency */, - 2BA915590F2DDB6BF86070C8ACC177C8 /* PBXTargetDependency */, - 1983450C0976C44D662033AC8348742C /* PBXTargetDependency */, + F0252F51F2B9E0F1C5BB0D98C4DAC2CF /* PBXTargetDependency */, + 58C5925BF14C701944E56D89765E065B /* PBXTargetDependency */, + CC2C739CCD0804EE68F8619BDF729ADC /* PBXTargetDependency */, ); name = FirebaseInstallations; productName = FirebaseInstallations; - productReference = 13C8C8B254851998F9289F71229B28A2 /* FirebaseInstallations.framework */; + productReference = 13C8C8B254851998F9289F71229B28A2 /* FirebaseInstallations */; productType = "com.apple.product-type.framework"; }; 8D7F5D5DD528D21A72DC87ADA5B12E2D /* GoogleUtilities */ = { isa = PBXNativeTarget; - buildConfigurationList = 86CF6F39C82FFACF5CCA6AB322D530D0 /* Build configuration list for PBXNativeTarget "GoogleUtilities" */; + buildConfigurationList = 455DC2E4C749F30DFF1F375A4F04A640 /* Build configuration list for PBXNativeTarget "GoogleUtilities" */; buildPhases = ( - 9E7E0E6A430F7EBB19F02EBE7B6F1547 /* Headers */, - C832EE907221C148425D79A28357BBEA /* Sources */, - EF5C6849B67415540D8E4967E14974D9 /* Frameworks */, - 4AE6FD9B9A92BAE01EC28BDD41FEEE82 /* Resources */, + 2E6DC957F5857813460BB4562459093A /* Headers */, + DD72EF7DF151BB9510B2E487A23C1A0D /* Sources */, + 669171E4774CD3EA3FD9C4DF8520531A /* Frameworks */, + E9DD18F37ACFA209865C739D9D68C1FE /* Resources */, ); buildRules = ( ); dependencies = ( - F6A24C7E901D1AB8E1058FC9252C475D /* PBXTargetDependency */, + 2D8641F4E4BBFDF5FD9C8760B6D2D2DD /* PBXTargetDependency */, ); name = GoogleUtilities; productName = GoogleUtilities; - productReference = B43874C6CBB50E7134FBEC24BABFE14F /* GoogleUtilities.framework */; + productReference = B43874C6CBB50E7134FBEC24BABFE14F /* GoogleUtilities */; productType = "com.apple.product-type.framework"; }; 99313990C1D76A6D1D017868B6975CC8 /* CryptoSwift */ = { isa = PBXNativeTarget; - buildConfigurationList = DDC4535F74E25828F6BEED1494C49030 /* Build configuration list for PBXNativeTarget "CryptoSwift" */; + buildConfigurationList = 1D8A228996DBC2C7D966D9172843C34A /* Build configuration list for PBXNativeTarget "CryptoSwift" */; buildPhases = ( - 66095ECEC43A72E1A068220503753F50 /* Headers */, - 11F6C7C434D908D27A0EF4CBA0B7AC34 /* Sources */, - BE0E7EC0EC1F6CE6C498053A0AA82C9B /* Frameworks */, - 435C58BCB76A0F2709E6AD05119DCE8E /* Resources */, + 6A7BB6AF36FCE03733D028661957DB1E /* Headers */, + 6A2C2598D12411E934808B8ED3C7FB49 /* Sources */, + 786D2BEBB917377ADEA762CD9F9E20D6 /* Frameworks */, + 5BB9A0249DF492C4BAB8BC913F4991A0 /* Resources */, ); buildRules = ( ); @@ -4871,35 +5090,35 @@ ); name = CryptoSwift; productName = CryptoSwift; - productReference = F81274EDB681F11E7CB05F7DCA2BB33C /* CryptoSwift.framework */; + productReference = F81274EDB681F11E7CB05F7DCA2BB33C /* CryptoSwift */; productType = "com.apple.product-type.framework"; }; A43B25DDF20FCB9228471F8F5135C866 /* ActionSheetPicker-3.0 */ = { isa = PBXNativeTarget; - buildConfigurationList = 543AFABDB667AF073C3569847B1008C0 /* Build configuration list for PBXNativeTarget "ActionSheetPicker-3.0" */; + buildConfigurationList = 5FBF9BBED697A2764595F2142D34D41F /* Build configuration list for PBXNativeTarget "ActionSheetPicker-3.0" */; buildPhases = ( - F797236E9943400DC9B18DA5F8395299 /* Headers */, - 77D271DFD4264F58AC8B3DA2985D4C12 /* Sources */, - 5CB46C5BAA16D47CA55D00459B31D084 /* Frameworks */, - 0B560EB734A24D3FFC20F9A9D2AC0465 /* Resources */, + 48D2850F036A810DF01C825FE903C636 /* Headers */, + C74DCAEAF34FC5664FB6FD94177C9C7E /* Sources */, + 9A85722B4F5A9252D42BC3E32E323AD1 /* Frameworks */, + 58779D47E99CA83011BFDB38494E747A /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "ActionSheetPicker-3.0"; - productName = "ActionSheetPicker-3.0"; - productReference = D6E470A0C684D4FBC08BDF7A28A2A38B /* ActionSheetPicker_3_0.framework */; + productName = ActionSheetPicker_3_0; + productReference = D6E470A0C684D4FBC08BDF7A28A2A38B /* ActionSheetPicker-3.0 */; productType = "com.apple.product-type.framework"; }; A4ED113D38492F631BC6DBF8BB3D1D8E /* URITemplate */ = { isa = PBXNativeTarget; - buildConfigurationList = 53616539C174C4E21AEF692716832AF4 /* Build configuration list for PBXNativeTarget "URITemplate" */; + buildConfigurationList = 21C2F42C1F52C31193AE74EF17FAE49C /* Build configuration list for PBXNativeTarget "URITemplate" */; buildPhases = ( - 98925827824EDBA39B5F6B84C31E9B3A /* Headers */, - C4AE701532D1EBD0502F3EC60B8F154D /* Sources */, - 56DF31F78BB86ABEDA1E19C25CF5F82E /* Frameworks */, - 0AE595E1A1DF77A0DC036F67DCD53FEA /* Resources */, + E86BCE9C44CCB608E71FBBCA299ED066 /* Headers */, + 177C64E9489F8CCC06034035A49EBA5C /* Sources */, + D8323D9ABF88F8602902A5F3C1B33417 /* Frameworks */, + 16940A59343F3844330126EDB745B20E /* Resources */, ); buildRules = ( ); @@ -4907,74 +5126,76 @@ ); name = URITemplate; productName = URITemplate; - productReference = 6A92D13ACA76A198281BA4FC0F5CBAD0 /* URITemplate.framework */; + productReference = 6A92D13ACA76A198281BA4FC0F5CBAD0 /* URITemplate */; productType = "com.apple.product-type.framework"; }; AA7BE5BF8931BEDEFAD27366BF71A5F0 /* Pods-MyStudiesTests */ = { isa = PBXNativeTarget; - buildConfigurationList = AEEACF6B070028BD8BD77A91E8611FAD /* Build configuration list for PBXNativeTarget "Pods-MyStudiesTests" */; + buildConfigurationList = B60D8206568EDEC5F2FE7E3D5166F42A /* Build configuration list for PBXNativeTarget "Pods-MyStudiesTests" */; buildPhases = ( - 3601E8EA98CEDB2051473E49CE0444DC /* Headers */, - F2E9B76C2A076713AE5568441B289B81 /* Sources */, - 9A9EE97954E8C848485F3070D0B4C4CB /* Frameworks */, - 7E9C6A83C9EC307568312ADD8576E020 /* Resources */, + C23AD40D0B17DCDFCFED5991F3A234A2 /* Headers */, + F89BCA5E968278AE2D9732DECC877F50 /* Sources */, + 00E4C5F2F32661682D5A79F937DC0353 /* Frameworks */, + EC5F4F613E26F783983BCDC34EE47F3F /* Resources */, ); buildRules = ( ); dependencies = ( - B596CFD5D11FBAE44EE5EA5CEC0F4B0F /* PBXTargetDependency */, - F459DB1B456838D57C06639A05FA97A3 /* PBXTargetDependency */, + E4622016DB4A3EB4A3E29F53C728AE94 /* PBXTargetDependency */, + 62FDEACD3D6578EAF56F878BF1A925F2 /* PBXTargetDependency */, ); name = "Pods-MyStudiesTests"; - productName = "Pods-MyStudiesTests"; - productReference = 21CA59B37340EC61A8C33CF7650E10C7 /* Pods_MyStudiesTests.framework */; + productName = Pods_MyStudiesTests; + productReference = 21CA59B37340EC61A8C33CF7650E10C7 /* Pods-MyStudiesTests */; productType = "com.apple.product-type.framework"; }; B41A7184910D17B798009E482D034D43 /* Pods-MyStudies */ = { isa = PBXNativeTarget; - buildConfigurationList = 4B439D82718FBE3018FBAE24AFCB5C47 /* Build configuration list for PBXNativeTarget "Pods-MyStudies" */; + buildConfigurationList = 0AF50023995A0183E1B9D707EFE86DD0 /* Build configuration list for PBXNativeTarget "Pods-MyStudies" */; buildPhases = ( - 4F11AD97738323D005D2553648857FFC /* Headers */, - FF7FCA30028CEEDAA1C71D9C4A85F727 /* Sources */, - BA265A13865EF35BBB483D9D2DF94FD6 /* Frameworks */, - A06D8E9C64171616AEA13C2BE3645E26 /* Resources */, + 78327A86346B4C3BFE9C3B5386044896 /* Headers */, + 456CC685A892793BD6A6963CB4A9EE82 /* Sources */, + 397C158BDA2716408B0A965B5AC3AF20 /* Frameworks */, + 37AE66D2C02DF1D1A95ED93D00B826D6 /* Resources */, ); buildRules = ( ); dependencies = ( - C515E78C0F661E5476BAC0B2E82E175B /* PBXTargetDependency */, - 8C4CDCED43BED9D0FE7504D7EAF4F6B2 /* PBXTargetDependency */, - 8C01A44E451736B6CFACA5BDEF1B7840 /* PBXTargetDependency */, - B50F9F54DC83F9060E10B301D1743BB7 /* PBXTargetDependency */, - 8103E864E233289AB5FB926BE7D58322 /* PBXTargetDependency */, - 9E53735ADC8EC0190C9A053A1E8AFF53 /* PBXTargetDependency */, - 8CC100C53DB9F358D20F77654118021C /* PBXTargetDependency */, - 604C2B73B7B96450108B08C214C23C1D /* PBXTargetDependency */, - 9E388E3707E4D7DA77AD6A422ECD1796 /* PBXTargetDependency */, - FBA96F4F08D4657ACE80D0421C9EF1DF /* PBXTargetDependency */, - 26B568AE3BFC05E33EA728BA57AC4F5B /* PBXTargetDependency */, - 11590C5B3468F4C431F0989712255317 /* PBXTargetDependency */, - F4E139175D64A91A2721B3063F4C92A7 /* PBXTargetDependency */, - FF643EBD617361307BE8161197A1848A /* PBXTargetDependency */, - 41FAB49115C6D9F624C01BE031AAFF40 /* PBXTargetDependency */, - C48B7E2104E41952E4AB07F6397CA0EE /* PBXTargetDependency */, - FDE6BA2B890EA5077D6FE78A738C4100 /* PBXTargetDependency */, - 4E9F4FFF22A26731DDAAE5C613F58923 /* PBXTargetDependency */, - 8EFBFBF0A5B8E8DC7C120333492286C1 /* PBXTargetDependency */, + FF1BB1EE49281078153383080E592398 /* PBXTargetDependency */, + 8CF83607F8B8E3F4F505E52A91BFC8D9 /* PBXTargetDependency */, + 73F9493E6F22FA91018407739EBB2D29 /* PBXTargetDependency */, + 180A59C781912D95C0246478C8EE0745 /* PBXTargetDependency */, + 7FBAA1CD828C9281E70D7866E49DF54D /* PBXTargetDependency */, + 916320574376EEFCA77301DB08B4F64A /* PBXTargetDependency */, + 800B141C0D9F9B9E05C974834E6382B2 /* PBXTargetDependency */, + 3B507CA9766B589EDEDAAAE27B4BA762 /* PBXTargetDependency */, + 9E9D7E1294766AE40AB7F6B6D087B64D /* PBXTargetDependency */, + C176DC74FE80401575F52264FF08ABB7 /* PBXTargetDependency */, + 48257062759390D317F87CD1D900E645 /* PBXTargetDependency */, + 65ABE2E81D57FC609BDB82F54B91E64C /* PBXTargetDependency */, + 9102AC1250ECDA71D98B137DE65C28CD /* PBXTargetDependency */, + 8BF002AA9F64F4DF3007BBA0BCA07028 /* PBXTargetDependency */, + DEC02819646566C0536FFA3530E77855 /* PBXTargetDependency */, + EDAB0844D54B7FD3DE6DB151AC8DBC28 /* PBXTargetDependency */, + C78A711C6A8980CE36A6864D7ECCA2B4 /* PBXTargetDependency */, + 03FCDDE068A24BD4D24FDC30EF052204 /* PBXTargetDependency */, + FFFE92791217D5D06D4EE8F67518D050 /* PBXTargetDependency */, + 9B16983843334025C3C4B560757F3449 /* PBXTargetDependency */, + 44AB0811EF89403EC34F6D42270E9ADB /* PBXTargetDependency */, ); name = "Pods-MyStudies"; - productName = "Pods-MyStudies"; - productReference = 6E611D764C8C487C549D638A5B6A2D15 /* Pods_MyStudies.framework */; + productName = Pods_MyStudies; + productReference = 6E611D764C8C487C549D638A5B6A2D15 /* Pods-MyStudies */; productType = "com.apple.product-type.framework"; }; B490E7485944099E16C9CBD79119D1D4 /* IQKeyboardManagerSwift */ = { isa = PBXNativeTarget; - buildConfigurationList = A7155AE59A19533F60ECE3B4045B01F0 /* Build configuration list for PBXNativeTarget "IQKeyboardManagerSwift" */; + buildConfigurationList = 42F76AA8E84D32E2DED70BBA35321CB1 /* Build configuration list for PBXNativeTarget "IQKeyboardManagerSwift" */; buildPhases = ( - F4A6429FF0F9608A16E4D96813E85F23 /* Headers */, - 6C02E9CBF87ED8A1C6D8ED4C951F75A4 /* Sources */, - 2C2292E431F316076553538B7FBB63C3 /* Frameworks */, - FAA5DA81F8292820D65F403E941074FC /* Resources */, + CCEEFAA8C63580C9CB8978EDA9312BDF /* Headers */, + AC7850B8AD058752CD0E80D5A5B07A42 /* Sources */, + A3B77577C54970218F8F8340516D00F2 /* Frameworks */, + DAEA1F953296419744C852BAA2739BA1 /* Resources */, ); buildRules = ( ); @@ -4982,35 +5203,35 @@ ); name = IQKeyboardManagerSwift; productName = IQKeyboardManagerSwift; - productReference = A8E950A16D00F649C54FFB30F81D7842 /* IQKeyboardManagerSwift.framework */; + productReference = A8E950A16D00F649C54FFB30F81D7842 /* IQKeyboardManagerSwift */; productType = "com.apple.product-type.framework"; }; B990BD87169C76A3ED3FE8A9258D91A3 /* Toast-Swift */ = { isa = PBXNativeTarget; - buildConfigurationList = B8C401847A53B4C2810311A8CBD715AD /* Build configuration list for PBXNativeTarget "Toast-Swift" */; + buildConfigurationList = 3393B836BCDFD5292B077E63A26DC97F /* Build configuration list for PBXNativeTarget "Toast-Swift" */; buildPhases = ( - 541A0721D8D26374CF7CF04B1473A45A /* Headers */, - 32133C6B0EACD421CB9EB1ABFCE89B97 /* Sources */, - 6102CF7EA55F5A7D669F88BF0D1A701F /* Frameworks */, - 8812DCC289D1E7BE07818E350A3B8656 /* Resources */, + 63D019064C2255A3D74C25BDF1937802 /* Headers */, + C576B265A93E25312929172E0AB5B460 /* Sources */, + 27AE6978B7DEAB3C99D6DD07D4532395 /* Frameworks */, + 39537AB4608D9B5FE694169E21AD9F19 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Toast-Swift"; - productName = "Toast-Swift"; - productReference = D6043471C96F93DC41F7DD1E0D7D8B35 /* Toast_Swift.framework */; + productName = Toast_Swift; + productReference = D6043471C96F93DC41F7DD1E0D7D8B35 /* Toast-Swift */; productType = "com.apple.product-type.framework"; }; D2B5E7DCCBBFB32341D857D01211A1A3 /* nanopb */ = { isa = PBXNativeTarget; - buildConfigurationList = 4ABBA4541709CBA8A30EAAED1946A515 /* Build configuration list for PBXNativeTarget "nanopb" */; + buildConfigurationList = 5DD555F2EE44377759BE7309A2704921 /* Build configuration list for PBXNativeTarget "nanopb" */; buildPhases = ( - 6B56AC07C112BF7CFE14972CD78C745C /* Headers */, - FD2F1F28FAE6CB9F232CC55B02CF7C10 /* Sources */, - 0E958456AD527DDAD119135A70AE6E79 /* Frameworks */, - AEEC605BAB7FC54A9B42062B8E8F9C9A /* Resources */, + 2DE9398ABFF6A384ABD2CD5B56F40031 /* Headers */, + 8F0C68CF70F8A421C491D22638C4B9B5 /* Sources */, + 15827FAD75551BCCB5CBF53F637272E3 /* Frameworks */, + 1B7EAD74366A4CB92D88A4E9E48069AB /* Resources */, ); buildRules = ( ); @@ -5018,17 +5239,17 @@ ); name = nanopb; productName = nanopb; - productReference = 06FC5C9CF96D60C50FCD47D339C91951 /* nanopb.framework */; + productReference = 06FC5C9CF96D60C50FCD47D339C91951 /* nanopb */; productType = "com.apple.product-type.framework"; }; EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */ = { isa = PBXNativeTarget; - buildConfigurationList = 78E219AC01CD5AFED663C9AB28280801 /* Build configuration list for PBXNativeTarget "Alamofire" */; + buildConfigurationList = 8A212264186B8822192F9C369D7DE4BB /* Build configuration list for PBXNativeTarget "Alamofire" */; buildPhases = ( - 8070B01910C64B9AFD0DB550EDE38D6B /* Headers */, - 2C8326877F6A9617C2FBE9BD15D95B59 /* Sources */, - 9590D3FE7A79CD7CBEE3F346E8C19D4D /* Frameworks */, - 9BCA7D105D531AE5DAF34FB86A2E623A /* Resources */, + 52E6F7B26483BE3BC9393C6C05D32424 /* Headers */, + F5D2A45FBA06D86A537CB441D5BF4FF4 /* Sources */, + 15DC142A7EE833251AA37FC8E2B8E01F /* Frameworks */, + E9D4145FA41F60FFAB33A07796D9ED97 /* Resources */, ); buildRules = ( ); @@ -5036,7 +5257,7 @@ ); name = Alamofire; productName = Alamofire; - productReference = 5D797E9A5C5782CE845840781FA1CC81 /* Alamofire.framework */; + productReference = 5D797E9A5C5782CE845840781FA1CC81 /* Alamofire */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ @@ -5045,19 +5266,19 @@ BFDFE7DC352907FC980B868725387E98 /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 1100; - LastUpgradeCheck = 1100; + LastSwiftUpdateCheck = 1240; + LastUpgradeCheck = 1240; }; buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( - en, Base, + en, ); mainGroup = CF1408CF629C7361332E53B88F7BD30C; - productRefGroup = 2DF80C8988B8F8BBCB2AD2C13EBB5B36 /* Products */; + productRefGroup = B540582CF641A3A2086686F24D8B98FD /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( @@ -5065,10 +5286,12 @@ EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */, 99313990C1D76A6D1D017868B6975CC8 /* CryptoSwift */, 072CEA044D2EF26F03496D5996BBF59F /* Firebase */, + C49E7A4D59E5C8BE8DE9FB1EFB150185 /* FirebaseAnalytics */, 4402AFF83DBDC4DD07E198685FDC2DF2 /* FirebaseCore */, 620E05868772C10B4920DC7E324F2C87 /* FirebaseCoreDiagnostics */, 87803597EB3F20FC46472B85392EC4FD /* FirebaseInstallations */, 5895B432FE4D2F6826C8FF25A09DB6D2 /* FirebaseMessaging */, + B53D977A951AFC38B21751B706C1DF83 /* GoogleAppMeasurement */, 5C0371EE948D0357B8EE0E34ABB44BF0 /* GoogleDataTransport */, 8D7F5D5DD528D21A72DC87ADA5B12E2D /* GoogleUtilities */, B490E7485944099E16C9CBD79119D1D4 /* IQKeyboardManagerSwift */, @@ -5089,154 +5312,154 @@ /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 0378215E7F9E7308AE75FAA63837925B /* Resources */ = { + 057E566441F8B061F43211991B84F9BC /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 06CB819390CF5420BB4A87C16415C3FB /* Resources */ = { + 16940A59343F3844330126EDB745B20E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 0AE595E1A1DF77A0DC036F67DCD53FEA /* Resources */ = { + 1B7EAD74366A4CB92D88A4E9E48069AB /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 0B560EB734A24D3FFC20F9A9D2AC0465 /* Resources */ = { + 259325E40875172A155967B91CDF0158 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 1EA4E360633A1D5CC11F6E9C4EEC2475 /* Resources */ = { + 26BF62DF0EC031F1A95BC6F5066B2173 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 216836D29E563ECB273C93D42EFDEE83 /* Resources */ = { + 332B7A37F1A79B4B578E4145341A0E1C /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 273AC2EC1A4C81114B86CA9342CE37CF /* Resources */ = { + 348319E1303227D7F1E9E53B5799DF79 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 3D2CB64996A3864C52487A9F729E3761 /* Resources */ = { + 37AE66D2C02DF1D1A95ED93D00B826D6 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 435C58BCB76A0F2709E6AD05119DCE8E /* Resources */ = { + 39537AB4608D9B5FE694169E21AD9F19 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 4AE6FD9B9A92BAE01EC28BDD41FEEE82 /* Resources */ = { + 58779D47E99CA83011BFDB38494E747A /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 53EE48017D0E940338E72C69B7218404 /* Resources */ = { + 5BB9A0249DF492C4BAB8BC913F4991A0 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 671833D3C3DD7D6DB86F032F45F654F5 /* Resources */ = { + 8A17F8CD262F9E66D2AD70640DA8BF36 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 728FF2A4CDAFD0B0CDAA210105C25BF6 /* Resources */ = { + B5958D239A5CAD936F4C297AC7814179 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 7E9C6A83C9EC307568312ADD8576E020 /* Resources */ = { + BE42176CB85079FEF1A44B70FDB38140 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 8812DCC289D1E7BE07818E350A3B8656 /* Resources */ = { + DAEA1F953296419744C852BAA2739BA1 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 9BCA7D105D531AE5DAF34FB86A2E623A /* Resources */ = { + DC0D407CF7EF269B2B2BD265DB7CD685 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - A06D8E9C64171616AEA13C2BE3645E26 /* Resources */ = { + DC20DB2B5A8B3C34EAC16992C6449775 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - AEEC605BAB7FC54A9B42062B8E8F9C9A /* Resources */ = { + DCB8E71D7BA66963BCB89BA92E1AFE12 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - B014ABC3EE941C8B994687BF948E6C82 /* Resources */ = { + E9D4145FA41F60FFAB33A07796D9ED97 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - D8AC959F668AD784F8E08D3E58A0EA0A /* Resources */ = { + E9DD18F37ACFA209865C739D9D68C1FE /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - E779BC5F46E090294C71421E6A122578 /* Resources */ = { + EC5F4F613E26F783983BCDC34EE47F3F /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - FAA5DA81F8292820D65F403E941074FC /* Resources */ = { + F9FA2400F2C44148C482C18BE713469D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -5245,875 +5468,1035 @@ }; /* End PBXResourcesBuildPhase section */ +/* Begin PBXShellScriptBuildPhase section */ + 46B60BC8332761D7FC97574F44E15072 /* [CP] Copy XCFrameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/FirebaseAnalytics/FirebaseAnalytics-xcframeworks.sh", + "${PODS_ROOT}/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework", + ); + name = "[CP] Copy XCFrameworks"; + outputPaths = ( + "${PODS_XCFRAMEWORKS_BUILD_DIR}/FirebaseAnalytics/AdIdSupport/FirebaseAnalytics.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/FirebaseAnalytics/FirebaseAnalytics-xcframeworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 63FB0A2340C3474A4FA9D399322B395E /* Create Symlinks to Header Folders */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Create Symlinks to Header Folders"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "cd \"$CONFIGURATION_BUILD_DIR/$WRAPPER_NAME\" || exit 1\nif [ ! -d Versions ]; then\n # Not a versioned framework, so no need to do anything\n exit 0\nfi\n\npublic_path=\"${PUBLIC_HEADERS_FOLDER_PATH#$CONTENTS_FOLDER_PATH/}\"\nif [ ! -f \"$public_path\" ]; then\n ln -fs \"${PUBLIC_HEADERS_FOLDER_PATH#$WRAPPER_NAME/}\" \"$public_path\"\nfi\n\nprivate_path=\"${PRIVATE_HEADERS_FOLDER_PATH#$CONTENTS_FOLDER_PATH/}\"\nif [ ! -f \"$private_path\" ]; then\n ln -fs \"${PRIVATE_HEADERS_FOLDER_PATH#$WRAPPER_NAME/}\" \"$private_path\"\nfi\n"; + }; + F5FF1A0F1CF6C4A999D48648E1CAA6FD /* [CP] Copy XCFrameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/GoogleAppMeasurement/GoogleAppMeasurement-xcframeworks.sh", + "${PODS_ROOT}/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework", + "${PODS_ROOT}/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework", + ); + name = "[CP] Copy XCFrameworks"; + outputPaths = ( + "${PODS_XCFRAMEWORKS_BUILD_DIR}/GoogleAppMeasurement/AdIdSupport/GoogleAppMeasurementIdentitySupport.framework", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/GoogleAppMeasurement/WithoutAdIdSupport/GoogleAppMeasurement.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/GoogleAppMeasurement/GoogleAppMeasurement-xcframeworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + FB5568A2818BBCF0BAC05DBF971D7C70 /* Create Symlinks to Header Folders */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Create Symlinks to Header Folders"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "cd \"$CONFIGURATION_BUILD_DIR/$WRAPPER_NAME\" || exit 1\nif [ ! -d Versions ]; then\n # Not a versioned framework, so no need to do anything\n exit 0\nfi\n\npublic_path=\"${PUBLIC_HEADERS_FOLDER_PATH#$CONTENTS_FOLDER_PATH/}\"\nif [ ! -f \"$public_path\" ]; then\n ln -fs \"${PUBLIC_HEADERS_FOLDER_PATH#$WRAPPER_NAME/}\" \"$public_path\"\nfi\n\nprivate_path=\"${PRIVATE_HEADERS_FOLDER_PATH#$CONTENTS_FOLDER_PATH/}\"\nif [ ! -f \"$private_path\" ]; then\n ln -fs \"${PRIVATE_HEADERS_FOLDER_PATH#$WRAPPER_NAME/}\" \"$private_path\"\nfi\n"; + }; +/* End PBXShellScriptBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ - 11F6C7C434D908D27A0EF4CBA0B7AC34 /* Sources */ = { + 000885395D0D686A060DD76E35D874C2 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - FEC7A713760708215B21D1DC83D0E3C8 /* AEAD.swift in Sources */, - 543740C6C31D3637343F37FA099E11BD /* AEADChaCha20Poly1305.swift in Sources */, - A092D7BC5849A8F719BE24BCB5ED718B /* AES+Foundation.swift in Sources */, - 8A68692B2D967B096E173CF5FF75F590 /* AES.Cryptors.swift in Sources */, - 3759323200DA8229F8EC73C233D1493A /* AES.swift in Sources */, - 6E89EE0A83D419EA1EF17F409199F46B /* Array+Extension.swift in Sources */, - 1B193F2660ED0767A5F0CB98562143BB /* Array+Foundation.swift in Sources */, - 93E0CC3C9D5184C27B9099F1A32512F9 /* Authenticator.swift in Sources */, - ACFB6A0EC19A7AB36CC18691BCD6B9CF /* BatchedCollection.swift in Sources */, - AF53A33BD366AF9440C89CBC9ACB0A4C /* Bit.swift in Sources */, - 4BF868D6EC762DA1E25695733B8E91F5 /* BlockCipher.swift in Sources */, - 6B0A94FEF6EEF7A9D420DD0567C74DA7 /* BlockDecryptor.swift in Sources */, - 2FEB88BAFB0FF24BF06DA6FBCE1E3FD5 /* BlockEncryptor.swift in Sources */, - 15F4114A9A3AE069EAF65B3606EBE525 /* BlockMode.swift in Sources */, - 08B0E83A7A3DB4DF2B556892AEEA9379 /* BlockModeOptions.swift in Sources */, - E4FBECD1B083212C65743404CDF134DA /* Blowfish+Foundation.swift in Sources */, - 6294D3663FED730B4F86E5E68953C155 /* Blowfish.swift in Sources */, - 442B2172794FEF2166A3E7ABA352A5F5 /* CBC.swift in Sources */, - 3DB0D9280765633BD7B46F28F94CD62C /* CBCMAC.swift in Sources */, - C8BECE475FFE148E70377A8E17DB1A15 /* CCM.swift in Sources */, - 5701BD2D60FD3607E0F600639022D695 /* CFB.swift in Sources */, - 579E12DF863290040F3898A955D944D3 /* ChaCha20+Foundation.swift in Sources */, - 4777F57D6B71AECA1C7FC9BF5B238C5D /* ChaCha20.swift in Sources */, - 6B8137456A145BBDF8A917EFF21D531A /* Checksum.swift in Sources */, - D4247D4E1F33160C398B3C13832B0539 /* Cipher.swift in Sources */, - 8B62EE767E432E7E52335B5B9A376D7B /* CipherModeWorker.swift in Sources */, - 568375AF7304702204CB032D869DC2A1 /* CMAC.swift in Sources */, - 067A6E971C7D5446BDCD9A10C06132F8 /* Collection+Extension.swift in Sources */, - 0FCAA6B71411E1EDFF3B72D72548661E /* CompactMap.swift in Sources */, - 3080E2919A9DE48583B05D6385912434 /* Cryptor.swift in Sources */, - 1BAB36C6DF94C2B99C091CE10DF6D234 /* Cryptors.swift in Sources */, - DA0747FF6F30BABFC2AE24586B30A3D7 /* CryptoSwift-dummy.m in Sources */, - 6EF03A3BAFDA8A4BDFF3265B98F9E421 /* CTR.swift in Sources */, - 635093060707BC262AD2F93CBC1DFC52 /* Data+Extension.swift in Sources */, - 5419D23A75236616FD9003BFEAB0A196 /* Digest.swift in Sources */, - 6CD261E331BE5F155ECD85CC512B0BD8 /* DigestType.swift in Sources */, - 51213504F55CD20C4E3F03E4911059B2 /* ECB.swift in Sources */, - 23CBF292B65AD0E76386CB8CD81EDDDD /* GCM.swift in Sources */, - D44428DB2C843DA42DFAD6D6CC333B18 /* Generics.swift in Sources */, - E828E46FC6D91DD36D6F3AA39EE093C3 /* HKDF.swift in Sources */, - D05F84A586D1CB0191FC0CE5F6FD5C6B /* HMAC+Foundation.swift in Sources */, - 30487DD437CFB7896377678D051CE551 /* HMAC.swift in Sources */, - E19B56D9B47F6F81198C6D4B487CF99D /* Int+Extension.swift in Sources */, - 7D7DF06C873B648BC1571FB8138DDA48 /* ISO78164Padding.swift in Sources */, - 88088975B70CE537682C5DFF4AC2A99B /* MD5.swift in Sources */, - 54CA4CC2D9DDD32F559FEFE36DB31914 /* NoPadding.swift in Sources */, - 4187259555D67D09602825B4040CC468 /* OCB.swift in Sources */, - 5961E7DDF55272B633F9B17F1526E8D8 /* OFB.swift in Sources */, - B7FFB7F10C918E1F318B7D5668BDE0C9 /* Operators.swift in Sources */, - 8CCED25A2C2BB2158134937FB9FB26D8 /* Padding.swift in Sources */, - 94FB2E9FBF273077002641CAC5D81724 /* PBKDF1.swift in Sources */, - D75669AE1AD800428598846D24193E8A /* PBKDF2.swift in Sources */, - 3C1E5F3DCE6CBE061B32411E4EE22C20 /* PCBC.swift in Sources */, - 1E49C8AE41ADDC46838C347A22A18D90 /* PKCS5.swift in Sources */, - 32F8C6FF75C97BF262B0062671FD0196 /* PKCS7.swift in Sources */, - E75F619D474EE4F58A20CD637546B782 /* PKCS7Padding.swift in Sources */, - EEF76237AE90C7AE31343705FCAEDE79 /* Poly1305.swift in Sources */, - 43B865F79B7C0E694D8D9AC73F4FB9BD /* Rabbit+Foundation.swift in Sources */, - AB94F8B9962F00B7A5C033DE27F2C1DA /* Rabbit.swift in Sources */, - 8447B4C9B50331AB5953B48626AC9526 /* Scrypt.swift in Sources */, - 976B8D9F1D16518DAE0929DF0CE75568 /* SecureBytes.swift in Sources */, - 2EFD51EE5923D01676D12A0EB6B770E4 /* SHA1.swift in Sources */, - 61EDDBC8BC8D8BFC8C0FD6035AAEBD30 /* SHA2.swift in Sources */, - 4FE3E75FEF292E403FB8D13B64906F41 /* SHA3.swift in Sources */, - 1203DE3A7A3E54730EDF39565687BAB4 /* StreamDecryptor.swift in Sources */, - 3555A585391D7FAA49717AD77868ECC0 /* StreamEncryptor.swift in Sources */, - 2D1AB2CB6FF984135EFF4FB0C1E8B2F3 /* String+Extension.swift in Sources */, - 0246F480B6B64E28D5D06CCAEE8CB01A /* String+FoundationExtension.swift in Sources */, - 1E7D73EA3F470F1BB8C23D7E579FAE24 /* UInt128.swift in Sources */, - E1731CAB8234CC5036FCAFE902640E2F /* UInt16+Extension.swift in Sources */, - D209BE0816237DA14EB1D939314389F7 /* UInt32+Extension.swift in Sources */, - 496830AC001A0919794D96A9D91CADC0 /* UInt64+Extension.swift in Sources */, - FFF6C109252E67C84593E820CE873CEC /* UInt8+Extension.swift in Sources */, - 47808BB808628C2E371FF6E5CA58F5D0 /* Updatable.swift in Sources */, - BE357CD131EB2659A5CA41EB0BCD624F /* Utils+Foundation.swift in Sources */, - ADAAA1190AC1ACD8C1ABA3B9CF80E21B /* Utils.swift in Sources */, - CDDE37ADFE43DE1677A75C6532214557 /* ZeroPadding.swift in Sources */, + AB43B618099D0E0BE5730DE4166CD403 /* Reachability.swift in Sources */, + 960DCEE9167C9C9E11FAA0EDAF872B2F /* ReachabilitySwift-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 2C8326877F6A9617C2FBE9BD15D95B59 /* Sources */ = { + 177C64E9489F8CCC06034035A49EBA5C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 1208E81DA8B532D0646D627B50290EB6 /* AFError.swift in Sources */, - C6D5A4B4028B2C43380C9FA58BD5C8CA /* Alamofire-dummy.m in Sources */, - C1F1DB6A9CBDE584D09BA1613AAD4F9D /* Alamofire.swift in Sources */, - 72EC2712926E6D28B52360D9AC41668F /* AlamofireExtended.swift in Sources */, - DC627AFC5B585686898B014184AFCABD /* AuthenticationInterceptor.swift in Sources */, - ABA85887A41495358C83CE3F3030EDEA /* CachedResponseHandler.swift in Sources */, - 0A1849775CF90D514963187D3A771CF8 /* Combine.swift in Sources */, - 27E59A11A2743B0595CDE3A08675EAE1 /* DispatchQueue+Alamofire.swift in Sources */, - 6546D728B69398F93B506845141EBD61 /* EventMonitor.swift in Sources */, - 91B837CE0DCD8EDB300FCDFFA1279162 /* HTTPHeaders.swift in Sources */, - 013BAC24F7AC722E59517CB110A9E685 /* HTTPMethod.swift in Sources */, - 45B8CC1C61E7A0BB28CFA8CE7C12FEBC /* MultipartFormData.swift in Sources */, - D03F1F02DE8606E6057D57866611BEBF /* MultipartUpload.swift in Sources */, - 19D605A3233499828FB6B790869F3E9C /* NetworkReachabilityManager.swift in Sources */, - 8AA937910F87915DE700CAB6C868689E /* Notifications.swift in Sources */, - 0A900DF17E3B64F08AF673E9A0DDD697 /* OperationQueue+Alamofire.swift in Sources */, - 4AEC050FA7D5ED52FDA9DF50EA3560DF /* ParameterEncoder.swift in Sources */, - D14066FAE94E304798E43651E5886D13 /* ParameterEncoding.swift in Sources */, - 218C14EAE5AA31C30314AE0289B732A0 /* Protected.swift in Sources */, - 666EC5C8356E6D4448A2FE7BEE77AD88 /* RedirectHandler.swift in Sources */, - EDC93BD7B9262119AE145E4C7A9D0212 /* Request.swift in Sources */, - 6E54F64E8DA73F4B0B46C216F9F93F63 /* RequestInterceptor.swift in Sources */, - 6C08F6A77889651626583100F560153D /* RequestTaskMap.swift in Sources */, - C1C5B050B55C15103ABC81769551A283 /* Response.swift in Sources */, - 911448B2EDA2FF880108F77642797A88 /* ResponseSerialization.swift in Sources */, - 66B26C6CAE737EC21F4BA1F1851B69C5 /* Result+Alamofire.swift in Sources */, - 9FED70D1E1FBFB80E974E999EF732258 /* RetryPolicy.swift in Sources */, - 47FDBBBD2704901588C3A7C56BBC502D /* ServerTrustEvaluation.swift in Sources */, - 6AE407A4FB6C3D6ADD862CC6E3067A17 /* Session.swift in Sources */, - 381FF05F8B4F611EE9C2FDBE4457BB89 /* SessionDelegate.swift in Sources */, - 212EDC48B68107BEA9247F3464CE696E /* StringEncoding+Alamofire.swift in Sources */, - 9B1D8A7798D8A6F518FC9AF9725431D0 /* URLConvertible+URLRequestConvertible.swift in Sources */, - D31FC7FDD450C4CDD633ECBAD27C6221 /* URLEncodedFormEncoder.swift in Sources */, - D5EAAFB6FAD77A8F0699345149BA3CBB /* URLRequest+Alamofire.swift in Sources */, - F70EF854395CDE981A8336E4FF0310FE /* URLSessionConfiguration+Alamofire.swift in Sources */, - F0F3224FF592F9BA2A044A2FC2BD4CCD /* Validation.swift in Sources */, + E3F4DE3B5FB5D5932758B4547AFB7E84 /* URITemplate.swift in Sources */, + 6972826D6563D3D59FB46C44A388C657 /* URITemplate-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 32133C6B0EACD421CB9EB1ABFCE89B97 /* Sources */ = { + 419DAC46AD9365471191FAEA06F8F300 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 6B326644BB08AEDF697A82A0F1A66D68 /* Toast-Swift-dummy.m in Sources */, - 4753716AE7A1AB22FB6BA61AA74D942F /* Toast.swift in Sources */, + 8BBFB2A81F33F9BB86DE2065F86C0645 /* cct.nanopb.c in Sources */, + 44AD17B9DF9FCA7F17CE76A047AB8112 /* GDTCCTCompressionHelper.m in Sources */, + 7E3D9D10B3F1BA51A1803A62A7654C35 /* GDTCCTNanopbHelpers.m in Sources */, + DA0881C07596A1B06D3619462ECE0E6B /* GDTCCTUploader.m in Sources */, + 73D6FC5DEB0EA061396193EC02FFF449 /* GDTCCTUploadOperation.m in Sources */, + 0978F895CC1F3CEC1FE03362DA4B35D7 /* GDTCORAssert.m in Sources */, + D82F493C72E872721EBC060BAA71A6CE /* GDTCORClock.m in Sources */, + 1DC21DF083C4465566F03BF5CAB29AB1 /* GDTCORConsoleLogger.m in Sources */, + B5BE041EDBE04B779F186B7B04D6F8DA /* GDTCORDirectorySizeTracker.m in Sources */, + 8A2068E290BB290B127DC3C75DBF206A /* GDTCOREndpoints.m in Sources */, + DE8077C86627654CBDF64F37E12981F9 /* GDTCOREvent.m in Sources */, + 1A49238A6013B73A8A9E9ECEF8CCAA48 /* GDTCOREvent+GDTCCTSupport.m in Sources */, + 239DB23B7937FAD6DD5E43DB92D3AAC1 /* GDTCORFlatFileStorage.m in Sources */, + 457C874CB5D21412C881FA4A6D5D2460 /* GDTCORFlatFileStorage+Promises.m in Sources */, + ECAAB4CE5E7E97B8ECFA6FA8F37D6687 /* GDTCORLifecycle.m in Sources */, + 7ADF5825BBDFF7761A365233F963812E /* GDTCORPlatform.m in Sources */, + 799B031A889B3572A433D8DAF6F4B263 /* GDTCORReachability.m in Sources */, + F4D542A60E3616C84BA38E821A644A2C /* GDTCORRegistrar.m in Sources */, + F3D45D57D86B45F6EF57022B4F1D85B3 /* GDTCORStorageEventSelector.m in Sources */, + 08E9DACA0781806558F4647721E2204B /* GDTCORTransformer.m in Sources */, + 84107A97BB366621B15BF05AA377964B /* GDTCORTransport.m in Sources */, + 02E0BE6822962CCD5D79B85BA9C6AB21 /* GDTCORUploadBatch.m in Sources */, + 95967C10CBD1C26A8E7E225FDAA2D56E /* GDTCORUploadCoordinator.m in Sources */, + 7B09185F5277D35ECFB0ED000FD9CBF7 /* GoogleDataTransport-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 3585CE38FFDB6BEE9CEFB168DCCCD011 /* Sources */ = { + 456CC685A892793BD6A6963CB4A9EE82 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 66E8E6F06019B0740B70B3FDE6B026F9 /* FIRAnalyticsConfiguration.m in Sources */, - F1552D9EDD43552BD1064A1AA49A2D5D /* FIRApp.m in Sources */, - C1BAA07809357F6529E42BB03E129FDD /* FIRAppAssociationRegistration.m in Sources */, - 2B83A6320A1AF009A5B8A3C1545702D0 /* FIRBundleUtil.m in Sources */, - C63FB727C9C81148C0389293D59D8385 /* FIRComponent.m in Sources */, - F00FB4E8F58BA0B1C435816038C710E7 /* FIRComponentContainer.m in Sources */, - BB2571FA2B908271A1D755389260AAE4 /* FIRComponentType.m in Sources */, - 9B34DAD79707FD04CEB152B02585D484 /* FIRConfiguration.m in Sources */, - 1EAB98B2AD46328352995FCB038CD389 /* FIRCoreDiagnosticsConnector.m in Sources */, - 1B2A707C08431E6C9DD4AE516F9A9068 /* FIRDependency.m in Sources */, - 0B0F8B7213F6508A6A054E2836C336F5 /* FIRDiagnosticsData.m in Sources */, - E3475B49ECABE351E951BF085877D01E /* FirebaseCore-dummy.m in Sources */, - 24A57C6C160EF3C9CDB0AD2E5EC4978B /* FIRFirebaseUserAgent.m in Sources */, - F1E902DA76C4E04667ECA17644EF4BAB /* FIRHeartbeatInfo.m in Sources */, - 5B4FD6483A9E606CDAC3823EA0CF383F /* FIRLogger.m in Sources */, - F12BBB8151ED1C4F3D65F0BBFE8C8C07 /* FIROptions.m in Sources */, - 38CA4A48EC4E60CAD9CD1EB43ABD37F0 /* FIRVersion.m in Sources */, + E9114F0A5B221B52506D3BDC66174EF1 /* Pods-MyStudies-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 598CDF7A6E86968B9AB191F87024BE44 /* Sources */ = { + 48E251F17EBF382FD0BF92A72469A5E9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 1B6A75EE2A4F79DA2D6D5418A7A44F4A /* Aliases.swift in Sources */, - 88304C4055E842C0094C1F1B59FEE3DF /* Combine.swift in Sources */, - 1B9049F7AB294D6C1063832569E8A832 /* Error.swift in Sources */, - 3389125ECCCB0754489646B80E1B400B /* LinkingObjects.swift in Sources */, - 763795EAAF9566F31BB8FEADAB3FD857 /* List.swift in Sources */, - 40E9245B83E966FBB00630B857DFD8F5 /* Migration.swift in Sources */, - 0F050134333B919E2867741D2128159B /* Object.swift in Sources */, - 4F57332DC20744F45F1E82F6AA70D221 /* ObjectiveCSupport+Sync.swift in Sources */, - 97DCE693B8DD7825E26343AB98E156FD /* ObjectiveCSupport.swift in Sources */, - 86464C86FA4CFB66A72CCED74E021F00 /* ObjectSchema.swift in Sources */, - 273365A72D0B074B13467EEB9071EA83 /* Optional.swift in Sources */, - 3669DF01C5083A622B7047351E0BD64E /* Property.swift in Sources */, - 6C941B3F282D15E90FA15E3082615F7C /* Realm.swift in Sources */, - 864260FA11698201850FDAB0A4212F55 /* RealmCollection.swift in Sources */, - 567D3E3DE7EFE42F37A0696EC5307F36 /* RealmConfiguration.swift in Sources */, - 941E2DF90B0062D3EC436E8167B2D3B1 /* RealmSwift-dummy.m in Sources */, - 349728F5E278D2429DC216045284ABFF /* Results.swift in Sources */, - D6F77BCA984B47F856D80E231AC5BA7F /* Schema.swift in Sources */, - 7B933E94281FE1D6B36C0D89F19ECCCE /* SortDescriptor.swift in Sources */, - 288694995551D97302540ABE26C5CAD2 /* SwiftVersion.swift in Sources */, - 48613B407C17DF107D61D8D717017437 /* Sync.swift in Sources */, - 3D1787FFFD9EE21E73E2A43B93532CC2 /* ThreadSafeReference.swift in Sources */, - 4DD3114913713279B536B8B5FFF49555 /* Util.swift in Sources */, + A952F8BC771D8F6AC4B933969AC640CA /* async_open_task.cpp in Sources */, + 3863C639EE9B5740DFB759E44AB719D0 /* binding_callback_thread_observer.cpp in Sources */, + 4412A2326DF9D3E8FBC69F331A216568 /* collection_change_builder.cpp in Sources */, + 2857C12D41243A71C3972DE5CF012ADE /* collection_notifications.cpp in Sources */, + CC551ED254168CA10F59974144D2F767 /* collection_notifier.cpp in Sources */, + 9C6D45BB9AB32A98B398E0BF6674C42F /* external_commit_helper.cpp in Sources */, + 0992756A8122762086372511C566F517 /* index_set.cpp in Sources */, + 1705AD77D440D12CED6C70A614B6BACF /* keychain_helper.cpp in Sources */, + C319DAAECDDBD90554762D228289814E /* list.cpp in Sources */, + 1403A336EB65ED3055D82D04E2D0B606 /* list_notifier.cpp in Sources */, + E6BF834FABD16266E5290E3040F65F9A /* network_reachability_observer.cpp in Sources */, + 69D1773C1F032FAA1618E8E9C782A7E3 /* NSError+RLMSync.m in Sources */, + 5044520D66564D15A6791711F8D0B814 /* object.cpp in Sources */, + DA0879555CC95C3CBFF17EE1BFB82104 /* object_changeset.cpp in Sources */, + FD886A8B4E419DF83480C78DB0133DCE /* object_notifier.cpp in Sources */, + 4DC4BB83E813D197C5B61E800D2577EC /* object_schema.cpp in Sources */, + 0A696EDC71A570E6891C28C157D8C08F /* object_store.cpp in Sources */, + 0767F93019D330277305B01FDF401F88 /* partial_sync.cpp in Sources */, + 1DB7E18AAFEAE99D1C291F36481FBC8A /* placeholder.cpp in Sources */, + A55AA4F69804E0952F5A67D777B13455 /* Realm-dummy.m in Sources */, + FB576D4ECFCAE769D88BDB2CA9FADE85 /* realm_coordinator.cpp in Sources */, + AA9C7AEA4CC14179B7F944C622CCF9FC /* results.cpp in Sources */, + 861350B95FEE937A58FDA76A7CA19404 /* results_notifier.cpp in Sources */, + 10F2108138B0493998B59F6AB456E31E /* RLMAccessor.mm in Sources */, + 232389C507070EFB94E7263DE411AA08 /* RLMAnalytics.mm in Sources */, + 79E9C62F76E4368E8C4DBBF9F291D00A /* RLMArray.mm in Sources */, + 3EAF47EA6C257259EE0E0C68952F7A59 /* RLMClassInfo.mm in Sources */, + 96C4CBB9D0D374C99EC5C717EF7D07EF /* RLMCollection.mm in Sources */, + 442567AA3729CE290823E6890EA3EF05 /* RLMConstants.m in Sources */, + D89AD7CF2C67EF6526C9F924E9F2DFCB /* RLMJSONModels.m in Sources */, + 11C4F8AE3CAD4E055F04EE68BA6602B4 /* RLMListBase.mm in Sources */, + 7A7C604B013C43E17ABA8932E36CD661 /* RLMManagedArray.mm in Sources */, + 6BD9A2F6B4B67796CEE5EED2585065EB /* RLMMigration.mm in Sources */, + C892E672AB88B0E113005AD5D696C783 /* RLMNetworkClient.mm in Sources */, + 2218A32DE5A9C6A8C2E344B41B1E3040 /* RLMObject.mm in Sources */, + 92DCD0B3C0B1847F6B15C0649CBD7AE2 /* RLMObjectBase.mm in Sources */, + 32498B0F721AFB58BD7750DDECF35AB9 /* RLMObjectSchema.mm in Sources */, + 63859E7192CE60721388CECD3BA9F216 /* RLMObjectStore.mm in Sources */, + 7F55E97FF705354B6E01ED233427A0BD /* RLMObservation.mm in Sources */, + 17329FEE1906AB6D6422311C6107458E /* RLMOptionalBase.mm in Sources */, + 31EFF7DC4D279860D9D7B9154EF7E8B3 /* RLMPredicateUtil.mm in Sources */, + 5D8DEDBC157D9DE8BCBB49C9E3EF4DB1 /* RLMProperty.mm in Sources */, + E70C2F0E85E174239771E6400FB2411C /* RLMQueryUtil.mm in Sources */, + DF05140DDF642B2EF7F4CDE512B71005 /* RLMRealm.mm in Sources */, + 842591E5C67715C678A8963865537C8B /* RLMRealm+Sync.mm in Sources */, + 7F07E2CDB62E07F36F5E540BA025DCA7 /* RLMRealmConfiguration.mm in Sources */, + 5BA16F2BD795988806B4C93E14182AE7 /* RLMRealmConfiguration+Sync.mm in Sources */, + 0B9AD4D8866661F2755734FC15964145 /* RLMRealmUtil.mm in Sources */, + 97F703131EF2D86BD472D245CDA7EDC7 /* RLMResults.mm in Sources */, + 76B7570A72547019BE15F3F6F784F51C /* RLMSchema.mm in Sources */, + 9E96E08C3DBB7D36E0F8F233C3A81C61 /* RLMSwiftSupport.m in Sources */, + D48509A990BA8242C1E3F567DBDCEBA0 /* RLMSyncConfiguration.mm in Sources */, + 9E8B76A5E596E737D73DB23886CF472A /* RLMSyncCredentials.m in Sources */, + 9D1675F919BB06D47A9BE5C52CD860FA /* RLMSyncManager.mm in Sources */, + 52E45ED889A5BC35A292562D69EB7549 /* RLMSyncPermission.mm in Sources */, + B8749987FCA6AEB6A3C80F4DFE148D72 /* RLMSyncSession.mm in Sources */, + E3A23BAC7140C71EB52E568494B8E6DA /* RLMSyncSessionRefreshHandle.mm in Sources */, + 4CE41F07696AA12AA1E674F84B2F6053 /* RLMSyncSubscription.mm in Sources */, + F906C6087BF26D779C36F16A2DC69526 /* RLMSyncUser.mm in Sources */, + 159AB2114C129E29B07C402CCFC36D3F /* RLMSyncUtil.mm in Sources */, + C8E5732E929C2BD2514B497668D3AE22 /* RLMThreadSafeReference.mm in Sources */, + FA56CC7A3C1BD5D5E8453FFAF4E033BD /* RLMUpdateChecker.mm in Sources */, + 875FB4D96B5DD9EDC240F7C845517546 /* RLMUtil.mm in Sources */, + 578E26936012EF18408E3B9F4EA54420 /* scheduler.cpp in Sources */, + 128D64EB284413FA765E28172E87091E /* schema.cpp in Sources */, + 538487A72C96D8607E850330240E1428 /* shared_realm.cpp in Sources */, + 88E289AE800F6C2E36BCBC20CCF27CF0 /* sync_config.cpp in Sources */, + EBF4519FBC30DDD26C0FAC888A169FCB /* sync_file.cpp in Sources */, + 43A12D4192BBA5BE8BC7CB980F98ACDB /* sync_manager.cpp in Sources */, + A494C10F5043D41343AA237DF3A2B57C /* sync_metadata.cpp in Sources */, + 438F7B08566C75A89400AC8FC49F11B0 /* sync_session.cpp in Sources */, + 4D0EF054B7A90456C712857D9D17658A /* sync_user.cpp in Sources */, + DE6BD51091F66AE9666E35209C94A402 /* system_configuration.cpp in Sources */, + 9C92D8A8C26CB10562265CED29743542 /* thread_safe_reference.cpp in Sources */, + 010D4D36661F4985CA5402EEBBC565AF /* transact_log_handler.cpp in Sources */, + 15FB8AF4F23EB2DB472AC213328F32F9 /* uuid.cpp in Sources */, + 04380BADE8531FB55CBD6D9719B494D8 /* weak_realm_notifier.cpp in Sources */, + 5CD4BB9F47C0150E44BBEEA92B0C2270 /* work_queue.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5B348A58F743D86566FF6223B24C8A97 /* Sources */ = { + 4B6FB7A17469A2800E7231A1444746CB /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 6E8F129294E44619FA2674150EBE336A /* NSBezierPath+SDRoundedCorners.m in Sources */, - 91CB272CC3D7C0D5C1442BCFBC4F5048 /* NSButton+WebCache.m in Sources */, - C6FF07461DB95FD96B47723C123B36BB /* NSData+ImageContentType.m in Sources */, - 1CBEEC98DEB7338620F68B0E705D132D /* NSImage+Compatibility.m in Sources */, - 6AC5D2781167F9081FBA570FC8B89C90 /* SDAnimatedImage.m in Sources */, - D91024E2275D2B62BB8CDFAADDA9F999 /* SDAnimatedImagePlayer.m in Sources */, - E3C7DC809034DACD9D1FF1856DAD3ED2 /* SDAnimatedImageRep.m in Sources */, - 1F7AFE861609115DF7D756769A553F87 /* SDAnimatedImageView+WebCache.m in Sources */, - E57482DCBAB73E4AC9A8EB0816998D8F /* SDAnimatedImageView.m in Sources */, - 02292FC1E8CF700F59D154DF2C841F75 /* SDAssociatedObject.m in Sources */, - AF855A5EDCAEFF0EFCD1F6AC49D664B5 /* SDAsyncBlockOperation.m in Sources */, - A8C8A2C92F70DFC3E67E1CCB0A5FBDA3 /* SDDeviceHelper.m in Sources */, - 0DE72963700100361EA2789EA929EFFD /* SDDiskCache.m in Sources */, - 85FB50C8A79A473625B9BB664BCCEBBE /* SDDisplayLink.m in Sources */, - 494F5E5284E2F6D0FA92F07ADF5FB6AC /* SDFileAttributeHelper.m in Sources */, - E4E1FA42EF47413EBEB0D1E5827C21E5 /* SDGraphicsImageRenderer.m in Sources */, - 064E3B3A6A411886A3648C2ADBE64F9B /* SDImageAPNGCoder.m in Sources */, - 3E344FED4F81EEA697CB210FEAC27659 /* SDImageAssetManager.m in Sources */, - 64DAB91A8FA2EA338E04690A514F7AE0 /* SDImageAWebPCoder.m in Sources */, - 563B9544C22BA4447DF43156531D5743 /* SDImageCache.m in Sources */, - FCB195C37285D2114148870D88D2973C /* SDImageCacheConfig.m in Sources */, - 7D2961DDAF48D719A4A73A3B8C046A8F /* SDImageCacheDefine.m in Sources */, - BD8E2EDAA9631CEF3CDEECF1254AAA23 /* SDImageCachesManager.m in Sources */, - 7958AE8C4352219F24537DC524916EF1 /* SDImageCachesManagerOperation.m in Sources */, - 02630CF9E3967768C1A8EB31DBE9BB72 /* SDImageCoder.m in Sources */, - B1DB99789806C0441B342B5E9DC53B51 /* SDImageCoderHelper.m in Sources */, - 273ACF8CDCA537DB5769A55F35195A03 /* SDImageCodersManager.m in Sources */, - F00615AF2747EBC80993096F43808951 /* SDImageFrame.m in Sources */, - A80404D8B63B127D33C6EE5FDCF9E22A /* SDImageGIFCoder.m in Sources */, - 6426334186986F3FB6225876EB8A90DA /* SDImageGraphics.m in Sources */, - 40C1238DC5744C26FB96C3391431639A /* SDImageHEICCoder.m in Sources */, - C5E75553E150D75C05DDFF6A1F937B2D /* SDImageIOAnimatedCoder.m in Sources */, - 3539E3E01A8DE6636BE39797BBBD13E4 /* SDImageIOCoder.m in Sources */, - 7523FC5C348F565FA5A2C8ADBAB3CEA0 /* SDImageLoader.m in Sources */, - 9FFBF180E58F87C33F09ECAA10CA6627 /* SDImageLoadersManager.m in Sources */, - 8D34717C107EA741BEE9869A20622AFE /* SDImageTransformer.m in Sources */, - 29A34FBE9DC82BF012AC83585F4530E0 /* SDInternalMacros.m in Sources */, - 600983DEB7205EC72FAB41DD91F1D605 /* SDMemoryCache.m in Sources */, - 6F27684AC57716BA63A3C106BF1C6A5D /* SDWeakProxy.m in Sources */, - AC139FED9A7DBE099B12A721A995A516 /* SDWebImage-dummy.m in Sources */, - A33DC9464A8B60A6B9B6C6E4E28B6E22 /* SDWebImageCacheKeyFilter.m in Sources */, - 0BC52097426786A1611A11744FF823B4 /* SDWebImageCacheSerializer.m in Sources */, - A1CA153657BB3C689240AED52E62A088 /* SDWebImageCompat.m in Sources */, - 1C7FD60FFAD67D4FA202225FB6303128 /* SDWebImageDefine.m in Sources */, - 730F02CFFBD74BD46562276A09B922B0 /* SDWebImageDownloader.m in Sources */, - 78EBAE4A4F7FDA568D8CEE83E8B03F0D /* SDWebImageDownloaderConfig.m in Sources */, - 3712621D4AB06646D591BFB56FE46BBD /* SDWebImageDownloaderDecryptor.m in Sources */, - B5100B423F78B1CF2EA5B47DB9D503D5 /* SDWebImageDownloaderOperation.m in Sources */, - 606CF4C030B87CD04100E49A3B962C2B /* SDWebImageDownloaderRequestModifier.m in Sources */, - ABD2E7452FCBB2F2B68D2F13E7CCF934 /* SDWebImageDownloaderResponseModifier.m in Sources */, - C7F50EDBB22A2456909CD13BF0986354 /* SDWebImageError.m in Sources */, - 158ED66F79A1A1B16072418E8B66E628 /* SDWebImageIndicator.m in Sources */, - 502D148FB284EE012260A1AA96674EEE /* SDWebImageManager.m in Sources */, - 9504088CAE8E4620226B40481A679F44 /* SDWebImageOperation.m in Sources */, - 7BFE56BB8AC3DC97C988565B3AE3C571 /* SDWebImageOptionsProcessor.m in Sources */, - CEE39451D2648F560E415CEE64855EEF /* SDWebImagePrefetcher.m in Sources */, - F9B9D0B4A16EC1CADBCFE8533E849AF6 /* SDWebImageTransition.m in Sources */, - 114C2D0BB7EDBEAAA2433CCC8DE5526C /* UIButton+WebCache.m in Sources */, - 3678DF7B6539D273A7C1427C9B3A844E /* UIColor+SDHexString.m in Sources */, - F3928A33E3BA8E361B7287528F88ABB4 /* UIImage+ExtendedCacheData.m in Sources */, - 6F3B1690F53D8DD5B00A062BE5FAE923 /* UIImage+ForceDecode.m in Sources */, - 9BFF63FFEA484FC67C23A671B6E5153B /* UIImage+GIF.m in Sources */, - 1DA6DE69B7F59943AF3B60BA9ACFDEFA /* UIImage+MemoryCacheCost.m in Sources */, - 6004AF2B6D5942DBF1D22646B5061E57 /* UIImage+Metadata.m in Sources */, - F7425341829DF6D4D5D48298E7001981 /* UIImage+MultiFormat.m in Sources */, - F1D31101E2475D6199388A2B5C96841D /* UIImage+Transform.m in Sources */, - 8D73F702A995711B09C3AE6315D3AFFD /* UIImageView+HighlightedWebCache.m in Sources */, - C237BF7CC4251B70879620EDB8ECB238 /* UIImageView+WebCache.m in Sources */, - 9D227F3FB6A74CB6D35300133142E7DF /* UIView+WebCache.m in Sources */, - ADDF98A85600FE7C46F0B5DE60403BFD /* UIView+WebCacheOperation.m in Sources */, + 21D05279AA20EE7A1707A76C11BBCC00 /* NSBezierPath+SDRoundedCorners.m in Sources */, + 474163E6CF20CA1AC3698759F2B6D51B /* NSButton+WebCache.m in Sources */, + FF66F3E7374A9398D5B08AA23273BC0E /* NSData+ImageContentType.m in Sources */, + 994327308CC7ECE7850C804FA0EA5F21 /* NSImage+Compatibility.m in Sources */, + 9CEB5B454088D6BCC3A11C759A76161A /* SDAnimatedImage.m in Sources */, + 0C76BA74E22A5CFD8207C10026401D80 /* SDAnimatedImagePlayer.m in Sources */, + 24DA814C2F7EA7C4187E2BF0B6466E9A /* SDAnimatedImageRep.m in Sources */, + D88076DA0593D2835645CA5A92FFA37C /* SDAnimatedImageView.m in Sources */, + AA3AE0DF5E35D3E0D2CAE7972D69373E /* SDAnimatedImageView+WebCache.m in Sources */, + 4F5982101CB9FB68613E826F137B5E95 /* SDAssociatedObject.m in Sources */, + 498AB54D6531F0B57EAAD113AA0CF0F9 /* SDAsyncBlockOperation.m in Sources */, + 58FAE3A59FBE896EBBDACB0808067CA5 /* SDDeviceHelper.m in Sources */, + 275F99E74511043432C892810081DCAF /* SDDiskCache.m in Sources */, + 9D7EBB3A7377C116526B8A511F8CE245 /* SDDisplayLink.m in Sources */, + 2C762E5C654B718C19CC98FEB27C2DA4 /* SDFileAttributeHelper.m in Sources */, + B88C351562CE8FA4255EA9023213BE4E /* SDGraphicsImageRenderer.m in Sources */, + 854D7A4A2872566E4D06870518053225 /* SDImageAPNGCoder.m in Sources */, + 3015C91C523C5133A639F57DE0425100 /* SDImageAssetManager.m in Sources */, + D7D077F0FA5CAC32ACB65372453C701F /* SDImageAWebPCoder.m in Sources */, + 0D2B3D451D64A5A0AE5CE51E975D7494 /* SDImageCache.m in Sources */, + 888BEE4C3B238AC407C59D2194939AB9 /* SDImageCacheConfig.m in Sources */, + 138DFC533930F784B55D9BB8AACC0E06 /* SDImageCacheDefine.m in Sources */, + 4623448C58E0E271F0DF5F4CC6CAFD0D /* SDImageCachesManager.m in Sources */, + 78AE96580BD551EB905F72C21AB81E97 /* SDImageCachesManagerOperation.m in Sources */, + 64CDB33E49BDBE16653C88756E26B8CB /* SDImageCoder.m in Sources */, + E9CF46857D61D2A8AF4C3722C27C61C6 /* SDImageCoderHelper.m in Sources */, + DB68D9AFA817850ED9EBBE7F3F378AF5 /* SDImageCodersManager.m in Sources */, + 007F57C0030B0CA201A359FD816A3CE1 /* SDImageFrame.m in Sources */, + 164DEB7B33A09DD8663942511488AD16 /* SDImageGIFCoder.m in Sources */, + F0E28CEF30861F3589A4A662CEA76D80 /* SDImageGraphics.m in Sources */, + E33A7CDF3107CD3426ADD0D906100CD4 /* SDImageHEICCoder.m in Sources */, + 96479C9C76FDC513C03ADD58168F6911 /* SDImageIOAnimatedCoder.m in Sources */, + 536E9C0D3855A6AF7CADCB9FBAFC613D /* SDImageIOCoder.m in Sources */, + ABEAA41C35A6CD25C93E622FB129C379 /* SDImageLoader.m in Sources */, + 3F567CE353442AE137B71B258409F5DA /* SDImageLoadersManager.m in Sources */, + A9A87DA629538D239C4B7401EB56AEB5 /* SDImageTransformer.m in Sources */, + 61CD5A24511DC980EFF397CF57AC50F5 /* SDInternalMacros.m in Sources */, + 0D0AF4DF934B7BE39EC6E287B003BBA6 /* SDMemoryCache.m in Sources */, + 4075297FF5A21C84EF513521FD7B34EF /* SDWeakProxy.m in Sources */, + 0DEECB4887F8ED8A8304156D1C440639 /* SDWebImage-dummy.m in Sources */, + 67B0CAAD8E88B9A2357C41E73EA2EB48 /* SDWebImageCacheKeyFilter.m in Sources */, + 05102BD9E7BCB80DC7B64A34D0E7850B /* SDWebImageCacheSerializer.m in Sources */, + E4AF87F8012F919F00E2E8698A1A3C33 /* SDWebImageCompat.m in Sources */, + 49F97D8BA4E81A5E0EF866A293392AF2 /* SDWebImageDefine.m in Sources */, + D68F08F717E95BABFB43AE705D943426 /* SDWebImageDownloader.m in Sources */, + FE05A1BF611E69C94BC7A9EADBE10B2F /* SDWebImageDownloaderConfig.m in Sources */, + DE0BA471FB4FC10C0B25BDE4F22F5B76 /* SDWebImageDownloaderDecryptor.m in Sources */, + DB61822BEA875B413C858E1166590C9F /* SDWebImageDownloaderOperation.m in Sources */, + C27BD8C6B4E713A8E7B7B76B80E45823 /* SDWebImageDownloaderRequestModifier.m in Sources */, + FB359FC2B8375E01A8A8F84D3C50EE82 /* SDWebImageDownloaderResponseModifier.m in Sources */, + 5F49C3C9A3733CD50642E0B57D405D44 /* SDWebImageError.m in Sources */, + 343B53EB998CC5B609B8DE84BAD882E0 /* SDWebImageIndicator.m in Sources */, + FE4845B6FDD260059CDF9E26965CA31B /* SDWebImageManager.m in Sources */, + BE649A29E5FB32C54FDAE55994804F6D /* SDWebImageOperation.m in Sources */, + 7A424FED21A399FE2610DCB710A4A3FB /* SDWebImageOptionsProcessor.m in Sources */, + 62A22A4C10675F9B65C7677CFD6C4676 /* SDWebImagePrefetcher.m in Sources */, + 3B72C235C1AB8944333C2322F08B6B46 /* SDWebImageTransition.m in Sources */, + C55A2D001850D3F407D968CFF1C545E2 /* UIButton+WebCache.m in Sources */, + AE89C60F9CD4D6E1400DD304CE2A2B9E /* UIColor+SDHexString.m in Sources */, + BCB7B61DB37BA3EDB8CBBF258DC66446 /* UIImage+ExtendedCacheData.m in Sources */, + F497CD01EF6568475FD363A248D78A4B /* UIImage+ForceDecode.m in Sources */, + DEE74CD0E78DE0DB4056A8A3244B6ED1 /* UIImage+GIF.m in Sources */, + 412EE262DCED176A73591124DBDBA97C /* UIImage+MemoryCacheCost.m in Sources */, + 28532908E40E423052AA43B0000028BF /* UIImage+Metadata.m in Sources */, + 5B3271A67137276C4B2CD554BAB9F4DA /* UIImage+MultiFormat.m in Sources */, + BF9A6E2CB8F67686C4B7E04538664919 /* UIImage+Transform.m in Sources */, + C4762BD85B320B9EBE199F7CDFBCED12 /* UIImageView+HighlightedWebCache.m in Sources */, + 10E9E4249C8C22A571EBFECF3C0676CC /* UIImageView+WebCache.m in Sources */, + A3BFF0CDB72BC173BEA1C8ADDBDB0D1D /* UIView+WebCache.m in Sources */, + 429E5CC928985357D07058FDEE8069FA /* UIView+WebCacheOperation.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5B37F666075AB81C02BBE22E9B39853D /* Sources */ = { + 4BE1CA5945BBF2DAE016FACE1050E1E5 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5B15D04083FFDAFFB3E9380BEA44174D /* FIRCoreDiagnostics.m in Sources */, - 49FAE250C87D104B40F3503F23341BF3 /* firebasecore.nanopb.c in Sources */, - 52BEB3FDEEC0675F59FB9A1442890E53 /* FirebaseCoreDiagnostics-dummy.m in Sources */, + 8982725DB534D3581B1B555F284CD572 /* FIRCurrentDateProvider.m in Sources */, + BE6B90B609AF8E460D9E224617943154 /* FirebaseInstallations-dummy.m in Sources */, + 5E75A0D446BBDCE52B65DFAC14382840 /* FIRInstallations.m in Sources */, + 4DB5E1104244D37AE4795F8A12C6535E /* FIRInstallationsAPIService.m in Sources */, + 8F9C7DCEB7B584EA095988970BB808B8 /* FIRInstallationsAuthTokenResult.m in Sources */, + 95896594A680429556DD4FE00F699720 /* FIRInstallationsBackoffController.m in Sources */, + D452CB12B2177CFFE24A9D849BE52030 /* FIRInstallationsErrorUtil.m in Sources */, + 905EB6D7A5623EB600856452C84008FA /* FIRInstallationsHTTPError.m in Sources */, + 88D1744ACDEBE99DFA49F67154ADD8B8 /* FIRInstallationsIDController.m in Sources */, + DE2B75B3D8A845F1DD27632B30AEE0D4 /* FIRInstallationsIIDStore.m in Sources */, + B90F0E0F741C432DFD50338912B7E4E4 /* FIRInstallationsIIDTokenStore.m in Sources */, + C9272207891CD6DEB025FF7B688E51CF /* FIRInstallationsItem.m in Sources */, + B6C0E51614DE4B63A77B4513B906E564 /* FIRInstallationsItem+RegisterInstallationAPI.m in Sources */, + 57DB22620729A391CD1D4820E8A25B72 /* FIRInstallationsLogger.m in Sources */, + 8A1B3BE25A646468522667796FB2A99F /* FIRInstallationsSingleOperationPromiseCache.m in Sources */, + 39D786449B03A4F5ED2D73E723C51EA3 /* FIRInstallationsStore.m in Sources */, + BBE721CBD0CF6D094BB61C1FEFBD25AE /* FIRInstallationsStoredAuthToken.m in Sources */, + AC09A2A1288E32EB9519E05A495948C0 /* FIRInstallationsStoredItem.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 66EA8F0010861E42ED54CDB212068C25 /* Sources */ = { + 64F0BD5007E6B896AD4ED804AD8D9D85 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - C6D97F468A3E94FFF3BD3AFF809936E0 /* SlideMenuController.swift in Sources */, - 9E9017DE70A4E4CB818DCC9ABF39AE60 /* SlideMenuControllerSwift-dummy.m in Sources */, + 5AD9B64367EA8E2FD8E825AB5A95C064 /* Aliases.swift in Sources */, + E40E4A4AF8B51666574CCD391E9F1864 /* Combine.swift in Sources */, + 1D7A1CECC497E14EB8449EB7DEEA0B42 /* Error.swift in Sources */, + 3E1A63A33EB09F59D4EB962C66320832 /* LinkingObjects.swift in Sources */, + D8143ACD68015DDC9D290DD502396B94 /* List.swift in Sources */, + 91FCCAA110120ACAB3E8A23863D89409 /* Migration.swift in Sources */, + 4D2C49758C5F0EF70697FCA49FB3FB75 /* Object.swift in Sources */, + A25E83EA365D122AB25399187328C749 /* ObjectiveCSupport.swift in Sources */, + 3412222C713342515C09C76ACD063552 /* ObjectiveCSupport+Sync.swift in Sources */, + 14AEBAB86A8510903C72891BD20841C7 /* ObjectSchema.swift in Sources */, + EDE610BB92F0D97B56F0DB9AF430159E /* Optional.swift in Sources */, + FE1514CE016F6C24791F3A387A7615E9 /* Property.swift in Sources */, + 8F3C970B91408D64919CCBF7FED47097 /* Realm.swift in Sources */, + 7118F4C87A47F1E69872CE63F6454CC4 /* RealmCollection.swift in Sources */, + 9F3B6E84932D5E188E40AC537131AA48 /* RealmConfiguration.swift in Sources */, + C89B8C0FB4AAC35805B90D5A3C8AACC4 /* RealmSwift-dummy.m in Sources */, + BA4AE15D794448B0E8E96750F51B26E8 /* Results.swift in Sources */, + B5B0FEF06561B6BA3BAB9445409A24D5 /* Schema.swift in Sources */, + E2EFE66C5E4ADD921A9BE89DD7E489D6 /* SortDescriptor.swift in Sources */, + 3396F2363F71E303CA8E782F93F059AE /* SwiftVersion.swift in Sources */, + 0195A9A9DF94BC229A9DDB438154AE4E /* Sync.swift in Sources */, + ABE12A9A7223E4C6228975E0EB28DADD /* ThreadSafeReference.swift in Sources */, + 7483C62161DBDEA32014FD91EBEBBDF8 /* Util.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 69D52C3339F09C34B333C9CE5A6D7C99 /* Sources */ = { + 67EF8D7220E3BF8B0232359A1B56C73F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2CE08437D8D7B8D7621433B48213EDBC /* FIRCurrentDateProvider.m in Sources */, - AEA085678E919A6450BC8C7E76AEF0BB /* FirebaseInstallations-dummy.m in Sources */, - 15A7C6209F5781B6A1E5ABC152CBDAC9 /* FIRInstallations.m in Sources */, - 444459C0B572D924168CFFB7020B44AC /* FIRInstallationsAPIService.m in Sources */, - 80B9D7C293CBD8651BAD00C28766D07F /* FIRInstallationsAuthTokenResult.m in Sources */, - B28E8E6D643AC048084D4EAB3D530857 /* FIRInstallationsBackoffController.m in Sources */, - ADC8686B329FB25C367A09CCCF2024D3 /* FIRInstallationsErrorUtil.m in Sources */, - 4622CCAF0DFDAF00F7CCA6ACAC8D7E27 /* FIRInstallationsHTTPError.m in Sources */, - 9C7894C3E737A6906CC6B23AE202F9C9 /* FIRInstallationsIDController.m in Sources */, - B3C3A40D413995E1012EBA0BFA87C125 /* FIRInstallationsIIDStore.m in Sources */, - 80B457800271ABD91E7DDB0A5BEF0D8F /* FIRInstallationsIIDTokenStore.m in Sources */, - CBE05DE863E3403BD5BA21D6B7735A25 /* FIRInstallationsItem+RegisterInstallationAPI.m in Sources */, - 6756BD53BEDF69C91FF3DD530937A8B5 /* FIRInstallationsItem.m in Sources */, - 55C92BA5F52CE7CBE292D770B0872C84 /* FIRInstallationsLogger.m in Sources */, - FD1F18FE6AAD35F2D15401CA33832C19 /* FIRInstallationsSingleOperationPromiseCache.m in Sources */, - 934E075DE32F67EE0220F794B35A9CBB /* FIRInstallationsStore.m in Sources */, - C9CF0C80969998C8B7F8F287BCC09484 /* FIRInstallationsStoredAuthToken.m in Sources */, - BA9855A8748C7A5268A26B7C1FE6C6E3 /* FIRInstallationsStoredItem.m in Sources */, + A5BD94DB4DE7545B35240F2DF5C9AB72 /* SlideMenuController.swift in Sources */, + 05B2E6001D7D7C1F0C84A8485A67E715 /* SlideMenuControllerSwift-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 6C02E9CBF87ED8A1C6D8ED4C951F75A4 /* Sources */ = { + 6A2C2598D12411E934808B8ED3C7FB49 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - DDE417BA9D13D2BB98316DF0512A1944 /* IQBarButtonItem.swift in Sources */, - 4F0CF2AD58CF0D08BC090E7AF0DD63D7 /* IQInvocation.swift in Sources */, - 3F091C427A3E96117C902E8EA143729E /* IQKeyboardManager.swift in Sources */, - C04C5F1F1D6B337F87E157B55A747E41 /* IQKeyboardManagerConstants.swift in Sources */, - 102F4487BC4ADC3C2B56A0470E0A9468 /* IQKeyboardManagerConstantsInternal.swift in Sources */, - B98378C55379E1B92897F11A22E38443 /* IQKeyboardManagerSwift-dummy.m in Sources */, - 4737103B10A1C40C5301D0512B9310E4 /* IQKeyboardReturnKeyHandler.swift in Sources */, - 259D6FC80BCFE785471F743B1F533970 /* IQNSArray+Sort.swift in Sources */, - 5044FEAEF09468B6964F9F37A1F1F45C /* IQPreviousNextView.swift in Sources */, - 7FB3576FD619DD256294BAD7E5F83CBE /* IQTextView.swift in Sources */, - C35DCE97EB77150C41E735DB57BD6616 /* IQTitleBarButtonItem.swift in Sources */, - 980E5594F8DBCE362764AEDC2F086E36 /* IQToolbar.swift in Sources */, - C0EB3776478AB80676E488BC9C9CDA3C /* IQUIScrollView+Additions.swift in Sources */, - 4C069FA7FAA45154DA92CF5DF3BCDCA9 /* IQUITextFieldView+Additions.swift in Sources */, - 8B439A47AA5FDEF67AD63BDDB808AC5A /* IQUIView+Hierarchy.swift in Sources */, - AE3B246482DCD60BA846EA3CE983A1FB /* IQUIView+IQKeyboardToolbar.swift in Sources */, - 74341DA37F4B926FDF4CB2599CAC547A /* IQUIViewController+Additions.swift in Sources */, + 8DA36E33306EFAA1275D13B978BB8666 /* AEAD.swift in Sources */, + 45670E07AAFDE8877911FA0FA180E8C8 /* AEADChaCha20Poly1305.swift in Sources */, + 89F43849392A22634685D2CC339648EA /* AES.swift in Sources */, + 4764DB91CAEF26CA6EED99CB71389637 /* AES+Foundation.swift in Sources */, + E9B1EE521C74E68921DD97D24EDC388A /* AES.Cryptors.swift in Sources */, + 1895D0230B557364AF8E4225FB4C4ABB /* Array+Extension.swift in Sources */, + EC7222CB5D2208398F18AAE16373D49A /* Array+Foundation.swift in Sources */, + D86D490CF982E629A578DED0E89F146F /* Authenticator.swift in Sources */, + 1C69EAC3F56DA086FD3A08EA63ADF06F /* BatchedCollection.swift in Sources */, + B9D1270EAADE0A1F38D25EC5ABC096F0 /* Bit.swift in Sources */, + 29EBEF45DCEC1D6568413032FA8FB2DB /* BlockCipher.swift in Sources */, + 53042D9D194CD8BE861A5DD3781EF261 /* BlockDecryptor.swift in Sources */, + 0064D372D96A53E5C7173A6DF531097B /* BlockEncryptor.swift in Sources */, + C10AEAE3170856A4A6ED972AF8CCFF4A /* BlockMode.swift in Sources */, + 4788461CD9B764A0C5E1E8A7E7304C6D /* BlockModeOptions.swift in Sources */, + DE39DBC5AAF719AFBCB7BB50025A772B /* Blowfish.swift in Sources */, + 9E1EB59875B9875193013A10277645FD /* Blowfish+Foundation.swift in Sources */, + 2084D75E97F44D8DAE091C7739B06E01 /* CBC.swift in Sources */, + FBCD6D8D56A2086EF53DA7228F7382A6 /* CBCMAC.swift in Sources */, + 2402753327A88FCFBBA79809A123F324 /* CCM.swift in Sources */, + CE7A68CDFD3FC58EF21CC7C08D24CA55 /* CFB.swift in Sources */, + 97F86BC6C70FFFEA6793B21EF6A7BBFF /* ChaCha20.swift in Sources */, + D4135E6CF7800B813179A4DFB88BB112 /* ChaCha20+Foundation.swift in Sources */, + 20B46048A49C3DD9704C96BCA4565A64 /* Checksum.swift in Sources */, + D3E9E3F249E8D3D98C4E51836BDC4954 /* Cipher.swift in Sources */, + 56706731EFD3AF6092CDAF8359B039B8 /* CipherModeWorker.swift in Sources */, + F54936D6E4E4D8360799608587FBE650 /* CMAC.swift in Sources */, + 1D691C9D33B859BCF205B302404CF87E /* Collection+Extension.swift in Sources */, + 75D390E13DBF964D209460FE9823C8A8 /* CompactMap.swift in Sources */, + 23845E588BE52974DCE35EA857812D17 /* Cryptor.swift in Sources */, + 740428CF593D2EFC7C536FB684255CD1 /* Cryptors.swift in Sources */, + B2AF71C08A4349665AEA3D6EC7F4A2C8 /* CryptoSwift-dummy.m in Sources */, + F7B5F76F363F06CC58B18C19A4132205 /* CTR.swift in Sources */, + 353721D2B910AE4F9B8196D7277242ED /* Data+Extension.swift in Sources */, + C1560D479D2C4290339F2153A1009695 /* Digest.swift in Sources */, + 5D924D51FD5DB39A62A16D0A476D81E2 /* DigestType.swift in Sources */, + 804059882A1C76A538EAED6E464A7DCE /* ECB.swift in Sources */, + 7E55502F0987E7318FF739C9DDAC7387 /* GCM.swift in Sources */, + 44A337C99C192862AC3E83D633178550 /* Generics.swift in Sources */, + 11EA2C9D241AB9B6E1EE8B5E1B9DA27F /* HKDF.swift in Sources */, + 6400D521667A6DE758C821E3ED5B2694 /* HMAC.swift in Sources */, + 6CCA055AE1F2015447DE2CD4AC0980AE /* HMAC+Foundation.swift in Sources */, + 55018C7112A943BE15FB9735839CB8AE /* Int+Extension.swift in Sources */, + 3BF80B98213E4900761B8E9C6FD57947 /* ISO10126Padding.swift in Sources */, + 02015E32C1E060B9432843635FAAD128 /* ISO78164Padding.swift in Sources */, + 770635827551A8B7C42C7BC958A55138 /* MD5.swift in Sources */, + ADBA50B933B7B857BC80FD659DA51DE9 /* NoPadding.swift in Sources */, + D618594A60716C12B8FBAA73F18EC31C /* OCB.swift in Sources */, + 2EF5C6A10700B5ACBD45F9D0461389A5 /* OFB.swift in Sources */, + 0933E9216A313795C94BEC005FD9DDE1 /* Operators.swift in Sources */, + F7462C6596BBFFFF4EFB9DC8BA39B18F /* Padding.swift in Sources */, + 3903D867E1B04DF17B5ACB08E4D496F5 /* PBKDF1.swift in Sources */, + 53BF0FE77A91BC99F2CBA559D91F105F /* PBKDF2.swift in Sources */, + B20CD5B9D658110F9C374648D8FE753E /* PCBC.swift in Sources */, + 2FCC2C2EE5BA2372F3CCF70DAA028085 /* PKCS5.swift in Sources */, + A5D3E40DA041B9B570227F4D8EA1F8E1 /* PKCS7.swift in Sources */, + 92D3DA8C66C63AD5AB2FB84F76591AA5 /* PKCS7Padding.swift in Sources */, + 0BBE8EF207B633F9DEEB7A6CE93B7DA2 /* Poly1305.swift in Sources */, + 334D28B6349CDD6C4851C6ED56DFF411 /* Rabbit.swift in Sources */, + E793B49B0F4F9444C35C938A84919D59 /* Rabbit+Foundation.swift in Sources */, + FA0502B3678EC835EAEAB000529D762E /* Scrypt.swift in Sources */, + 665964C5782D23DD55BD1D2B807E4740 /* SecureBytes.swift in Sources */, + 777E977F2C1ED28B2CBFC455C41243B3 /* SHA1.swift in Sources */, + 542C9E8C1561679C2B9596C7653D375E /* SHA2.swift in Sources */, + 61AFA71D5ECCF93F2B7F2E177E6C4DA6 /* SHA3.swift in Sources */, + 95DDEA387C9E5E0FE454158A6175FA88 /* StreamDecryptor.swift in Sources */, + 6EFD6CAA2430FCC24D44C8F00BBBCFF5 /* StreamEncryptor.swift in Sources */, + A010171CFA2A6782E83B75D63BC34B13 /* String+Extension.swift in Sources */, + 5EEB85730244814F4A58FC258568C9D4 /* String+FoundationExtension.swift in Sources */, + 8BFE8E6BDEFBF870C1D0732BDF8F6967 /* UInt128.swift in Sources */, + CC95169162908F93F653A92A59E440D5 /* UInt16+Extension.swift in Sources */, + 6BEBB9F7819614C8DBB686D19050CA7A /* UInt32+Extension.swift in Sources */, + AD485B7D9A894C44A57593FE64BD654E /* UInt64+Extension.swift in Sources */, + FAF9F208C87105DBB01C49B39CA7F6E5 /* UInt8+Extension.swift in Sources */, + E0137D6D9AE5B6786272CFEE12EE329F /* Updatable.swift in Sources */, + 29EB7FC5FCB017B10C7A56EEC67B6C87 /* Utils.swift in Sources */, + 97BF3CCB628215A7A6336B907EDD84D8 /* Utils+Foundation.swift in Sources */, + 1769CFA2DB5E0CF635CAFDAF134CFFD0 /* ZeroPadding.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 77D271DFD4264F58AC8B3DA2985D4C12 /* Sources */ = { + 7B07FE21CFFDC507D2BA42379F6CC90A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 7360CEDAB021006D16225352EFE233C3 /* AbstractActionSheetPicker.m in Sources */, - 01E6FF9EF68F8F4DF9893A66DFD0FF00 /* ActionSheetCustomPicker.m in Sources */, - 294871A7129CE743BB3A1A37A5909905 /* ActionSheetDatePicker.m in Sources */, - 801C634F0F633E92BDDD77AEDC52E5AA /* ActionSheetDistancePicker.m in Sources */, - BD7FB260F9823A15C481A5B35C1636CC /* ActionSheetLocalePicker.m in Sources */, - 01ED7401731A6D64E2EBDB0C9BA10D78 /* ActionSheetMultipleStringPicker.m in Sources */, - C31A1EC6B8C14C595A14E46A9C8A34DB /* ActionSheetPicker-3.0-dummy.m in Sources */, - 2A4972C7ADE3DFAAE219A09318FC3F14 /* ActionSheetStringPicker.m in Sources */, - 522FB484F79064A183754528ED787059 /* DistancePickerView.m in Sources */, - 90B6F89879F8B4241403D3ED15BE2C46 /* SWActionSheet.m in Sources */, + 4D140032010AB7B75D39B82D6CE63ACF /* Builders.swift in Sources */, + 2C37FBC9EED53CBC85A8BEF61F0FAB8A /* Matchers.swift in Sources */, + 00E0A75C2F3E004FD091E92803539250 /* Mockingjay.swift in Sources */, + 73925E8E5302441C4ACB88A741FEC501 /* Mockingjay-dummy.m in Sources */, + E06FC57B0A253021D9A514CFB30B159B /* MockingjayProtocol.swift in Sources */, + 2369B4DD571509A92E8C316474AFCF34 /* MockingjayURLSessionConfiguration.m in Sources */, + 80131B99D2012C4D8F100C271C1E418C /* NSURLSessionConfiguration.swift in Sources */, + 16359F8D0C922D3FC1BE34C48CBA9B32 /* XCTest.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 7D8BAEE571026E1415CD0E83BBAF064A /* Sources */ = { + 8F0C68CF70F8A421C491D22638C4B9B5 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - B9D6FB91391DAD19DB3AEE9A4B94D17C /* FirebaseMessaging-dummy.m in Sources */, - D97B824F85F171A756C600DBCA097F25 /* FIRMessaging.m in Sources */, - 9BF8AFA981F55B9CD03F35704475A164 /* FIRMessagingAnalytics.m in Sources */, - EA6B455A9DB2D04909EE1FF50C51A57D /* FIRMessagingAPNSInfo.m in Sources */, - 278202A224E009E342B9E6E6C86C6C20 /* FIRMessagingAuthKeychain.m in Sources */, - ED3E4A56A9E8AB0D75CDD7D45E29F6C5 /* FIRMessagingAuthService.m in Sources */, - B412BE78A6266B187FD49C728A32B49E /* FIRMessagingBackupExcludedPlist.m in Sources */, - B6716D02337017074C75E884182D06EB /* FIRMessagingCheckinPreferences.m in Sources */, - 6D51EB2967F59ED5BA8449E9CD2318D4 /* FIRMessagingCheckinService.m in Sources */, - 028CC7693646B33C5A1365E2E3E7084C /* FIRMessagingCheckinStore.m in Sources */, - 327653587222992921B557A9DD730730 /* FIRMessagingConstants.m in Sources */, - 5FB9C6FA5431264EE30AFDF665B36BFF /* FIRMessagingContextManagerService.m in Sources */, - FDBFD9343B51CAB4336B0EE6A9EA87FB /* FIRMessagingExtensionHelper.m in Sources */, - 929E2F99085BD712BB4157CF037A2EB7 /* FIRMessagingKeychain.m in Sources */, - 60B67DC5010208901AEC5027EDABC293 /* FIRMessagingLogger.m in Sources */, - E7EBB84430CDC4C2D8E476583E16ACB1 /* FIRMessagingPendingTopicsList.m in Sources */, - FD4205DB117EE5D69B3FE438F64F4126 /* FIRMessagingPersistentSyncMessage.m in Sources */, - 780A91BA60F296254CBAB54F708D718C /* FIRMessagingPubSub.m in Sources */, - BE61A71892E0D8DEA0A986A2BEEEF6DA /* FIRMessagingRemoteNotificationsProxy.m in Sources */, - 1F09D0ECCE1AD4082D7CFB3154AD18CF /* FIRMessagingRmqManager.m in Sources */, - DA1BE65148BE8A83B24F7F47C63F239A /* FIRMessagingSyncMessageManager.m in Sources */, - ACB0327231225EC2DCB37FDAF00AD0BA /* FIRMessagingTokenDeleteOperation.m in Sources */, - 9E81A61168332B4B4527A870252C25DE /* FIRMessagingTokenFetchOperation.m in Sources */, - 61C477647D6EAD506F654F324D3E7B7D /* FIRMessagingTokenInfo.m in Sources */, - CBBEB3ECDF849F094EAB5EEE2C98A402 /* FIRMessagingTokenManager.m in Sources */, - 3C53397585D451D0E1E23CBE5DB17274 /* FIRMessagingTokenOperation.m in Sources */, - 6FE703D715ABAFFF02B0792358C3B27E /* FIRMessagingTokenStore.m in Sources */, - 7F7EF39C14CAE8092FFF5D1168103425 /* FIRMessagingTopicOperation.m in Sources */, - 2FC66E12ED6CBDE79E62F194D658F88A /* FIRMessagingUtilities.m in Sources */, - 1CBF3B28CB5DFAE986E867C1062837F8 /* NSDictionary+FIRMessaging.m in Sources */, - 85F81FD7192839110A69883B6BF6DEA3 /* NSError+FIRMessaging.m in Sources */, + C13F9CCA95CB7139583669894AF134C7 /* nanopb-dummy.m in Sources */, + 170D2316A93EA14308ED98CD13722CF0 /* pb_common.c in Sources */, + C8014EFA3289C8FF5A0322C50204D667 /* pb_decode.c in Sources */, + C570C6448D4D022E5E506D0F9AF2139B /* pb_encode.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 9C9FF78F6878BCE13B73B6BB5DD0A609 /* Sources */ = { + ABB47DB07F3E4DFA971B1788FC670AB6 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - AC96F44279E61358242F26840D4853F0 /* Reachability.swift in Sources */, - E5F6ACACDF29D937A21E7DEC85A13E3E /* ReachabilitySwift-dummy.m in Sources */, + 6CA86EDC7D1F43938DEBE440CE927130 /* FBLPromise.m in Sources */, + DFEC35C6AB9215D9C6EAEE261F3FCC89 /* FBLPromise+All.m in Sources */, + 3388EA2FE529BC06656FC184393B19AB /* FBLPromise+Always.m in Sources */, + 474043C742E4B1000E746075D3FC7E83 /* FBLPromise+Any.m in Sources */, + 2EE07C0D021FD879F6FEE00AB915830E /* FBLPromise+Async.m in Sources */, + 5699B37B549720D9DDD03458842BCB23 /* FBLPromise+Await.m in Sources */, + 7344F763404179B188FBD4F1C87847E1 /* FBLPromise+Catch.m in Sources */, + 8B2C6969B209A7C579A564AD8AABA77F /* FBLPromise+Delay.m in Sources */, + 382F0AE73D998A96BF1C4F3026E57016 /* FBLPromise+Do.m in Sources */, + DAD18CB4C9B39DAE8D2F9EA5BB882F11 /* FBLPromise+Race.m in Sources */, + F9623E97C4C18200F4567AE2CBA4D510 /* FBLPromise+Recover.m in Sources */, + ADF6EFAA5F5928A813A4E2A1B8899801 /* FBLPromise+Reduce.m in Sources */, + 8D0A898EAD5A41114AE7DA15F930ADFF /* FBLPromise+Retry.m in Sources */, + 3129288434531A0A5972F29CBB967188 /* FBLPromise+Testing.m in Sources */, + C211F72939EFE73C150D3A955977111A /* FBLPromise+Then.m in Sources */, + EB8B47DA7B42073621D06102F00292AB /* FBLPromise+Timeout.m in Sources */, + 7E18D2C96A7502BD933CAF8F69726BD7 /* FBLPromise+Validate.m in Sources */, + E75268CC78D495A28703451DCA8B57CD /* FBLPromise+Wrap.m in Sources */, + BC1845C2C828DBD86E699A1FDD79AB69 /* FBLPromiseError.m in Sources */, + 933AA0732F7FF42769A61BA1EC2C08EE /* PromisesObjC-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - C4AE701532D1EBD0502F3EC60B8F154D /* Sources */ = { + AC7850B8AD058752CD0E80D5A5B07A42 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 98574FFCDA31106ABF124F5D6C7C5177 /* URITemplate-dummy.m in Sources */, - FF3C3F90549C6EC68C76D85ED74FE4F3 /* URITemplate.swift in Sources */, + 41CD40F5713CD71AD5AB1471E81C97E1 /* IQBarButtonItem.swift in Sources */, + 041B655D7F5932F03A65C154BC02BDAA /* IQInvocation.swift in Sources */, + 86A03DE9366D1BE94EB99AA387EACD1F /* IQKeyboardManager.swift in Sources */, + 2EC96162DD6740ECE67FF38B8400A7C5 /* IQKeyboardManager+Debug.swift in Sources */, + 2CA0B3B43A972DF3AD79F58092E3403E /* IQKeyboardManager+Internal.swift in Sources */, + 08B185E08278AE7EC55F8BBB19693AC5 /* IQKeyboardManager+OrientationNotification.swift in Sources */, + F2B1C1D70C629AE19C0D5121B1BBA891 /* IQKeyboardManager+Position.swift in Sources */, + 1D8031C86A94D32E00ED55B80428A0F3 /* IQKeyboardManager+Toolbar.swift in Sources */, + A4BAEE317BFF650DCC888FC67BFBF7EF /* IQKeyboardManager+UIKeyboardNotification.swift in Sources */, + D6516B5451008BF1ABA150E6482F6325 /* IQKeyboardManager+UITextFieldViewNotification.swift in Sources */, + 85F13B069B06ADF2B6DCA622E4645110 /* IQKeyboardManagerConstants.swift in Sources */, + 0F94B2449CA1ADA76AE79C0BF6A08549 /* IQKeyboardManagerConstantsInternal.swift in Sources */, + 1A9B9579E46EFBA63C5F57A6B17B5ECA /* IQKeyboardManagerSwift-dummy.m in Sources */, + C81CB3B5D25BDBCB6D3A3632BE408229 /* IQKeyboardReturnKeyHandler.swift in Sources */, + 7AC995F567A776FC1A80A9FA0733F3D1 /* IQNSArray+Sort.swift in Sources */, + 24EC44FF102C2635A476CEF7567F89DA /* IQPreviousNextView.swift in Sources */, + E72E1BDDFF31003BD089544FC112FAAC /* IQTextView.swift in Sources */, + 20616A47873318F80BFFEABAC9730122 /* IQTitleBarButtonItem.swift in Sources */, + 1740CBB33D469AEDD5D7291A9268FA97 /* IQToolbar.swift in Sources */, + DF33C3DE068D6116B3F551B0453ACD23 /* IQUIScrollView+Additions.swift in Sources */, + 3F01EED6380B596E1D0C1497CBCF9B95 /* IQUITextFieldView+Additions.swift in Sources */, + 04B0884964D9592302CA654E0B67E80E /* IQUIView+Hierarchy.swift in Sources */, + 34C39BDBFE7A2CC585787F5AFCA39FDE /* IQUIView+IQKeyboardToolbar.swift in Sources */, + D31356D54A39420DB91C892502CFFD57 /* IQUIViewController+Additions.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - C832EE907221C148425D79A28357BBEA /* Sources */ = { + C576B265A93E25312929172E0AB5B460 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 0BF88B0D1028AA6595F4C29F4BC977A3 /* GoogleUtilities-dummy.m in Sources */, - 4CBADB8A7E085B5E27EA5082E81B4156 /* GULAppDelegateSwizzler.m in Sources */, - DCEB38EC67715951D97961847005DED8 /* GULAppEnvironmentUtil.m in Sources */, - 76F406E64D2CECCB8792E4611D81C7FE /* GULHeartbeatDateStorage.m in Sources */, - 95AF8EADEF8D18098CE495AEA479A89F /* GULHeartbeatDateStorageUserDefaults.m in Sources */, - C4B33C55F1B345E6A6108E2B2118A179 /* GULKeychainStorage.m in Sources */, - FABF0DA1F6655382EADD4865E77642EC /* GULKeychainUtils.m in Sources */, - A448E9A75B798B780BED3378A82F8177 /* GULLogger.m in Sources */, - 2B97B7047406ED60E22432A5540468F8 /* GULMutableDictionary.m in Sources */, - 5F30B3E3E8730F2C598136CC57136A20 /* GULNetwork.m in Sources */, - 3CC95367C80EA6D4F06DC282519505D7 /* GULNetworkConstants.m in Sources */, - E8D406A0517AB2F43F8CA6D3CEDE499E /* GULNetworkURLSession.m in Sources */, - F571858981D99CD6A07A37EFDC845FC4 /* GULNSData+zlib.m in Sources */, - 34835B8188B55B08ABA1033956D47903 /* GULReachabilityChecker.m in Sources */, - A9EF99C884611DC051F54D61612701E2 /* GULSceneDelegateSwizzler.m in Sources */, - 6E8196A5337BFD5CE54480F3583FB117 /* GULSecureCoding.m in Sources */, - 36C794D8EBC302AE35B96F96C02A34D0 /* GULURLSessionDataResponse.m in Sources */, - 290B0F2B5277C5931183842940AB4734 /* GULUserDefaults.m in Sources */, - 46E87A0B171235A8FDB57664CB4A3546 /* NSURLSession+GULPromises.m in Sources */, + CAE29563450C7ED7B9BEFD4F8C3788CA /* Toast.swift in Sources */, + 6DFA70326D4C540DC43BD455F5A4A658 /* Toast-Swift-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - D8A5C037D67438BBB6839E15DB70D608 /* Sources */ = { + C74DCAEAF34FC5664FB6FD94177C9C7E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - DB3B6C51F231FFDFADC910A146771A28 /* cct.nanopb.c in Sources */, - 3A02462E4A72F2857839C8ECD2BF7191 /* GDTCCTCompressionHelper.m in Sources */, - 39CE1CAC9BD7BC54966B8C33D8473D68 /* GDTCCTNanopbHelpers.m in Sources */, - 1A03F5BEE43180440461309B173C704E /* GDTCCTUploader.m in Sources */, - EA8E5EEACB10A346D487E8E0DE0674A9 /* GDTCCTUploadOperation.m in Sources */, - F49D9880A385F25FCDBCF8F741F71CBE /* GDTCORAssert.m in Sources */, - 5F6D6A648BFE8E9A400FF5F9F5BD6CA1 /* GDTCORClock.m in Sources */, - 7BD539092C04CDE11BE84139CC422C85 /* GDTCORConsoleLogger.m in Sources */, - FC11CB293FD67798FB2652025C98C9EA /* GDTCORDirectorySizeTracker.m in Sources */, - 7CEF2F6553C3CB7B080FA7482F13B95F /* GDTCOREndpoints.m in Sources */, - CD73E7564F8EA01D0A4548F09CB55204 /* GDTCOREvent+GDTCCTSupport.m in Sources */, - 96C9E9944945A70FEF8F6AC1F0782951 /* GDTCOREvent.m in Sources */, - CEC7B709885BA67EBAF2846CAC2D83E8 /* GDTCORFlatFileStorage+Promises.m in Sources */, - 3814D40733B8DBC6F7E150B707510C5F /* GDTCORFlatFileStorage.m in Sources */, - 2FACDF0093370FCD838C19CC5A5C345E /* GDTCORLifecycle.m in Sources */, - 9B43EF1930B25F9CFF3F7FB36FE8F53C /* GDTCORPlatform.m in Sources */, - FC147114B3C83044A2193E1684C16A2A /* GDTCORReachability.m in Sources */, - C02A1FF4C9FD5947E76E203B2E3F30FD /* GDTCORRegistrar.m in Sources */, - 0B9FE2E8030B65EB2FFB74C8D469EEB1 /* GDTCORStorageEventSelector.m in Sources */, - DB852F56F226F428044F9DFA8174B43E /* GDTCORTransformer.m in Sources */, - AB615BA50565AD96594F58874A8D3D3A /* GDTCORTransport.m in Sources */, - 265FC61DB2A1ED7058F2CBCDE6126843 /* GDTCORUploadBatch.m in Sources */, - A39980AAA2ACE9F4D130DA9426AF4F64 /* GDTCORUploadCoordinator.m in Sources */, - 6B8EDCC151257594720CC9AE305F04ED /* GoogleDataTransport-dummy.m in Sources */, + 12FA8AB2ACBB820E7EC413726F9D56BC /* AbstractActionSheetPicker.m in Sources */, + B3556BB6B3BE4910C609C54B2FAC9772 /* ActionSheetCustomPicker.m in Sources */, + 50EDFC88D8E5515FEA35B2CD43715CAA /* ActionSheetDatePicker.m in Sources */, + 6AE7C13634E07A7D4DAD613EA245A470 /* ActionSheetDistancePicker.m in Sources */, + EE783D3B9E15DFFD23C61D2C552B49EA /* ActionSheetLocalePicker.m in Sources */, + F4D2ADA7E1DAB3AB844FCF231E0D72E5 /* ActionSheetMultipleStringPicker.m in Sources */, + 0FC023279EE129DB7826EC92B6810C8D /* ActionSheetPicker-3.0-dummy.m in Sources */, + 19767DBA2980A1DF8DD78E2CC681C627 /* ActionSheetStringPicker.m in Sources */, + DC2C88E51CAEEEDC1DA6147971764C60 /* DistancePickerView.m in Sources */, + 3228EF9BB4197B00304ACEBEC57BDA5E /* SWActionSheet.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - E83F0DEA5B4EA08D2D83AA299B83C01D /* Sources */ = { + DC9A777E97760CA0B6CD6C3808E87840 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - A1FDEE02E9E4BDFD5F6395E9728DF2B8 /* Builders.swift in Sources */, - 859DE98E4A3DF8CFEE3FEBEC803D2112 /* Matchers.swift in Sources */, - A667CEC22D1CBDD9B94BE515F77B65A4 /* Mockingjay-dummy.m in Sources */, - 1C7E4B9154B4CCD4E2E20A7873C8ABD6 /* Mockingjay.swift in Sources */, - F92212F212AFD1B0BCC5D9C00D309E56 /* MockingjayProtocol.swift in Sources */, - 7584D9E6447049E2A9FB95504DD41DF5 /* MockingjayURLSessionConfiguration.m in Sources */, - 772865DC2D164B0FEC0EF742AD288FF3 /* NSURLSessionConfiguration.swift in Sources */, - 601078695EAB2498B63C7F1648BFF7F3 /* XCTest.swift in Sources */, + 04EB2F7B4D837C671547DB9313BEDEA3 /* FIRAnalyticsConfiguration.m in Sources */, + 30887A82BA2F5660DA1B784A405EA7F8 /* FIRApp.m in Sources */, + BF8E2120AFF342FBAE6299005B291148 /* FIRAppAssociationRegistration.m in Sources */, + 4D8EAD4297B6BB2DA8AA5C61550EB6E0 /* FIRBundleUtil.m in Sources */, + 50E7DFD17F3242D4B733F2279869666A /* FIRComponent.m in Sources */, + 385D912FDB955C03F1D1958FD1DA49A6 /* FIRComponentContainer.m in Sources */, + 58BD68C61B4FA5D471C46A5F605DE194 /* FIRComponentType.m in Sources */, + FC9C1438D53E537E74B47D877EF22651 /* FIRConfiguration.m in Sources */, + C12E83EA619B329199863FFCAC54821E /* FIRCoreDiagnosticsConnector.m in Sources */, + 8B4442976F52EDA4E40651393C996AE9 /* FIRDependency.m in Sources */, + D278B55615A04822D7E00ED93636F810 /* FIRDiagnosticsData.m in Sources */, + E5F6C16790C5A7213D6E771C76A95A83 /* FirebaseCore-dummy.m in Sources */, + AB257D4C5FC5E263EB33380E87083B16 /* FIRFirebaseUserAgent.m in Sources */, + 316C8C4BCD97A1391148A07CF967495D /* FIRHeartbeatInfo.m in Sources */, + D419F390B4AD6EA22AFA019AF2E01D21 /* FIRLogger.m in Sources */, + 4740D7B2BB0018454E64D11B7F7888BD /* FIROptions.m in Sources */, + 584042F6D9AA59C339EE233C4F6676CF /* FIRVersion.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - E89E2BB1EDC2828E8062F6F178F4F20E /* Sources */ = { + DCE73ECF4F5FF4736EA0A1D00FC0EC11 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - A248DB778A9F306EE9866BF5578A4F24 /* FBLPromise+All.m in Sources */, - 12A64F91F064FFDF23286C886ABAF501 /* FBLPromise+Always.m in Sources */, - 6E872F26785163143192BC9F2BAFE719 /* FBLPromise+Any.m in Sources */, - 0D7B6A49FB9AB21F7A38D5749D4AFDC0 /* FBLPromise+Async.m in Sources */, - DF29C18AEB2B2A942206C18DBF5833BF /* FBLPromise+Await.m in Sources */, - C181B4472841A084DB5842737D1EB48B /* FBLPromise+Catch.m in Sources */, - 2585E42E28CF3FCD2D0FA3F953E67E4E /* FBLPromise+Delay.m in Sources */, - 8BE32B39404EF1FABC80431C75BD153D /* FBLPromise+Do.m in Sources */, - 6BFD635B2171C951EB0E4FC6A61DFF02 /* FBLPromise+Race.m in Sources */, - 18027381074D1860D216AA666AB38C4B /* FBLPromise+Recover.m in Sources */, - 2608CD96F391AF97DF763B7F08CFBA53 /* FBLPromise+Reduce.m in Sources */, - 90B2CE91A693EC5F01C58E7B0DBA61B7 /* FBLPromise+Retry.m in Sources */, - 03A32E1DF6506856A28CE85B83008DDA /* FBLPromise+Testing.m in Sources */, - E419D0678D7215838F870AFE6887B61C /* FBLPromise+Then.m in Sources */, - 56219CEF4A52B97061063238BDBE7250 /* FBLPromise+Timeout.m in Sources */, - C9CBE7DEF58D8A5809D0EB194C36819B /* FBLPromise+Validate.m in Sources */, - 2002E99E7B93181C4AB40731DCD54665 /* FBLPromise+Wrap.m in Sources */, - C02773AB7B368C1099A90E45AE575AAD /* FBLPromise.m in Sources */, - BD7A46AA243F4CB8E9BBEA4A90BD7136 /* FBLPromiseError.m in Sources */, - 4920EE49A504E7FBC8A24185048D826D /* PromisesObjC-dummy.m in Sources */, + DFBAE6B4C40C06766DA185E4BC71BB5D /* FirebaseMessaging-dummy.m in Sources */, + B135701F0A6FFC9D4F1080AD8DDF6C74 /* FIRMessaging.m in Sources */, + C25B1B39C7DD8710A2805A7DFA05557F /* FIRMessagingAnalytics.m in Sources */, + 4E7A04121E7DC08686D4B74F5A2271A2 /* FIRMessagingAPNSInfo.m in Sources */, + 46F3DB022D4FB35592EF44D97D163537 /* FIRMessagingAuthKeychain.m in Sources */, + 7DD3BBBF4DBF7B25F450B3B898EFF06F /* FIRMessagingAuthService.m in Sources */, + B24F5A8B339639EBAE733048B83D51AE /* FIRMessagingBackupExcludedPlist.m in Sources */, + 926B3728D4D09DDD3D1909A3D23BE855 /* FIRMessagingCheckinPreferences.m in Sources */, + 9825A1DF04ABB8E4BD2B05783E4A88B2 /* FIRMessagingCheckinService.m in Sources */, + FFADA5B803954CCACF133530BC399714 /* FIRMessagingCheckinStore.m in Sources */, + C98C64B270C832394514FF2605B229B0 /* FIRMessagingConstants.m in Sources */, + D0555B0EB9B081AC97D0656EBB7232C6 /* FIRMessagingContextManagerService.m in Sources */, + 22EA86F3D0F602D6EC406916D61B2400 /* FIRMessagingExtensionHelper.m in Sources */, + CE268A014B11FE98F3589701685C14CF /* FIRMessagingKeychain.m in Sources */, + 0129B78C065443890C1194E8D15482D7 /* FIRMessagingLogger.m in Sources */, + 4E82D0BA2ED598584CA74A7F044BBFE6 /* FIRMessagingPendingTopicsList.m in Sources */, + 4E310A75C4695113195A462EDE224621 /* FIRMessagingPersistentSyncMessage.m in Sources */, + 7E6E83B17195F70A23074795A2A70845 /* FIRMessagingPubSub.m in Sources */, + ADC5E03B6AD3623A4BC19F81229C221F /* FIRMessagingRemoteNotificationsProxy.m in Sources */, + 1EAA059A5418E46DDC135F34A9738744 /* FIRMessagingRmqManager.m in Sources */, + D6530A25CE544B55B9FD5A90DF6DF726 /* FIRMessagingSyncMessageManager.m in Sources */, + 4C59694CFB1E77C1D6B67663A8F862FB /* FIRMessagingTokenDeleteOperation.m in Sources */, + 237478E12F838A88D98175FBBEEACD30 /* FIRMessagingTokenFetchOperation.m in Sources */, + F848F14CD5FC2D6C666615E058FB84AD /* FIRMessagingTokenInfo.m in Sources */, + B7F442B97C1037318C88A2BCBE7ECC14 /* FIRMessagingTokenManager.m in Sources */, + 3AEE7FF1DEA647530832FC8AA3D41A78 /* FIRMessagingTokenOperation.m in Sources */, + B396DD9E9A49FCC941425FA3BA10E86A /* FIRMessagingTokenStore.m in Sources */, + 942A6DA26AB4D4F78453FED00D57FDC6 /* FIRMessagingTopicOperation.m in Sources */, + A0B8BCDD2F42C2932591B53F0D4B0335 /* FIRMessagingUtilities.m in Sources */, + 281A1043543B7C94B83DCF262E69AA9E /* me.nanopb.c in Sources */, + AC8168FAC637E96DFBDC0365EDDF0E93 /* NSDictionary+FIRMessaging.m in Sources */, + 54BA876EB44EBB4D2F7C9E976E1B8CCC /* NSError+FIRMessaging.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - F2E9B76C2A076713AE5568441B289B81 /* Sources */ = { + DD72EF7DF151BB9510B2E487A23C1A0D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 608DCB81E7D14F26CCE9F2C0B482D444 /* Pods-MyStudiesTests-dummy.m in Sources */, + 8B2CC0AE97C9E4FCC9D934A97E11C1E2 /* GoogleUtilities-dummy.m in Sources */, + 5D80C1E180B51D2E4BB51E93F6899D86 /* GULAppDelegateSwizzler.m in Sources */, + 421CF086D6FD34D2171764E280FF2771 /* GULAppEnvironmentUtil.m in Sources */, + C7E6C58652231A16F51E68352CDA94FA /* GULHeartbeatDateStorage.m in Sources */, + 97596ED767CFAA371B966551BF5308A3 /* GULHeartbeatDateStorageUserDefaults.m in Sources */, + FD758D92860155C866FE905EE568E664 /* GULKeychainStorage.m in Sources */, + 2CB80C0AB5440BDDA4AC72963E4B7677 /* GULKeychainUtils.m in Sources */, + 244C5E3CCCEFA5C3612F51F614B7FDF1 /* GULLogger.m in Sources */, + CB5AE5CD33522F018D995F9EB026472D /* GULMutableDictionary.m in Sources */, + 5041DE7DB5D7C97ED3EC57A773186F2C /* GULNetwork.m in Sources */, + F231B30175CBBF5D0AB7318FFFF280E6 /* GULNetworkConstants.m in Sources */, + 3AC51F11AAE70DC14A6D237F26C04F11 /* GULNetworkURLSession.m in Sources */, + D6FE9B4939CA475107164439DDE301C3 /* GULNSData+zlib.m in Sources */, + 266E9F57919399FE31DD05BF2055C2E5 /* GULReachabilityChecker.m in Sources */, + 58A43BDCCF03008ECE769C6B0E17C5C6 /* GULSceneDelegateSwizzler.m in Sources */, + A166E5BECB00B65CAE449843FA3C1D78 /* GULSecureCoding.m in Sources */, + 5DE956102DD77D4F8A06F420FAB910CF /* GULSwizzler.m in Sources */, + B13D8979D97B1E4F0A79E96EADF6111F /* GULURLSessionDataResponse.m in Sources */, + A07CD5F593F198521969AA739442E86E /* GULUserDefaults.m in Sources */, + A0E0785E780713BD580EAF4A82633A1E /* NSURLSession+GULPromises.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - FD2F1F28FAE6CB9F232CC55B02CF7C10 /* Sources */ = { + E7D087F3666C8000DF127676059D1DEC /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 325DCCCD95B0324881D0DD227D2A6088 /* nanopb-dummy.m in Sources */, - E72D0A25D5EB3E3DF6512173544AE660 /* pb_common.c in Sources */, - E3AD1B6FF0BF54B41110C1774F22879C /* pb_decode.c in Sources */, - A6D62AA39E9089012B6BB2BA657BFAB2 /* pb_encode.c in Sources */, + B6E2124F7902EEEE6DB50E18B13E3551 /* FIRCoreDiagnostics.m in Sources */, + 0D12E07406535ED98F1254B1C3117617 /* firebasecore.nanopb.c in Sources */, + EFF369F03E1F419C335BFD65B2945857 /* FirebaseCoreDiagnostics-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - FF7FCA30028CEEDAA1C71D9C4A85F727 /* Sources */ = { + F5D2A45FBA06D86A537CB441D5BF4FF4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - B4852CA715C69CA4E647C880A65BC460 /* Pods-MyStudies-dummy.m in Sources */, + D0EA90FBF83350C49E6EF6C8A98D6F00 /* AFError.swift in Sources */, + F17A4CA4664CABB331D39FE902E06843 /* Alamofire.swift in Sources */, + 55AABB1FB38F61A3369ACC555FF3046D /* Alamofire-dummy.m in Sources */, + 1EE44196E7BCE57AD96A2C751651EF40 /* AlamofireExtended.swift in Sources */, + 7483E5327027263F7E4B94A2997191C4 /* AuthenticationInterceptor.swift in Sources */, + 2CBE3651CA006E19F5D64A2DE9B9A028 /* CachedResponseHandler.swift in Sources */, + 46A64A43AFA057B6B63C8F0C12F509B4 /* Combine.swift in Sources */, + 9C9030DEDB0DF955B16FE08C50892D57 /* Concurrency.swift in Sources */, + EEC150B66BCCD6C80FDA7E4D1975166B /* DispatchQueue+Alamofire.swift in Sources */, + CEBFFEED65D877702B2F36102528CF6D /* EventMonitor.swift in Sources */, + 7E02F5B62BE00E97847DF549FFED2490 /* HTTPHeaders.swift in Sources */, + D6B4751CED01D53E4A1B6A571AAA2F83 /* HTTPMethod.swift in Sources */, + 7FE695DA8EE7FF1286556E06B692009B /* MultipartFormData.swift in Sources */, + E9B4C89E7EB3B27D46AFCA452C3D426F /* MultipartUpload.swift in Sources */, + A29100AA1876DDEFF6F54694A51FDB0E /* NetworkReachabilityManager.swift in Sources */, + 2CCD13099063CD560E3067BD132914FA /* Notifications.swift in Sources */, + E54654D504A42C24F284A68F87F7671D /* OperationQueue+Alamofire.swift in Sources */, + 99D058E53EFEE3AC4857CDE3DBA5C004 /* ParameterEncoder.swift in Sources */, + 68FB2DCB4C77DBCAF9A6037E470F2BDE /* ParameterEncoding.swift in Sources */, + A53BDE589BDD6483F3EEDCE5EA1DCCD3 /* Protected.swift in Sources */, + 045DE6EBF9B2F63F60F5BE60C1198E06 /* RedirectHandler.swift in Sources */, + B3658C29BBDE1033F6269A92E612CB30 /* Request.swift in Sources */, + DD902FE8D6824681C929D028655AE121 /* RequestInterceptor.swift in Sources */, + DA34899BEF0668D76CBCE8C4CE47B97B /* RequestTaskMap.swift in Sources */, + 75966A9262648D4647D764E3E76BC6AC /* Response.swift in Sources */, + 824D816B1EE404F2DD400EE678695CBE /* ResponseSerialization.swift in Sources */, + 04A896288CE3A59B530250337A5F8362 /* Result+Alamofire.swift in Sources */, + 33A7D0F2D03004CE256A75E03DF33C70 /* RetryPolicy.swift in Sources */, + B704B198B9B520D449260877E300D821 /* ServerTrustEvaluation.swift in Sources */, + 81B8D2B7CEB25C2448B0BC9B33591A65 /* Session.swift in Sources */, + 1976BB7D7E26A12E29283E71154B63B3 /* SessionDelegate.swift in Sources */, + 7F1BB526AAE3ECDCE90127D9D0E10261 /* StringEncoding+Alamofire.swift in Sources */, + 8D75FC8D7476C9674234F39F1A820D8C /* URLConvertible+URLRequestConvertible.swift in Sources */, + 7930C94414B4C661867AC4FBE82E996C /* URLEncodedFormEncoder.swift in Sources */, + BC0ECA8F22DEDE8886E189CD0EAA1197 /* URLRequest+Alamofire.swift in Sources */, + 808C960C82D708FC1A42C581D6CB4940 /* URLSessionConfiguration+Alamofire.swift in Sources */, + 3C4059621E23842C19D4EB5D35B41989 /* Validation.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - FFD90E5BB37C94074A952DAA8A24523D /* Sources */ = { + F89BCA5E968278AE2D9732DECC877F50 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 95DD2B4B561F309255D509314184B151 /* async_open_task.cpp in Sources */, - 3149ACDEC81C943908B84F1D2969FDC3 /* binding_callback_thread_observer.cpp in Sources */, - AEC94C095729BAD0B05C0C7D08BDF8E7 /* collection_change_builder.cpp in Sources */, - 9792A95C0CE09E21D89C0748B228D482 /* collection_notifications.cpp in Sources */, - 4CB5270EE0537A17CEB794B045C72B54 /* collection_notifier.cpp in Sources */, - C88C6F244B1A9918EE160C0872EF7144 /* external_commit_helper.cpp in Sources */, - 66031F0BECBC101B2743A9901844EB62 /* index_set.cpp in Sources */, - 473B33DA62918C149F72D7F1B2DB97D5 /* keychain_helper.cpp in Sources */, - 5158CE19500AE188ED7E1BF010880983 /* list.cpp in Sources */, - 34AEBBF4B2B4284246C124CEBF03C5A5 /* list_notifier.cpp in Sources */, - B87533EEF47332857C250651B14F8707 /* network_reachability_observer.cpp in Sources */, - C19BD89E1869A4B5347D4F71CFAB85F5 /* NSError+RLMSync.m in Sources */, - 07FFE8A9A145C12327F7D9605B057609 /* object.cpp in Sources */, - A64AEC64280BB6214A9EBE2AFC5A927F /* object_changeset.cpp in Sources */, - A29E511338E29F9351343660CEA5963A /* object_notifier.cpp in Sources */, - 47EB8C6D7A75FC798CCA62D347DF5FF3 /* object_schema.cpp in Sources */, - 7E898A61F572C885289F4E188189135E /* object_store.cpp in Sources */, - E16C9A62836ED1941E089352A55B42EC /* partial_sync.cpp in Sources */, - 206FB1FB8B23E4CCB0ED8C857B9412E5 /* placeholder.cpp in Sources */, - F180268EC24019B2DBE4FD8FEB6FC3F2 /* Realm-dummy.m in Sources */, - 9CF920A080A921CC5580D92A5B7949B1 /* realm_coordinator.cpp in Sources */, - 0271DDCC2136CC81C3B536352236AA74 /* results.cpp in Sources */, - 5A1FCC508EE562E96648AC661F999ADF /* results_notifier.cpp in Sources */, - 6D4154C37D46221E2D008565A305C9FC /* RLMAccessor.mm in Sources */, - ED6BCBEAC9A00260C831EAE986178988 /* RLMAnalytics.mm in Sources */, - 3A662C30D8D9ED53637B89F97D1AACF0 /* RLMArray.mm in Sources */, - 4086DF758953D34F37A0467127EBCC47 /* RLMClassInfo.mm in Sources */, - 6F2F609031027F5FA28BF2301421C893 /* RLMCollection.mm in Sources */, - FE46F700FA04420FA9ED8817BB9830E0 /* RLMConstants.m in Sources */, - 5EE24959D52D6DB8D608239820BBE181 /* RLMJSONModels.m in Sources */, - 9DA29F609D6EBB3A31656A0AD0DB8D91 /* RLMListBase.mm in Sources */, - 662A19ABDB2E857EBB698231443E50DF /* RLMManagedArray.mm in Sources */, - 5C6A59AFC722504CCFF0DFF523E4CD0E /* RLMMigration.mm in Sources */, - A4EB89C596D01DBF9B652E276E93245A /* RLMNetworkClient.mm in Sources */, - 1BC9CE28BC5F33C5813D2125D4953666 /* RLMObject.mm in Sources */, - 40570729E75A4EFAAA9BE8B1E99300A9 /* RLMObjectBase.mm in Sources */, - 5AC1EB70F2680C85DC0D575BCED67746 /* RLMObjectSchema.mm in Sources */, - 2FF528E6D2C3DE5424403F85BE07A585 /* RLMObjectStore.mm in Sources */, - 4AF459B05D072F9E3114704D25DB3272 /* RLMObservation.mm in Sources */, - 61AF13D4AE720C760E10E55F2BD6FB44 /* RLMOptionalBase.mm in Sources */, - 77FDBE69F83D9DB48C44A1722FF5B309 /* RLMPredicateUtil.mm in Sources */, - 5504575556803AD827F70E111703751E /* RLMProperty.mm in Sources */, - 2233F7DCFC0FD774331AF81555FF2DD7 /* RLMQueryUtil.mm in Sources */, - 907E634EEEB4AC288810AB4050988CD6 /* RLMRealm+Sync.mm in Sources */, - E31EA64574CD3A75445A4125174F0E03 /* RLMRealm.mm in Sources */, - 561ADD5182A8726A15DA6B500E736B1E /* RLMRealmConfiguration+Sync.mm in Sources */, - 22B2B6BA32529D764D3A2FE6D3720065 /* RLMRealmConfiguration.mm in Sources */, - F60AF9A3D29BBA06D5FD05C15B90CB84 /* RLMRealmUtil.mm in Sources */, - CB357F57EFED387F82535E88B5CD7662 /* RLMResults.mm in Sources */, - 5DC28FB93409FB8EF2CE92927AFB1EA8 /* RLMSchema.mm in Sources */, - 4A5FA3B224563BB9695743344EEA7277 /* RLMSwiftSupport.m in Sources */, - F21A2C7E1C435B7E378F3BE66102B83D /* RLMSyncConfiguration.mm in Sources */, - C8F21C659FE5CEA7C0670332E8D611B6 /* RLMSyncCredentials.m in Sources */, - 93635169967F703855CA9324A1623000 /* RLMSyncManager.mm in Sources */, - 7D55726D6565A2994438676C50775118 /* RLMSyncPermission.mm in Sources */, - 97E63FB398566178EF6A94C37795FB5E /* RLMSyncSession.mm in Sources */, - 793F1671EB78CB44A5CFB784DC16E714 /* RLMSyncSessionRefreshHandle.mm in Sources */, - 5533771D40B677293AAB7156B664E174 /* RLMSyncSubscription.mm in Sources */, - FD4A2585FF8A0985EBF8B4CF2C7500BC /* RLMSyncUser.mm in Sources */, - 8093EF99E8D88C7E9DC2CC10108D073E /* RLMSyncUtil.mm in Sources */, - BD5052A96DB97C77C4AFA67B875AB50C /* RLMThreadSafeReference.mm in Sources */, - B7AB394684DCBE0A005A40A85FC837D8 /* RLMUpdateChecker.mm in Sources */, - 89E994F6FEFC472F96A85ED20809EEB2 /* RLMUtil.mm in Sources */, - 5C5721C0A5BD25F050FD02F573FAB7D8 /* scheduler.cpp in Sources */, - C71059E76FE73E031E4E146697D84ABD /* schema.cpp in Sources */, - 290C02FEBC3B3E0CC50054E359235CE3 /* shared_realm.cpp in Sources */, - 2EA45B507F7B8958623D1CF64B96844F /* sync_config.cpp in Sources */, - B13BBBCD3717FAA96288556959C8BDAF /* sync_file.cpp in Sources */, - AF7A83643AA716EFD8F47A010C48FD02 /* sync_manager.cpp in Sources */, - 46676CE21E0A0715D8382187513103FD /* sync_metadata.cpp in Sources */, - 300162D3468AC52D6A1CCD7B51D35EBD /* sync_session.cpp in Sources */, - 3AA46A2CEC7072823B69DD9B2AE44942 /* sync_user.cpp in Sources */, - FEAA5B00379BB0D24902ACDA68EC84FD /* system_configuration.cpp in Sources */, - 149976169291794F8016861F4DE95B00 /* thread_safe_reference.cpp in Sources */, - 600E6B47A719CA2B7BC35B440F5A60C1 /* transact_log_handler.cpp in Sources */, - 4AD5A0462F9600139B59B5D6AF2D3EB3 /* uuid.cpp in Sources */, - 29ED8F96AA9CA9E72C5620E5DC520F3C /* weak_realm_notifier.cpp in Sources */, - 052652DFA619280C4430246B830599A8 /* work_queue.cpp in Sources */, + 858B198D89911941FAF729FF983CB01A /* Pods-MyStudiesTests-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 11590C5B3468F4C431F0989712255317 /* PBXTargetDependency */ = { + 03FCDDE068A24BD4D24FDC30EF052204 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = PromisesObjC; - target = 2BBF7206D7FAC92C82A042A99C4A98F8 /* PromisesObjC */; - targetProxy = 43326D2BBA170DA9306D831AC42123BB /* PBXContainerItemProxy */; + name = SDWebImage; + target = 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */; + targetProxy = ECF3CEE9FC30808B6B9D50A99A313336 /* PBXContainerItemProxy */; }; - 18BCE6C0361515C02FC6F922B8A632B6 /* PBXTargetDependency */ = { + 0D614E1D1D00EE039DBD976B3FA97FA3 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = nanopb; target = D2B5E7DCCBBFB32341D857D01211A1A3 /* nanopb */; - targetProxy = 2D6015793E1863EB1A50E1257C3DF2F2 /* PBXContainerItemProxy */; - }; - 1983450C0976C44D662033AC8348742C /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = PromisesObjC; - target = 2BBF7206D7FAC92C82A042A99C4A98F8 /* PromisesObjC */; - targetProxy = 0DAF3617F8B25359D0124A64D7D75786 /* PBXContainerItemProxy */; + targetProxy = EBA4A0479A6FBF67D4CBFCCDD5717C29 /* PBXContainerItemProxy */; }; - 26B568AE3BFC05E33EA728BA57AC4F5B /* PBXTargetDependency */ = { + 17D2C4DFCB6E882EC55B32FE22C7202B /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = IQKeyboardManagerSwift; - target = B490E7485944099E16C9CBD79119D1D4 /* IQKeyboardManagerSwift */; - targetProxy = FC8985882936E69A6FDE0BE7A0EAC688 /* PBXContainerItemProxy */; + name = GoogleDataTransport; + target = 5C0371EE948D0357B8EE0E34ABB44BF0 /* GoogleDataTransport */; + targetProxy = 2F0B896B73629E4D1C5D3B0DE15CC95A /* PBXContainerItemProxy */; }; - 2BA915590F2DDB6BF86070C8ACC177C8 /* PBXTargetDependency */ = { + 180A59C781912D95C0246478C8EE0745 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = GoogleUtilities; - target = 8D7F5D5DD528D21A72DC87ADA5B12E2D /* GoogleUtilities */; - targetProxy = EC4AEBF0B8302DE5743CB3EA26B0786E /* PBXContainerItemProxy */; + name = Firebase; + target = 072CEA044D2EF26F03496D5996BBF59F /* Firebase */; + targetProxy = 85FDAD3EB7A61FA0FA625FFAA48F03E7 /* PBXContainerItemProxy */; }; - 41FAB49115C6D9F624C01BE031AAFF40 /* PBXTargetDependency */ = { + 1D8822E8755954A8E8906C5D5F7E3B84 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = RealmSwift; - target = 782725687624F8665247B84AB581BEB1 /* RealmSwift */; - targetProxy = DEC1A8622ADFEA1EDBC7C1282761ECF9 /* PBXContainerItemProxy */; + name = URITemplate; + target = A4ED113D38492F631BC6DBF8BB3D1D8E /* URITemplate */; + targetProxy = B6C7D541D5F774A4637592C112BF53A2 /* PBXContainerItemProxy */; }; - 4E9F4FFF22A26731DDAAE5C613F58923 /* PBXTargetDependency */ = { + 2D8641F4E4BBFDF5FD9C8760B6D2D2DD /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "Toast-Swift"; - target = B990BD87169C76A3ED3FE8A9258D91A3 /* Toast-Swift */; - targetProxy = BCDA79557FAF82055338D44929529BFC /* PBXContainerItemProxy */; + name = PromisesObjC; + target = 2BBF7206D7FAC92C82A042A99C4A98F8 /* PromisesObjC */; + targetProxy = 4961602A8A656369A824F337E2370F4F /* PBXContainerItemProxy */; }; - 58686F9B6CD726AC36EC57CD58ED778F /* PBXTargetDependency */ = { + 32E900D6FABC630616A12F98E900B554 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = FirebaseInstallations; - target = 87803597EB3F20FC46472B85392EC4FD /* FirebaseInstallations */; - targetProxy = 2DE8BD3FA1613A590C3C8D0AD489A17F /* PBXContainerItemProxy */; + name = nanopb; + target = D2B5E7DCCBBFB32341D857D01211A1A3 /* nanopb */; + targetProxy = 32757078825CCEFB47313D849F93EF75 /* PBXContainerItemProxy */; }; - 604C2B73B7B96450108B08C214C23C1D /* PBXTargetDependency */ = { + 35DA40211E5E7F3C5554BFED6877E45E /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = FirebaseMessaging; target = 5895B432FE4D2F6826C8FF25A09DB6D2 /* FirebaseMessaging */; - targetProxy = 5D4273679FA192BFF3CEEFDD7C84C8A5 /* PBXContainerItemProxy */; + targetProxy = 7DB8FE00AB83E73D60E45721F70A650C /* PBXContainerItemProxy */; }; - 67A3BD5A3007B010451129DE03C7DEEF /* PBXTargetDependency */ = { + 36DE47E2105C56FA63261315357CE9A8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = FirebaseCore; - target = 4402AFF83DBDC4DD07E198685FDC2DF2 /* FirebaseCore */; - targetProxy = AED1AD89B25F32303AFDA1B71FEFD55B /* PBXContainerItemProxy */; + name = nanopb; + target = D2B5E7DCCBBFB32341D857D01211A1A3 /* nanopb */; + targetProxy = 2E713798652C92973A450388BB2F5FC4 /* PBXContainerItemProxy */; }; - 689C7FC37CD07D7E0B071E97BD6D3AA7 /* PBXTargetDependency */ = { + 3B507CA9766B589EDEDAAAE27B4BA762 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = GoogleUtilities; - target = 8D7F5D5DD528D21A72DC87ADA5B12E2D /* GoogleUtilities */; - targetProxy = 8D23B2B26068422FC23863BBB2DF11D4 /* PBXContainerItemProxy */; - }; - 6C527B3BC933BA3B2B5A4DE60C8140E7 /* PBXTargetDependency */ = { + name = FirebaseInstallations; + target = 87803597EB3F20FC46472B85392EC4FD /* FirebaseInstallations */; + targetProxy = 2320E552CB6F04112A2CDF4D15302EFF /* PBXContainerItemProxy */; + }; + 3C3EACF84BCF4EBDEA8F7946A646114A /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = URITemplate; - target = A4ED113D38492F631BC6DBF8BB3D1D8E /* URITemplate */; - targetProxy = 13EF5C41089A3D67B27B0129526B98AB /* PBXContainerItemProxy */; + name = Realm; + target = 68494F30B4A13F8E5E88BCCAEC25B0A4 /* Realm */; + targetProxy = D9C802A4D1CBACFAD08DC471A3A5C957 /* PBXContainerItemProxy */; }; - 7125813573AC42C087AC6A8C66D3A970 /* PBXTargetDependency */ = { + 44AB0811EF89403EC34F6D42270E9ADB /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = FirebaseCoreDiagnostics; - target = 620E05868772C10B4920DC7E324F2C87 /* FirebaseCoreDiagnostics */; - targetProxy = 655D65EC1099C52AD1B1FCD072EA8D76 /* PBXContainerItemProxy */; + name = nanopb; + target = D2B5E7DCCBBFB32341D857D01211A1A3 /* nanopb */; + targetProxy = E822DACEA03B99ABD37C1595630C957D /* PBXContainerItemProxy */; }; - 8103E864E233289AB5FB926BE7D58322 /* PBXTargetDependency */ = { + 48257062759390D317F87CD1D900E645 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = FirebaseCore; - target = 4402AFF83DBDC4DD07E198685FDC2DF2 /* FirebaseCore */; - targetProxy = E07B7C5191EBF069A5A4FC47AF1C341E /* PBXContainerItemProxy */; + name = GoogleDataTransport; + target = 5C0371EE948D0357B8EE0E34ABB44BF0 /* GoogleDataTransport */; + targetProxy = 3B8D14889326966E56EBFAEB9877EDC3 /* PBXContainerItemProxy */; }; - 84FE2347B1D604DB78DBD6037FE37590 /* PBXTargetDependency */ = { + 4C75EE59A170CB1EC487B7B59B52DB3C /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = PromisesObjC; - target = 2BBF7206D7FAC92C82A042A99C4A98F8 /* PromisesObjC */; - targetProxy = 8C4A251D8B539E1E4BE2849E4FC4352B /* PBXContainerItemProxy */; + name = GoogleUtilities; + target = 8D7F5D5DD528D21A72DC87ADA5B12E2D /* GoogleUtilities */; + targetProxy = E19752924881B543BA9EE53352A52577 /* PBXContainerItemProxy */; }; - 892D1650FA1DD617A7116DC8152D8A0F /* PBXTargetDependency */ = { + 58C5925BF14C701944E56D89765E065B /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = GoogleUtilities; target = 8D7F5D5DD528D21A72DC87ADA5B12E2D /* GoogleUtilities */; - targetProxy = C77DD009F064755B7992133A26100FD5 /* PBXContainerItemProxy */; + targetProxy = 5744E1EEF32028593F87462B65B8C0F8 /* PBXContainerItemProxy */; }; - 8C01A44E451736B6CFACA5BDEF1B7840 /* PBXTargetDependency */ = { + 5B2A895E6FD2CEC82E116B028A75E92C /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = CryptoSwift; - target = 99313990C1D76A6D1D017868B6975CC8 /* CryptoSwift */; - targetProxy = 9A9AABB3A38F0742EF66BDE9221F695B /* PBXContainerItemProxy */; + name = nanopb; + target = D2B5E7DCCBBFB32341D857D01211A1A3 /* nanopb */; + targetProxy = 856D72581F56F2E2AEF176E7F3384B32 /* PBXContainerItemProxy */; }; - 8C4CDCED43BED9D0FE7504D7EAF4F6B2 /* PBXTargetDependency */ = { + 5F218F6EBFFFCF15CF8E7E561B15A94B /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Alamofire; - target = EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */; - targetProxy = 58F8673B3C52F2D196073B6CEBBEB7B9 /* PBXContainerItemProxy */; + name = PromisesObjC; + target = 2BBF7206D7FAC92C82A042A99C4A98F8 /* PromisesObjC */; + targetProxy = 348D7874A206E2FB689EF7559AA24690 /* PBXContainerItemProxy */; + }; + 62FDEACD3D6578EAF56F878BF1A925F2 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = URITemplate; + target = A4ED113D38492F631BC6DBF8BB3D1D8E /* URITemplate */; + targetProxy = F40E02632BAA6B013BD7FB10E552477E /* PBXContainerItemProxy */; + }; + 65ABE2E81D57FC609BDB82F54B91E64C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = GoogleUtilities; + target = 8D7F5D5DD528D21A72DC87ADA5B12E2D /* GoogleUtilities */; + targetProxy = 92E061529C5EA963780E29DB9196AEB0 /* PBXContainerItemProxy */; }; - 8CC100C53DB9F358D20F77654118021C /* PBXTargetDependency */ = { + 6775EB7F4F2F0097275E27374F0734D8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = FirebaseInstallations; target = 87803597EB3F20FC46472B85392EC4FD /* FirebaseInstallations */; - targetProxy = A62447E80DFF1F527F53B89AC4C18CC5 /* PBXContainerItemProxy */; + targetProxy = 3950B0A7D32ECB2409A9A54B3CD97318 /* PBXContainerItemProxy */; }; - 8EFBFBF0A5B8E8DC7C120333492286C1 /* PBXTargetDependency */ = { + 73F9493E6F22FA91018407739EBB2D29 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = nanopb; - target = D2B5E7DCCBBFB32341D857D01211A1A3 /* nanopb */; - targetProxy = DF1403CBCA73B1CEBF070BB9ABA84782 /* PBXContainerItemProxy */; + name = CryptoSwift; + target = 99313990C1D76A6D1D017868B6975CC8 /* CryptoSwift */; + targetProxy = 8B571D6090534F5E323E78315364C7E0 /* PBXContainerItemProxy */; }; - 9E388E3707E4D7DA77AD6A422ECD1796 /* PBXTargetDependency */ = { + 7A35C7147B8D80E6312A0AA712450496 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = GoogleDataTransport; target = 5C0371EE948D0357B8EE0E34ABB44BF0 /* GoogleDataTransport */; - targetProxy = F4AF672BE4E27730736DE632FAF1D491 /* PBXContainerItemProxy */; + targetProxy = 6C8307A1053512A33FC1A60D9EE423C5 /* PBXContainerItemProxy */; }; - 9E53735ADC8EC0190C9A053A1E8AFF53 /* PBXTargetDependency */ = { + 7FBAA1CD828C9281E70D7866E49DF54D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = FirebaseAnalytics; + target = C49E7A4D59E5C8BE8DE9FB1EFB150185 /* FirebaseAnalytics */; + targetProxy = DA81DF945F90A6F78356C9C23625A1B5 /* PBXContainerItemProxy */; + }; + 800B141C0D9F9B9E05C974834E6382B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = FirebaseCoreDiagnostics; target = 620E05868772C10B4920DC7E324F2C87 /* FirebaseCoreDiagnostics */; - targetProxy = 0320955E2B0A683CEA9A4EB704D98E5E /* PBXContainerItemProxy */; + targetProxy = 7F672B906C5986D67201064EB369AAE3 /* PBXContainerItemProxy */; + }; + 85AAC6C644956A73D8328073989D6A43 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = FirebaseCore; + target = 4402AFF83DBDC4DD07E198685FDC2DF2 /* FirebaseCore */; + targetProxy = DEE367F051073E0EBBE3812ACA28E244 /* PBXContainerItemProxy */; }; - 9EC3C530BEAF7F8020620E2726F0B384 /* PBXTargetDependency */ = { + 8AF53A20F99AAB9070CA436964493870 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = GoogleUtilities; target = 8D7F5D5DD528D21A72DC87ADA5B12E2D /* GoogleUtilities */; - targetProxy = 21FF6246DAFD6CA8CCE4A90625358700 /* PBXContainerItemProxy */; + targetProxy = D8AB50F7967F1266BACF4E92E2E9E1A5 /* PBXContainerItemProxy */; }; - 9F3543D0198E93B139FEA8069C77F629 /* PBXTargetDependency */ = { + 8BF002AA9F64F4DF3007BBA0BCA07028 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = GoogleDataTransport; - target = 5C0371EE948D0357B8EE0E34ABB44BF0 /* GoogleDataTransport */; - targetProxy = F38160631848839721434794C35747B7 /* PBXContainerItemProxy */; + name = PromisesObjC; + target = 2BBF7206D7FAC92C82A042A99C4A98F8 /* PromisesObjC */; + targetProxy = 0244D7861D24555B16B7FBCE0FF353AB /* PBXContainerItemProxy */; }; - A2F242171C41DBA9123601695980BA05 /* PBXTargetDependency */ = { + 8CF83607F8B8E3F4F505E52A91BFC8D9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = FirebaseMessaging; - target = 5895B432FE4D2F6826C8FF25A09DB6D2 /* FirebaseMessaging */; - targetProxy = 9BEFA75BE713AF61164098FB8DB5E99D /* PBXContainerItemProxy */; + name = Alamofire; + target = EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */; + targetProxy = F3E31AE1A48269D2BA22F8F7282FF6CB /* PBXContainerItemProxy */; }; - B50F9F54DC83F9060E10B301D1743BB7 /* PBXTargetDependency */ = { + 9102AC1250ECDA71D98B137DE65C28CD /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Firebase; - target = 072CEA044D2EF26F03496D5996BBF59F /* Firebase */; - targetProxy = 3D70B6D90C913BC15DBB0379AE20CA00 /* PBXContainerItemProxy */; + name = IQKeyboardManagerSwift; + target = B490E7485944099E16C9CBD79119D1D4 /* IQKeyboardManagerSwift */; + targetProxy = E9313555225AEBCF87520E4F27155E1F /* PBXContainerItemProxy */; }; - B57FC409F0C31A4ADDD19E85962E014C /* PBXTargetDependency */ = { + 916320574376EEFCA77301DB08B4F64A /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = FirebaseCore; target = 4402AFF83DBDC4DD07E198685FDC2DF2 /* FirebaseCore */; - targetProxy = 2DFE0F306BC9FB8346ABDD5CD3E20ED9 /* PBXContainerItemProxy */; + targetProxy = 91A64C67DC76B5FAED1AFFD76E964A12 /* PBXContainerItemProxy */; }; - B596CFD5D11FBAE44EE5EA5CEC0F4B0F /* PBXTargetDependency */ = { + 931843B4B93C30CEE0D56EC070F4518B /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Mockingjay; - target = 7996D4D780FF8A38ECB1C58253B87C8F /* Mockingjay */; - targetProxy = 209939D70BA52B4721E1F7FE7CACEC9A /* PBXContainerItemProxy */; + name = FirebaseCore; + target = 4402AFF83DBDC4DD07E198685FDC2DF2 /* FirebaseCore */; + targetProxy = 41D4D51F6FF8E5775FCE3EFD49EA2731 /* PBXContainerItemProxy */; }; - C1B1F108794E6E308D28CCFA54E8C8E0 /* PBXTargetDependency */ = { + 957A2E260BF3E0DC2396AAEB4377AC38 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = nanopb; - target = D2B5E7DCCBBFB32341D857D01211A1A3 /* nanopb */; - targetProxy = E6BBF06547C1DB7C6F044065E7553129 /* PBXContainerItemProxy */; + name = GoogleUtilities; + target = 8D7F5D5DD528D21A72DC87ADA5B12E2D /* GoogleUtilities */; + targetProxy = D4AD0B758AC1828697116A8F43C06700 /* PBXContainerItemProxy */; }; - C48B7E2104E41952E4AB07F6397CA0EE /* PBXTargetDependency */ = { + 9739E728EBC3FA332135C45F8C51D2F8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SDWebImage; - target = 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */; - targetProxy = 06ECC0ACAF88A649395C4FE02B3A74EA /* PBXContainerItemProxy */; + name = GoogleUtilities; + target = 8D7F5D5DD528D21A72DC87ADA5B12E2D /* GoogleUtilities */; + targetProxy = B261CDC66C3B8D722E21B8C72881B59D /* PBXContainerItemProxy */; }; - C515E78C0F661E5476BAC0B2E82E175B /* PBXTargetDependency */ = { + 9B16983843334025C3C4B560757F3449 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "ActionSheetPicker-3.0"; - target = A43B25DDF20FCB9228471F8F5135C866 /* ActionSheetPicker-3.0 */; - targetProxy = 9AB6795BAEC16345281107615A3DA4B0 /* PBXContainerItemProxy */; + name = "Toast-Swift"; + target = B990BD87169C76A3ED3FE8A9258D91A3 /* Toast-Swift */; + targetProxy = EC6016E1E1566B0CBA264DCC95BF085F /* PBXContainerItemProxy */; }; - C915A932E2CBE45A3E3C7937B709D416 /* PBXTargetDependency */ = { + 9E9D7E1294766AE40AB7F6B6D087B64D /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Realm; - target = 68494F30B4A13F8E5E88BCCAEC25B0A4 /* Realm */; - targetProxy = D4FA8BB3AC4BB3D716ADE751E109F49A /* PBXContainerItemProxy */; + name = FirebaseMessaging; + target = 5895B432FE4D2F6826C8FF25A09DB6D2 /* FirebaseMessaging */; + targetProxy = 9B43A8924F36DC074E1E15A77E134699 /* PBXContainerItemProxy */; }; - D2E88232E7575673E67A4A49585F7F99 /* PBXTargetDependency */ = { + AD35104240D44871C69B39560E7B77C4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = FirebaseCore; target = 4402AFF83DBDC4DD07E198685FDC2DF2 /* FirebaseCore */; - targetProxy = 3DDF95439C6E2E0B1F3F29F81F4E9A7E /* PBXContainerItemProxy */; + targetProxy = 180A1E63EDEB9A91DB82FE941E7FB782 /* PBXContainerItemProxy */; }; - F459DB1B456838D57C06639A05FA97A3 /* PBXTargetDependency */ = { + B54B206C2F5AB5E0E249A1C5C87B81B3 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = URITemplate; - target = A4ED113D38492F631BC6DBF8BB3D1D8E /* URITemplate */; - targetProxy = C00F853387C42FEDD7AA1E421A84AA0C /* PBXContainerItemProxy */; + name = FirebaseAnalytics; + target = C49E7A4D59E5C8BE8DE9FB1EFB150185 /* FirebaseAnalytics */; + targetProxy = 0DFAE9B05468C7CDE0F25E2B5B258BFB /* PBXContainerItemProxy */; }; - F4E139175D64A91A2721B3063F4C92A7 /* PBXTargetDependency */ = { + B7181D8C96DE0AC8C023555040E75854 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = ReachabilitySwift; - target = 0B00B2C167CD783351BD1D00BD5AD1F8 /* ReachabilitySwift */; - targetProxy = C716D0242673174F5FE410F2D61D68B4 /* PBXContainerItemProxy */; + name = FirebaseCoreDiagnostics; + target = 620E05868772C10B4920DC7E324F2C87 /* FirebaseCoreDiagnostics */; + targetProxy = 84595D475E01317D9FEA5861522B3E5B /* PBXContainerItemProxy */; }; - F6A24C7E901D1AB8E1058FC9252C475D /* PBXTargetDependency */ = { + C176DC74FE80401575F52264FF08ABB7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = PromisesObjC; - target = 2BBF7206D7FAC92C82A042A99C4A98F8 /* PromisesObjC */; - targetProxy = 20616180CC19067C2E4B6BEAF6F0B3CF /* PBXContainerItemProxy */; + name = GoogleAppMeasurement; + target = B53D977A951AFC38B21751B706C1DF83 /* GoogleAppMeasurement */; + targetProxy = 47795C561F396B2451BD5C0960F690AA /* PBXContainerItemProxy */; }; - FBA96F4F08D4657ACE80D0421C9EF1DF /* PBXTargetDependency */ = { + C22896C8C54E9D03E76B43DFE1F83A68 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = GoogleUtilities; target = 8D7F5D5DD528D21A72DC87ADA5B12E2D /* GoogleUtilities */; - targetProxy = C5C0C8C5DF8CDDE3B212D7CE52CD9E5E /* PBXContainerItemProxy */; + targetProxy = E5D5187B2295EC51F4BF2685FD7A14FC /* PBXContainerItemProxy */; }; - FD11D5E2DF3BF6F19957C23134D22F92 /* PBXTargetDependency */ = { + C78A711C6A8980CE36A6864D7ECCA2B4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = GoogleUtilities; - target = 8D7F5D5DD528D21A72DC87ADA5B12E2D /* GoogleUtilities */; - targetProxy = 0E4871E60BECA1888EB7041BE93B6CA9 /* PBXContainerItemProxy */; + name = RealmSwift; + target = 782725687624F8665247B84AB581BEB1 /* RealmSwift */; + targetProxy = BD6402864DE12C54179995F6B4C7CC6B /* PBXContainerItemProxy */; }; - FDE6BA2B890EA5077D6FE78A738C4100 /* PBXTargetDependency */ = { + CC2C739CCD0804EE68F8619BDF729ADC /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SlideMenuControllerSwift; - target = 7B571FD072D3CCB32EC015AE483FCCD0 /* SlideMenuControllerSwift */; - targetProxy = AA7F7A4B0EF5C9FC5031854CB2E456AA /* PBXContainerItemProxy */; + name = PromisesObjC; + target = 2BBF7206D7FAC92C82A042A99C4A98F8 /* PromisesObjC */; + targetProxy = 8809AC3110AD632784E38ED66A2CC854 /* PBXContainerItemProxy */; + }; + D310ECAC5E9C49F869633AEB16509D7E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = GoogleAppMeasurement; + target = B53D977A951AFC38B21751B706C1DF83 /* GoogleAppMeasurement */; + targetProxy = CF8FEA2A29765A7C3E74056A41CEE091 /* PBXContainerItemProxy */; + }; + DAD718C3D841FFB12919FBC092508195 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = nanopb; + target = D2B5E7DCCBBFB32341D857D01211A1A3 /* nanopb */; + targetProxy = B447E269ED1F39F4878EBB3A3738DEF2 /* PBXContainerItemProxy */; }; - FF643EBD617361307BE8161197A1848A /* PBXTargetDependency */ = { + DEC02819646566C0536FFA3530E77855 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = ReachabilitySwift; + target = 0B00B2C167CD783351BD1D00BD5AD1F8 /* ReachabilitySwift */; + targetProxy = 061466C6BC532A33F9CF25E2F9CB2D63 /* PBXContainerItemProxy */; + }; + E4622016DB4A3EB4A3E29F53C728AE94 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Mockingjay; + target = 7996D4D780FF8A38ECB1C58253B87C8F /* Mockingjay */; + targetProxy = 43EDB6AE0F818ABFED1FC63BBC6E3490 /* PBXContainerItemProxy */; + }; + EDAB0844D54B7FD3DE6DB151AC8DBC28 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Realm; target = 68494F30B4A13F8E5E88BCCAEC25B0A4 /* Realm */; - targetProxy = 4E0662977C51BFDAAEF81D04F12ABC97 /* PBXContainerItemProxy */; + targetProxy = 87779FF6323E326B8E4819696484C2F9 /* PBXContainerItemProxy */; + }; + F0252F51F2B9E0F1C5BB0D98C4DAC2CF /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = FirebaseCore; + target = 4402AFF83DBDC4DD07E198685FDC2DF2 /* FirebaseCore */; + targetProxy = 8750DE31697DDA8860DD9AACA46E14FC /* PBXContainerItemProxy */; + }; + F0324CC7ED48051EB29CC8D340048624 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = GoogleUtilities; + target = 8D7F5D5DD528D21A72DC87ADA5B12E2D /* GoogleUtilities */; + targetProxy = 01A5C4CF52B63CE1A513502B83B268CD /* PBXContainerItemProxy */; + }; + F46691F8474EFE9EF99AC4943B66F0E2 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = FirebaseInstallations; + target = 87803597EB3F20FC46472B85392EC4FD /* FirebaseInstallations */; + targetProxy = 5FCB9BDFCE295FDD6456738CA1FEF668 /* PBXContainerItemProxy */; + }; + FF1BB1EE49281078153383080E592398 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "ActionSheetPicker-3.0"; + target = A43B25DDF20FCB9228471F8F5135C866 /* ActionSheetPicker-3.0 */; + targetProxy = 80BE60E458C0E79F94FADFC034899675 /* PBXContainerItemProxy */; + }; + FFFE92791217D5D06D4EE8F67518D050 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SlideMenuControllerSwift; + target = 7B571FD072D3CCB32EC015AE483FCCD0 /* SlideMenuControllerSwift */; + targetProxy = 5610FE4D923DB47F975CEAB2D4D85792 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 0069DC2386104559ED9F2220E4A2ADA9 /* Debug */ = { + 00D6ECFEB268D2523ECB66A46D734D9A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 748C44B0F30FF0C186DDF67405F8E1E6 /* GoogleDataTransport.debug.xcconfig */; + baseConfigurationReference = F89C0D53C8855BE4A60CF26CD67CE094 /* nanopb.debug.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -6124,13 +6507,14 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/GoogleDataTransport/GoogleDataTransport-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/nanopb/nanopb-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/nanopb/nanopb-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/GoogleDataTransport/GoogleDataTransport.modulemap"; - PRODUCT_MODULE_NAME = GoogleDataTransport; - PRODUCT_NAME = GoogleDataTransport; + MODULEMAP_FILE = "Target Support Files/nanopb/nanopb.modulemap"; + PRODUCT_MODULE_NAME = nanopb; + PRODUCT_NAME = nanopb; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -6141,25 +6525,41 @@ }; name = Debug; }; - 00BDBAE0017F86BA020A2C89B1F15EBD /* Release */ = { + 0793BCB0DEF3D08AC83E4A5300277693 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D1A0F280A48CC7207C6774F525F5E454 /* Firebase.release.xcconfig */; + baseConfigurationReference = 442BA6B70F4E697581837AF370FAD30A /* RealmSwift.release.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CLANG_ENABLE_OBJC_WEAK = NO; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/RealmSwift/RealmSwift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/RealmSwift/RealmSwift-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/RealmSwift/RealmSwift.modulemap"; + PRODUCT_MODULE_NAME = RealmSwift; + PRODUCT_NAME = RealmSwift; SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; }; name = Release; }; - 0C3A92096BE7113E560B383018FF5E42 /* Release */ = { + 0B1B92216C889A1315D92FEF118FDCE0 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F223157149EF109E4C6DD2D757BD138E /* GoogleDataTransport.release.xcconfig */; + baseConfigurationReference = C13A7982B95943369894B56EC6A3768F /* Mockingjay.release.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -6170,13 +6570,14 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/GoogleDataTransport/GoogleDataTransport-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Mockingjay/Mockingjay-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Mockingjay/Mockingjay-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/GoogleDataTransport/GoogleDataTransport.modulemap"; - PRODUCT_MODULE_NAME = GoogleDataTransport; - PRODUCT_NAME = GoogleDataTransport; + MODULEMAP_FILE = "Target Support Files/Mockingjay/Mockingjay.modulemap"; + PRODUCT_MODULE_NAME = Mockingjay; + PRODUCT_NAME = Mockingjay; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -6188,12 +6589,11 @@ }; name = Release; }; - 11A55B97DA3A5AB8CA60C322E78B6A33 /* Debug */ = { + 0BDD3F470B429BABB3863018142179CF /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 14FBAB99FC765178FFE8550C4BC3EF7A /* Alamofire.debug.xcconfig */; + baseConfigurationReference = 793E492FDC6F5C0C2D55DBF5A137C7F7 /* GoogleUtilities.debug.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -6202,29 +6602,44 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Alamofire/Alamofire-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Alamofire/Alamofire-Info.plist"; + INFOPLIST_FILE = "Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Alamofire/Alamofire.modulemap"; - PRODUCT_MODULE_NAME = Alamofire; - PRODUCT_NAME = Alamofire; + MODULEMAP_FILE = "Target Support Files/GoogleUtilities/GoogleUtilities.modulemap"; + PRODUCT_MODULE_NAME = GoogleUtilities; + PRODUCT_NAME = GoogleUtilities; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.3; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 17CB2FF81E44F43AF1BA8D006B13968A /* Release */ = { + 0CF302F8D9600B5B9B3DDA2496D4F826 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6AA0E91824FAEA1891606A904C5530F9 /* RealmSwift.release.xcconfig */; + baseConfigurationReference = 997C62088E31C19A6E01FD622DF9C368 /* GoogleAppMeasurement.release.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 0E407B55429159CEA49F0E87FCB24FD2 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1E2D7D7BC83A0DB5B41A87BA2238B3F4 /* Alamofire.release.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -6233,18 +6648,18 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/RealmSwift/RealmSwift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/RealmSwift/RealmSwift-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Alamofire/Alamofire-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Alamofire/Alamofire-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/RealmSwift/RealmSwift.modulemap"; - PRODUCT_MODULE_NAME = RealmSwift; - PRODUCT_NAME = RealmSwift; + MODULEMAP_FILE = "Target Support Files/Alamofire/Alamofire.modulemap"; + PRODUCT_MODULE_NAME = Alamofire; + PRODUCT_NAME = Alamofire; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; + SWIFT_VERSION = 5.5; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -6252,9 +6667,9 @@ }; name = Release; }; - 196EA3B9CCEC91D9AD18CFBD01F1D8B6 /* Debug */ = { + 0E4923915858E493C4AB0949F2A9C5DD /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C1DDF12CD51B4BF51752949415EF4468 /* ReachabilitySwift.debug.xcconfig */; + baseConfigurationReference = 239D66620DF32FD8BB09D702E83D275F /* IQKeyboardManagerSwift.release.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -6265,29 +6680,32 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/ReachabilitySwift/ReachabilitySwift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/ReachabilitySwift/ReachabilitySwift-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/ReachabilitySwift/ReachabilitySwift.modulemap"; - PRODUCT_MODULE_NAME = Reachability; - PRODUCT_NAME = Reachability; + MODULEMAP_FILE = "Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap"; + PRODUCT_MODULE_NAME = IQKeyboardManagerSwift; + PRODUCT_NAME = IQKeyboardManagerSwift; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; + SWIFT_VERSION = 5.5; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 19840C93ED3F6898B96C10C58C159917 /* Debug */ = { + 208913D13310D4C847CED1DC231EBAC8 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AE8A14963C233404956363CE226BA105 /* URITemplate.debug.xcconfig */; + baseConfigurationReference = FD1EC8D7F9CCD7A843145AB82130C8BB /* Pods-MyStudies.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -6296,29 +6714,31 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/URITemplate/URITemplate-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/URITemplate/URITemplate-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-MyStudies/Pods-MyStudies-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/URITemplate/URITemplate.modulemap"; - PRODUCT_MODULE_NAME = URITemplate; - PRODUCT_NAME = URITemplate; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-MyStudies/Pods-MyStudies.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 1D30A35BEFCF9A316D3C101FF7C920C5 /* Release */ = { + 365C4A51A9C36C086A9B98A80245036B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5BD4D0AA9938C9E104775EFDF778F6E8 /* PromisesObjC.release.xcconfig */; + baseConfigurationReference = 14B3A02C631B5290BC8599CDD26DDA09 /* Alamofire.debug.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -6327,27 +6747,27 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/PromisesObjC/PromisesObjC-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Alamofire/Alamofire-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Alamofire/Alamofire-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/PromisesObjC/PromisesObjC.modulemap"; - PRODUCT_MODULE_NAME = FBLPromises; - PRODUCT_NAME = FBLPromises; + MODULEMAP_FILE = "Target Support Files/Alamofire/Alamofire.modulemap"; + PRODUCT_MODULE_NAME = Alamofire; + PRODUCT_NAME = Alamofire; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; + SWIFT_VERSION = 5.5; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 2083C84213C262694AA4C7EAA71366E9 /* Debug */ = { + 4173AEC092DB8FD33FE655FE4D0B9BF6 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E6C2C2DE3380A72031C11CB50818CF56 /* PromisesObjC.debug.xcconfig */; + baseConfigurationReference = 94E08B980255A3F6FA9965B95B8EE948 /* CryptoSwift.debug.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -6358,26 +6778,27 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/PromisesObjC/PromisesObjC-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/CryptoSwift/CryptoSwift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/CryptoSwift/CryptoSwift-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/PromisesObjC/PromisesObjC.modulemap"; - PRODUCT_MODULE_NAME = FBLPromises; - PRODUCT_NAME = FBLPromises; + MODULEMAP_FILE = "Target Support Files/CryptoSwift/CryptoSwift.modulemap"; + PRODUCT_MODULE_NAME = CryptoSwift; + PRODUCT_NAME = CryptoSwift; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; + SWIFT_VERSION = 5.3; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 24651C65E191AFEA67214F074D75240D /* Debug */ = { + 4369FE950868DB75EBC72E8D3629A5BE /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BC7DC13ADB8C72B54E0F6BD9CD66CE69 /* nanopb.debug.xcconfig */; + baseConfigurationReference = F49CF6E31F255EC612752A92D008252E /* nanopb.release.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -6401,16 +6822,19 @@ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 267D597770494FEA53780B6B4F819666 /* Debug */ = { + 4392C1DBF90AACE2AE738EA377F0DEC2 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 008C9E1E3B9656D135DC7B0E43EE71C2 /* FirebaseInstallations.debug.xcconfig */; + baseConfigurationReference = 95B82C453115CD24EA9668BE883EB7B5 /* Pods-MyStudiesTests.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -6419,58 +6843,42 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/FirebaseInstallations/FirebaseInstallations-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-MyStudiesTests/Pods-MyStudiesTests-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.1; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FirebaseInstallations/FirebaseInstallations.modulemap"; - PRODUCT_MODULE_NAME = FirebaseInstallations; - PRODUCT_NAME = FirebaseInstallations; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-MyStudiesTests/Pods-MyStudiesTests.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 26A2672FF6907731409CEAF198E76500 /* Release */ = { + 48AA6A971B58DC6855FAFB07A5BCB250 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C885D17E303681AA196E0B45CBD18D23 /* Realm.release.xcconfig */; + baseConfigurationReference = D492C64A621E8EE00F0E7CCA09B07BD5 /* FirebaseAnalytics.debug.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Realm/Realm-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Realm/Realm-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Realm/Realm.modulemap"; - PRODUCT_MODULE_NAME = Realm; - PRODUCT_NAME = Realm; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 28EAC4FDA609FE001D4A5D7A432885C6 /* Debug */ = { + 4FA1DD187D53F5A4718D8A7786D21D1C /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3A9AE4009397240F73870331DE9EC85C /* Toast-Swift.debug.xcconfig */; + baseConfigurationReference = 2989F02D3A300DFBF9AE8B59A6FD2A39 /* IQKeyboardManagerSwift.debug.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -6481,27 +6889,27 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Toast-Swift/Toast-Swift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Toast-Swift/Toast-Swift-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Toast-Swift/Toast-Swift.modulemap"; - PRODUCT_MODULE_NAME = Toast_Swift; - PRODUCT_NAME = Toast_Swift; + MODULEMAP_FILE = "Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap"; + PRODUCT_MODULE_NAME = IQKeyboardManagerSwift; + PRODUCT_NAME = IQKeyboardManagerSwift; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; + SWIFT_VERSION = 5.5; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 2BC25A43C491523E35D97B396D7A6120 /* Debug */ = { + 594DAF4AD219C4368A9896A31B87F629 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1E95D11E343E352E861832FC81DBD7A9 /* IQKeyboardManagerSwift.debug.xcconfig */; + baseConfigurationReference = C62434FD18A0162DD2EEC48E1977B333 /* ReachabilitySwift.release.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -6512,27 +6920,28 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/ReachabilitySwift/ReachabilitySwift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ReachabilitySwift/ReachabilitySwift-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap"; - PRODUCT_MODULE_NAME = IQKeyboardManagerSwift; - PRODUCT_NAME = IQKeyboardManagerSwift; + MODULEMAP_FILE = "Target Support Files/ReachabilitySwift/ReachabilitySwift.modulemap"; + PRODUCT_MODULE_NAME = Reachability; + PRODUCT_NAME = Reachability; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.3; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 2C6D7E712BE416A6D82DE74731E0A2E3 /* Debug */ = { + 5B3B0243D11FAF2294D17896DD29FC49 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0D850BD593B8E52777A0374A1F5D37F3 /* RealmSwift.debug.xcconfig */; + baseConfigurationReference = 3AFF407D41F79B206C4ED6F608AC9214 /* FirebaseCore.debug.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -6543,14 +6952,13 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/RealmSwift/RealmSwift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/RealmSwift/RealmSwift-Info.plist"; + INFOPLIST_FILE = "Target Support Files/FirebaseCore/FirebaseCore-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/RealmSwift/RealmSwift.modulemap"; - PRODUCT_MODULE_NAME = RealmSwift; - PRODUCT_NAME = RealmSwift; + MODULEMAP_FILE = "Target Support Files/FirebaseCore/FirebaseCore.modulemap"; + PRODUCT_MODULE_NAME = FirebaseCore; + PRODUCT_NAME = FirebaseCore; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -6561,9 +6969,9 @@ }; name = Debug; }; - 3136E0490427DCF511F77734B56EA0EA /* Debug */ = { + 5DFF64051C6238395EE38AC7384E7E17 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BB1390DC0B6FE19D06D3CD0F0F9018D6 /* FirebaseCoreDiagnostics.debug.xcconfig */; + baseConfigurationReference = 688307369B03E356928C679F0B4DC901 /* GoogleUtilities.release.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -6574,26 +6982,27 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-Info.plist"; + INFOPLIST_FILE = "Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.modulemap"; - PRODUCT_MODULE_NAME = FirebaseCoreDiagnostics; - PRODUCT_NAME = FirebaseCoreDiagnostics; + MODULEMAP_FILE = "Target Support Files/GoogleUtilities/GoogleUtilities.modulemap"; + PRODUCT_MODULE_NAME = GoogleUtilities; + PRODUCT_NAME = GoogleUtilities; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 37F786BFCB8ADACD9D638A71B7F809A8 /* Release */ = { + 60615D7E8B32CD5D71E78573445DD285 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 48FC60298EE0706240EE16412E87C195 /* ReachabilitySwift.release.xcconfig */; + baseConfigurationReference = A26050B8CF3CBAF05B5E6E1EDC3155A2 /* Toast-Swift.release.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -6604,14 +7013,14 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/ReachabilitySwift/ReachabilitySwift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/ReachabilitySwift/ReachabilitySwift-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Toast-Swift/Toast-Swift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Toast-Swift/Toast-Swift-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/ReachabilitySwift/ReachabilitySwift.modulemap"; - PRODUCT_MODULE_NAME = Reachability; - PRODUCT_NAME = Reachability; + MODULEMAP_FILE = "Target Support Files/Toast-Swift/Toast-Swift.modulemap"; + PRODUCT_MODULE_NAME = Toast_Swift; + PRODUCT_NAME = Toast_Swift; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -6623,13 +7032,11 @@ }; name = Release; }; - 3AD47CDD22445DF1E1DB3437758AF774 /* Debug */ = { + 6346FBDDE222EFAF600036476EE478A1 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 95B82C453115CD24EA9668BE883EB7B5 /* Pods-MyStudiesTests.debug.xcconfig */; + baseConfigurationReference = 49D9C32DF72C2034EEF6B470123FC589 /* Mockingjay.debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -6638,28 +7045,27 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-MyStudiesTests/Pods-MyStudiesTests-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Mockingjay/Mockingjay-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Mockingjay/Mockingjay-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.1; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-MyStudiesTests/Pods-MyStudiesTests.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + MODULEMAP_FILE = "Target Support Files/Mockingjay/Mockingjay.modulemap"; + PRODUCT_MODULE_NAME = Mockingjay; + PRODUCT_NAME = Mockingjay; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 43500F93BCEF2BFC07195041EF91E842 /* Debug */ = { + 6A7FBC4B5CC2465256FD78331694DC1F /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 64826FB20BEA4BD8003565B41D7A9BD1 /* SDWebImage.debug.xcconfig */; + baseConfigurationReference = 21FEDA89A23387679FAD97F0EFB38224 /* Toast-Swift.debug.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -6670,14 +7076,14 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SDWebImage/SDWebImage-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Toast-Swift/Toast-Swift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Toast-Swift/Toast-Swift-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap"; - PRODUCT_MODULE_NAME = SDWebImage; - PRODUCT_NAME = SDWebImage; + MODULEMAP_FILE = "Target Support Files/Toast-Swift/Toast-Swift.modulemap"; + PRODUCT_MODULE_NAME = Toast_Swift; + PRODUCT_NAME = Toast_Swift; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -6688,9 +7094,9 @@ }; name = Debug; }; - 5025FA55110173FF8C9D0243A7C55E66 /* Release */ = { + 6C8CF2B523EA1C40AB61069A77D798B8 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3FB52841B0D7A1F78781BF79B570A6E /* CryptoSwift.release.xcconfig */; + baseConfigurationReference = 4C0F6A6A8715F88728809EAED4034D59 /* URITemplate.release.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -6701,18 +7107,18 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/CryptoSwift/CryptoSwift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/CryptoSwift/CryptoSwift-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/URITemplate/URITemplate-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/URITemplate/URITemplate-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/CryptoSwift/CryptoSwift.modulemap"; - PRODUCT_MODULE_NAME = CryptoSwift; - PRODUCT_NAME = CryptoSwift; + MODULEMAP_FILE = "Target Support Files/URITemplate/URITemplate.modulemap"; + PRODUCT_MODULE_NAME = URITemplate; + PRODUCT_NAME = URITemplate; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.3; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -6720,9 +7126,9 @@ }; name = Release; }; - 55D0E4310C17C6BEACDAFEDA0C52781B /* Release */ = { + 71684D36DAB833F771CFDCD475BFF004 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9A4F43B9B838C9ED009A0AA82CF3E6EE /* FirebaseInstallations.release.xcconfig */; + baseConfigurationReference = A33F42324840BE40EE781E8445AA4B39 /* FirebaseInstallations.release.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -6751,13 +7157,11 @@ }; name = Release; }; - 5C277FE496E800230F688C7F6282E44B /* Release */ = { + 7284954E8C29A79EEB9BBBE76977A1BB /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6A9D406F8B67A2346DA4A21163C6A378 /* Pods-MyStudies.release.xcconfig */; + baseConfigurationReference = C9AB2627CF8C758388D4CE396E26B3DA /* ReachabilitySwift.debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -6766,29 +7170,27 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-MyStudies/Pods-MyStudies-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/ReachabilitySwift/ReachabilitySwift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ReachabilitySwift/ReachabilitySwift-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-MyStudies/Pods-MyStudies.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + MODULEMAP_FILE = "Target Support Files/ReachabilitySwift/ReachabilitySwift.modulemap"; + PRODUCT_MODULE_NAME = Reachability; + PRODUCT_NAME = Reachability; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 5E713F9AC8D8BAC330B41681D42BBBF6 /* Release */ = { + 72F5A8104470145A02B30C319E86A386 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D4EFE58C8AF2B33D44C8483992CBFA5B /* SDWebImage.release.xcconfig */; + baseConfigurationReference = F09F1D24C21616F022F82709890350F6 /* ActionSheetPicker-3.0.release.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -6799,14 +7201,14 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SDWebImage/SDWebImage-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap"; - PRODUCT_MODULE_NAME = SDWebImage; - PRODUCT_NAME = SDWebImage; + MODULEMAP_FILE = "Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0.modulemap"; + PRODUCT_MODULE_NAME = ActionSheetPicker_3_0; + PRODUCT_NAME = ActionSheetPicker_3_0; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -6818,12 +7220,11 @@ }; name = Release; }; - 6B58DB926E40853F250779F17744D83B /* Release */ = { + 73F737E648A89800F01881853DA7BB7B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8276FB26ED80CAD78CF5A647F8687E9B /* Alamofire.release.xcconfig */; + baseConfigurationReference = 164FF34DC7E9A852524BA8F8889B253D /* CryptoSwift.release.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -6832,14 +7233,14 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Alamofire/Alamofire-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Alamofire/Alamofire-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/CryptoSwift/CryptoSwift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/CryptoSwift/CryptoSwift-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Alamofire/Alamofire.modulemap"; - PRODUCT_MODULE_NAME = Alamofire; - PRODUCT_NAME = Alamofire; + MODULEMAP_FILE = "Target Support Files/CryptoSwift/CryptoSwift.modulemap"; + PRODUCT_MODULE_NAME = CryptoSwift; + PRODUCT_NAME = CryptoSwift; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -6851,13 +7252,11 @@ }; name = Release; }; - 71859FAA266DE60E6977C8A4A42D5B7A /* Debug */ = { + 77AA4901276520D8DF2429960D10CBE6 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FD1EC8D7F9CCD7A843145AB82130C8BB /* Pods-MyStudies.debug.xcconfig */; + baseConfigurationReference = 196ACE4F3702EB309112A01BAAA80186 /* SDWebImage.release.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -6866,28 +7265,28 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-MyStudies/Pods-MyStudies-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SDWebImage/SDWebImage-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-MyStudies/Pods-MyStudies.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap"; + PRODUCT_MODULE_NAME = SDWebImage; + PRODUCT_NAME = SDWebImage; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 72BD1033FBA2D77C0BF8556001200ED4 /* Debug */ = { + 7C8DF21FEF4E36FCD598E9818AD8226C /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4358653149756F5FB1FBFF4F16A78A6E /* FirebaseCore.debug.xcconfig */; + baseConfigurationReference = 08F97D6DE4F5E987AFC48A4AE0A515F6 /* PromisesObjC.debug.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -6898,13 +7297,13 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/FirebaseCore/FirebaseCore-Info.plist"; + INFOPLIST_FILE = "Target Support Files/PromisesObjC/PromisesObjC-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FirebaseCore/FirebaseCore.modulemap"; - PRODUCT_MODULE_NAME = FirebaseCore; - PRODUCT_NAME = FirebaseCore; + MODULEMAP_FILE = "Target Support Files/PromisesObjC/PromisesObjC.modulemap"; + PRODUCT_MODULE_NAME = FBLPromises; + PRODUCT_NAME = FBLPromises; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -6915,9 +7314,9 @@ }; name = Debug; }; - 80DEFDFE57F17048737836C5B6A0A9CF /* Release */ = { + 820FA969D1356B1556A29DB0DBF1ACF4 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 18E1D6D55119A8A07D1CBC8E856AB124 /* FirebaseCoreDiagnostics.release.xcconfig */; + baseConfigurationReference = FDA5BA6A89BFAEEA1781F097F58A9656 /* Realm.release.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -6928,13 +7327,14 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Realm/Realm-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Realm/Realm-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.modulemap"; - PRODUCT_MODULE_NAME = FirebaseCoreDiagnostics; - PRODUCT_NAME = FirebaseCoreDiagnostics; + MODULEMAP_FILE = "Target Support Files/Realm/Realm.modulemap"; + PRODUCT_MODULE_NAME = Realm; + PRODUCT_NAME = Realm; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -6946,13 +7346,11 @@ }; name = Release; }; - 85869890ACF80938F05A0604F56620D9 /* Release */ = { + 85F87D2F02D1AAFC2CC70F986EDC1E73 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F973FEA34736EEB28901DC2EFBC6A748 /* Pods-MyStudiesTests.release.xcconfig */; + baseConfigurationReference = A93B55389CE21A4C6DB378C0DBAB43C5 /* GoogleDataTransport.debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -6961,29 +7359,26 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-MyStudiesTests/Pods-MyStudiesTests-Info.plist"; + INFOPLIST_FILE = "Target Support Files/GoogleDataTransport/GoogleDataTransport-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.1; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-MyStudiesTests/Pods-MyStudiesTests.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + MODULEMAP_FILE = "Target Support Files/GoogleDataTransport/GoogleDataTransport.modulemap"; + PRODUCT_MODULE_NAME = GoogleDataTransport; + PRODUCT_NAME = GoogleDataTransport; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 88D455DE95BC59645F8D7A58B0FFEA68 /* Release */ = { + 8840B6E4A029E59F1F5DB794DA27A1AA /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2E4633F715CC7B0679E989FFB9D17EEB /* GoogleUtilities.release.xcconfig */; + baseConfigurationReference = 1BD50408843A7D771E39BFF6691FA5A9 /* RealmSwift.debug.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -6994,36 +7389,52 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/RealmSwift/RealmSwift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/RealmSwift/RealmSwift-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/GoogleUtilities/GoogleUtilities.modulemap"; - PRODUCT_MODULE_NAME = GoogleUtilities; - PRODUCT_NAME = GoogleUtilities; + MODULEMAP_FILE = "Target Support Files/RealmSwift/RealmSwift.modulemap"; + PRODUCT_MODULE_NAME = RealmSwift; + PRODUCT_NAME = RealmSwift; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 8A372678F186AD6E4308F8E3EF69FEC9 /* Debug */ = { + 8FA727CC93258A6B9BD8EB6E1C87C6BE /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5AA917770CC9A23BDC767A899ADB5FF3 /* Firebase.debug.xcconfig */; + baseConfigurationReference = 1AE3EE2DEE883E075187AD4918626511 /* URITemplate.debug.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CLANG_ENABLE_OBJC_WEAK = NO; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/URITemplate/URITemplate-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/URITemplate/URITemplate-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/URITemplate/URITemplate.modulemap"; + PRODUCT_MODULE_NAME = URITemplate; + PRODUCT_NAME = URITemplate; SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; }; name = Debug; }; @@ -7089,9 +7500,9 @@ }; name = Release; }; - 90DC6AEE85D5994FDB82CA114E1B70A3 /* Debug */ = { + 9044362545C3BE1FD4C25DDCA6A1BFB2 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3FE405049FC2FB29BF75B7A35C818115 /* SlideMenuControllerSwift.debug.xcconfig */; + baseConfigurationReference = 895E940E9ACACE9310DD41557B9BD8CD /* FirebaseCoreDiagnostics.debug.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -7102,14 +7513,44 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SlideMenuControllerSwift/SlideMenuControllerSwift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SlideMenuControllerSwift/SlideMenuControllerSwift-Info.plist"; + INFOPLIST_FILE = "Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SlideMenuControllerSwift/SlideMenuControllerSwift.modulemap"; - PRODUCT_MODULE_NAME = SlideMenuControllerSwift; - PRODUCT_NAME = SlideMenuControllerSwift; + MODULEMAP_FILE = "Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.modulemap"; + PRODUCT_MODULE_NAME = FirebaseCoreDiagnostics; + PRODUCT_NAME = FirebaseCoreDiagnostics; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 997AB081CEC429D73E406DA4B89FBEEF /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CE11F74B23EDE88076AB5451C9140B13 /* ActionSheetPicker-3.0.debug.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0.modulemap"; + PRODUCT_MODULE_NAME = ActionSheetPicker_3_0; + PRODUCT_NAME = ActionSheetPicker_3_0; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -7120,11 +7561,13 @@ }; name = Debug; }; - 94A30D2083BAD288D2BAAD21F731CC55 /* Release */ = { + 9B64A1AEA6A8DF766AD94B7FE3D089BE /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4D7A158188945A292C7229C1B0F81CCD /* IQKeyboardManagerSwift.release.xcconfig */; + baseConfigurationReference = 6A9D406F8B67A2346DA4A21163C6A378 /* Pods-MyStudies.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -7133,18 +7576,19 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-MyStudies/Pods-MyStudies-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap"; - PRODUCT_MODULE_NAME = IQKeyboardManagerSwift; - PRODUCT_NAME = IQKeyboardManagerSwift; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-MyStudies/Pods-MyStudies.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.3; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -7152,9 +7596,9 @@ }; name = Release; }; - 9C9DD4C3E9D9AB2C0B9DA80886C48C48 /* Debug */ = { + 9FB9E8A685C0F0409554BAC73C9DF86A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A5AE73314B78EE62CD2BB6BB6C2EB58A /* Realm.debug.xcconfig */; + baseConfigurationReference = 8B8EFF73E21B2FFAEEDA96C777B6D3E2 /* Realm.debug.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -7183,9 +7627,9 @@ }; name = Debug; }; - 9D96FDC310FFD61C1EA2F2BC83240CA4 /* Debug */ = { + A689C0F287BE3B526BC7845A3EA22E1E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DA360603A68ECC2BD5C2B909D7B5A65F /* Mockingjay.debug.xcconfig */; + baseConfigurationReference = C1715560CD6D3A25E429A0A260C5ADA5 /* FirebaseCore.release.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -7196,30 +7640,29 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Mockingjay/Mockingjay-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Mockingjay/Mockingjay-Info.plist"; + INFOPLIST_FILE = "Target Support Files/FirebaseCore/FirebaseCore-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Mockingjay/Mockingjay.modulemap"; - PRODUCT_MODULE_NAME = Mockingjay; - PRODUCT_NAME = Mockingjay; + MODULEMAP_FILE = "Target Support Files/FirebaseCore/FirebaseCore.modulemap"; + PRODUCT_MODULE_NAME = FirebaseCore; + PRODUCT_NAME = FirebaseCore; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - A20BFD0DF32EE969720A3836B2D2B8FC /* Release */ = { + A7825BDB4DDD1C364FF21628DFC3A84F /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2B93416F1EC7FF429DDC77D53CEAA687 /* FirebaseMessaging.release.xcconfig */; + baseConfigurationReference = D544D8849EE98A44DCD33D61BC5A29C8 /* SlideMenuControllerSwift.release.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -7228,13 +7671,14 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/FirebaseMessaging/FirebaseMessaging-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SlideMenuControllerSwift/SlideMenuControllerSwift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SlideMenuControllerSwift/SlideMenuControllerSwift-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FirebaseMessaging/FirebaseMessaging.modulemap"; - PRODUCT_MODULE_NAME = FirebaseMessaging; - PRODUCT_NAME = FirebaseMessaging; + MODULEMAP_FILE = "Target Support Files/SlideMenuControllerSwift/SlideMenuControllerSwift.modulemap"; + PRODUCT_MODULE_NAME = SlideMenuControllerSwift; + PRODUCT_NAME = SlideMenuControllerSwift; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -7246,9 +7690,9 @@ }; name = Release; }; - AA07F9407F3A9164D5FDAE985258C2D1 /* Release */ = { + ADCBD4C2DBD4F94787A26F9C579ED1B4 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A106256A5764B60C95B44AD82EFEED22 /* FirebaseCore.release.xcconfig */; + baseConfigurationReference = CC55FDA8C07BEEC58E107A03F712E4EB /* FirebaseInstallations.debug.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -7259,27 +7703,26 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/FirebaseCore/FirebaseCore-Info.plist"; + INFOPLIST_FILE = "Target Support Files/FirebaseInstallations/FirebaseInstallations-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FirebaseCore/FirebaseCore.modulemap"; - PRODUCT_MODULE_NAME = FirebaseCore; - PRODUCT_NAME = FirebaseCore; + MODULEMAP_FILE = "Target Support Files/FirebaseInstallations/FirebaseInstallations.modulemap"; + PRODUCT_MODULE_NAME = FirebaseInstallations; + PRODUCT_NAME = FirebaseInstallations; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - B4B17C7FD4DCE993386AA72D70A774B3 /* Release */ = { + ADE4F37837716F495C9E7176780437C0 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F7333952F0DE992CC89C4FF6EDE9E34C /* SlideMenuControllerSwift.release.xcconfig */; + baseConfigurationReference = C657E082540A7D3E9C9C89BCB2237721 /* FirebaseCoreDiagnostics.release.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -7290,14 +7733,13 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SlideMenuControllerSwift/SlideMenuControllerSwift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SlideMenuControllerSwift/SlideMenuControllerSwift-Info.plist"; + INFOPLIST_FILE = "Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SlideMenuControllerSwift/SlideMenuControllerSwift.modulemap"; - PRODUCT_MODULE_NAME = SlideMenuControllerSwift; - PRODUCT_NAME = SlideMenuControllerSwift; + MODULEMAP_FILE = "Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.modulemap"; + PRODUCT_MODULE_NAME = FirebaseCoreDiagnostics; + PRODUCT_NAME = FirebaseCoreDiagnostics; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -7375,9 +7817,9 @@ }; name = Debug; }; - BB9DD282F4D4B1635AAD042D1C1714CB /* Release */ = { + C0C3C740A301FED9E032EFD81573E0C8 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2F47B9623AD99AFA45CFFE3DA971247A /* Mockingjay.release.xcconfig */; + baseConfigurationReference = 253EAAF31418DB93D32BB190E09A5E61 /* SDWebImage.debug.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -7388,58 +7830,57 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Mockingjay/Mockingjay-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Mockingjay/Mockingjay-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SDWebImage/SDWebImage-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Mockingjay/Mockingjay.modulemap"; - PRODUCT_MODULE_NAME = Mockingjay; - PRODUCT_NAME = Mockingjay; + MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap"; + PRODUCT_MODULE_NAME = SDWebImage; + PRODUCT_NAME = SDWebImage; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - BF292C5D9CDDD6C3A1C0025F9FEA81F2 /* Debug */ = { + CE8927B1276AB061905569032EAB4ABD /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 87D773189F499ACEE8B53BC884B1DC3A /* GoogleUtilities.debug.xcconfig */; + baseConfigurationReference = 91A7812DE61C21F1BBB8FE1A9A3CE839 /* GoogleAppMeasurement.debug.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/GoogleUtilities/GoogleUtilities.modulemap"; - PRODUCT_MODULE_NAME = GoogleUtilities; - PRODUCT_NAME = GoogleUtilities; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; }; name = Debug; }; - C0AFA38917FEBF28D71F5960D1F55545 /* Release */ = { + D77649ABCB7C47021D483233C4904873 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CCBC26BBD5A53F46900FAD9DDC727261 /* Firebase.release.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CLANG_ENABLE_OBJC_WEAK = NO; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + DE445BAB367E29AC061921D7B3AE7704 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 09270FD276479DC159CD2F94B634C486 /* ActionSheetPicker-3.0.release.xcconfig */; + baseConfigurationReference = A220E535E4466885D9933D023263EB53 /* PromisesObjC.release.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -7450,14 +7891,13 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0-Info.plist"; + INFOPLIST_FILE = "Target Support Files/PromisesObjC/PromisesObjC-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0.modulemap"; - PRODUCT_MODULE_NAME = ActionSheetPicker_3_0; - PRODUCT_NAME = ActionSheetPicker_3_0; + MODULEMAP_FILE = "Target Support Files/PromisesObjC/PromisesObjC.modulemap"; + PRODUCT_MODULE_NAME = FBLPromises; + PRODUCT_NAME = FBLPromises; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -7469,11 +7909,13 @@ }; name = Release; }; - C5FE43E5B7336D490DFA8E6A0BD9AD46 /* Debug */ = { + E37DD17DE8B24A22CF37FF14E41B14EE /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BC8D8ED1556DBA55F9EAD872236E8D7D /* ActionSheetPicker-3.0.debug.xcconfig */; + baseConfigurationReference = F973FEA34736EEB28901DC2EFBC6A748 /* Pods-MyStudiesTests.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -7482,58 +7924,59 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-MyStudiesTests/Pods-MyStudiesTests-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.1; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0.modulemap"; - PRODUCT_MODULE_NAME = ActionSheetPicker_3_0; - PRODUCT_NAME = ActionSheetPicker_3_0; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-MyStudiesTests/Pods-MyStudiesTests.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; + name = Release; + }; + E86D009B13826905D7D4F8386BD492CC /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 46E3F6903676E051C59EBAF339DC56B5 /* Firebase.debug.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CLANG_ENABLE_OBJC_WEAK = NO; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; name = Debug; }; - CFF57096338FAC22C39D98E5CF343690 /* Debug */ = { + ECB9DCFC31DA215127F2F0DD1E840592 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CF87B9AA4CF57A1C594525DAEB25F963 /* CryptoSwift.debug.xcconfig */; + baseConfigurationReference = F3A9CE2E0796F5AFC7992FEA16568017 /* FirebaseAnalytics.release.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/CryptoSwift/CryptoSwift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/CryptoSwift/CryptoSwift-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/CryptoSwift/CryptoSwift.modulemap"; - PRODUCT_MODULE_NAME = CryptoSwift; - PRODUCT_NAME = CryptoSwift; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.3; TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; + VALIDATE_PRODUCT = YES; }; - name = Debug; + name = Release; }; - E91834CC53EEC8BFDD18596E681F9D54 /* Release */ = { + EF2DB97CD4C9FA538F5DDB197BB2D055 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 901BFCF017E527D8CE1C06227E6CD344 /* nanopb.release.xcconfig */; + baseConfigurationReference = ACE8206D5DD26D93C1F4307E689E4F2F /* SlideMenuControllerSwift.debug.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -7544,30 +7987,30 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/nanopb/nanopb-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/nanopb/nanopb-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SlideMenuControllerSwift/SlideMenuControllerSwift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SlideMenuControllerSwift/SlideMenuControllerSwift-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/nanopb/nanopb.modulemap"; - PRODUCT_MODULE_NAME = nanopb; - PRODUCT_NAME = nanopb; + MODULEMAP_FILE = "Target Support Files/SlideMenuControllerSwift/SlideMenuControllerSwift.modulemap"; + PRODUCT_MODULE_NAME = SlideMenuControllerSwift; + PRODUCT_NAME = SlideMenuControllerSwift; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - ED7CADBBE211B05DACABF93C0C943839 /* Release */ = { + F353FBB28A75CD545C453842A2A8B803 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4CB2DBF25A1D17A1A07269F5E6EAE563 /* URITemplate.release.xcconfig */; + baseConfigurationReference = 254B7E87A46E81B959B878436D36FF40 /* FirebaseMessaging.release.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -7576,14 +8019,13 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/URITemplate/URITemplate-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/URITemplate/URITemplate-Info.plist"; + INFOPLIST_FILE = "Target Support Files/FirebaseMessaging/FirebaseMessaging-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/URITemplate/URITemplate.modulemap"; - PRODUCT_MODULE_NAME = URITemplate; - PRODUCT_NAME = URITemplate; + MODULEMAP_FILE = "Target Support Files/FirebaseMessaging/FirebaseMessaging.modulemap"; + PRODUCT_MODULE_NAME = FirebaseMessaging; + PRODUCT_NAME = FirebaseMessaging; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -7595,11 +8037,12 @@ }; name = Release; }; - F00CCC221F51FE0D0B5B42E31F2D9E1C /* Release */ = { + FAA41E4123AFE07E8A836B7E11E71DF6 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9C86A9F959BAAB05EAABFD80BE01F80D /* Toast-Swift.release.xcconfig */; + baseConfigurationReference = 16B4A9A6BED7E99535ABC2962B36BCF0 /* FirebaseMessaging.debug.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -7608,31 +8051,28 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Toast-Swift/Toast-Swift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Toast-Swift/Toast-Swift-Info.plist"; + INFOPLIST_FILE = "Target Support Files/FirebaseMessaging/FirebaseMessaging-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Toast-Swift/Toast-Swift.modulemap"; - PRODUCT_MODULE_NAME = Toast_Swift; - PRODUCT_NAME = Toast_Swift; + MODULEMAP_FILE = "Target Support Files/FirebaseMessaging/FirebaseMessaging.modulemap"; + PRODUCT_MODULE_NAME = FirebaseMessaging; + PRODUCT_NAME = FirebaseMessaging; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - F6C4624CB714D3C0DE3DAAF8FB5DDD2F /* Debug */ = { + FF7629081E81DE6E44889F52960CFD32 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 987CB935C61B01E507BD3F4E1394A0D5 /* FirebaseMessaging.debug.xcconfig */; + baseConfigurationReference = BCA5A315512C480CE1FAB3429E3D5F53 /* GoogleDataTransport.release.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -7641,238 +8081,257 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/FirebaseMessaging/FirebaseMessaging-Info.plist"; + INFOPLIST_FILE = "Target Support Files/GoogleDataTransport/GoogleDataTransport-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FirebaseMessaging/FirebaseMessaging.modulemap"; - PRODUCT_MODULE_NAME = FirebaseMessaging; - PRODUCT_NAME = FirebaseMessaging; + MODULEMAP_FILE = "Target Support Files/GoogleDataTransport/GoogleDataTransport.modulemap"; + PRODUCT_MODULE_NAME = GoogleDataTransport; + PRODUCT_NAME = GoogleDataTransport; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 03171E4A0A39968144759D1C0A13EB19 /* Build configuration list for PBXNativeTarget "RealmSwift" */ = { + 0AF50023995A0183E1B9D707EFE86DD0 /* Build configuration list for PBXNativeTarget "Pods-MyStudies" */ = { isa = XCConfigurationList; buildConfigurations = ( - 2C6D7E712BE416A6D82DE74731E0A2E3 /* Debug */, - 17CB2FF81E44F43AF1BA8D006B13968A /* Release */, + 208913D13310D4C847CED1DC231EBAC8 /* Debug */, + 9B64A1AEA6A8DF766AD94B7FE3D089BE /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 0703FC20C3265AC4433F9CD95828A874 /* Build configuration list for PBXNativeTarget "FirebaseCoreDiagnostics" */ = { + 14DE1166A8B9C02D036523FB495E1984 /* Build configuration list for PBXNativeTarget "ReachabilitySwift" */ = { isa = XCConfigurationList; buildConfigurations = ( - 3136E0490427DCF511F77734B56EA0EA /* Debug */, - 80DEFDFE57F17048737836C5B6A0A9CF /* Release */, + 7284954E8C29A79EEB9BBBE76977A1BB /* Debug */, + 594DAF4AD219C4368A9896A31B87F629 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 365CC5A17D0BC52F4129081E53D0A205 /* Build configuration list for PBXNativeTarget "Realm" */ = { + 150EB8172255EB7AFF1D82428A915764 /* Build configuration list for PBXAggregateTarget "GoogleAppMeasurement" */ = { isa = XCConfigurationList; buildConfigurations = ( - 9C9DD4C3E9D9AB2C0B9DA80886C48C48 /* Debug */, - 26A2672FF6907731409CEAF198E76500 /* Release */, + CE8927B1276AB061905569032EAB4ABD /* Debug */, + 0CF302F8D9600B5B9B3DDA2496D4F826 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 3DB26EC2C797CC7F40BB1EEACAA8D293 /* Build configuration list for PBXNativeTarget "PromisesObjC" */ = { + 1CFF699CBEB6B32FD26D8277642C9F21 /* Build configuration list for PBXNativeTarget "SlideMenuControllerSwift" */ = { isa = XCConfigurationList; buildConfigurations = ( - 2083C84213C262694AA4C7EAA71366E9 /* Debug */, - 1D30A35BEFCF9A316D3C101FF7C920C5 /* Release */, + EF2DB97CD4C9FA538F5DDB197BB2D055 /* Debug */, + A7825BDB4DDD1C364FF21628DFC3A84F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 4569779631A127832FF034DC61B57173 /* Build configuration list for PBXNativeTarget "FirebaseInstallations" */ = { + 1D8A228996DBC2C7D966D9172843C34A /* Build configuration list for PBXNativeTarget "CryptoSwift" */ = { isa = XCConfigurationList; buildConfigurations = ( - 267D597770494FEA53780B6B4F819666 /* Debug */, - 55D0E4310C17C6BEACDAFEDA0C52781B /* Release */, + 4173AEC092DB8FD33FE655FE4D0B9BF6 /* Debug */, + 73F737E648A89800F01881853DA7BB7B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { + 21C2F42C1F52C31193AE74EF17FAE49C /* Build configuration list for PBXNativeTarget "URITemplate" */ = { isa = XCConfigurationList; buildConfigurations = ( - B4EFE046ACF8F37157F6E322C7FCFC28 /* Debug */, - 903A0004D3E6651EFD5D2E16214D101B /* Release */, + 8FA727CC93258A6B9BD8EB6E1C87C6BE /* Debug */, + 6C8CF2B523EA1C40AB61069A77D798B8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 29B3394DEB53A6FE9FC44A690405427B /* Build configuration list for PBXNativeTarget "FirebaseCoreDiagnostics" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9044362545C3BE1FD4C25DDCA6A1BFB2 /* Debug */, + ADE4F37837716F495C9E7176780437C0 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2CC84AB94560185BC0A2986148490EB3 /* Build configuration list for PBXNativeTarget "FirebaseMessaging" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + FAA41E4123AFE07E8A836B7E11E71DF6 /* Debug */, + F353FBB28A75CD545C453842A2A8B803 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 4ABBA4541709CBA8A30EAAED1946A515 /* Build configuration list for PBXNativeTarget "nanopb" */ = { + 3393B836BCDFD5292B077E63A26DC97F /* Build configuration list for PBXNativeTarget "Toast-Swift" */ = { isa = XCConfigurationList; buildConfigurations = ( - 24651C65E191AFEA67214F074D75240D /* Debug */, - E91834CC53EEC8BFDD18596E681F9D54 /* Release */, + 6A7FBC4B5CC2465256FD78331694DC1F /* Debug */, + 60615D7E8B32CD5D71E78573445DD285 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 4B439D82718FBE3018FBAE24AFCB5C47 /* Build configuration list for PBXNativeTarget "Pods-MyStudies" */ = { + 3AF11E9DDE0C0C0A5DEDB367151BEC9A /* Build configuration list for PBXNativeTarget "FirebaseInstallations" */ = { isa = XCConfigurationList; buildConfigurations = ( - 71859FAA266DE60E6977C8A4A42D5B7A /* Debug */, - 5C277FE496E800230F688C7F6282E44B /* Release */, + ADCBD4C2DBD4F94787A26F9C579ED1B4 /* Debug */, + 71684D36DAB833F771CFDCD475BFF004 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 53616539C174C4E21AEF692716832AF4 /* Build configuration list for PBXNativeTarget "URITemplate" */ = { + 3B7EC7BB1E2E0CFFAB00CC30CA42D83B /* Build configuration list for PBXNativeTarget "FirebaseCore" */ = { isa = XCConfigurationList; buildConfigurations = ( - 19840C93ED3F6898B96C10C58C159917 /* Debug */, - ED7CADBBE211B05DACABF93C0C943839 /* Release */, + 5B3B0243D11FAF2294D17896DD29FC49 /* Debug */, + A689C0F287BE3B526BC7845A3EA22E1E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 543AFABDB667AF073C3569847B1008C0 /* Build configuration list for PBXNativeTarget "ActionSheetPicker-3.0" */ = { + 42F76AA8E84D32E2DED70BBA35321CB1 /* Build configuration list for PBXNativeTarget "IQKeyboardManagerSwift" */ = { isa = XCConfigurationList; buildConfigurations = ( - C5FE43E5B7336D490DFA8E6A0BD9AD46 /* Debug */, - C0AFA38917FEBF28D71F5960D1F55545 /* Release */, + 4FA1DD187D53F5A4718D8A7786D21D1C /* Debug */, + 0E4923915858E493C4AB0949F2A9C5DD /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 552F8A3DA42779EF218F2BBADB70816F /* Build configuration list for PBXNativeTarget "SlideMenuControllerSwift" */ = { + 455DC2E4C749F30DFF1F375A4F04A640 /* Build configuration list for PBXNativeTarget "GoogleUtilities" */ = { isa = XCConfigurationList; buildConfigurations = ( - 90DC6AEE85D5994FDB82CA114E1B70A3 /* Debug */, - B4B17C7FD4DCE993386AA72D70A774B3 /* Release */, + 0BDD3F470B429BABB3863018142179CF /* Debug */, + 5DFF64051C6238395EE38AC7384E7E17 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 60155EC14FAFB3BBFB4BCF6D807A41F5 /* Build configuration list for PBXNativeTarget "FirebaseMessaging" */ = { + 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - F6C4624CB714D3C0DE3DAAF8FB5DDD2F /* Debug */, - A20BFD0DF32EE969720A3836B2D2B8FC /* Release */, + B4EFE046ACF8F37157F6E322C7FCFC28 /* Debug */, + 903A0004D3E6651EFD5D2E16214D101B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 78E219AC01CD5AFED663C9AB28280801 /* Build configuration list for PBXNativeTarget "Alamofire" */ = { + 5DD555F2EE44377759BE7309A2704921 /* Build configuration list for PBXNativeTarget "nanopb" */ = { isa = XCConfigurationList; buildConfigurations = ( - 11A55B97DA3A5AB8CA60C322E78B6A33 /* Debug */, - 6B58DB926E40853F250779F17744D83B /* Release */, + 00D6ECFEB268D2523ECB66A46D734D9A /* Debug */, + 4369FE950868DB75EBC72E8D3629A5BE /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 86CF6F39C82FFACF5CCA6AB322D530D0 /* Build configuration list for PBXNativeTarget "GoogleUtilities" */ = { + 5FBF9BBED697A2764595F2142D34D41F /* Build configuration list for PBXNativeTarget "ActionSheetPicker-3.0" */ = { isa = XCConfigurationList; buildConfigurations = ( - BF292C5D9CDDD6C3A1C0025F9FEA81F2 /* Debug */, - 88D455DE95BC59645F8D7A58B0FFEA68 /* Release */, + 997AB081CEC429D73E406DA4B89FBEEF /* Debug */, + 72F5A8104470145A02B30C319E86A386 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 89857914B49B6F2D94C9CDE09F341532 /* Build configuration list for PBXNativeTarget "GoogleDataTransport" */ = { + 8A212264186B8822192F9C369D7DE4BB /* Build configuration list for PBXNativeTarget "Alamofire" */ = { isa = XCConfigurationList; buildConfigurations = ( - 0069DC2386104559ED9F2220E4A2ADA9 /* Debug */, - 0C3A92096BE7113E560B383018FF5E42 /* Release */, + 365C4A51A9C36C086A9B98A80245036B /* Debug */, + 0E407B55429159CEA49F0E87FCB24FD2 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - A7155AE59A19533F60ECE3B4045B01F0 /* Build configuration list for PBXNativeTarget "IQKeyboardManagerSwift" */ = { + B60D8206568EDEC5F2FE7E3D5166F42A /* Build configuration list for PBXNativeTarget "Pods-MyStudiesTests" */ = { isa = XCConfigurationList; buildConfigurations = ( - 2BC25A43C491523E35D97B396D7A6120 /* Debug */, - 94A30D2083BAD288D2BAAD21F731CC55 /* Release */, + 4392C1DBF90AACE2AE738EA377F0DEC2 /* Debug */, + E37DD17DE8B24A22CF37FF14E41B14EE /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - AEEACF6B070028BD8BD77A91E8611FAD /* Build configuration list for PBXNativeTarget "Pods-MyStudiesTests" */ = { + BABD4A24CFCBE5B6FE4680AA062FCF04 /* Build configuration list for PBXNativeTarget "SDWebImage" */ = { isa = XCConfigurationList; buildConfigurations = ( - 3AD47CDD22445DF1E1DB3437758AF774 /* Debug */, - 85869890ACF80938F05A0604F56620D9 /* Release */, + C0C3C740A301FED9E032EFD81573E0C8 /* Debug */, + 77AA4901276520D8DF2429960D10CBE6 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - B8C401847A53B4C2810311A8CBD715AD /* Build configuration list for PBXNativeTarget "Toast-Swift" */ = { + D6E764259752E2AE8E4DDB4FAF06537B /* Build configuration list for PBXNativeTarget "GoogleDataTransport" */ = { isa = XCConfigurationList; buildConfigurations = ( - 28EAC4FDA609FE001D4A5D7A432885C6 /* Debug */, - F00CCC221F51FE0D0B5B42E31F2D9E1C /* Release */, + 85F87D2F02D1AAFC2CC70F986EDC1E73 /* Debug */, + FF7629081E81DE6E44889F52960CFD32 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - DDC4535F74E25828F6BEED1494C49030 /* Build configuration list for PBXNativeTarget "CryptoSwift" */ = { + D8CCD9A718D390435BD3AC8A5F22FD8A /* Build configuration list for PBXAggregateTarget "FirebaseAnalytics" */ = { isa = XCConfigurationList; buildConfigurations = ( - CFF57096338FAC22C39D98E5CF343690 /* Debug */, - 5025FA55110173FF8C9D0243A7C55E66 /* Release */, + 48AA6A971B58DC6855FAFB07A5BCB250 /* Debug */, + ECB9DCFC31DA215127F2F0DD1E840592 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - DE178E064E7F877C2A4D1D0D35F81F16 /* Build configuration list for PBXAggregateTarget "Firebase" */ = { + DC4E51B97E1FFE8D42DD228E03F34A0E /* Build configuration list for PBXAggregateTarget "Firebase" */ = { isa = XCConfigurationList; buildConfigurations = ( - 8A372678F186AD6E4308F8E3EF69FEC9 /* Debug */, - 00BDBAE0017F86BA020A2C89B1F15EBD /* Release */, + E86D009B13826905D7D4F8386BD492CC /* Debug */, + D77649ABCB7C47021D483233C4904873 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - E50A4613BA081C4F47DEEC1F9B9176BA /* Build configuration list for PBXNativeTarget "ReachabilitySwift" */ = { + E4517760B74D777B9A07A99348F18DDA /* Build configuration list for PBXNativeTarget "Realm" */ = { isa = XCConfigurationList; buildConfigurations = ( - 196EA3B9CCEC91D9AD18CFBD01F1D8B6 /* Debug */, - 37F786BFCB8ADACD9D638A71B7F809A8 /* Release */, + 9FB9E8A685C0F0409554BAC73C9DF86A /* Debug */, + 820FA969D1356B1556A29DB0DBF1ACF4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - F7485EA3857FD96A9FC9A05A8053C2AB /* Build configuration list for PBXNativeTarget "Mockingjay" */ = { + E455E1793A1987C14F63188D2CE58D66 /* Build configuration list for PBXNativeTarget "Mockingjay" */ = { isa = XCConfigurationList; buildConfigurations = ( - 9D96FDC310FFD61C1EA2F2BC83240CA4 /* Debug */, - BB9DD282F4D4B1635AAD042D1C1714CB /* Release */, + 6346FBDDE222EFAF600036476EE478A1 /* Debug */, + 0B1B92216C889A1315D92FEF118FDCE0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - F7647E2BDF8B9DF44AD8E949386796A7 /* Build configuration list for PBXNativeTarget "SDWebImage" */ = { + F90CB9D87FC02500E658C6B5571C73A2 /* Build configuration list for PBXNativeTarget "PromisesObjC" */ = { isa = XCConfigurationList; buildConfigurations = ( - 43500F93BCEF2BFC07195041EF91E842 /* Debug */, - 5E713F9AC8D8BAC330B41681D42BBBF6 /* Release */, + 7C8DF21FEF4E36FCD598E9818AD8226C /* Debug */, + DE445BAB367E29AC061921D7B3AE7704 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - FC15135A9AED755FEA63921649F2AE21 /* Build configuration list for PBXNativeTarget "FirebaseCore" */ = { + FA064A19E533562EB20256D7D44D4A0A /* Build configuration list for PBXNativeTarget "RealmSwift" */ = { isa = XCConfigurationList; buildConfigurations = ( - 72BD1033FBA2D77C0BF8556001200ED4 /* Debug */, - AA07F9407F3A9164D5FDAE985258C2D1 /* Release */, + 8840B6E4A029E59F1F5DB794DA27A1AA /* Debug */, + 0793BCB0DEF3D08AC83E4A5300277693 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/iOS/MyStudies/Pods/RealmSwift/RealmSwift/Combine.swift b/iOS/MyStudies/Pods/RealmSwift/RealmSwift/Combine.swift index e09cc0150b..7c56e5cb27 100644 --- a/iOS/MyStudies/Pods/RealmSwift/RealmSwift/Combine.swift +++ b/iOS/MyStudies/Pods/RealmSwift/RealmSwift/Combine.swift @@ -35,18 +35,18 @@ import Realm.Private /// /// You can also manually conform to `Identifiable` if you wish, but note that /// using the object's memory address does *not* work for managed objects. -@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) +@available(iOSApplicationExtension 15, *) public protocol ObjectKeyIdentifiable: Identifiable, Object { /// The stable identity of the entity associated with `self`. var id: UInt64 { get } } /// :nodoc: -@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) @available(*, deprecated, renamed: "ObjectKeyIdentifiable") +@available(iOSApplicationExtension 15, *) public typealias ObjectKeyIdentifable = ObjectKeyIdentifiable -@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) +@available(iOSApplicationExtension 15, *) extension ObjectKeyIdentifiable { /// A stable identifier for this object. For managed Realm objects, this /// value will be the same for all object instances which refer to the same diff --git a/iOS/MyStudies/Pods/RealmSwift/RealmSwift/SwiftVersion.swift b/iOS/MyStudies/Pods/RealmSwift/RealmSwift/SwiftVersion.swift index 4efbce4930..8537f3bbc9 100644 --- a/iOS/MyStudies/Pods/RealmSwift/RealmSwift/SwiftVersion.swift +++ b/iOS/MyStudies/Pods/RealmSwift/RealmSwift/SwiftVersion.swift @@ -1 +1 @@ -let swiftLanguageVersion = "5.2.4" +let swiftLanguageVersion = "5.5.2" diff --git a/iOS/MyStudies/Pods/SDWebImage/README.md b/iOS/MyStudies/Pods/SDWebImage/README.md index ea77ad7728..06e28e3a18 100644 --- a/iOS/MyStudies/Pods/SDWebImage/README.md +++ b/iOS/MyStudies/Pods/SDWebImage/README.md @@ -75,7 +75,7 @@ The new framework introduce two View structs `WebImage` and `AnimatedImage` for #### Integration with 3rd party libraries - [SDWebImageLottiePlugin](https://github.com/SDWebImage/SDWebImageLottiePlugin) - plugin to support [Lottie-iOS](https://github.com/airbnb/lottie-ios), vector animation rending with remote JSON files -- [SDWebImageSVGKitPlugin](https://github.com/SDWebImage/SDWebImageLottiePlugin) - plugin to support [SVGKit](https://github.com/SVGKit/SVGKit), SVG rendering using Core Animation, iOS 8+/macOS 10.10+ support +- [SDWebImageSVGKitPlugin](https://github.com/SDWebImage/SDWebImageSVGKitPlugin) - plugin to support [SVGKit](https://github.com/SVGKit/SVGKit), SVG rendering using Core Animation, iOS 8+/macOS 10.10+ support - [SDWebImageFLPlugin](https://github.com/SDWebImage/SDWebImageFLPlugin) - plugin to support [FLAnimatedImage](https://github.com/Flipboard/FLAnimatedImage) as the engine for animated GIFs - [SDWebImageYYPlugin](https://github.com/SDWebImage/SDWebImageYYPlugin) - plugin to integrate [YYImage](https://github.com/ibireme/YYImage) & [YYCache](https://github.com/ibireme/YYCache) for image rendering & caching diff --git a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/NSData+ImageContentType.h b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/NSData+ImageContentType.h index a9921ea3ee..fb5ba60a4f 100644 --- a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/NSData+ImageContentType.h +++ b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/NSData+ImageContentType.h @@ -45,7 +45,7 @@ static const SDImageFormat SDImageFormatSVG = 8; * * @param format Format as SDImageFormat * @return The UTType as CFStringRef - * @note For unknown format, `kUTTypeImage` abstract type will return + * @note For unknown format, `kSDUTTypeImage` abstract type will return */ + (nonnull CFStringRef)sd_UTTypeFromImageFormat:(SDImageFormat)format CF_RETURNS_NOT_RETAINED NS_SWIFT_NAME(sd_UTType(from:)); diff --git a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/NSData+ImageContentType.m b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/NSData+ImageContentType.m index 35e27aa409..070dfdfcae 100644 --- a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/NSData+ImageContentType.m +++ b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/NSData+ImageContentType.m @@ -87,16 +87,16 @@ + (nonnull CFStringRef)sd_UTTypeFromImageFormat:(SDImageFormat)format { CFStringRef UTType; switch (format) { case SDImageFormatJPEG: - UTType = kUTTypeJPEG; + UTType = kSDUTTypeJPEG; break; case SDImageFormatPNG: - UTType = kUTTypePNG; + UTType = kSDUTTypePNG; break; case SDImageFormatGIF: - UTType = kUTTypeGIF; + UTType = kSDUTTypeGIF; break; case SDImageFormatTIFF: - UTType = kUTTypeTIFF; + UTType = kSDUTTypeTIFF; break; case SDImageFormatWebP: UTType = kSDUTTypeWebP; @@ -108,14 +108,14 @@ + (nonnull CFStringRef)sd_UTTypeFromImageFormat:(SDImageFormat)format { UTType = kSDUTTypeHEIF; break; case SDImageFormatPDF: - UTType = kUTTypePDF; + UTType = kSDUTTypePDF; break; case SDImageFormatSVG: - UTType = kUTTypeScalableVectorGraphics; + UTType = kSDUTTypeSVG; break; default: // default is kUTTypeImage abstract type - UTType = kUTTypeImage; + UTType = kSDUTTypeImage; break; } return UTType; @@ -126,13 +126,13 @@ + (SDImageFormat)sd_imageFormatFromUTType:(CFStringRef)uttype { return SDImageFormatUndefined; } SDImageFormat imageFormat; - if (CFStringCompare(uttype, kUTTypeJPEG, 0) == kCFCompareEqualTo) { + if (CFStringCompare(uttype, kSDUTTypeJPEG, 0) == kCFCompareEqualTo) { imageFormat = SDImageFormatJPEG; - } else if (CFStringCompare(uttype, kUTTypePNG, 0) == kCFCompareEqualTo) { + } else if (CFStringCompare(uttype, kSDUTTypePNG, 0) == kCFCompareEqualTo) { imageFormat = SDImageFormatPNG; - } else if (CFStringCompare(uttype, kUTTypeGIF, 0) == kCFCompareEqualTo) { + } else if (CFStringCompare(uttype, kSDUTTypeGIF, 0) == kCFCompareEqualTo) { imageFormat = SDImageFormatGIF; - } else if (CFStringCompare(uttype, kUTTypeTIFF, 0) == kCFCompareEqualTo) { + } else if (CFStringCompare(uttype, kSDUTTypeTIFF, 0) == kCFCompareEqualTo) { imageFormat = SDImageFormatTIFF; } else if (CFStringCompare(uttype, kSDUTTypeWebP, 0) == kCFCompareEqualTo) { imageFormat = SDImageFormatWebP; @@ -140,9 +140,9 @@ + (SDImageFormat)sd_imageFormatFromUTType:(CFStringRef)uttype { imageFormat = SDImageFormatHEIC; } else if (CFStringCompare(uttype, kSDUTTypeHEIF, 0) == kCFCompareEqualTo) { imageFormat = SDImageFormatHEIF; - } else if (CFStringCompare(uttype, kUTTypePDF, 0) == kCFCompareEqualTo) { + } else if (CFStringCompare(uttype, kSDUTTypePDF, 0) == kCFCompareEqualTo) { imageFormat = SDImageFormatPDF; - } else if (CFStringCompare(uttype, kUTTypeScalableVectorGraphics, 0) == kCFCompareEqualTo) { + } else if (CFStringCompare(uttype, kSDUTTypeSVG, 0) == kCFCompareEqualTo) { imageFormat = SDImageFormatSVG; } else { imageFormat = SDImageFormatUndefined; diff --git a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/NSImage+Compatibility.m b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/NSImage+Compatibility.m index 7de0c70350..ce67151ef8 100644 --- a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/NSImage+Compatibility.m +++ b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/NSImage+Compatibility.m @@ -35,8 +35,8 @@ - (CGFloat)scale { NSImageRep *imageRep = [self bestRepresentationForRect:imageRect context:nil hints:nil]; CGFloat width = imageRep.size.width; CGFloat height = imageRep.size.height; - NSUInteger pixelWidth = imageRep.pixelsWide; - NSUInteger pixelHeight = imageRep.pixelsHigh; + CGFloat pixelWidth = (CGFloat)imageRep.pixelsWide; + CGFloat pixelHeight = (CGFloat)imageRep.pixelsHigh; if (width > 0 && height > 0) { CGFloat widthScale = pixelWidth / width; CGFloat heightScale = pixelHeight / height; diff --git a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImage.m b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImage.m index 6f3916ce04..f98c49294b 100644 --- a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImage.m +++ b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImage.m @@ -314,6 +314,10 @@ - (void)setSd_imageLoopCount:(NSUInteger)sd_imageLoopCount { return; } +- (NSUInteger)sd_imageFrameCount { + return self.animatedImageFrameCount; +} + - (SDImageFormat)sd_imageFormat { return self.animatedImageFormat; } diff --git a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageRep.m b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageRep.m index 08317429d1..2ef3a88bb0 100644 --- a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageRep.m +++ b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageRep.m @@ -27,6 +27,12 @@ - (void)dealloc { } } +- (instancetype)copyWithZone:(NSZone *)zone { + SDAnimatedImageRep *imageRep = [super copyWithZone:zone]; + CFRetain(imageRep->_imageSource); + return imageRep; +} + // `NSBitmapImageRep`'s `imageRepWithData:` is not designed initializer + (instancetype)imageRepWithData:(NSData *)data { SDAnimatedImageRep *imageRep = [[SDAnimatedImageRep alloc] initWithData:data]; @@ -52,13 +58,13 @@ - (instancetype)initWithData:(NSData *)data { if (!type) { return self; } - if (CFStringCompare(type, kUTTypeGIF, 0) == kCFCompareEqualTo) { + if (CFStringCompare(type, kSDUTTypeGIF, 0) == kCFCompareEqualTo) { // GIF // Fix the `NSBitmapImageRep` GIF loop count calculation issue // Which will use 0 when there are no loop count information metadata in GIF data NSUInteger loopCount = [SDImageGIFCoder imageLoopCountWithSource:imageSource]; [self setProperty:NSImageLoopCount withValue:@(loopCount)]; - } else if (CFStringCompare(type, kUTTypePNG, 0) == kCFCompareEqualTo) { + } else if (CFStringCompare(type, kSDUTTypePNG, 0) == kCFCompareEqualTo) { // APNG // Do initialize about frame count, current frame/duration and loop count [self setProperty:NSImageFrameCount withValue:@(frameCount)]; @@ -100,10 +106,10 @@ - (void)setProperty:(NSBitmapImageRepPropertyKey)property withValue:(id)value { } NSUInteger index = [value unsignedIntegerValue]; NSTimeInterval frameDuration = 0; - if (CFStringCompare(type, kUTTypeGIF, 0) == kCFCompareEqualTo) { + if (CFStringCompare(type, kSDUTTypeGIF, 0) == kCFCompareEqualTo) { // GIF frameDuration = [SDImageGIFCoder frameDurationAtIndex:index source:imageSource]; - } else if (CFStringCompare(type, kUTTypePNG, 0) == kCFCompareEqualTo) { + } else if (CFStringCompare(type, kSDUTTypePNG, 0) == kCFCompareEqualTo) { // APNG frameDuration = [SDImageAPNGCoder frameDurationAtIndex:index source:imageSource]; } else if (CFStringCompare(type, kSDUTTypeHEICS, 0) == kCFCompareEqualTo) { diff --git a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageAPNGCoder.m b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageAPNGCoder.m index 6581f30dce..b262bd3b33 100644 --- a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageAPNGCoder.m +++ b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageAPNGCoder.m @@ -7,6 +7,7 @@ */ #import "SDImageAPNGCoder.h" +#import "SDImageIOAnimatedCoderInternal.h" #if SD_MAC #import #else @@ -31,7 +32,7 @@ + (SDImageFormat)imageFormat { } + (NSString *)imageUTType { - return (__bridge NSString *)kUTTypePNG; + return (__bridge NSString *)kSDUTTypePNG; } + (NSString *)dictionaryProperty { diff --git a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageCache.m b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageCache.m index c1f99a8995..adb886dbb4 100644 --- a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageCache.m +++ b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageCache.m @@ -382,6 +382,28 @@ - (nullable UIImage *)imageFromCacheForKey:(nullable NSString *)key { - (nullable UIImage *)imageFromCacheForKey:(nullable NSString *)key options:(SDImageCacheOptions)options context:(nullable SDWebImageContext *)context { // First check the in-memory cache... UIImage *image = [self imageFromMemoryCacheForKey:key]; + if (image) { + if (options & SDImageCacheDecodeFirstFrameOnly) { + // Ensure static image + Class animatedImageClass = image.class; + if (image.sd_isAnimated || ([animatedImageClass isSubclassOfClass:[UIImage class]] && [animatedImageClass conformsToProtocol:@protocol(SDAnimatedImage)])) { +#if SD_MAC + image = [[NSImage alloc] initWithCGImage:image.CGImage scale:image.scale orientation:kCGImagePropertyOrientationUp]; +#else + image = [[UIImage alloc] initWithCGImage:image.CGImage scale:image.scale orientation:image.imageOrientation]; +#endif + } + } else if (options & SDImageCacheMatchAnimatedImageClass) { + // Check image class matching + Class animatedImageClass = image.class; + Class desiredImageClass = context[SDWebImageContextAnimatedImageClass]; + if (desiredImageClass && ![animatedImageClass isSubclassOfClass:desiredImageClass]) { + image = nil; + } + } + } + + // Since we don't need to query imageData, return image if exist if (image) { return image; } diff --git a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageCacheConfig.h b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageCacheConfig.h index f2d19203d1..468fa09ec0 100644 --- a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageCacheConfig.h +++ b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageCacheConfig.h @@ -57,7 +57,8 @@ typedef NS_ENUM(NSUInteger, SDImageCacheConfigExpireType) { /* * The option to control weak memory cache for images. When enable, `SDImageCache`'s memory cache will use a weak maptable to store the image at the same time when it stored to memory, and get removed at the same time. * However when memory warning is triggered, since the weak maptable does not hold a strong reference to image instance, even when the memory cache itself is purged, some images which are held strongly by UIImageViews or other live instances can be recovered again, to avoid later re-query from disk cache or network. This may be helpful for the case, for example, when app enter background and memory is purged, cause cell flashing after re-enter foreground. - * Defaults to YES. You can change this option dynamically. + * When enabling this option, we will sync back the image from weak maptable to strong cache during next time top level `sd_setImage` function call. + * Defaults to NO (YES before 5.12.0 version). You can change this option dynamically. */ @property (assign, nonatomic) BOOL shouldUseWeakMemoryCache; diff --git a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageCacheConfig.m b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageCacheConfig.m index ad5bcaadd7..fc0228595e 100644 --- a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageCacheConfig.m +++ b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageCacheConfig.m @@ -27,7 +27,7 @@ - (instancetype)init { if (self = [super init]) { _shouldDisableiCloud = YES; _shouldCacheImagesInMemory = YES; - _shouldUseWeakMemoryCache = YES; + _shouldUseWeakMemoryCache = NO; _shouldRemoveExpiredDataWhenEnterBackground = YES; _shouldRemoveExpiredDataWhenTerminate = YES; _diskCacheReadingOptions = 0; diff --git a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageCoderHelper.m b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageCoderHelper.m index 4244a92432..95a9500038 100644 --- a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageCoderHelper.m +++ b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageCoderHelper.m @@ -57,12 +57,12 @@ + (UIImage *)animatedImageWithFrames:(NSArray *)frames { durations[i] = frames[i].duration * 1000; } NSUInteger const gcd = gcdArray(frameCount, durations); - __block NSUInteger totalDuration = 0; + __block NSTimeInterval totalDuration = 0; NSMutableArray *animatedImages = [NSMutableArray arrayWithCapacity:frameCount]; [frames enumerateObjectsUsingBlock:^(SDImageFrame * _Nonnull frame, NSUInteger idx, BOOL * _Nonnull stop) { UIImage *image = frame.image; NSUInteger duration = frame.duration * 1000; - totalDuration += duration; + totalDuration += frame.duration; NSUInteger repeatCount; if (gcd) { repeatCount = duration / gcd; @@ -74,7 +74,7 @@ + (UIImage *)animatedImageWithFrames:(NSArray *)frames { } }]; - animatedImage = [UIImage animatedImageWithImages:animatedImages duration:totalDuration / 1000.f]; + animatedImage = [UIImage animatedImageWithImages:animatedImages duration:totalDuration]; #else @@ -135,7 +135,6 @@ + (UIImage *)animatedImageWithFrames:(NSArray *)frames { avgDuration = 0.1; // if it's a animated image but no duration, set it to default 100ms (this do not have that 10ms limit like GIF or WebP to allow custom coder provide the limit) } - __block NSUInteger index = 0; __block NSUInteger repeatCount = 1; __block UIImage *previousImage = animatedImages.firstObject; [animatedImages enumerateObjectsUsingBlock:^(UIImage * _Nonnull image, NSUInteger idx, BOOL * _Nonnull stop) { @@ -149,15 +148,12 @@ + (UIImage *)animatedImageWithFrames:(NSArray *)frames { SDImageFrame *frame = [SDImageFrame frameWithImage:previousImage duration:avgDuration * repeatCount]; [frames addObject:frame]; repeatCount = 1; - index++; } previousImage = image; - // last one - if (idx == frameCount - 1) { - SDImageFrame *frame = [SDImageFrame frameWithImage:previousImage duration:avgDuration * repeatCount]; - [frames addObject:frame]; - } }]; + // last one + SDImageFrame *frame = [SDImageFrame frameWithImage:previousImage duration:avgDuration * repeatCount]; + [frames addObject:frame]; #else @@ -452,7 +448,7 @@ + (UIImage *)decodedAndScaledDownImageWithImage:(UIImage *)image limitBytes:(NSU float dify = destTile.size.height; destTile.size.height = CGImageGetHeight( sourceTileImageRef ) * imageScale; dify -= destTile.size.height; - destTile.origin.y += dify; + destTile.origin.y = MIN(0, destTile.origin.y + dify); } CGContextDrawImage( destContext, destTile, sourceTileImageRef ); CGImageRelease( sourceTileImageRef ); diff --git a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageGIFCoder.m b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageGIFCoder.m index e4aaa5d9f5..a1838b1688 100644 --- a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageGIFCoder.m +++ b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageGIFCoder.m @@ -7,6 +7,7 @@ */ #import "SDImageGIFCoder.h" +#import "SDImageIOAnimatedCoderInternal.h" #if SD_MAC #import #else @@ -31,7 +32,7 @@ + (SDImageFormat)imageFormat { } + (NSString *)imageUTType { - return (__bridge NSString *)kUTTypeGIF; + return (__bridge NSString *)kSDUTTypeGIF; } + (NSString *)dictionaryProperty { diff --git a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageIOAnimatedCoder.h b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageIOAnimatedCoder.h index 3f4149a440..a314c57a50 100644 --- a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageIOAnimatedCoder.h +++ b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageIOAnimatedCoder.h @@ -24,7 +24,7 @@ */ @property (class, readonly) SDImageFormat imageFormat; /** - The supported image format UTI Type. Such as `kUTTypeGIF`. + The supported image format UTI Type. Such as `kSDUTTypeGIF`. This can be used for cases when we can not detect `SDImageFormat. Such as progressive decoding's hint format `kCGImageSourceTypeIdentifierHint`. @note Subclass override. */ diff --git a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageIOAnimatedCoder.m b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageIOAnimatedCoder.m index bcb79c75b2..a7e08c19f3 100644 --- a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageIOAnimatedCoder.m +++ b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageIOAnimatedCoder.m @@ -191,8 +191,8 @@ + (UIImage *)createFrameAtIndex:(NSUInteger)index source:(CGImageSourceRef)sourc // Some options need to pass to `CGImageSourceCopyPropertiesAtIndex` before `CGImageSourceCreateImageAtIndex`, or ImageIO will ignore them because they parse once :) // Parse the image properties NSDictionary *properties = (__bridge_transfer NSDictionary *)CGImageSourceCopyPropertiesAtIndex(source, index, (__bridge CFDictionaryRef)options); - NSUInteger pixelWidth = [properties[(__bridge NSString *)kCGImagePropertyPixelWidth] unsignedIntegerValue]; - NSUInteger pixelHeight = [properties[(__bridge NSString *)kCGImagePropertyPixelHeight] unsignedIntegerValue]; + CGFloat pixelWidth = [properties[(__bridge NSString *)kCGImagePropertyPixelWidth] doubleValue]; + CGFloat pixelHeight = [properties[(__bridge NSString *)kCGImagePropertyPixelHeight] doubleValue]; CGImagePropertyOrientation exifOrientation = (CGImagePropertyOrientation)[properties[(__bridge NSString *)kCGImagePropertyOrientation] unsignedIntegerValue]; if (!exifOrientation) { exifOrientation = kCGImagePropertyOrientationUp; @@ -496,8 +496,8 @@ - (NSData *)encodedDataWithImage:(UIImage *)image format:(SDImageFormat)format o maxPixelSize = maxPixelSizeValue.CGSizeValue; #endif } - NSUInteger pixelWidth = CGImageGetWidth(imageRef); - NSUInteger pixelHeight = CGImageGetHeight(imageRef); + CGFloat pixelWidth = (CGFloat)CGImageGetWidth(imageRef); + CGFloat pixelHeight = (CGFloat)CGImageGetHeight(imageRef); CGFloat finalPixelSize = 0; if (maxPixelSize.width > 0 && maxPixelSize.height > 0 && pixelWidth > maxPixelSize.width && pixelHeight > maxPixelSize.height) { CGFloat pixelRatio = pixelWidth / pixelHeight; diff --git a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageIOCoder.m b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageIOCoder.m index d858125dc0..8e1199f4e6 100644 --- a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageIOCoder.m +++ b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageIOCoder.m @@ -250,8 +250,8 @@ - (NSData *)encodedDataWithImage:(UIImage *)image format:(SDImageFormat)format o maxPixelSize = maxPixelSizeValue.CGSizeValue; #endif } - NSUInteger pixelWidth = CGImageGetWidth(imageRef); - NSUInteger pixelHeight = CGImageGetHeight(imageRef); + CGFloat pixelWidth = (CGFloat)CGImageGetWidth(imageRef); + CGFloat pixelHeight = (CGFloat)CGImageGetHeight(imageRef); if (maxPixelSize.width > 0 && maxPixelSize.height > 0 && pixelWidth > maxPixelSize.width && pixelHeight > maxPixelSize.height) { CGFloat pixelRatio = pixelWidth / pixelHeight; CGFloat maxPixelSizeRatio = maxPixelSize.width / maxPixelSize.height; diff --git a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageLoadersManager.m b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageLoadersManager.m index eae906f214..ac86c29da7 100644 --- a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageLoadersManager.m +++ b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDImageLoadersManager.m @@ -78,10 +78,20 @@ - (void)removeLoader:(id)loader { #pragma mark - SDImageLoader - (BOOL)canRequestImageForURL:(nullable NSURL *)url { + return [self canRequestImageForURL:url options:0 context:nil]; +} + +- (BOOL)canRequestImageForURL:(NSURL *)url options:(SDWebImageOptions)options context:(SDWebImageContext *)context { NSArray> *loaders = self.loaders; for (id loader in loaders.reverseObjectEnumerator) { - if ([loader canRequestImageForURL:url]) { - return YES; + if ([loader respondsToSelector:@selector(canRequestImageForURL:options:context:)]) { + if ([loader canRequestImageForURL:url options:options context:context]) { + return YES; + } + } else { + if ([loader canRequestImageForURL:url]) { + return YES; + } } } return NO; diff --git a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloader.h b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloader.h index 49ecd5d369..a2f50f46a8 100644 --- a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloader.h +++ b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloader.h @@ -157,7 +157,7 @@ typedef SDImageLoaderCompletedBlock SDWebImageDownloaderCompletedBlock; /** * Set the response modifier to modify the original download response during image load. - * This request modifier method will be called for each downloading image response. Return the original response means no modification. Return nil will mark current download as cancelled. + * This response modifier method will be called for each downloading image response. Return the original response means no modification. Return nil will mark current download as cancelled. * Defaults to nil, means does not modify the original download response. * @note If you want to modify single response, consider using `SDWebImageContextDownloadResponseModifier` context option. */ diff --git a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloader.m b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloader.m index 2eeb05e4e1..cd6b7966ba 100644 --- a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloader.m +++ b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloader.m @@ -349,6 +349,14 @@ - (nullable SDWebImageDownloadToken *)downloadImageWithURL:(nullable NSURL *)url operation.minimumProgressInterval = MIN(MAX(self.config.minimumProgressInterval, 0), 1); } + if ([operation respondsToSelector:@selector(setAcceptableStatusCodes:)]) { + operation.acceptableStatusCodes = self.config.acceptableStatusCodes; + } + + if ([operation respondsToSelector:@selector(setAcceptableContentTypes:)]) { + operation.acceptableContentTypes = self.config.acceptableContentTypes; + } + if (options & SDWebImageDownloaderHighPriority) { operation.queuePriority = NSOperationQueuePriorityHigh; } else if (options & SDWebImageDownloaderLowPriority) { diff --git a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderConfig.h b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderConfig.h index 5a8cf58392..9d5e67bf74 100644 --- a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderConfig.h +++ b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderConfig.h @@ -95,4 +95,19 @@ typedef NS_ENUM(NSInteger, SDWebImageDownloaderExecutionOrder) { */ @property (nonatomic, copy, nullable) NSString *password; +/** + * Set the acceptable HTTP Response status code. The status code which beyond the range will mark the download operation failed. + * For example, if we config [200, 400) but server response is 503, the download will fail with error code `SDWebImageErrorInvalidDownloadStatusCode`. + * Defaults to [200,400). Nil means no validation at all. + */ +@property (nonatomic, copy, nullable) NSIndexSet *acceptableStatusCodes; + +/** + * Set the acceptable HTTP Response content type. The content type beyond the set will mark the download operation failed. + * For example, if we config ["image/png"] but server response is "application/json", the download will fail with error code `SDWebImageErrorInvalidDownloadContentType`. + * Normally you don't need this for image format detection because we use image's data file signature magic bytes: https://en.wikipedia.org/wiki/List_of_file_signatures + * Defaults to nil. Nil means no validation at all. + */ +@property (nonatomic, copy, nullable) NSSet *acceptableContentTypes; + @end diff --git a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderConfig.m b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderConfig.m index 1fc93308a0..6120bd8a99 100644 --- a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderConfig.m +++ b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderConfig.m @@ -26,6 +26,7 @@ - (instancetype)init { _maxConcurrentDownloads = 6; _downloadTimeout = 15.0; _executionOrder = SDWebImageDownloaderFIFOExecutionOrder; + _acceptableStatusCodes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(200, 100)]; } return self; } @@ -41,6 +42,8 @@ - (id)copyWithZone:(NSZone *)zone { config.urlCredential = self.urlCredential; config.username = self.username; config.password = self.password; + config.acceptableStatusCodes = self.acceptableStatusCodes; + config.acceptableContentTypes = self.acceptableContentTypes; return config; } diff --git a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.h b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.h index 5fc1928907..1cd2a50dc3 100644 --- a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.h +++ b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.h @@ -37,8 +37,12 @@ @optional @property (strong, nonatomic, readonly, nullable) NSURLSessionTask *dataTask; @property (strong, nonatomic, readonly, nullable) NSURLSessionTaskMetrics *metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0)); + +// These operation-level config was inherited from downloader. See `SDWebImageDownloaderConfig` for documentation. @property (strong, nonatomic, nullable) NSURLCredential *credential; @property (assign, nonatomic) double minimumProgressInterval; +@property (copy, nonatomic, nullable) NSIndexSet *acceptableStatusCodes; +@property (copy, nonatomic, nullable) NSSet *acceptableContentTypes; @end @@ -85,6 +89,21 @@ */ @property (assign, nonatomic) double minimumProgressInterval; +/** + * Set the acceptable HTTP Response status code. The status code which beyond the range will mark the download operation failed. + * For example, if we config [200, 400) but server response is 503, the download will fail with error code `SDWebImageErrorInvalidDownloadStatusCode`. + * Defaults to [200,400). Nil means no validation at all. + */ +@property (copy, nonatomic, nullable) NSIndexSet *acceptableStatusCodes; + +/** + * Set the acceptable HTTP Response content type. The content type beyond the set will mark the download operation failed. + * For example, if we config ["image/png"] but server response is "application/json", the download will fail with error code `SDWebImageErrorInvalidDownloadContentType`. + * Normally you don't need this for image format detection because we use image's data file signature magic bytes: https://en.wikipedia.org/wiki/List_of_file_signatures + * Defaults to nil. Nil means no validation at all. + */ +@property (copy, nonatomic, nullable) NSSet *acceptableContentTypes; + /** * The options for the receiver. */ diff --git a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.m b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.m index 1de1e7e951..6df031973f 100644 --- a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.m +++ b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.m @@ -191,6 +191,7 @@ - (void)start { } if (cachedResponse) { self.cachedData = cachedResponse.data; + self.response = cachedResponse.response; } } @@ -323,7 +324,9 @@ - (void)URLSession:(NSURLSession *)session response = [self.responseModifier modifiedResponseWithResponse:response]; if (!response) { valid = NO; - self.responseError = [NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorInvalidDownloadResponse userInfo:@{NSLocalizedDescriptionKey : @"Download marked as failed because response is nil"}]; + self.responseError = [NSError errorWithDomain:SDWebImageErrorDomain + code:SDWebImageErrorInvalidDownloadResponse + userInfo:@{NSLocalizedDescriptionKey : @"Download marked as failed because response is nil"}]; } } @@ -332,18 +335,42 @@ - (void)URLSession:(NSURLSession *)session self.expectedSize = expected; self.response = response; - NSInteger statusCode = [response respondsToSelector:@selector(statusCode)] ? ((NSHTTPURLResponse *)response).statusCode : 200; - // Status code should between [200,400) - BOOL statusCodeValid = statusCode >= 200 && statusCode < 400; + // Check status code valid (defaults [200,400)) + NSInteger statusCode = [response isKindOfClass:NSHTTPURLResponse.class] ? ((NSHTTPURLResponse *)response).statusCode : 0; + BOOL statusCodeValid = YES; + if (valid && statusCode > 0 && self.acceptableStatusCodes) { + statusCodeValid = [self.acceptableStatusCodes containsIndex:statusCode]; + } if (!statusCodeValid) { valid = NO; - self.responseError = [NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorInvalidDownloadStatusCode userInfo:@{NSLocalizedDescriptionKey : @"Download marked as failed because response status code is not in 200-400", SDWebImageErrorDownloadStatusCodeKey : @(statusCode)}]; + self.responseError = [NSError errorWithDomain:SDWebImageErrorDomain + code:SDWebImageErrorInvalidDownloadStatusCode + userInfo:@{NSLocalizedDescriptionKey : [NSString stringWithFormat:@"Download marked as failed because of invalid response status code %ld", (long)statusCode], + SDWebImageErrorDownloadStatusCodeKey : @(statusCode), + SDWebImageErrorDownloadResponseKey : response}]; + } + // Check content type valid (defaults nil) + NSString *contentType = [response isKindOfClass:NSHTTPURLResponse.class] ? ((NSHTTPURLResponse *)response).MIMEType : nil; + BOOL contentTypeValid = YES; + if (valid && contentType.length > 0 && self.acceptableContentTypes) { + contentTypeValid = [self.acceptableContentTypes containsObject:contentType]; + } + if (!contentTypeValid) { + valid = NO; + self.responseError = [NSError errorWithDomain:SDWebImageErrorDomain + code:SDWebImageErrorInvalidDownloadContentType + userInfo:@{NSLocalizedDescriptionKey : [NSString stringWithFormat:@"Download marked as failed because of invalid response content type %@", contentType], + SDWebImageErrorDownloadContentTypeKey : contentType, + SDWebImageErrorDownloadResponseKey : response}]; } //'304 Not Modified' is an exceptional one //URLSession current behavior will return 200 status code when the server respond 304 and URLCache hit. But this is not a standard behavior and we just add a check - if (statusCode == 304 && !self.cachedData) { + if (valid && statusCode == 304 && !self.cachedData) { valid = NO; - self.responseError = [NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorCacheNotModified userInfo:@{NSLocalizedDescriptionKey : @"Download response status code is 304 not modified and ignored"}]; + self.responseError = [NSError errorWithDomain:SDWebImageErrorDomain + code:SDWebImageErrorCacheNotModified + userInfo:@{NSLocalizedDescriptionKey: @"Download response status code is 304 not modified and ignored", + SDWebImageErrorDownloadResponseKey : response}]; } if (valid) { @@ -396,7 +423,7 @@ - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)data // Progressive decoding Only decode partial image, full image in `URLSession:task:didCompleteWithError:` if (supportProgressive && !finished) { // Get the image data - NSData *imageData = [self.imageData copy]; + NSData *imageData = self.imageData; // keep maximum one progressive decode process during download if (self.coderQueue.operationCount == 0) { @@ -476,7 +503,10 @@ - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didComp * then we should check if the cached data is equal to image data */ if (self.options & SDWebImageDownloaderIgnoreCachedResponse && [self.cachedData isEqualToData:imageData]) { - self.responseError = [NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorCacheNotModified userInfo:@{NSLocalizedDescriptionKey : @"Downloaded image is not modified and ignored"}]; + self.responseError = [NSError errorWithDomain:SDWebImageErrorDomain + code:SDWebImageErrorCacheNotModified + userInfo:@{NSLocalizedDescriptionKey : @"Downloaded image is not modified and ignored", + SDWebImageErrorDownloadResponseKey : self.response}]; // call completion block with not modified error [self callCompletionBlocksWithError:self.responseError]; [self done]; @@ -535,7 +565,9 @@ - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didRece credential = self.credential; disposition = NSURLSessionAuthChallengeUseCredential; } else { - disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge; + // Web Server like Nginx can set `ssl_verify_client` to optional but not always on + // We'd better use default handling here + disposition = NSURLSessionAuthChallengePerformDefaultHandling; } } else { disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge; diff --git a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDWebImageError.h b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDWebImageError.h index 2b412010fd..bb91d0bd02 100644 --- a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDWebImageError.h +++ b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDWebImageError.h @@ -11,8 +11,12 @@ FOUNDATION_EXPORT NSErrorDomain const _Nonnull SDWebImageErrorDomain; +/// The response instance for invalid download response (NSURLResponse *) +FOUNDATION_EXPORT NSErrorUserInfoKey const _Nonnull SDWebImageErrorDownloadResponseKey; /// The HTTP status code for invalid download response (NSNumber *) FOUNDATION_EXPORT NSErrorUserInfoKey const _Nonnull SDWebImageErrorDownloadStatusCodeKey; +/// The HTTP MIME content type for invalid download response (NSString *) +FOUNDATION_EXPORT NSErrorUserInfoKey const _Nonnull SDWebImageErrorDownloadContentTypeKey; /// SDWebImage error domain and codes typedef NS_ERROR_ENUM(SDWebImageErrorDomain, SDWebImageError) { @@ -24,4 +28,5 @@ typedef NS_ERROR_ENUM(SDWebImageErrorDomain, SDWebImageError) { SDWebImageErrorInvalidDownloadStatusCode = 2001, // The image download response a invalid status code. You can check the status code in error's userInfo under `SDWebImageErrorDownloadStatusCodeKey` SDWebImageErrorCancelled = 2002, // The image loading operation is cancelled before finished, during either async disk cache query, or waiting before actual network request. For actual network request error, check `NSURLErrorDomain` error domain and code. SDWebImageErrorInvalidDownloadResponse = 2003, // When using response modifier, the modified download response is nil and marked as failed. + SDWebImageErrorInvalidDownloadContentType = 2004, // The image download response a invalid content type. You can check the MIME content type in error's userInfo under `SDWebImageErrorDownloadContentTypeKey` }; diff --git a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDWebImageError.m b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDWebImageError.m index 6d17476972..bd0d17ad90 100644 --- a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDWebImageError.m +++ b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/SDWebImageError.m @@ -10,4 +10,7 @@ #import "SDWebImageError.h" NSErrorDomain const _Nonnull SDWebImageErrorDomain = @"SDWebImageErrorDomain"; + +NSErrorUserInfoKey const _Nonnull SDWebImageErrorDownloadResponseKey = @"SDWebImageErrorDownloadResponseKey"; NSErrorUserInfoKey const _Nonnull SDWebImageErrorDownloadStatusCodeKey = @"SDWebImageErrorDownloadStatusCodeKey"; +NSErrorUserInfoKey const _Nonnull SDWebImageErrorDownloadContentTypeKey = @"SDWebImageErrorDownloadContentTypeKey"; diff --git a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/UIImage+MemoryCacheCost.m b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/UIImage+MemoryCacheCost.m index b0883b1fa8..b9365009b6 100644 --- a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/UIImage+MemoryCacheCost.m +++ b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/UIImage+MemoryCacheCost.m @@ -20,7 +20,8 @@ FOUNDATION_STATIC_INLINE NSUInteger SDMemoryCacheCostForImage(UIImage *image) { #if SD_MAC frameCount = 1; #elif SD_UIKIT || SD_WATCH - frameCount = image.images.count > 0 ? image.images.count : 1; + // Filter the same frame in `_UIAnimatedImage`. + frameCount = image.images.count > 1 ? [NSSet setWithArray:image.images].count : 1; #endif NSUInteger cost = bytesPerFrame * frameCount; return cost; diff --git a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.h b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.h index 8328c261ea..6a278e2e40 100644 --- a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.h +++ b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.h @@ -20,12 +20,23 @@ * For animated image format, 0 means infinite looping. * Note that because of the limitations of categories this property can get out of sync if you create another instance with CGImage or other methods. * AppKit: - * NSImage currently only support animated via GIF imageRep unlike UIImage. - * The getter of this property will get the loop count from GIF imageRep - * The setter of this property will set the loop count from GIF imageRep + * NSImage currently only support animated via `NSBitmapImageRep`(GIF) or `SDAnimatedImageRep`(APNG/GIF/WebP) unlike UIImage. + * The getter of this property will get the loop count from animated imageRep + * The setter of this property will set the loop count from animated imageRep */ @property (nonatomic, assign) NSUInteger sd_imageLoopCount; +/** + * UIKit: + * Returns the `images`'s count by unapply the patch for the different frame durations. Which matches the real visible frame count when displaying on UIImageView. + * See more in `SDImageCoderHelper.animatedImageWithFrames`. + * Returns 1 for static image. + * AppKit: + * Returns the underlaying `NSBitmapImageRep` or `SDAnimatedImageRep` frame count. + * Returns 1 for static image. + */ +@property (nonatomic, assign, readonly) NSUInteger sd_imageFrameCount; + /** * UIKit: * Check the `images` array property. diff --git a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.m b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.m index 09724236e1..b8f4fd82aa 100644 --- a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.m +++ b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.m @@ -29,6 +29,32 @@ - (void)setSd_imageLoopCount:(NSUInteger)sd_imageLoopCount { objc_setAssociatedObject(self, @selector(sd_imageLoopCount), value, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } +- (NSUInteger)sd_imageFrameCount { + NSArray *animatedImages = self.images; + if (!animatedImages || animatedImages.count <= 1) { + return 1; + } + NSNumber *value = objc_getAssociatedObject(self, @selector(sd_imageFrameCount)); + if ([value isKindOfClass:[NSNumber class]]) { + return [value unsignedIntegerValue]; + } + __block NSUInteger frameCount = 1; + __block UIImage *previousImage = animatedImages.firstObject; + [animatedImages enumerateObjectsUsingBlock:^(UIImage * _Nonnull image, NSUInteger idx, BOOL * _Nonnull stop) { + // ignore first + if (idx == 0) { + return; + } + if (![image isEqual:previousImage]) { + frameCount++; + } + previousImage = image; + }]; + objc_setAssociatedObject(self, @selector(sd_imageFrameCount), @(frameCount), OBJC_ASSOCIATION_RETAIN_NONATOMIC); + + return frameCount; +} + - (BOOL)sd_isAnimated { return (self.images != nil); } @@ -87,6 +113,19 @@ - (void)setSd_imageLoopCount:(NSUInteger)sd_imageLoopCount { } } +- (NSUInteger)sd_imageFrameCount { + NSRect imageRect = NSMakeRect(0, 0, self.size.width, self.size.height); + NSImageRep *imageRep = [self bestRepresentationForRect:imageRect context:nil hints:nil]; + NSBitmapImageRep *bitmapImageRep; + if ([imageRep isKindOfClass:[NSBitmapImageRep class]]) { + bitmapImageRep = (NSBitmapImageRep *)imageRep; + } + if (bitmapImageRep) { + return [[bitmapImageRep valueForProperty:NSImageFrameCount] unsignedIntegerValue]; + } + return 1; +} + - (BOOL)sd_isAnimated { BOOL isAnimated = NO; NSRect imageRect = NSMakeRect(0, 0, self.size.width, self.size.height); diff --git a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/UIView+WebCache.m b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/UIView+WebCache.m index d559b4cc3b..35f10362f8 100644 --- a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/UIView+WebCache.m +++ b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Core/UIView+WebCache.m @@ -12,6 +12,7 @@ #import "SDWebImageError.h" #import "SDInternalMacros.h" #import "SDWebImageTransitionInternal.h" +#import "SDImageCache.h" const int64_t SDWebImageProgressUnitCountUnknown = 1LL; @@ -71,7 +72,28 @@ - (void)sd_internalSetImageWithURL:(nullable NSURL *)url [self sd_cancelImageLoadOperationWithKey:validOperationKey]; self.sd_imageURL = url; + SDWebImageManager *manager = context[SDWebImageContextCustomManager]; + if (!manager) { + manager = [SDWebImageManager sharedManager]; + } else { + // remove this manager to avoid retain cycle (manger -> loader -> operation -> context -> manager) + SDWebImageMutableContext *mutableContext = [context mutableCopy]; + mutableContext[SDWebImageContextCustomManager] = nil; + context = [mutableContext copy]; + } + + BOOL shouldUseWeakCache = NO; + if ([manager.imageCache isKindOfClass:SDImageCache.class]) { + shouldUseWeakCache = ((SDImageCache *)manager.imageCache).config.shouldUseWeakMemoryCache; + } if (!(options & SDWebImageDelayPlaceholder)) { + if (shouldUseWeakCache) { + NSString *key = [manager cacheKeyForURL:url context:context]; + // call memory cache to trigger weak cache sync logic, ignore the return value and go on normal query + // this unfortunately will cause twice memory cache query, but it's fast enough + // in the future the weak cache feature may be re-design or removed + [((SDImageCache *)manager.imageCache) imageFromMemoryCacheForKey:key]; + } dispatch_main_async_safe(^{ [self sd_setImage:placeholder imageData:nil basedOnClassOrViaCustomSetImageBlock:setImageBlock cacheType:SDImageCacheTypeNone imageURL:url]; }); @@ -90,15 +112,6 @@ - (void)sd_internalSetImageWithURL:(nullable NSURL *)url [self sd_startImageIndicator]; id imageIndicator = self.sd_imageIndicator; #endif - SDWebImageManager *manager = context[SDWebImageContextCustomManager]; - if (!manager) { - manager = [SDWebImageManager sharedManager]; - } else { - // remove this manager to avoid retain cycle (manger -> loader -> operation -> context -> manager) - SDWebImageMutableContext *mutableContext = [context mutableCopy]; - mutableContext[SDWebImageContextCustomManager] = nil; - context = [mutableContext copy]; - } SDImageLoaderProgressBlock combinedProgressBlock = ^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) { if (imageProgress) { @@ -283,7 +296,7 @@ - (void)sd_setImage:(UIImage *)image imageData:(NSData *)imageData basedOnClassO if (transition.prepares) { transition.prepares(view, image, imageData, cacheType, imageURL); } - } completion:^(BOOL finished) { + } completion:^(BOOL tempFinished) { [UIView transitionWithView:view duration:transition.duration options:transition.animationOptions animations:^{ if (!view.sd_latestOperationKey || ![originalOperationKey isEqualToString:view.sd_latestOperationKey]) { return; diff --git a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Private/SDDisplayLink.m b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Private/SDDisplayLink.m index 8ff0fc1604..1dcfd99fc8 100644 --- a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Private/SDDisplayLink.m +++ b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Private/SDDisplayLink.m @@ -89,7 +89,12 @@ - (CFTimeInterval)duration { #elif SD_IOS || SD_TV #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" - NSTimeInterval duration = self.displayLink.duration * self.displayLink.frameInterval; + NSTimeInterval duration = 0; + if (@available(iOS 10.0, tvOS 10.0, *)) { + duration = self.displayLink.targetTimestamp - CACurrentMediaTime(); + } else { + duration = self.displayLink.duration * self.displayLink.frameInterval; + } #pragma clang diagnostic pop #else NSTimeInterval duration = 0; @@ -98,7 +103,7 @@ - (CFTimeInterval)duration { duration = nextFireDate - self.currentFireDate; } #endif - if (duration == 0) { + if (duration <= 0) { duration = kSDDisplayLinkInterval; } return duration; diff --git a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Private/SDImageIOAnimatedCoderInternal.h b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Private/SDImageIOAnimatedCoderInternal.h index 022cf7dc71..f74be7e5a3 100644 --- a/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Private/SDImageIOAnimatedCoderInternal.h +++ b/iOS/MyStudies/Pods/SDWebImage/SDWebImage/Private/SDImageIOAnimatedCoderInternal.h @@ -10,12 +10,20 @@ #import "SDImageIOAnimatedCoder.h" // AVFileTypeHEIC/AVFileTypeHEIF is defined in AVFoundation via iOS 11, we use this without import AVFoundation -#define kSDUTTypeHEIC ((__bridge CFStringRef)@"public.heic") -#define kSDUTTypeHEIF ((__bridge CFStringRef)@"public.heif") +#define kSDUTTypeHEIC ((__bridge CFStringRef)@"public.heic") +#define kSDUTTypeHEIF ((__bridge CFStringRef)@"public.heif") // HEIC Sequence (Animated Image) #define kSDUTTypeHEICS ((__bridge CFStringRef)@"public.heics") -// kUTTypeWebP seems not defined in public UTI framework, Apple use the hardcode string, we define them :) -#define kSDUTTypeWebP ((__bridge CFStringRef)@"org.webmproject.webp") +// kSDUTTypeWebP seems not defined in public UTI framework, Apple use the hardcode string, we define them :) +#define kSDUTTypeWebP ((__bridge CFStringRef)@"org.webmproject.webp") + +#define kSDUTTypeImage ((__bridge CFStringRef)@"public.image") +#define kSDUTTypeJPEG ((__bridge CFStringRef)@"public.jpeg") +#define kSDUTTypePNG ((__bridge CFStringRef)@"public.png") +#define kSDUTTypeTIFF ((__bridge CFStringRef)@"public.tiff") +#define kSDUTTypeSVG ((__bridge CFStringRef)@"public.svg-image") +#define kSDUTTypeGIF ((__bridge CFStringRef)@"com.compuserve.gif") +#define kSDUTTypePDF ((__bridge CFStringRef)@"com.adobe.pdf") @interface SDImageIOAnimatedCoder () diff --git a/iOS/MyStudies/Pods/Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0.xcconfig b/iOS/MyStudies/Pods/Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0.xcconfig deleted file mode 100644 index b99dfd2f6b..0000000000 --- a/iOS/MyStudies/Pods/Target Support Files/ActionSheetPicker-3.0/ActionSheetPicker-3.0.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ActionSheetPicker-3.0 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "UIKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/ActionSheetPicker-3.0 -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iOS/MyStudies/Pods/Target Support Files/ActionSheetPicker-3.0/Info.plist b/iOS/MyStudies/Pods/Target Support Files/ActionSheetPicker-3.0/Info.plist deleted file mode 100644 index c054f9c1db..0000000000 --- a/iOS/MyStudies/Pods/Target Support Files/ActionSheetPicker-3.0/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 2.2.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/iOS/MyStudies/Pods/Target Support Files/Alamofire/Alamofire-Info.plist b/iOS/MyStudies/Pods/Target Support Files/Alamofire/Alamofire-Info.plist index f6f37a1a1d..0c02b2a651 100644 --- a/iOS/MyStudies/Pods/Target Support Files/Alamofire/Alamofire-Info.plist +++ b/iOS/MyStudies/Pods/Target Support Files/Alamofire/Alamofire-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 5.4.3 + 5.5.0 CFBundleSignature ???? CFBundleVersion diff --git a/iOS/MyStudies/Pods/Target Support Files/Alamofire/Alamofire.debug.xcconfig b/iOS/MyStudies/Pods/Target Support Files/Alamofire/Alamofire.debug.xcconfig index 9cd6be9b03..7d169c44f4 100644 --- a/iOS/MyStudies/Pods/Target Support Files/Alamofire/Alamofire.debug.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/Alamofire/Alamofire.debug.xcconfig @@ -1,6 +1,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Alamofire GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift OTHER_LDFLAGS = $(inherited) -framework "CFNetwork" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} diff --git a/iOS/MyStudies/Pods/Target Support Files/Alamofire/Alamofire.release.xcconfig b/iOS/MyStudies/Pods/Target Support Files/Alamofire/Alamofire.release.xcconfig index 9cd6be9b03..7d169c44f4 100644 --- a/iOS/MyStudies/Pods/Target Support Files/Alamofire/Alamofire.release.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/Alamofire/Alamofire.release.xcconfig @@ -1,6 +1,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Alamofire GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift OTHER_LDFLAGS = $(inherited) -framework "CFNetwork" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} diff --git a/iOS/MyStudies/Pods/Target Support Files/CryptoSwift/CryptoSwift-Info.plist b/iOS/MyStudies/Pods/Target Support Files/CryptoSwift/CryptoSwift-Info.plist index 7b6b52a408..4a95639e2d 100644 --- a/iOS/MyStudies/Pods/Target Support Files/CryptoSwift/CryptoSwift-Info.plist +++ b/iOS/MyStudies/Pods/Target Support Files/CryptoSwift/CryptoSwift-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 1.4.0 + 1.4.3 CFBundleSignature ???? CFBundleVersion diff --git a/iOS/MyStudies/Pods/Target Support Files/CryptoSwift/CryptoSwift.debug.xcconfig b/iOS/MyStudies/Pods/Target Support Files/CryptoSwift/CryptoSwift.debug.xcconfig index bcef6f0e1a..548e997830 100644 --- a/iOS/MyStudies/Pods/Target Support Files/CryptoSwift/CryptoSwift.debug.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/CryptoSwift/CryptoSwift.debug.xcconfig @@ -1,6 +1,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/iOS/MyStudies/Pods/Target Support Files/CryptoSwift/CryptoSwift.release.xcconfig b/iOS/MyStudies/Pods/Target Support Files/CryptoSwift/CryptoSwift.release.xcconfig index bcef6f0e1a..548e997830 100644 --- a/iOS/MyStudies/Pods/Target Support Files/CryptoSwift/CryptoSwift.release.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/CryptoSwift/CryptoSwift.release.xcconfig @@ -1,6 +1,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/iOS/MyStudies/Pods/Target Support Files/CryptoSwift/CryptoSwift.xcconfig b/iOS/MyStudies/Pods/Target Support Files/CryptoSwift/CryptoSwift.xcconfig deleted file mode 100644 index 2ba984e9fe..0000000000 --- a/iOS/MyStudies/Pods/Target Support Files/CryptoSwift/CryptoSwift.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/CryptoSwift -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iOS/MyStudies/Pods/Target Support Files/CryptoSwift/Info.plist b/iOS/MyStudies/Pods/Target Support Files/CryptoSwift/Info.plist deleted file mode 100644 index ee30d1bf76..0000000000 --- a/iOS/MyStudies/Pods/Target Support Files/CryptoSwift/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 0.7.2 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/iOS/MyStudies/Pods/Target Support Files/Firebase/Firebase.debug.xcconfig b/iOS/MyStudies/Pods/Target Support Files/Firebase/Firebase.debug.xcconfig index 2c497aabf5..7963a3254b 100644 --- a/iOS/MyStudies/Pods/Target Support Files/Firebase/Firebase.debug.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/Firebase/Firebase.debug.xcconfig @@ -1,9 +1,9 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Firebase -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseMessaging" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseMessaging" "${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/AdIdSupport" "${PODS_XCFRAMEWORKS_BUILD_DIR}/GoogleAppMeasurement/AdIdSupport" "${PODS_XCFRAMEWORKS_BUILD_DIR}/GoogleAppMeasurement/WithoutAdIdSupport" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Firebase" "${PODS_ROOT}/Headers/Public" -OTHER_LDFLAGS = $(inherited) -weak_framework "UserNotifications" +OTHER_LDFLAGS = $(inherited) -framework "StoreKit" -weak_framework "UserNotifications" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/iOS/MyStudies/Pods/Target Support Files/Firebase/Firebase.release.xcconfig b/iOS/MyStudies/Pods/Target Support Files/Firebase/Firebase.release.xcconfig index 2c497aabf5..7963a3254b 100644 --- a/iOS/MyStudies/Pods/Target Support Files/Firebase/Firebase.release.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/Firebase/Firebase.release.xcconfig @@ -1,9 +1,9 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Firebase -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseMessaging" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseMessaging" "${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/AdIdSupport" "${PODS_XCFRAMEWORKS_BUILD_DIR}/GoogleAppMeasurement/AdIdSupport" "${PODS_XCFRAMEWORKS_BUILD_DIR}/GoogleAppMeasurement/WithoutAdIdSupport" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Firebase" "${PODS_ROOT}/Headers/Public" -OTHER_LDFLAGS = $(inherited) -weak_framework "UserNotifications" +OTHER_LDFLAGS = $(inherited) -framework "StoreKit" -weak_framework "UserNotifications" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/iOS/MyStudies/Pods/Target Support Files/FirebaseAnalytics/FirebaseAnalytics-xcframeworks.sh b/iOS/MyStudies/Pods/Target Support Files/FirebaseAnalytics/FirebaseAnalytics-xcframeworks.sh new file mode 100755 index 0000000000..72456d2155 --- /dev/null +++ b/iOS/MyStudies/Pods/Target Support Files/FirebaseAnalytics/FirebaseAnalytics-xcframeworks.sh @@ -0,0 +1,109 @@ +#!/bin/sh +set -e +set -u +set -o pipefail + +function on_error { + echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" +} +trap 'on_error $LINENO' ERR + + +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + + +copy_dir() +{ + local source="$1" + local destination="$2" + + # Use filter instead of exclude so missing patterns don't throw errors. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" \"${source}*\" \"${destination}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" "${source}"/* "${destination}" +} + +SELECT_SLICE_RETVAL="" + +select_slice() { + local paths=("$@") + # Locate the correct slice of the .xcframework for the current architectures + local target_path="" + + # Split archs on space so we can find a slice that has all the needed archs + local target_archs=$(echo $ARCHS | tr " " "\n") + + local target_variant="" + if [[ "$PLATFORM_NAME" == *"simulator" ]]; then + target_variant="simulator" + fi + if [[ ! -z ${EFFECTIVE_PLATFORM_NAME+x} && "$EFFECTIVE_PLATFORM_NAME" == *"maccatalyst" ]]; then + target_variant="maccatalyst" + fi + for i in ${!paths[@]}; do + local matched_all_archs="1" + for target_arch in $target_archs + do + if ! [[ "${paths[$i]}" == *"$target_variant"* ]]; then + matched_all_archs="0" + break + fi + + # Verifies that the path contains the variant string (simulator or maccatalyst) if the variant is set. + if [[ -z "$target_variant" && ("${paths[$i]}" == *"simulator"* || "${paths[$i]}" == *"maccatalyst"*) ]]; then + matched_all_archs="0" + break + fi + + # This regex matches all possible variants of the arch in the folder name: + # Let's say the folder name is: ios-armv7_armv7s_arm64_arm64e/CoconutLib.framework + # We match the following: -armv7_, _armv7s_, _arm64_ and _arm64e/. + # If we have a specific variant: ios-i386_x86_64-simulator/CoconutLib.framework + # We match the following: -i386_ and _x86_64- + # When the .xcframework wraps a static library, the folder name does not include + # any .framework. In that case, the folder name can be: ios-arm64_armv7 + # We also match _armv7$ to handle that case. + local target_arch_regex="[_\-]${target_arch}([\/_\-]|$)" + if ! [[ "${paths[$i]}" =~ $target_arch_regex ]]; then + matched_all_archs="0" + break + fi + done + + if [[ "$matched_all_archs" == "1" ]]; then + # Found a matching slice + echo "Selected xcframework slice ${paths[$i]}" + SELECT_SLICE_RETVAL=${paths[$i]} + break + fi + done +} + +install_xcframework() { + local basepath="$1" + local name="$2" + local package_type="$3" + local paths=("${@:4}") + + # Locate the correct slice of the .xcframework for the current architectures + select_slice "${paths[@]}" + local target_path="$SELECT_SLICE_RETVAL" + if [[ -z "$target_path" ]]; then + echo "warning: [CP] Unable to find matching .xcframework slice in '${paths[@]}' for the current build architectures ($ARCHS)." + return + fi + local source="$basepath/$target_path" + + local destination="${PODS_XCFRAMEWORKS_BUILD_DIR}/${name}" + + if [ ! -d "$destination" ]; then + mkdir -p "$destination" + fi + + copy_dir "$source/" "$destination" + echo "Copied $source to $destination" +} + +install_xcframework "${PODS_ROOT}/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework" "FirebaseAnalytics/AdIdSupport" "framework" "ios-arm64_i386_x86_64-simulator" "ios-arm64_armv7" "ios-arm64_x86_64-maccatalyst" + diff --git a/iOS/MyStudies/Pods/Target Support Files/FirebaseAnalytics/FirebaseAnalytics.debug.xcconfig b/iOS/MyStudies/Pods/Target Support Files/FirebaseAnalytics/FirebaseAnalytics.debug.xcconfig new file mode 100644 index 0000000000..cf971beaa2 --- /dev/null +++ b/iOS/MyStudies/Pods/Target Support Files/FirebaseAnalytics/FirebaseAnalytics.debug.xcconfig @@ -0,0 +1,13 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAnalytics +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${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" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" "${PODS_XCFRAMEWORKS_BUILD_DIR}/FirebaseAnalytics/AdIdSupport" "${PODS_XCFRAMEWORKS_BUILD_DIR}/GoogleAppMeasurement/AdIdSupport" "${PODS_XCFRAMEWORKS_BUILD_DIR}/GoogleAppMeasurement/WithoutAdIdSupport" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -l"c++" -l"sqlite3" -l"z" -framework "StoreKit" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseAnalytics +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 diff --git a/iOS/MyStudies/Pods/Target Support Files/FirebaseAnalytics/FirebaseAnalytics.release.xcconfig b/iOS/MyStudies/Pods/Target Support Files/FirebaseAnalytics/FirebaseAnalytics.release.xcconfig new file mode 100644 index 0000000000..cf971beaa2 --- /dev/null +++ b/iOS/MyStudies/Pods/Target Support Files/FirebaseAnalytics/FirebaseAnalytics.release.xcconfig @@ -0,0 +1,13 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAnalytics +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${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" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" "${PODS_XCFRAMEWORKS_BUILD_DIR}/FirebaseAnalytics/AdIdSupport" "${PODS_XCFRAMEWORKS_BUILD_DIR}/GoogleAppMeasurement/AdIdSupport" "${PODS_XCFRAMEWORKS_BUILD_DIR}/GoogleAppMeasurement/WithoutAdIdSupport" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -l"c++" -l"sqlite3" -l"z" -framework "StoreKit" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseAnalytics +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 diff --git a/iOS/MyStudies/Pods/Target Support Files/FirebaseCore/FirebaseCore-Info.plist b/iOS/MyStudies/Pods/Target Support Files/FirebaseCore/FirebaseCore-Info.plist index b117b5cb51..959cdc5cda 100644 --- a/iOS/MyStudies/Pods/Target Support Files/FirebaseCore/FirebaseCore-Info.plist +++ b/iOS/MyStudies/Pods/Target Support Files/FirebaseCore/FirebaseCore-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 8.4.0 + 8.12.1 CFBundleSignature ???? CFBundleVersion diff --git a/iOS/MyStudies/Pods/Target Support Files/FirebaseCore/FirebaseCore.debug.xcconfig b/iOS/MyStudies/Pods/Target Support Files/FirebaseCore/FirebaseCore.debug.xcconfig index 3fbdef1dbb..a9754523e5 100644 --- a/iOS/MyStudies/Pods/Target Support Files/FirebaseCore/FirebaseCore.debug.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/FirebaseCore/FirebaseCore.debug.xcconfig @@ -2,10 +2,10 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 Firebase_VERSION=8.4.0 +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 Firebase_VERSION=8.12.1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}" OTHER_CFLAGS = $(inherited) -fno-autolink -OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "UIKit" +OTHER_LDFLAGS = $(inherited) -framework "FirebaseCoreDiagnostics" -framework "Foundation" -framework "GoogleUtilities" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/iOS/MyStudies/Pods/Target Support Files/FirebaseCore/FirebaseCore.release.xcconfig b/iOS/MyStudies/Pods/Target Support Files/FirebaseCore/FirebaseCore.release.xcconfig index 3fbdef1dbb..a9754523e5 100644 --- a/iOS/MyStudies/Pods/Target Support Files/FirebaseCore/FirebaseCore.release.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/FirebaseCore/FirebaseCore.release.xcconfig @@ -2,10 +2,10 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 Firebase_VERSION=8.4.0 +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 Firebase_VERSION=8.12.1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}" OTHER_CFLAGS = $(inherited) -fno-autolink -OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "UIKit" +OTHER_LDFLAGS = $(inherited) -framework "FirebaseCoreDiagnostics" -framework "Foundation" -framework "GoogleUtilities" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/iOS/MyStudies/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-Info.plist b/iOS/MyStudies/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-Info.plist index b117b5cb51..1b2fa75ce7 100644 --- a/iOS/MyStudies/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-Info.plist +++ b/iOS/MyStudies/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 8.4.0 + 8.12.0 CFBundleSignature ???? CFBundleVersion diff --git a/iOS/MyStudies/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.debug.xcconfig b/iOS/MyStudies/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.debug.xcconfig index 815f0d67a5..e5b1e9afa8 100644 --- a/iOS/MyStudies/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.debug.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.debug.xcconfig @@ -6,7 +6,7 @@ GCC_C_LANGUAGE_STANDARD = c99 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 GCC_TREAT_WARNINGS_AS_ERRORS = YES HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}" -OTHER_LDFLAGS = $(inherited) -framework "Foundation" +OTHER_LDFLAGS = $(inherited) -framework "CoreTelephony" -framework "Foundation" -framework "GoogleDataTransport" -framework "GoogleUtilities" -framework "Security" -framework "SystemConfiguration" -framework "nanopb" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/iOS/MyStudies/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.release.xcconfig b/iOS/MyStudies/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.release.xcconfig index 815f0d67a5..e5b1e9afa8 100644 --- a/iOS/MyStudies/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.release.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.release.xcconfig @@ -6,7 +6,7 @@ GCC_C_LANGUAGE_STANDARD = c99 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 GCC_TREAT_WARNINGS_AS_ERRORS = YES HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}" -OTHER_LDFLAGS = $(inherited) -framework "Foundation" +OTHER_LDFLAGS = $(inherited) -framework "CoreTelephony" -framework "Foundation" -framework "GoogleDataTransport" -framework "GoogleUtilities" -framework "Security" -framework "SystemConfiguration" -framework "nanopb" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/iOS/MyStudies/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations-Info.plist b/iOS/MyStudies/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations-Info.plist index b117b5cb51..1b2fa75ce7 100644 --- a/iOS/MyStudies/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations-Info.plist +++ b/iOS/MyStudies/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 8.4.0 + 8.12.0 CFBundleSignature ???? CFBundleVersion diff --git a/iOS/MyStudies/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations.debug.xcconfig b/iOS/MyStudies/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations.debug.xcconfig index e4326c2d25..8acd7ce00e 100644 --- a/iOS/MyStudies/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations.debug.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations.debug.xcconfig @@ -4,7 +4,7 @@ FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseC GCC_C_LANGUAGE_STANDARD = c99 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}" -OTHER_LDFLAGS = $(inherited) -framework "Security" +OTHER_LDFLAGS = $(inherited) -framework "FBLPromises" -framework "FirebaseCore" -framework "Foundation" -framework "GoogleUtilities" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/iOS/MyStudies/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations.release.xcconfig b/iOS/MyStudies/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations.release.xcconfig index e4326c2d25..8acd7ce00e 100644 --- a/iOS/MyStudies/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations.release.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations.release.xcconfig @@ -4,7 +4,7 @@ FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseC GCC_C_LANGUAGE_STANDARD = c99 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}" -OTHER_LDFLAGS = $(inherited) -framework "Security" +OTHER_LDFLAGS = $(inherited) -framework "FBLPromises" -framework "FirebaseCore" -framework "Foundation" -framework "GoogleUtilities" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/iOS/MyStudies/Pods/Target Support Files/FirebaseMessaging/FirebaseMessaging-Info.plist b/iOS/MyStudies/Pods/Target Support Files/FirebaseMessaging/FirebaseMessaging-Info.plist index b117b5cb51..1b2fa75ce7 100644 --- a/iOS/MyStudies/Pods/Target Support Files/FirebaseMessaging/FirebaseMessaging-Info.plist +++ b/iOS/MyStudies/Pods/Target Support Files/FirebaseMessaging/FirebaseMessaging-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 8.4.0 + 8.12.0 CFBundleSignature ???? CFBundleVersion diff --git a/iOS/MyStudies/Pods/Target Support Files/FirebaseMessaging/FirebaseMessaging.debug.xcconfig b/iOS/MyStudies/Pods/Target Support Files/FirebaseMessaging/FirebaseMessaging.debug.xcconfig index d16d86535c..eccdf8ffff 100644 --- a/iOS/MyStudies/Pods/Target Support Files/FirebaseMessaging/FirebaseMessaging.debug.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/FirebaseMessaging/FirebaseMessaging.debug.xcconfig @@ -2,9 +2,9 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseMessaging FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${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_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}" -OTHER_LDFLAGS = $(inherited) -l"sqlite3" -framework "SystemConfiguration" -weak_framework "UserNotifications" +OTHER_LDFLAGS = $(inherited) -l"sqlite3" -framework "CoreTelephony" -framework "FirebaseCore" -framework "FirebaseInstallations" -framework "Foundation" -framework "GoogleDataTransport" -framework "GoogleUtilities" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "nanopb" -weak_framework "UserNotifications" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/iOS/MyStudies/Pods/Target Support Files/FirebaseMessaging/FirebaseMessaging.release.xcconfig b/iOS/MyStudies/Pods/Target Support Files/FirebaseMessaging/FirebaseMessaging.release.xcconfig index d16d86535c..eccdf8ffff 100644 --- a/iOS/MyStudies/Pods/Target Support Files/FirebaseMessaging/FirebaseMessaging.release.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/FirebaseMessaging/FirebaseMessaging.release.xcconfig @@ -2,9 +2,9 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseMessaging FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${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_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}" -OTHER_LDFLAGS = $(inherited) -l"sqlite3" -framework "SystemConfiguration" -weak_framework "UserNotifications" +OTHER_LDFLAGS = $(inherited) -l"sqlite3" -framework "CoreTelephony" -framework "FirebaseCore" -framework "FirebaseInstallations" -framework "Foundation" -framework "GoogleDataTransport" -framework "GoogleUtilities" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "nanopb" -weak_framework "UserNotifications" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/iOS/MyStudies/Pods/Target Support Files/GoogleAppMeasurement/GoogleAppMeasurement-xcframeworks.sh b/iOS/MyStudies/Pods/Target Support Files/GoogleAppMeasurement/GoogleAppMeasurement-xcframeworks.sh new file mode 100755 index 0000000000..53d28f11f1 --- /dev/null +++ b/iOS/MyStudies/Pods/Target Support Files/GoogleAppMeasurement/GoogleAppMeasurement-xcframeworks.sh @@ -0,0 +1,110 @@ +#!/bin/sh +set -e +set -u +set -o pipefail + +function on_error { + echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" +} +trap 'on_error $LINENO' ERR + + +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + + +copy_dir() +{ + local source="$1" + local destination="$2" + + # Use filter instead of exclude so missing patterns don't throw errors. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" \"${source}*\" \"${destination}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" "${source}"/* "${destination}" +} + +SELECT_SLICE_RETVAL="" + +select_slice() { + local paths=("$@") + # Locate the correct slice of the .xcframework for the current architectures + local target_path="" + + # Split archs on space so we can find a slice that has all the needed archs + local target_archs=$(echo $ARCHS | tr " " "\n") + + local target_variant="" + if [[ "$PLATFORM_NAME" == *"simulator" ]]; then + target_variant="simulator" + fi + if [[ ! -z ${EFFECTIVE_PLATFORM_NAME+x} && "$EFFECTIVE_PLATFORM_NAME" == *"maccatalyst" ]]; then + target_variant="maccatalyst" + fi + for i in ${!paths[@]}; do + local matched_all_archs="1" + for target_arch in $target_archs + do + if ! [[ "${paths[$i]}" == *"$target_variant"* ]]; then + matched_all_archs="0" + break + fi + + # Verifies that the path contains the variant string (simulator or maccatalyst) if the variant is set. + if [[ -z "$target_variant" && ("${paths[$i]}" == *"simulator"* || "${paths[$i]}" == *"maccatalyst"*) ]]; then + matched_all_archs="0" + break + fi + + # This regex matches all possible variants of the arch in the folder name: + # Let's say the folder name is: ios-armv7_armv7s_arm64_arm64e/CoconutLib.framework + # We match the following: -armv7_, _armv7s_, _arm64_ and _arm64e/. + # If we have a specific variant: ios-i386_x86_64-simulator/CoconutLib.framework + # We match the following: -i386_ and _x86_64- + # When the .xcframework wraps a static library, the folder name does not include + # any .framework. In that case, the folder name can be: ios-arm64_armv7 + # We also match _armv7$ to handle that case. + local target_arch_regex="[_\-]${target_arch}([\/_\-]|$)" + if ! [[ "${paths[$i]}" =~ $target_arch_regex ]]; then + matched_all_archs="0" + break + fi + done + + if [[ "$matched_all_archs" == "1" ]]; then + # Found a matching slice + echo "Selected xcframework slice ${paths[$i]}" + SELECT_SLICE_RETVAL=${paths[$i]} + break + fi + done +} + +install_xcframework() { + local basepath="$1" + local name="$2" + local package_type="$3" + local paths=("${@:4}") + + # Locate the correct slice of the .xcframework for the current architectures + select_slice "${paths[@]}" + local target_path="$SELECT_SLICE_RETVAL" + if [[ -z "$target_path" ]]; then + echo "warning: [CP] Unable to find matching .xcframework slice in '${paths[@]}' for the current build architectures ($ARCHS)." + return + fi + local source="$basepath/$target_path" + + local destination="${PODS_XCFRAMEWORKS_BUILD_DIR}/${name}" + + if [ ! -d "$destination" ]; then + mkdir -p "$destination" + fi + + copy_dir "$source/" "$destination" + echo "Copied $source to $destination" +} + +install_xcframework "${PODS_ROOT}/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework" "GoogleAppMeasurement/AdIdSupport" "framework" "ios-arm64_x86_64-maccatalyst" "ios-arm64_armv7" "ios-arm64_i386_x86_64-simulator" +install_xcframework "${PODS_ROOT}/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework" "GoogleAppMeasurement/WithoutAdIdSupport" "framework" "ios-arm64_x86_64-maccatalyst" "ios-arm64_i386_x86_64-simulator" "ios-arm64_armv7" + diff --git a/iOS/MyStudies/Pods/Target Support Files/GoogleAppMeasurement/GoogleAppMeasurement.debug.xcconfig b/iOS/MyStudies/Pods/Target Support Files/GoogleAppMeasurement/GoogleAppMeasurement.debug.xcconfig new file mode 100644 index 0000000000..01f2bbb2c0 --- /dev/null +++ b/iOS/MyStudies/Pods/Target Support Files/GoogleAppMeasurement/GoogleAppMeasurement.debug.xcconfig @@ -0,0 +1,13 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleAppMeasurement +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" "${PODS_XCFRAMEWORKS_BUILD_DIR}/GoogleAppMeasurement/AdIdSupport" "${PODS_XCFRAMEWORKS_BUILD_DIR}/GoogleAppMeasurement/WithoutAdIdSupport" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -l"c++" -l"sqlite3" -l"z" -framework "StoreKit" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleAppMeasurement +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 diff --git a/iOS/MyStudies/Pods/Target Support Files/GoogleAppMeasurement/GoogleAppMeasurement.release.xcconfig b/iOS/MyStudies/Pods/Target Support Files/GoogleAppMeasurement/GoogleAppMeasurement.release.xcconfig new file mode 100644 index 0000000000..01f2bbb2c0 --- /dev/null +++ b/iOS/MyStudies/Pods/Target Support Files/GoogleAppMeasurement/GoogleAppMeasurement.release.xcconfig @@ -0,0 +1,13 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleAppMeasurement +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" "${PODS_XCFRAMEWORKS_BUILD_DIR}/GoogleAppMeasurement/AdIdSupport" "${PODS_XCFRAMEWORKS_BUILD_DIR}/GoogleAppMeasurement/WithoutAdIdSupport" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -l"c++" -l"sqlite3" -l"z" -framework "StoreKit" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleAppMeasurement +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 diff --git a/iOS/MyStudies/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-Info.plist b/iOS/MyStudies/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-Info.plist index 8ff94bebaa..4be429b540 100644 --- a/iOS/MyStudies/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-Info.plist +++ b/iOS/MyStudies/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 9.1.0 + 9.1.2 CFBundleSignature ???? CFBundleVersion diff --git a/iOS/MyStudies/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.debug.xcconfig b/iOS/MyStudies/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.debug.xcconfig index 26c853b010..656e7c28df 100644 --- a/iOS/MyStudies/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.debug.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.debug.xcconfig @@ -3,9 +3,9 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 GDTCOR_VERSION=9.1.0 +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 GDTCOR_VERSION=9.1.2 HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}/" -OTHER_LDFLAGS = $(inherited) -l"z" -framework "CoreTelephony" -framework "SystemConfiguration" +OTHER_LDFLAGS = $(inherited) -l"z" -framework "CoreTelephony" -framework "FBLPromises" -framework "GoogleUtilities" -framework "Security" -framework "SystemConfiguration" -framework "nanopb" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/iOS/MyStudies/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.release.xcconfig b/iOS/MyStudies/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.release.xcconfig index 26c853b010..656e7c28df 100644 --- a/iOS/MyStudies/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.release.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.release.xcconfig @@ -3,9 +3,9 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 GDTCOR_VERSION=9.1.0 +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 GDTCOR_VERSION=9.1.2 HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}/" -OTHER_LDFLAGS = $(inherited) -l"z" -framework "CoreTelephony" -framework "SystemConfiguration" +OTHER_LDFLAGS = $(inherited) -l"z" -framework "CoreTelephony" -framework "FBLPromises" -framework "GoogleUtilities" -framework "Security" -framework "SystemConfiguration" -framework "nanopb" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/iOS/MyStudies/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist b/iOS/MyStudies/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist index a68ea47307..bbc5ff554c 100644 --- a/iOS/MyStudies/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist +++ b/iOS/MyStudies/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 7.5.0 + 7.7.0 CFBundleSignature ???? CFBundleVersion diff --git a/iOS/MyStudies/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-umbrella.h b/iOS/MyStudies/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-umbrella.h index af5875a6e4..9d9cd8a629 100644 --- a/iOS/MyStudies/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-umbrella.h +++ b/iOS/MyStudies/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-umbrella.h @@ -24,6 +24,8 @@ #import "NSURLSession+GULPromises.h" #import "GULLogger.h" #import "GULLoggerLevel.h" +#import "GULOriginalIMPConvenienceMacros.h" +#import "GULSwizzler.h" #import "GULNSData+zlib.h" #import "GULMutableDictionary.h" #import "GULNetwork.h" diff --git a/iOS/MyStudies/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.debug.xcconfig b/iOS/MyStudies/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.debug.xcconfig index 0e81709d48..1136499376 100644 --- a/iOS/MyStudies/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.debug.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.debug.xcconfig @@ -4,7 +4,7 @@ FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/PromisesO GCC_C_LANGUAGE_STANDARD = c99 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}" -OTHER_LDFLAGS = $(inherited) -l"z" -framework "Security" -framework "SystemConfiguration" +OTHER_LDFLAGS = $(inherited) -l"z" -framework "FBLPromises" -framework "Security" -framework "SystemConfiguration" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/iOS/MyStudies/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.release.xcconfig b/iOS/MyStudies/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.release.xcconfig index 0e81709d48..1136499376 100644 --- a/iOS/MyStudies/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.release.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.release.xcconfig @@ -4,7 +4,7 @@ FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/PromisesO GCC_C_LANGUAGE_STANDARD = c99 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}" -OTHER_LDFLAGS = $(inherited) -l"z" -framework "Security" -framework "SystemConfiguration" +OTHER_LDFLAGS = $(inherited) -l"z" -framework "FBLPromises" -framework "Security" -framework "SystemConfiguration" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/iOS/MyStudies/Pods/Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift-Info.plist b/iOS/MyStudies/Pods/Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift-Info.plist index c59fdce390..d7e419a3e1 100644 --- a/iOS/MyStudies/Pods/Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift-Info.plist +++ b/iOS/MyStudies/Pods/Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 6.5.6 + 6.5.9 CFBundleSignature ???? CFBundleVersion diff --git a/iOS/MyStudies/Pods/Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift.debug.xcconfig b/iOS/MyStudies/Pods/Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift.debug.xcconfig index d96bd9927a..c135593df9 100644 --- a/iOS/MyStudies/Pods/Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift.debug.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift.debug.xcconfig @@ -1,6 +1,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "Foundation" -framework "QuartzCore" -framework "UIKit" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} diff --git a/iOS/MyStudies/Pods/Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift.release.xcconfig b/iOS/MyStudies/Pods/Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift.release.xcconfig index d96bd9927a..c135593df9 100644 --- a/iOS/MyStudies/Pods/Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift.release.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift.release.xcconfig @@ -1,6 +1,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "Foundation" -framework "QuartzCore" -framework "UIKit" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} diff --git a/iOS/MyStudies/Pods/Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift.xcconfig b/iOS/MyStudies/Pods/Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift.xcconfig deleted file mode 100644 index 0235240c5e..0000000000 --- a/iOS/MyStudies/Pods/Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "Foundation" -framework "QuartzCore" -framework "UIKit" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/IQKeyboardManagerSwift -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iOS/MyStudies/Pods/Target Support Files/IQKeyboardManagerSwift/Info.plist b/iOS/MyStudies/Pods/Target Support Files/IQKeyboardManagerSwift/Info.plist deleted file mode 100644 index b698285cf3..0000000000 --- a/iOS/MyStudies/Pods/Target Support Files/IQKeyboardManagerSwift/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 5.0.4 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/iOS/MyStudies/Pods/Target Support Files/Mockingjay/Mockingjay.debug.xcconfig b/iOS/MyStudies/Pods/Target Support Files/Mockingjay/Mockingjay.debug.xcconfig index 18ac2dde3c..be5c9994d6 100644 --- a/iOS/MyStudies/Pods/Target Support Files/Mockingjay/Mockingjay.debug.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/Mockingjay/Mockingjay.debug.xcconfig @@ -3,8 +3,8 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Mockingjay ENABLE_BITCODE = NO FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" "${PODS_CONFIGURATION_BUILD_DIR}/URITemplate" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/usr/lib" -OTHER_LDFLAGS = $(inherited) -framework "XCTest" +LIBRARY_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/usr/lib" "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift +OTHER_LDFLAGS = $(inherited) -framework "URITemplate" -framework "XCTest" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/iOS/MyStudies/Pods/Target Support Files/Mockingjay/Mockingjay.release.xcconfig b/iOS/MyStudies/Pods/Target Support Files/Mockingjay/Mockingjay.release.xcconfig index 18ac2dde3c..be5c9994d6 100644 --- a/iOS/MyStudies/Pods/Target Support Files/Mockingjay/Mockingjay.release.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/Mockingjay/Mockingjay.release.xcconfig @@ -3,8 +3,8 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Mockingjay ENABLE_BITCODE = NO FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" "${PODS_CONFIGURATION_BUILD_DIR}/URITemplate" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/usr/lib" -OTHER_LDFLAGS = $(inherited) -framework "XCTest" +LIBRARY_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/usr/lib" "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift +OTHER_LDFLAGS = $(inherited) -framework "URITemplate" -framework "XCTest" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/iOS/MyStudies/Pods/Target Support Files/Pods-MyStudies/Pods-MyStudies-acknowledgements.markdown b/iOS/MyStudies/Pods/Target Support Files/Pods-MyStudies/Pods-MyStudies-acknowledgements.markdown index e99ca34184..03c05dd660 100644 --- a/iOS/MyStudies/Pods/Target Support Files/Pods-MyStudies/Pods-MyStudies-acknowledgements.markdown +++ b/iOS/MyStudies/Pods/Target Support Files/Pods-MyStudies/Pods-MyStudies-acknowledgements.markdown @@ -273,6 +273,10 @@ Permission is granted to anyone to use this software for any purpose,including c limitations under the License. +## FirebaseAnalytics + +Copyright 2021 Google + ## FirebaseCore @@ -1097,6 +1101,10 @@ Permission is granted to anyone to use this software for any purpose,including c limitations under the License. +## GoogleAppMeasurement + +Copyright 2021 Google + ## GoogleDataTransport diff --git a/iOS/MyStudies/Pods/Target Support Files/Pods-MyStudies/Pods-MyStudies-acknowledgements.plist b/iOS/MyStudies/Pods/Target Support Files/Pods-MyStudies/Pods-MyStudies-acknowledgements.plist index a34fde910d..a9cb231b4e 100644 --- a/iOS/MyStudies/Pods/Target Support Files/Pods-MyStudies/Pods-MyStudies-acknowledgements.plist +++ b/iOS/MyStudies/Pods/Target Support Files/Pods-MyStudies/Pods-MyStudies-acknowledgements.plist @@ -308,6 +308,16 @@ Permission is granted to anyone to use this software for any purpose,including c Type PSGroupSpecifier + + FooterText + Copyright 2021 Google + License + Copyright + Title + FirebaseAnalytics + Type + PSGroupSpecifier + FooterText @@ -1156,6 +1166,16 @@ Permission is granted to anyone to use this software for any purpose,including c Type PSGroupSpecifier + + FooterText + Copyright 2021 Google + License + Copyright + Title + GoogleAppMeasurement + Type + PSGroupSpecifier + FooterText diff --git a/iOS/MyStudies/Pods/Target Support Files/Pods-MyStudies/Pods-MyStudies-frameworks.sh b/iOS/MyStudies/Pods/Target Support Files/Pods-MyStudies/Pods-MyStudies-frameworks.sh index e3923ec147..207bb0998a 100755 --- a/iOS/MyStudies/Pods/Target Support Files/Pods-MyStudies/Pods-MyStudies-frameworks.sh +++ b/iOS/MyStudies/Pods/Target Support Files/Pods-MyStudies/Pods-MyStudies-frameworks.sh @@ -113,6 +113,7 @@ install_dsym() { rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.dSYM" "${DWARF_DSYM_FOLDER_PATH}" else # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + mkdir -p "${DWARF_DSYM_FOLDER_PATH}" touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM" fi fi diff --git a/iOS/MyStudies/Pods/Target Support Files/Pods-MyStudies/Pods-MyStudies.debug.xcconfig b/iOS/MyStudies/Pods/Target Support Files/Pods-MyStudies/Pods-MyStudies.debug.xcconfig index ac7f3140c1..a05b8cb82f 100644 --- a/iOS/MyStudies/Pods/Target Support Files/Pods-MyStudies/Pods-MyStudies.debug.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/Pods-MyStudies/Pods-MyStudies.debug.xcconfig @@ -1,11 +1,11 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ActionSheetPicker-3.0" "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseMessaging" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SlideMenuControllerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/Toast-Swift" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ActionSheetPicker-3.0" "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseMessaging" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SlideMenuControllerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/Toast-Swift" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" "${PODS_XCFRAMEWORKS_BUILD_DIR}/FirebaseAnalytics/AdIdSupport" "${PODS_XCFRAMEWORKS_BUILD_DIR}/GoogleAppMeasurement/AdIdSupport" "${PODS_XCFRAMEWORKS_BUILD_DIR}/GoogleAppMeasurement/WithoutAdIdSupport" 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}/ActionSheetPicker-3.0/ActionSheetPicker_3_0.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift/CryptoSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations/FirebaseInstallations.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseMessaging/FirebaseMessaging.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport/GoogleDataTransport.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC/FBLPromises.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SlideMenuControllerSwift/SlideMenuControllerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Toast-Swift/Toast_Swift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources "${PODS_TARGET_SRCROOT}/Sources/FBLPromises/include" -LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Realm/core" -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"z" -framework "ActionSheetPicker_3_0" -framework "Alamofire" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreTelephony" -framework "CryptoSwift" -framework "FBLPromises" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseInstallations" -framework "FirebaseMessaging" -framework "Foundation" -framework "GoogleDataTransport" -framework "GoogleUtilities" -framework "IQKeyboardManagerSwift" -framework "ImageIO" -framework "QuartzCore" -framework "Reachability" -framework "Realm" -framework "RealmSwift" -framework "SDWebImage" -framework "Security" -framework "SlideMenuControllerSwift" -framework "SystemConfiguration" -framework "Toast_Swift" -framework "UIKit" -framework "nanopb" -weak_framework "UserNotifications" +LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks' +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" "${PODS_ROOT}/Realm/core" /usr/lib/swift +OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"z" -framework "ActionSheetPicker_3_0" -framework "Alamofire" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreTelephony" -framework "CryptoSwift" -framework "FBLPromises" -framework "FirebaseAnalytics" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseInstallations" -framework "FirebaseMessaging" -framework "Foundation" -framework "GoogleAppMeasurement" -framework "GoogleAppMeasurementIdentitySupport" -framework "GoogleDataTransport" -framework "GoogleUtilities" -framework "IQKeyboardManagerSwift" -framework "ImageIO" -framework "QuartzCore" -framework "Reachability" -framework "Realm" -framework "RealmSwift" -framework "SDWebImage" -framework "Security" -framework "SlideMenuControllerSwift" -framework "StoreKit" -framework "SystemConfiguration" -framework "Toast_Swift" -framework "UIKit" -framework "nanopb" -weak_framework "UserNotifications" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/iOS/MyStudies/Pods/Target Support Files/Pods-MyStudies/Pods-MyStudies.release.xcconfig b/iOS/MyStudies/Pods/Target Support Files/Pods-MyStudies/Pods-MyStudies.release.xcconfig index ac7f3140c1..a05b8cb82f 100644 --- a/iOS/MyStudies/Pods/Target Support Files/Pods-MyStudies/Pods-MyStudies.release.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/Pods-MyStudies/Pods-MyStudies.release.xcconfig @@ -1,11 +1,11 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ActionSheetPicker-3.0" "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseMessaging" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SlideMenuControllerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/Toast-Swift" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ActionSheetPicker-3.0" "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseMessaging" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SlideMenuControllerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/Toast-Swift" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" "${PODS_XCFRAMEWORKS_BUILD_DIR}/FirebaseAnalytics/AdIdSupport" "${PODS_XCFRAMEWORKS_BUILD_DIR}/GoogleAppMeasurement/AdIdSupport" "${PODS_XCFRAMEWORKS_BUILD_DIR}/GoogleAppMeasurement/WithoutAdIdSupport" 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}/ActionSheetPicker-3.0/ActionSheetPicker_3_0.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift/CryptoSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations/FirebaseInstallations.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseMessaging/FirebaseMessaging.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport/GoogleDataTransport.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC/FBLPromises.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SlideMenuControllerSwift/SlideMenuControllerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Toast-Swift/Toast_Swift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources "${PODS_TARGET_SRCROOT}/Sources/FBLPromises/include" -LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Realm/core" -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"z" -framework "ActionSheetPicker_3_0" -framework "Alamofire" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreTelephony" -framework "CryptoSwift" -framework "FBLPromises" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseInstallations" -framework "FirebaseMessaging" -framework "Foundation" -framework "GoogleDataTransport" -framework "GoogleUtilities" -framework "IQKeyboardManagerSwift" -framework "ImageIO" -framework "QuartzCore" -framework "Reachability" -framework "Realm" -framework "RealmSwift" -framework "SDWebImage" -framework "Security" -framework "SlideMenuControllerSwift" -framework "SystemConfiguration" -framework "Toast_Swift" -framework "UIKit" -framework "nanopb" -weak_framework "UserNotifications" +LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks' +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" "${PODS_ROOT}/Realm/core" /usr/lib/swift +OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"z" -framework "ActionSheetPicker_3_0" -framework "Alamofire" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreTelephony" -framework "CryptoSwift" -framework "FBLPromises" -framework "FirebaseAnalytics" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseInstallations" -framework "FirebaseMessaging" -framework "Foundation" -framework "GoogleAppMeasurement" -framework "GoogleAppMeasurementIdentitySupport" -framework "GoogleDataTransport" -framework "GoogleUtilities" -framework "IQKeyboardManagerSwift" -framework "ImageIO" -framework "QuartzCore" -framework "Reachability" -framework "Realm" -framework "RealmSwift" -framework "SDWebImage" -framework "Security" -framework "SlideMenuControllerSwift" -framework "StoreKit" -framework "SystemConfiguration" -framework "Toast_Swift" -framework "UIKit" -framework "nanopb" -weak_framework "UserNotifications" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/iOS/MyStudies/Pods/Target Support Files/Pods-MyStudiesTests/Pods-MyStudiesTests-frameworks.sh b/iOS/MyStudies/Pods/Target Support Files/Pods-MyStudiesTests/Pods-MyStudiesTests-frameworks.sh index 41f2925b48..d7d773ffee 100755 --- a/iOS/MyStudies/Pods/Target Support Files/Pods-MyStudiesTests/Pods-MyStudiesTests-frameworks.sh +++ b/iOS/MyStudies/Pods/Target Support Files/Pods-MyStudiesTests/Pods-MyStudiesTests-frameworks.sh @@ -113,6 +113,7 @@ install_dsym() { rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.dSYM" "${DWARF_DSYM_FOLDER_PATH}" else # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + mkdir -p "${DWARF_DSYM_FOLDER_PATH}" touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM" fi fi diff --git a/iOS/MyStudies/Pods/Target Support Files/Pods-MyStudiesTests/Pods-MyStudiesTests.debug.xcconfig b/iOS/MyStudies/Pods/Target Support Files/Pods-MyStudiesTests/Pods-MyStudiesTests.debug.xcconfig index 04de5c8a6e..1f4a3101b8 100644 --- a/iOS/MyStudies/Pods/Target Support Files/Pods-MyStudiesTests/Pods-MyStudiesTests.debug.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/Pods-MyStudiesTests/Pods-MyStudiesTests.debug.xcconfig @@ -3,7 +3,8 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" "${PODS_CONFIGURATION_BUILD_DIR}/Mockingjay" "${PODS_CONFIGURATION_BUILD_DIR}/URITemplate" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Mockingjay/Mockingjay.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/URITemplate/URITemplate.framework/Headers" -LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift "$(PLATFORM_DIR)/Developer/Library/Frameworks" '@executable_path/Frameworks' '@loader_path/Frameworks' +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift OTHER_LDFLAGS = $(inherited) -framework "Mockingjay" -framework "URITemplate" -framework "XCTest" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} diff --git a/iOS/MyStudies/Pods/Target Support Files/Pods-MyStudiesTests/Pods-MyStudiesTests.release.xcconfig b/iOS/MyStudies/Pods/Target Support Files/Pods-MyStudiesTests/Pods-MyStudiesTests.release.xcconfig index 04de5c8a6e..1f4a3101b8 100644 --- a/iOS/MyStudies/Pods/Target Support Files/Pods-MyStudiesTests/Pods-MyStudiesTests.release.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/Pods-MyStudiesTests/Pods-MyStudiesTests.release.xcconfig @@ -3,7 +3,8 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" "${PODS_CONFIGURATION_BUILD_DIR}/Mockingjay" "${PODS_CONFIGURATION_BUILD_DIR}/URITemplate" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Mockingjay/Mockingjay.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/URITemplate/URITemplate.framework/Headers" -LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift "$(PLATFORM_DIR)/Developer/Library/Frameworks" '@executable_path/Frameworks' '@loader_path/Frameworks' +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift OTHER_LDFLAGS = $(inherited) -framework "Mockingjay" -framework "URITemplate" -framework "XCTest" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} diff --git a/iOS/MyStudies/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.debug.xcconfig b/iOS/MyStudies/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.debug.xcconfig index c3d1442b90..8b9233454a 100644 --- a/iOS/MyStudies/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.debug.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.debug.xcconfig @@ -1,6 +1,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift OTHER_LDFLAGS = $(inherited) -framework "CoreTelephony" -framework "SystemConfiguration" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} diff --git a/iOS/MyStudies/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.release.xcconfig b/iOS/MyStudies/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.release.xcconfig index c3d1442b90..8b9233454a 100644 --- a/iOS/MyStudies/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.release.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.release.xcconfig @@ -1,6 +1,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift OTHER_LDFLAGS = $(inherited) -framework "CoreTelephony" -framework "SystemConfiguration" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} diff --git a/iOS/MyStudies/Pods/Target Support Files/Realm/Info.plist b/iOS/MyStudies/Pods/Target Support Files/Realm/Info.plist deleted file mode 100644 index 4522675717..0000000000 --- a/iOS/MyStudies/Pods/Target Support Files/Realm/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 3.0.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/iOS/MyStudies/Pods/Target Support Files/Realm/Realm.xcconfig b/iOS/MyStudies/Pods/Target Support Files/Realm/Realm.xcconfig deleted file mode 100644 index aabbce607a..0000000000 --- a/iOS/MyStudies/Pods/Target Support Files/Realm/Realm.xcconfig +++ /dev/null @@ -1,16 +0,0 @@ -APPLICATION_EXTENSION_API_ONLY = YES -CLANG_CXX_LANGUAGE_STANDARD = c++14 -CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Realm -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Realm/core" -OTHER_CPLUSPLUSFLAGS = -isystem "${PODS_ROOT}/Realm/include/core" -fvisibility-inlines-hidden -OTHER_LDFLAGS = $(inherited) -l"c++" -l"realmcore-ios" -l"z" -framework "Security" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Realm -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USER_HEADER_SEARCH_PATHS = "${PODS_ROOT}/Realm/include" "${PODS_ROOT}/Realm/include/Realm" -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iOS/MyStudies/Pods/Target Support Files/RealmSwift/Info.plist b/iOS/MyStudies/Pods/Target Support Files/RealmSwift/Info.plist deleted file mode 100644 index 4522675717..0000000000 --- a/iOS/MyStudies/Pods/Target Support Files/RealmSwift/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 3.0.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/iOS/MyStudies/Pods/Target Support Files/RealmSwift/RealmSwift.debug.xcconfig b/iOS/MyStudies/Pods/Target Support Files/RealmSwift/RealmSwift.debug.xcconfig index db8b341b2f..98c398f672 100644 --- a/iOS/MyStudies/Pods/Target Support Files/RealmSwift/RealmSwift.debug.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/RealmSwift/RealmSwift.debug.xcconfig @@ -3,6 +3,8 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Realm" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift +OTHER_LDFLAGS = $(inherited) -framework "Realm" -framework "Security" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/iOS/MyStudies/Pods/Target Support Files/RealmSwift/RealmSwift.release.xcconfig b/iOS/MyStudies/Pods/Target Support Files/RealmSwift/RealmSwift.release.xcconfig index db8b341b2f..98c398f672 100644 --- a/iOS/MyStudies/Pods/Target Support Files/RealmSwift/RealmSwift.release.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/RealmSwift/RealmSwift.release.xcconfig @@ -3,6 +3,8 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Realm" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift +OTHER_LDFLAGS = $(inherited) -framework "Realm" -framework "Security" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/iOS/MyStudies/Pods/Target Support Files/RealmSwift/RealmSwift.xcconfig b/iOS/MyStudies/Pods/Target Support Files/RealmSwift/RealmSwift.xcconfig deleted file mode 100644 index 5f28866c0c..0000000000 --- a/iOS/MyStudies/Pods/Target Support Files/RealmSwift/RealmSwift.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -APPLICATION_EXTENSION_API_ONLY = YES -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Realm" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/RealmSwift -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iOS/MyStudies/Pods/Target Support Files/SDWebImage/Info.plist b/iOS/MyStudies/Pods/Target Support Files/SDWebImage/Info.plist deleted file mode 100644 index 7ecb368db5..0000000000 --- a/iOS/MyStudies/Pods/Target Support Files/SDWebImage/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 4.1.2 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/iOS/MyStudies/Pods/Target Support Files/SDWebImage/SDWebImage-Info.plist b/iOS/MyStudies/Pods/Target Support Files/SDWebImage/SDWebImage-Info.plist index 614eba16d7..9157f21919 100644 --- a/iOS/MyStudies/Pods/Target Support Files/SDWebImage/SDWebImage-Info.plist +++ b/iOS/MyStudies/Pods/Target Support Files/SDWebImage/SDWebImage-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 5.11.1 + 5.12.3 CFBundleSignature ???? CFBundleVersion diff --git a/iOS/MyStudies/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig b/iOS/MyStudies/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig deleted file mode 100644 index 4e955dbae8..0000000000 --- a/iOS/MyStudies/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage -DERIVE_MACCATALYST_PRODUCT_BUNDLE_IDENTIFIER = NO -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "ImageIO" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/SDWebImage -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -SUPPORTS_MACCATALYST = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iOS/MyStudies/Pods/Target Support Files/SlideMenuControllerSwift/Info.plist b/iOS/MyStudies/Pods/Target Support Files/SlideMenuControllerSwift/Info.plist deleted file mode 100644 index a080088dc0..0000000000 --- a/iOS/MyStudies/Pods/Target Support Files/SlideMenuControllerSwift/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 3.0.2 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/iOS/MyStudies/Pods/Target Support Files/SlideMenuControllerSwift/SlideMenuControllerSwift.debug.xcconfig b/iOS/MyStudies/Pods/Target Support Files/SlideMenuControllerSwift/SlideMenuControllerSwift.debug.xcconfig index 5708692186..b22cbccf39 100644 --- a/iOS/MyStudies/Pods/Target Support Files/SlideMenuControllerSwift/SlideMenuControllerSwift.debug.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/SlideMenuControllerSwift/SlideMenuControllerSwift.debug.xcconfig @@ -1,6 +1,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SlideMenuControllerSwift GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/iOS/MyStudies/Pods/Target Support Files/SlideMenuControllerSwift/SlideMenuControllerSwift.release.xcconfig b/iOS/MyStudies/Pods/Target Support Files/SlideMenuControllerSwift/SlideMenuControllerSwift.release.xcconfig index 5708692186..b22cbccf39 100644 --- a/iOS/MyStudies/Pods/Target Support Files/SlideMenuControllerSwift/SlideMenuControllerSwift.release.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/SlideMenuControllerSwift/SlideMenuControllerSwift.release.xcconfig @@ -1,6 +1,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SlideMenuControllerSwift GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/iOS/MyStudies/Pods/Target Support Files/SlideMenuControllerSwift/SlideMenuControllerSwift.xcconfig b/iOS/MyStudies/Pods/Target Support Files/SlideMenuControllerSwift/SlideMenuControllerSwift.xcconfig deleted file mode 100644 index 886ec22de1..0000000000 --- a/iOS/MyStudies/Pods/Target Support Files/SlideMenuControllerSwift/SlideMenuControllerSwift.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SlideMenuControllerSwift -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/SlideMenuControllerSwift -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iOS/MyStudies/Pods/Target Support Files/Toast-Swift/Toast-Swift.debug.xcconfig b/iOS/MyStudies/Pods/Target Support Files/Toast-Swift/Toast-Swift.debug.xcconfig index e918f50d46..04087daa45 100644 --- a/iOS/MyStudies/Pods/Target Support Files/Toast-Swift/Toast-Swift.debug.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/Toast-Swift/Toast-Swift.debug.xcconfig @@ -1,6 +1,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Toast-Swift GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift OTHER_LDFLAGS = $(inherited) -framework "QuartzCore" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} diff --git a/iOS/MyStudies/Pods/Target Support Files/Toast-Swift/Toast-Swift.release.xcconfig b/iOS/MyStudies/Pods/Target Support Files/Toast-Swift/Toast-Swift.release.xcconfig index e918f50d46..04087daa45 100644 --- a/iOS/MyStudies/Pods/Target Support Files/Toast-Swift/Toast-Swift.release.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/Toast-Swift/Toast-Swift.release.xcconfig @@ -1,6 +1,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Toast-Swift GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift OTHER_LDFLAGS = $(inherited) -framework "QuartzCore" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} diff --git a/iOS/MyStudies/Pods/Target Support Files/Toast-Swift/Toast-Swift.xcconfig b/iOS/MyStudies/Pods/Target Support Files/Toast-Swift/Toast-Swift.xcconfig deleted file mode 100644 index 3af8e441be..0000000000 --- a/iOS/MyStudies/Pods/Target Support Files/Toast-Swift/Toast-Swift.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Toast-Swift -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "QuartzCore" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Toast-Swift -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iOS/MyStudies/Pods/Target Support Files/URITemplate/URITemplate-Info.plist b/iOS/MyStudies/Pods/Target Support Files/URITemplate/URITemplate-Info.plist index 4522675717..b0b461e320 100644 --- a/iOS/MyStudies/Pods/Target Support Files/URITemplate/URITemplate-Info.plist +++ b/iOS/MyStudies/Pods/Target Support Files/URITemplate/URITemplate-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 3.0.0 + 3.0.1 CFBundleSignature ???? CFBundleVersion diff --git a/iOS/MyStudies/Pods/Target Support Files/URITemplate/URITemplate.debug.xcconfig b/iOS/MyStudies/Pods/Target Support Files/URITemplate/URITemplate.debug.xcconfig index cc07caf674..276fb59f38 100644 --- a/iOS/MyStudies/Pods/Target Support Files/URITemplate/URITemplate.debug.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/URITemplate/URITemplate.debug.xcconfig @@ -1,6 +1,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/URITemplate GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/iOS/MyStudies/Pods/Target Support Files/URITemplate/URITemplate.release.xcconfig b/iOS/MyStudies/Pods/Target Support Files/URITemplate/URITemplate.release.xcconfig index cc07caf674..276fb59f38 100644 --- a/iOS/MyStudies/Pods/Target Support Files/URITemplate/URITemplate.release.xcconfig +++ b/iOS/MyStudies/Pods/Target Support Files/URITemplate/URITemplate.release.xcconfig @@ -1,6 +1,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/URITemplate GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/iOS/MyStudies/Pods/URITemplate/Sources/URITemplate.swift b/iOS/MyStudies/Pods/URITemplate/Sources/URITemplate.swift index ef8cb24e40..6e96ef4a44 100644 --- a/iOS/MyStudies/Pods/URITemplate/Sources/URITemplate.swift +++ b/iOS/MyStudies/Pods/URITemplate/Sources/URITemplate.swift @@ -11,9 +11,13 @@ import Foundation // MARK: URITemplate /// A data structure to represent an RFC6570 URI template. -public struct URITemplate : CustomStringConvertible, Equatable, Hashable, ExpressibleByStringLiteral, ExpressibleByExtendedGraphemeClusterLiteral, ExpressibleByUnicodeScalarLiteral { +public struct URITemplate : RawRepresentable, CustomStringConvertible, Equatable, Hashable, ExpressibleByStringLiteral, ExpressibleByExtendedGraphemeClusterLiteral, ExpressibleByUnicodeScalarLiteral { + public let rawValue: String + /// The underlying URI template - public let template:String + public var template: String { + return rawValue + } var regex:NSRegularExpression { let expression: NSRegularExpression? @@ -39,26 +43,30 @@ public struct URITemplate : CustomStringConvertible, Equatable, Hashable, Expres } /// Initialize a URITemplate with the given template - public init(template:String) { - self.template = template + public init(template: String) { + self.rawValue = template + } + + public init(rawValue: String) { + self.rawValue = rawValue } public typealias ExtendedGraphemeClusterLiteralType = StringLiteralType public init(extendedGraphemeClusterLiteral value: ExtendedGraphemeClusterLiteralType) { - template = value + rawValue = value } public typealias UnicodeScalarLiteralType = StringLiteralType public init(unicodeScalarLiteral value: UnicodeScalarLiteralType) { - template = value + rawValue = value } public init(stringLiteral value: StringLiteralType) { - template = value + rawValue = value } public init(from decoder: Decoder) throws { - self.template = try decoder.singleValueContainer().decode(String.self) + rawValue = try decoder.singleValueContainer().decode(String.self) } /// Returns a description of the URITemplate diff --git a/iOS/MyStudies/ResearchKit.xcodeproj/xcuserdata/admin.xcuserdatad/xcschemes/xcschememanagement.plist b/iOS/MyStudies/ResearchKit.xcodeproj/xcuserdata/admin.xcuserdatad/xcschemes/xcschememanagement.plist index 61c0594eda..d61ac87c8f 100644 --- a/iOS/MyStudies/ResearchKit.xcodeproj/xcuserdata/admin.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/iOS/MyStudies/ResearchKit.xcodeproj/xcuserdata/admin.xcuserdatad/xcschemes/xcschememanagement.plist @@ -7,12 +7,12 @@ ResearchKit.xcscheme_^#shared#^_ orderHint - 15 + 28 docs.xcscheme_^#shared#^_ orderHint - 16 + 29 diff --git a/iOS/MyStudies/ResearchKit/ActiveTasks/ORKSpatialSpanMemoryStepViewController.m b/iOS/MyStudies/ResearchKit/ActiveTasks/ORKSpatialSpanMemoryStepViewController.m index 3ac36340a9..c3700acef7 100644 --- a/iOS/MyStudies/ResearchKit/ActiveTasks/ORKSpatialSpanMemoryStepViewController.m +++ b/iOS/MyStudies/ResearchKit/ActiveTasks/ORKSpatialSpanMemoryStepViewController.m @@ -425,6 +425,9 @@ - (void)applyTargetState:(ORKSpatialSpanTargetState)targetState toSequenceIndex: } - (void)playbackNextItem { + NSDictionary *userDict = @{@"ORKAction":@"ORKPlaybackNextItem"}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userDict]; + const NSInteger sequenceLength = _currentGameState.game.sequenceLength; if (_playbackIndex >= sequenceLength) { [self transitionToState:ORKSpatialSpanStepStateGameplay]; @@ -483,6 +486,9 @@ - (void)setScore:(NSInteger)score { } - (void)activityTimeout { + NSDictionary *userDict = @{@"ORKAction":@"ORKActivityTimeOut"}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userDict]; + [self transitionToState:ORKSpatialSpanStepStateTimeout]; } @@ -575,6 +581,8 @@ - (void)updateGameCountersForSuccess:(BOOL)success { } - (void)continueAction { + NSDictionary *userDict = @{@"ORKAction":@"ORKNext"}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userDict]; ORKSpatialSpanMemoryStep *step = [self spatialSpanStep]; if (_gamesCounter < step.maximumTests && _consecutiveGamesFailed < step.maximumConsecutiveFailures) { // Generate a new game @@ -605,7 +613,8 @@ - (void)showSuccess { #pragma mark ORKSpatialSpanStepStateFailed - (void)tryAgainAction { - // Restart with a new, shorter game + NSDictionary *userDict = @{@"ORKAction":@"ORKTryAgain"}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userDict]; // Restart with a new, shorter game [self transitionToState:ORKSpatialSpanStepStateRestart]; UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, nil); } @@ -666,12 +675,17 @@ - (void)showComplete { } - (void)showCopyright { + NSDictionary *userDict = @{@"ORKAction":@"ORKShowCopyRight"}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userDict]; // Restart with a new, shorter game + UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil message:ORKLocalizedString(@"MEMORY_GAME_COPYRIGHT_TEXT", nil) preferredStyle:UIAlertControllerStyleAlert]; [alert addAction:[UIAlertAction actionWithTitle:ORKLocalizedString(@"BUTTON_OK", nil) style:UIAlertActionStyleDefault - handler:nil]]; + handler:^(UIAlertAction *action) {NSDictionary *userDict = @{@"ORKAction":@"ORKCopyRightOkAlert"}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userDict]; + }]]; [self presentViewController:alert animated:YES completion:nil]; } diff --git a/iOS/MyStudies/ResearchKit/Common/ORKAnswerTextField.m b/iOS/MyStudies/ResearchKit/Common/ORKAnswerTextField.m index ab7f80eca3..50218942d6 100644 --- a/iOS/MyStudies/ResearchKit/Common/ORKAnswerTextField.m +++ b/iOS/MyStudies/ResearchKit/Common/ORKAnswerTextField.m @@ -92,10 +92,14 @@ - (void)addPlusMinusAccessoryView { } - (void)keyboardAccessoryViewDoneButtonPressed { + NSDictionary *userDict = @{@"ORKAction":@"ORKKeyboardDone"}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userDict]; [self resignFirstResponder]; } - (void)keyboardAccessoryViewPlusMinusButtonPressed { + NSDictionary *userDict = @{@"ORKAction":@"ORKKeyboardPlusMinus"}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userDict]; if ([self.text hasPrefix:@"-"]) { self.text = [self.text substringFromIndex:1]; } else { diff --git a/iOS/MyStudies/ResearchKit/Common/ORKAnswerTextView.m b/iOS/MyStudies/ResearchKit/Common/ORKAnswerTextView.m index f8608f5040..83af018cf9 100644 --- a/iOS/MyStudies/ResearchKit/Common/ORKAnswerTextView.m +++ b/iOS/MyStudies/ResearchKit/Common/ORKAnswerTextView.m @@ -29,13 +29,11 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - #import "ORKAnswerTextView.h" #import "ORKHelpers_Internal.h" #import "ORKSkin.h" - @implementation ORKAnswerTextView { UITextView *_placeholderTextView; NSArray *_accessibilityCustomActions; @@ -93,6 +91,8 @@ - (void)addAccessoryViewWithDoneButton { } - (void)keyboardAccessoryViewDoneButtonPressed { + NSDictionary *userDict = @{@"ORKAction":@"ORKKeyboardDone"}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userDict]; [self resignFirstResponder]; } diff --git a/iOS/MyStudies/ResearchKit/Common/ORKImageSelectionView.m b/iOS/MyStudies/ResearchKit/Common/ORKImageSelectionView.m index db531986c4..3199726d09 100644 --- a/iOS/MyStudies/ResearchKit/Common/ORKImageSelectionView.m +++ b/iOS/MyStudies/ResearchKit/Common/ORKImageSelectionView.m @@ -381,6 +381,8 @@ - (void)setLabelText:(NSString *)text { } - (IBAction)buttonTapped:(UIButton *)button { + NSDictionary *userDict = @{@"ORKAction":@"ORKButtonTapped"}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userDict]; button.selected = !button.selected; if (button.selected) { diff --git a/iOS/MyStudies/ResearchKit/Common/ORKNavigationContainerView.m b/iOS/MyStudies/ResearchKit/Common/ORKNavigationContainerView.m index 1300a830f4..4aefbf4f36 100644 --- a/iOS/MyStudies/ResearchKit/Common/ORKNavigationContainerView.m +++ b/iOS/MyStudies/ResearchKit/Common/ORKNavigationContainerView.m @@ -67,6 +67,7 @@ - (instancetype)initWithFrame:(CGRect)frame { self.cancelButtonStyle = ORKNavigationContainerButtonStyleTextBold; [self setUpConstraints]; [self updateContinueAndSkipEnabled]; + [self setNeedsUpdateConstraints]; } return self; } @@ -83,7 +84,7 @@ - (void)setupVisualEffectView { } - (void)setupContinueButton { - if (!_continueButton) { + if (!_continueButton) { _continueButton = [[ORKContinueButton alloc] initWithTitle:@"" isDoneButton:NO]; } _continueButton.alpha = 0; @@ -394,6 +395,10 @@ - (void)willMoveToWindow:(UIWindow *)newWindow { } - (void)skipButtonAction:(id)sender { + + NSDictionary *userDict = @{@"ORKAction":@"ORKSkip"}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userDict]; + [self skipAction:sender]; // Disable button for 0.5s @@ -407,10 +412,15 @@ - (void)skipButtonAction:(id)sender { } - (void)cancelButtonAction:(id)sender { + NSDictionary *userDict = @{@"ORKAction":@"ORKCancel"}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userDict]; [self cancelAction:sender]; } - (void)continueButtonAction:(id)sender { + NSDictionary *userDict = @{@"ORKAction":@"ORKProceed"}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userDict]; + if (_useNextForSkip && _skipButtonItem && !_continueButtonItem) { [self skipAction:sender]; } else { @@ -463,6 +473,13 @@ - (BOOL)skipButtonHidden { } - (CGFloat)skipButtonAlpha { + NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; + NSString *myString = [prefs stringForKey:@"isOptionalTextChoice"]; + if ([myString isEqualToString:@"true"]) { + return 1.0; + } else if ([myString isEqualToString:@"false"]) { + return 0.0; + } return ([self skipButtonHidden] ? 0.0 : 1.0); } diff --git a/iOS/MyStudies/ResearchKit/Common/ORKPDFViewerStepView.m b/iOS/MyStudies/ResearchKit/Common/ORKPDFViewerStepView.m index 105b2351f6..5fd730391e 100644 --- a/iOS/MyStudies/ResearchKit/Common/ORKPDFViewerStepView.m +++ b/iOS/MyStudies/ResearchKit/Common/ORKPDFViewerStepView.m @@ -462,12 +462,16 @@ - (void)updateClearApplyAnnotationButtons { } - (void)thumbnailButtonAction { + NSDictionary *userDict = @{@"ORKAction":@"ORKPDFThumbNailButton"}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userDict]; [self animateViews:@[_pdfThumbnailView] setHidden:!_pdfThumbnailView.isHidden]; [self updateActionButtonsAppearance]; [_pdfView setAutoScales:YES]; } - (void)annotationButtonAction { + NSDictionary *userDict = @{@"ORKAction":@"ORKPDFAnnotationButton"}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userDict]; [self setPDFViewDisplayModeSinglePage:_isFreehandDrawingActive]; @@ -492,6 +496,8 @@ - (void)setPDFViewDisplayModeSinglePage:(BOOL) isContinuous { } - (void)searchButtonAction { + NSDictionary *userDict = @{@"ORKAction":@"ORKPDFSearchButton"}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userDict]; [UIView animateWithDuration:0.5 animations:^{ if (!_searchBar.isHidden) { [self searchBarDismissKeyboard]; @@ -524,6 +530,8 @@ - (void)updateActionButtonAccessibilityLabels { } - (void)shareButtonAction { + NSDictionary *userDict = @{@"ORKAction":@"ORKPDFShareButton"}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userDict]; if (_isShareActive) { } @@ -665,6 +673,8 @@ - (void)setIsScibbleActive:(BOOL)isActive { } - (void)clearButtonAction { + NSDictionary *userDict = @{@"ORKAction":@"ORKPDFClearButton"}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userDict]; if (_freehandDrawingView.freehandDrawingPath && _freehandDrawingView.freehandDrawingExists) { [_freehandDrawingView clear]; } @@ -672,6 +682,8 @@ - (void)clearButtonAction { } - (void)applybuttonAction { + NSDictionary *userDict = @{@"ORKAction":@"ORKPDFApplyButton"}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userDict]; if (_freehandDrawingView.freehandDrawingPath && _freehandDrawingView.freehandDrawingExists) { CGRect annotationRect = _pdfView.documentView.bounds; PDFAnnotation *annotation = [[PDFAnnotation alloc] initWithBounds:annotationRect forType:PDFAnnotationSubtypeInk withProperties:nil]; @@ -689,6 +701,8 @@ - (void)applybuttonAction { } - (void)exitButtonAction { + NSDictionary *userDict = @{@"ORKAction":@"ORKPDFExitButton"}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userDict]; [self setPDFViewDisplayModeSinglePage:_isFreehandDrawingActive]; if (_isFreehandDrawingActive && _freehandDrawingView) { diff --git a/iOS/MyStudies/ResearchKit/Common/ORKPasscodeStepViewController.m b/iOS/MyStudies/ResearchKit/Common/ORKPasscodeStepViewController.m index 5339fc8f0f..fb63d44026 100644 --- a/iOS/MyStudies/ResearchKit/Common/ORKPasscodeStepViewController.m +++ b/iOS/MyStudies/ResearchKit/Common/ORKPasscodeStepViewController.m @@ -141,7 +141,7 @@ - (void)stepDidChange { action:@selector(forgotPasscodeTapped) forControlEvents:UIControlEventTouchUpInside]; - [self.view addSubview:forgotPasscodeButton]; + [self.view addSubview:forgotPasscodeButton]; _forgotPasscodeButton = forgotPasscodeButton; } @@ -350,9 +350,10 @@ - (void)showValidityAlertWithMessage:(NSString *)text { UIAlertController *alert = [UIAlertController alertControllerWithTitle:ORKLocalizedString(@"PASSCODE_INVALID_ALERT_TITLE", nil) message:text preferredStyle:UIAlertControllerStyleAlert]; - [alert addAction:[UIAlertAction actionWithTitle:ORKLocalizedString(@"BUTTON_OK", nil) - style:UIAlertActionStyleDefault - handler:nil]]; + [alert addAction:[UIAlertAction actionWithTitle:ORKLocalizedString(@"BUTTON_OK", nil) + style:UIAlertActionStyleDefault + handler:^(UIAlertAction * action) {NSDictionary *userDict = @{@"ORKAction":@"ORKPasscodeInvalidAlertOK"}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userDict];}]]; [self presentViewController:alert animated:YES completion:nil]; } @@ -403,6 +404,8 @@ - (NSInteger)numberOfDigitsForPasscodeType:(ORKPasscodeType)passcodeType { } - (void)cancelButtonAction { + NSDictionary* userInfo = @{@"ORKAction": @("ORKPasscodeCancel")}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userInfo]; if (self.passcodeDelegate && [self.passcodeDelegate respondsToSelector:@selector(passcodeViewControllerDidCancel:)]) { [self.passcodeDelegate passcodeViewControllerDidCancel:self]; diff --git a/iOS/MyStudies/ResearchKit/Common/ORKQuestionStepViewController.m b/iOS/MyStudies/ResearchKit/Common/ORKQuestionStepViewController.m index 7214ed48e1..cb96119d7f 100644 --- a/iOS/MyStudies/ResearchKit/Common/ORKQuestionStepViewController.m +++ b/iOS/MyStudies/ResearchKit/Common/ORKQuestionStepViewController.m @@ -594,7 +594,6 @@ - (void)notifyDelegateOnResultChange { self.continueButtonItem = self.internalContinueButtonItem; } - self.skipButtonItem = self.internalSkipButtonItem; if (!self.questionStep.optional && !self.readOnlyMode) { self.skipButtonItem = nil; } diff --git a/iOS/MyStudies/ResearchKit/Common/ORKScaleSliderView.m b/iOS/MyStudies/ResearchKit/Common/ORKScaleSliderView.m index 46c0edfe73..cbd5e593fa 100644 --- a/iOS/MyStudies/ResearchKit/Common/ORKScaleSliderView.m +++ b/iOS/MyStudies/ResearchKit/Common/ORKScaleSliderView.m @@ -3,7 +3,6 @@ Copyright (c) 2015, Ricardo Sánchez-Sáez. Copyright (c) 2015, Bruce Duncan. Copyright (c) 2018, Brian Ganninger. - Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -145,7 +144,6 @@ - (instancetype)initWithFormatProvider:(id)formatP } else { ORKScaleRangeLabel *leftRangeLabel = [[ORKScaleRangeLabel alloc] initWithFrame:CGRectZero]; leftRangeLabel.textAlignment = NSTextAlignmentCenter; - leftRangeLabel.text = [formatProvider localizedStringForNumber:[formatProvider minimumNumber]]; _leftRangeView = leftRangeLabel; } @@ -154,7 +152,6 @@ - (instancetype)initWithFormatProvider:(id)formatP } else { ORKScaleRangeLabel *rightRangeLabel = [[ORKScaleRangeLabel alloc] initWithFrame:CGRectZero]; rightRangeLabel.textAlignment = NSTextAlignmentCenter; - rightRangeLabel.text = [formatProvider localizedStringForNumber:[formatProvider maximumNumber]]; _rightRangeView = rightRangeLabel; } @@ -505,10 +502,10 @@ - (void)updateCurrentValueLabel { if ([self textScaleFormatProvider]) { ORKTextChoice *textChoice = [[self textScaleFormatProvider] textChoiceAtIndex:[self currentTextChoiceIndex]]; self.valueLabel.text = textChoice.text; - if (textChoice.primaryTextAttributedString) { - self.valueLabel.attributedText = textChoice.primaryTextAttributedString; - } } else { + if (_currentNumberValue.floatValue > -0.5 && _currentNumberValue.floatValue < 0) { + return; + } NSNumber *newValue = [_formatProvider normalizedValueForNumber:_currentNumberValue]; _valueLabel.text = [_formatProvider localizedStringForNumber:newValue]; } diff --git a/iOS/MyStudies/ResearchKit/Common/ORKSignatureStepViewController.m b/iOS/MyStudies/ResearchKit/Common/ORKSignatureStepViewController.m index 0ca97940aa..3505441172 100644 --- a/iOS/MyStudies/ResearchKit/Common/ORKSignatureStepViewController.m +++ b/iOS/MyStudies/ResearchKit/Common/ORKSignatureStepViewController.m @@ -377,6 +377,8 @@ - (ORKSignatureView *)signatureView { } - (void)clearAction:(id)sender { + NSDictionary* userInfo = @{@"ORKAction": @("ORKClearSign")}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userInfo]; [_signingView.wrapperView.signatureView clear]; [self updateButtonStates]; [self notifyDelegateOnResultChange]; diff --git a/iOS/MyStudies/ResearchKit/Common/ORKStepViewController.m b/iOS/MyStudies/ResearchKit/Common/ORKStepViewController.m index 6f6f050bce..bd157ffc9b 100644 --- a/iOS/MyStudies/ResearchKit/Common/ORKStepViewController.m +++ b/iOS/MyStudies/ResearchKit/Common/ORKStepViewController.m @@ -111,6 +111,9 @@ - (void)viewDidLoad { self.view.backgroundColor = ORKColor(ORKBackgroundColorKey); [self.taskViewController.navigationBar setBarTintColor:[self.view backgroundColor]]; + [self.navigationController.navigationBar setBackgroundColor:[self.view backgroundColor]]; + [self.navigationController.view setBackgroundColor:ORKColor(ORKLightTintColorKey)]; + if ([self step].title) { self.title = [self step].title; } else { @@ -393,7 +396,7 @@ - (void)updateNavLeftBarButtonItem { } - (void)setCancelButtonItem:(UIBarButtonItem *)cancelButton { - _cancelButtonItem = cancelButton; + _cancelButtonItem = cancelButton; } - (BOOL)hasPreviousStep { @@ -492,15 +495,17 @@ - (void)skip:(UIView *)sender { preferredStyle:UIAlertControllerStyleActionSheet]; [alert addAction:[UIAlertAction actionWithTitle:ORKLocalizedString(@"BUTTON_CLEAR_ANSWER", nil) style:UIAlertActionStyleDestructive - handler:^(UIAlertAction *action) { + handler:^(UIAlertAction *action) {NSDictionary *userDict = @{@"ORKAction":@"ORKClear Answer"}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userDict]; dispatch_async(dispatch_get_main_queue(), ^{ [self skipForward]; }); }]]; [alert addAction:[UIAlertAction actionWithTitle:ORKLocalizedString(@"BUTTON_CANCEL", nil) style:UIAlertActionStyleCancel - handler:nil - ]]; + handler:^(UIAlertAction *action) {NSDictionary *userDict = @{@"ORKAction":@"ORKCancelAlert"}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userDict]; + }]]; alert.popoverPresentationController.sourceView = sender; alert.popoverPresentationController.sourceRect = sender.bounds; [self presentViewController:alert animated:YES completion:nil]; @@ -550,7 +555,8 @@ - (void)showValidityAlertWithTitle:(NSString *)title message:(NSString *)message [alert addAction:[UIAlertAction actionWithTitle:ORKLocalizedString(@"BUTTON_CANCEL", nil) style:UIAlertActionStyleDefault - handler:nil]]; + handler:^(UIAlertAction * action) {NSDictionary *userDict = @{@"ORKAction":@"ORKCancelAlert"}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userDict];}]]; _presentingAlert = YES; [self presentViewController:alert animated:YES completion:^{ diff --git a/iOS/MyStudies/ResearchKit/Common/ORKTableContainerView.m b/iOS/MyStudies/ResearchKit/Common/ORKTableContainerView.m index 1728444d70..65ee889880 100644 --- a/iOS/MyStudies/ResearchKit/Common/ORKTableContainerView.m +++ b/iOS/MyStudies/ResearchKit/Common/ORKTableContainerView.m @@ -82,7 +82,6 @@ - (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style { [self addSubview:_tableView]; _scrollView = _tableView; - _realFooterView = [UIView new]; _realFooterView.layoutMargins = UIEdgeInsetsZero; #ifdef LAYOUT_DEBUG diff --git a/iOS/MyStudies/ResearchKit/Common/ORKTaskViewController.m b/iOS/MyStudies/ResearchKit/Common/ORKTaskViewController.m index a827adabd8..ba52776d98 100644 --- a/iOS/MyStudies/ResearchKit/Common/ORKTaskViewController.m +++ b/iOS/MyStudies/ResearchKit/Common/ORKTaskViewController.m @@ -301,6 +301,7 @@ + (ORKPageViewController *)pageViewController { for (UIScrollView *view in pageViewController.view.subviews) { if ([view isKindOfClass:[UIScrollView class]]) { view.scrollEnabled = NO; + [view setBackgroundColor:[[UIColor clearColor] colorWithAlphaComponent:1.0]]; } } return pageViewController; @@ -343,9 +344,13 @@ - (instancetype)commonInitWithTask:(id)task taskRunUUID:(NSUUID *)taskR self.taskRunUUID = taskRunUUID; - [self.childNavigationController.navigationBar setShadowImage:[UIImage new]]; + [self.childNavigationController.navigationBar setBackgroundColor:[[UIColor clearColor] colorWithAlphaComponent:1.0]]; + [self.navigationController.navigationBar setBackgroundColor:[[UIColor clearColor] colorWithAlphaComponent:1.0]]; + [self.navigationBar setBackgroundColor:[[UIColor clearColor] colorWithAlphaComponent:1.0]]; + + [self.childNavigationController.view setBackgroundColor:[[UIColor clearColor] colorWithAlphaComponent:1.0]]; self.hairline = [self findHairlineViewUnder:self.childNavigationController.navigationBar]; - self.hairline.alpha = 0.0f; + self.hairline.alpha = 1.0f; self.childNavigationController.toolbar.clipsToBounds = YES; // Ensure taskRunUUID has non-nil valuetaskRunUUID @@ -1293,7 +1298,8 @@ - (void)presentCancelOptions:(BOOL)saveable sender:(id)sender { if (supportSaving && saveable) { [alert addAction:[UIAlertAction actionWithTitle:ORKLocalizedString(@"BUTTON_OPTION_SAVE", nil) style:UIAlertActionStyleDefault - handler:^(UIAlertAction *action) { + handler:^(UIAlertAction *action) {NSDictionary *userDict = @{@"ORKAction":@"ORKSaveForLater"}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userDict]; dispatch_async(dispatch_get_main_queue(), ^{ [self finishWithReason:ORKTaskViewControllerFinishReasonSaved error:nil]; }); @@ -1306,13 +1312,20 @@ - (void)presentCancelOptions:(BOOL)saveable sender:(id)sender { style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) { dispatch_async(dispatch_get_main_queue(), ^{ + NSDictionary *userDict = @{@"ORKAction":@"ORKEndTask"}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userDict]; [self finishWithReason:ORKTaskViewControllerFinishReasonDiscarded error:nil]; }); }]]; [alert addAction:[UIAlertAction actionWithTitle:ORKLocalizedString(@"BUTTON_CANCEL", nil) style:UIAlertActionStyleCancel - handler:nil]]; + handler:^(UIAlertAction *action) { + dispatch_async(dispatch_get_main_queue(), ^{NSDictionary *userDict = @{@"ORKAction":@"ORKCancelAlert"}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userDict]; + [self finishWithReason:ORKTaskViewControllerFinishReasonDiscarded error:nil]; + }); + }]]; [self presentViewController:alert animated:YES completion:nil]; } @@ -1347,6 +1360,8 @@ - (IBAction)cancelAction:(UIBarButtonItem *)sender { - (IBAction)learnMoreAction:(id)sender { if (self.delegate && [self.delegate respondsToSelector:@selector(taskViewController:learnMoreForStep:)]) { + NSDictionary* userInfo = @{@"ORKAction": @("ORKLearnMore")}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userInfo]; [self.delegate taskViewController:self learnMoreForStep:self.currentStepViewController]; } } @@ -1418,12 +1433,14 @@ - (void)stepViewControllerWillAppear:(ORKStepViewController *)viewController { - (void)stepViewController:(ORKStepViewController *)stepViewController didFinishWithNavigationDirection:(ORKStepViewControllerNavigationDirection)direction { - if (!stepViewController.readOnlyMode) { - // Add step result object - [self setManagedResult:[stepViewController result] forKey:stepViewController.step.identifier]; + if (stepViewController != nil) { + if (!stepViewController.readOnlyMode) { + // Add step result object + [self setManagedResult:[stepViewController result] forKey:stepViewController.step.identifier]; + } } - // Alert the delegate that the step is finished + // Alert the delegate that the step is finished ORKStrongTypeOf(self.delegate) strongDelegate = self.delegate; if ([strongDelegate respondsToSelector:@selector(taskViewController:stepViewControllerWillDisappear:navigationDirection:)]) { [strongDelegate taskViewController:self stepViewControllerWillDisappear:stepViewController navigationDirection:direction]; diff --git a/iOS/MyStudies/ResearchKit/Consent/ORKConsentLearnMoreViewController.m b/iOS/MyStudies/ResearchKit/Consent/ORKConsentLearnMoreViewController.m index 347fd31b74..098a515a97 100644 --- a/iOS/MyStudies/ResearchKit/Consent/ORKConsentLearnMoreViewController.m +++ b/iOS/MyStudies/ResearchKit/Consent/ORKConsentLearnMoreViewController.m @@ -68,7 +68,9 @@ - (instancetype)initWithContentURL:(NSURL *)contentURL { - (void)viewDidLoad { [super viewDidLoad]; - + NSDictionary *userDict = @{@"ORKAction":@"ORKLearnMore"}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userDict]; + self.view.backgroundColor = ORKColor(ORKBackgroundColorKey); WKWebViewConfiguration *webViewConfiguration = [WKWebViewConfiguration new]; @@ -118,6 +120,8 @@ - (void)setUpConstraints { } - (IBAction)done:(id)sender { + NSDictionary *userDict = @{@"ORKAction":@"ORKLearnMoreDone"}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userDict]; [self.presentingViewController dismissViewControllerAnimated:YES completion:nil]; } diff --git a/iOS/MyStudies/ResearchKit/Consent/ORKConsentReviewController.m b/iOS/MyStudies/ResearchKit/Consent/ORKConsentReviewController.m index cb5323feba..74eb35952f 100644 --- a/iOS/MyStudies/ResearchKit/Consent/ORKConsentReviewController.m +++ b/iOS/MyStudies/ResearchKit/Consent/ORKConsentReviewController.m @@ -87,6 +87,10 @@ - (void)viewDidLoad { self.view.backgroundColor = ORKColor(ORKConsentBackgroundColorKey); if (self.navigationController.navigationBar) { [self.navigationController.navigationBar setBarTintColor:self.view.backgroundColor]; + + [self.navigationController.navigationBar setBackgroundColor:self.view.backgroundColor]; + [self.navigationController.view setBackgroundColor:self.view.backgroundColor]; + } WKWebViewConfiguration *webViewConfiguration = [WKWebViewConfiguration new]; @@ -189,6 +193,8 @@ - (void)updateViewConstraints { } - (IBAction)cancel { + NSDictionary *userDict = @{@"ORKAction":@"ORKReviewDisAgree"}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userDict]; if (self.delegate && [self.delegate respondsToSelector:@selector(consentReviewControllerDidCancel:)]) { [self.delegate consentReviewControllerDidCancel:self]; } @@ -201,12 +207,20 @@ - (void)doAck { } - (IBAction)ack { + NSDictionary *userDict = @{@"ORKAction":@"ORKReviewAgree"}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userDict]; UIAlertController *alert = [UIAlertController alertControllerWithTitle:ORKLocalizedString(@"CONSENT_REVIEW_ALERT_TITLE", nil) message:self.localizedReasonForConsent preferredStyle:UIAlertControllerStyleAlert]; - [alert addAction:[UIAlertAction actionWithTitle:ORKLocalizedString(@"BUTTON_CANCEL", nil) style:UIAlertActionStyleDefault handler:nil]]; + [alert addAction:[UIAlertAction actionWithTitle:ORKLocalizedString(@"BUTTON_CANCEL", nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){ + NSDictionary* userInfo = @{@"ORKAction": @("ORKReviewCancel")}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userInfo]; + }]]; + [alert addAction:[UIAlertAction actionWithTitle:ORKLocalizedString(@"BUTTON_AGREE", nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { + NSDictionary* userInfo = @{@"ORKAction": @("ORKReviewAgreeAlert")}; + [[NSNotificationCenter defaultCenter] postNotificationName:@"ORKAction" object: nil userInfo: userInfo]; // Have to dispatch, so following transition animation works dispatch_async(dispatch_get_main_queue(), ^{ [self doAck]; diff --git a/iOS/MyStudies/ResearchKit/Consent/ORKVisualConsentStepViewController.m b/iOS/MyStudies/ResearchKit/Consent/ORKVisualConsentStepViewController.m index 1d99ba655d..ea773ef88c 100644 --- a/iOS/MyStudies/ResearchKit/Consent/ORKVisualConsentStepViewController.m +++ b/iOS/MyStudies/ResearchKit/Consent/ORKVisualConsentStepViewController.m @@ -289,7 +289,11 @@ - (void)viewDidLoad { [_pageViewController didMoveToParentViewController:self]; if (self.taskViewController.navigationBar) { - [self.taskViewController.navigationBar setBarTintColor:self.view.backgroundColor]; + [self.taskViewController.navigationBar setBarTintColor:self.view.backgroundColor]; + [self.navigationController.navigationBar setBackgroundColor:self.view.backgroundColor]; + [self.navigationController.view setBackgroundColor:self.view.backgroundColor]; + [_pageViewController.navigationController.view setBackgroundColor:self.view.backgroundColor]; + [_pageViewController.view setBackgroundColor:self.view.backgroundColor]; } _animationView.userInteractionEnabled = NO; diff --git a/participant-datastore/consent-mgmt-module/consent-mgmt/pom.xml b/participant-datastore/consent-mgmt-module/consent-mgmt/pom.xml index 4de833a604..4b2750b19d 100644 --- a/participant-datastore/consent-mgmt-module/consent-mgmt/pom.xml +++ b/participant-datastore/consent-mgmt-module/consent-mgmt/pom.xml @@ -79,12 +79,12 @@ org.apache.logging.log4j log4j-core - 2.16.0 + 2.17.1 org.apache.logging.log4j log4j-api - 2.16.0 + 2.17.1 org.springframework.boot diff --git a/participant-datastore/enroll-mgmt-module/enroll-mgmt/pom.xml b/participant-datastore/enroll-mgmt-module/enroll-mgmt/pom.xml index 027c2a059e..68a7500ebd 100644 --- a/participant-datastore/enroll-mgmt-module/enroll-mgmt/pom.xml +++ b/participant-datastore/enroll-mgmt-module/enroll-mgmt/pom.xml @@ -55,12 +55,12 @@ org.apache.logging.log4j log4j-core - 2.16.0 + 2.17.1 org.apache.logging.log4j log4j-api - 2.16.0 + 2.17.1 org.springframework.boot diff --git a/participant-datastore/user-mgmt-module/user-mgmt/pom.xml b/participant-datastore/user-mgmt-module/user-mgmt/pom.xml index f5247367b5..04c7a9b2a8 100644 --- a/participant-datastore/user-mgmt-module/user-mgmt/pom.xml +++ b/participant-datastore/user-mgmt-module/user-mgmt/pom.xml @@ -77,12 +77,12 @@ org.apache.logging.log4j log4j-core - 2.16.0 + 2.17.1 org.apache.logging.log4j log4j-api - 2.16.0 + 2.17.1 org.springframework.boot diff --git a/participant-manager/Dockerfile b/participant-manager/Dockerfile index a420fd703d..1058a441e4 100644 --- a/participant-manager/Dockerfile +++ b/participant-manager/Dockerfile @@ -5,7 +5,7 @@ # https://opensource.org/licenses/MIT. # Stage 1 # Installing all the dependencies and creating Dist file or building angular application -FROM node:12.16.1 AS compile-image +FROM node:12.20 AS compile-image ARG BASE_HREF=/participant-manager WORKDIR /app COPY . ./ diff --git a/participant-manager/package-lock.json b/participant-manager/package-lock.json index 861920c0c1..207e7a90b4 100644 --- a/participant-manager/package-lock.json +++ b/participant-manager/package-lock.json @@ -4,10 +4,19 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@ampproject/remapping": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", + "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.0" + } + }, "@angular-devkit/architect": { "version": "0.803.29", - "resolved": "https://registry.npm.taobao.org/@angular-devkit/architect/download/@angular-devkit/architect-0.803.29.tgz", - "integrity": "sha1-A5mWkIesd4drjkKcsm7r0gWWYHs=", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.803.29.tgz", + "integrity": "sha512-yHBud/fZHTelX24yjQg5lefZrfIebruoFTGeOwF0JdX8+KiHcTIxS4LOnUTYriasfHarcHRFXBAV/bRm+wv5ow==", "requires": { "@angular-devkit/core": "8.3.29", "rxjs": "6.4.0" @@ -15,8 +24,8 @@ "dependencies": { "rxjs": { "version": "6.4.0", - "resolved": "https://registry.npm.taobao.org/rxjs/download/rxjs-6.4.0.tgz?cache=0&sync_timestamp=1602773032725&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frxjs%2Fdownload%2Frxjs-6.4.0.tgz", - "integrity": "sha1-87sP572n+2nerAwW8XtQsLh5BQQ=", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", + "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", "requires": { "tslib": "^1.9.0" } @@ -24,21 +33,21 @@ } }, "@angular-devkit/build-angular": { - "version": "0.901.13", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.901.13.tgz", - "integrity": "sha512-CJg6XTw+fYQOuu1Lt4g2KANxo0bdvpj+ozaVIM3u3ejjrvZB1FS+oDJLubkPW8PCQZHOEM8VugQKameZemqwfQ==", + "version": "0.901.15", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.901.15.tgz", + "integrity": "sha512-Qhyfnjda+lbI97xpimb0g6RYiu/Xf/Awtx2xBRaE0pGW/T/qrGEeKwF4mu2CAgDSHK+0+V1msW8ttPMw+Z8org==", "dev": true, "requires": { - "@angular-devkit/architect": "0.901.13", - "@angular-devkit/build-optimizer": "0.901.13", - "@angular-devkit/build-webpack": "0.901.13", - "@angular-devkit/core": "9.1.13", + "@angular-devkit/architect": "0.901.15", + "@angular-devkit/build-optimizer": "0.901.15", + "@angular-devkit/build-webpack": "0.901.15", + "@angular-devkit/core": "9.1.15", "@babel/core": "7.9.0", "@babel/generator": "7.9.3", "@babel/preset-env": "7.9.0", "@babel/template": "7.8.6", "@jsdevtools/coverage-istanbul-loader": "3.0.3", - "@ngtools/webpack": "9.1.13", + "@ngtools/webpack": "9.1.15", "ajv": "6.12.3", "autoprefixer": "9.7.4", "babel-loader": "8.0.6", @@ -93,19 +102,19 @@ }, "dependencies": { "@angular-devkit/architect": { - "version": "0.901.13", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.901.13.tgz", - "integrity": "sha512-vwIVlG+4TJKcnwMcgpkrMXXzjKnk87AEmgERynJVxGYpRJYppHWd6ul7bYdJQATuLUNbJrgdc+lvU4PZqi8Z2A==", + "version": "0.901.15", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.901.15.tgz", + "integrity": "sha512-t4yT34jQ3wA3NFZxph/PquITv8tFrkaexUusbNp4UN10+k+04lPF3aPnJJhM1VKjjfChznMMhLnqLjA+9o0Rmw==", "dev": true, "requires": { - "@angular-devkit/core": "9.1.13", + "@angular-devkit/core": "9.1.15", "rxjs": "6.5.4" } }, "@angular-devkit/core": { - "version": "9.1.13", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.13.tgz", - "integrity": "sha512-bwehVRsva9OWfh/yuEh9VU+0Gr1T7DHJLe8tpZk/VsIkGOD0IszEPZOIEK23bg32yiff9bh6qJEPMA7ZBYEQHg==", + "version": "9.1.15", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.15.tgz", + "integrity": "sha512-zyUDaFQvnqsptoXhodbH4u+voXIldfDx+d0M2OMLj0tbfD4zp2fy7UOeTvu+lq2/LLNAObkG4JSK5DM9v1s08w==", "dev": true, "requires": { "ajv": "6.12.3", @@ -172,6 +181,20 @@ "minipass": "^3.0.0" } }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -190,10 +213,19 @@ "sourcemap-codec": "^1.4.4" } }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -225,6 +257,25 @@ "is-wsl": "^2.1.1" } }, + "postcss": { + "version": "7.0.27", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz", + "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -250,18 +301,27 @@ "dev": true }, "ssri": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz", - "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "dev": true, "requires": { "minipass": "^3.1.1" } }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, "tar": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz", - "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==", + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", "dev": true, "requires": { "chownr": "^2.0.0", @@ -298,9 +358,9 @@ } }, "@angular-devkit/build-optimizer": { - "version": "0.901.13", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.901.13.tgz", - "integrity": "sha512-FbUt5xKks8MfUCpzbr3C8/uHr0GbQijHI3byrsoFvFNRd6e2ZO7qt6yvqqz5VVM7fW0o/RBl4i3WobVsw5QFDg==", + "version": "0.901.15", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.901.15.tgz", + "integrity": "sha512-fCX27AAaM91UlNtjwUhqBFTvL3U0PexeVpQORJ7hAr4DG1z3DUHJS4RHCjlgM060ny0fj1V5gu21j1QAQx52vA==", "dev": true, "requires": { "loader-utils": "2.0.0", @@ -325,30 +385,30 @@ } }, "@angular-devkit/build-webpack": { - "version": "0.901.13", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.901.13.tgz", - "integrity": "sha512-Hgxax3E5YzFyBT6+GEt6NcKVKKxt6x77gALpY14Hj1qc/Axdre8uWjPIiKnXw1TX4SyU5sg9LkUz8IaaJ60EOQ==", + "version": "0.901.15", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.901.15.tgz", + "integrity": "sha512-vETkDD3xbWtm5zylKhKG2IYjmnED5DPBHCg/M0QmxMBEEiZOtqVrAwkJGSnErVInPmqW0jixIz3wCiMUBBA/dQ==", "dev": true, "requires": { - "@angular-devkit/architect": "0.901.13", - "@angular-devkit/core": "9.1.13", + "@angular-devkit/architect": "0.901.15", + "@angular-devkit/core": "9.1.15", "rxjs": "6.5.4" }, "dependencies": { "@angular-devkit/architect": { - "version": "0.901.13", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.901.13.tgz", - "integrity": "sha512-vwIVlG+4TJKcnwMcgpkrMXXzjKnk87AEmgERynJVxGYpRJYppHWd6ul7bYdJQATuLUNbJrgdc+lvU4PZqi8Z2A==", + "version": "0.901.15", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.901.15.tgz", + "integrity": "sha512-t4yT34jQ3wA3NFZxph/PquITv8tFrkaexUusbNp4UN10+k+04lPF3aPnJJhM1VKjjfChznMMhLnqLjA+9o0Rmw==", "dev": true, "requires": { - "@angular-devkit/core": "9.1.13", + "@angular-devkit/core": "9.1.15", "rxjs": "6.5.4" } }, "@angular-devkit/core": { - "version": "9.1.13", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.13.tgz", - "integrity": "sha512-bwehVRsva9OWfh/yuEh9VU+0Gr1T7DHJLe8tpZk/VsIkGOD0IszEPZOIEK23bg32yiff9bh6qJEPMA7ZBYEQHg==", + "version": "9.1.15", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.15.tgz", + "integrity": "sha512-zyUDaFQvnqsptoXhodbH4u+voXIldfDx+d0M2OMLj0tbfD4zp2fy7UOeTvu+lq2/LLNAObkG4JSK5DM9v1s08w==", "dev": true, "requires": { "ajv": "6.12.3", @@ -386,8 +446,8 @@ }, "@angular-devkit/core": { "version": "8.3.29", - "resolved": "https://registry.npm.taobao.org/@angular-devkit/core/download/@angular-devkit/core-8.3.29.tgz", - "integrity": "sha1-NHft1kWGU/g+bXhoSxAMG++BOC8=", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-8.3.29.tgz", + "integrity": "sha512-4jdja9QPwR6XG14ZSunyyOWT3nE2WtZC5IMDIBZADxujXvhzOU0n4oWpy6/JVHLUAxYNNgzLz+/LQORRWndcPg==", "requires": { "ajv": "6.12.3", "fast-json-stable-stringify": "2.0.0", @@ -398,8 +458,8 @@ "dependencies": { "rxjs": { "version": "6.4.0", - "resolved": "https://registry.npm.taobao.org/rxjs/download/rxjs-6.4.0.tgz?cache=0&sync_timestamp=1602773032725&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frxjs%2Fdownload%2Frxjs-6.4.0.tgz", - "integrity": "sha1-87sP572n+2nerAwW8XtQsLh5BQQ=", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", + "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", "requires": { "tslib": "^1.9.0" } @@ -408,8 +468,8 @@ }, "@angular-devkit/schematics": { "version": "8.3.29", - "resolved": "https://registry.npm.taobao.org/@angular-devkit/schematics/download/@angular-devkit/schematics-8.3.29.tgz", - "integrity": "sha1-s7pli5D7MiaoD/Epd7591YPpnEk=", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-8.3.29.tgz", + "integrity": "sha512-AFJ9EK0XbcNlO5Dm9vr0OlBo1Nw6AaFXPR+DmHGBdcDDHxqEmYYLWfT+JU/8U2YFIdgrtlwvdtf6UQ3V2jdz1g==", "requires": { "@angular-devkit/core": "8.3.29", "rxjs": "6.4.0" @@ -417,8 +477,8 @@ "dependencies": { "rxjs": { "version": "6.4.0", - "resolved": "https://registry.npm.taobao.org/rxjs/download/rxjs-6.4.0.tgz?cache=0&sync_timestamp=1602773032725&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frxjs%2Fdownload%2Frxjs-6.4.0.tgz", - "integrity": "sha1-87sP572n+2nerAwW8XtQsLh5BQQ=", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", + "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", "requires": { "tslib": "^1.9.0" } @@ -427,14 +487,14 @@ }, "@angular-eslint/builder": { "version": "0.0.1-alpha.32", - "resolved": "https://registry.npm.taobao.org/@angular-eslint/builder/download/@angular-eslint/builder-0.0.1-alpha.32.tgz", - "integrity": "sha1-4XWFFLGFONr4we1Iku/vMuHJG4Q=", + "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-0.0.1-alpha.32.tgz", + "integrity": "sha512-U32wnZoY0IjcEG02DhTglEWvf9xptXCWy72o/OKtoqMcvMXK3qb6/KWFmAYodJ7ozCYk7Hp/eE072ZkGts4IhQ==", "dev": true }, "@angular-eslint/eslint-plugin": { "version": "0.0.1-alpha.32", - "resolved": "https://registry.npm.taobao.org/@angular-eslint/eslint-plugin/download/@angular-eslint/eslint-plugin-0.0.1-alpha.32.tgz", - "integrity": "sha1-XBN7d+1wVMtYho2Wb7TGVy0dA8U=", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-0.0.1-alpha.32.tgz", + "integrity": "sha512-QZWDK8ze+rFRXlrqrwxQTj9IVJ/GyoRNFTGUsMjkw1usREghQZmrl3zHLm7YvjPQp8vT+QUKrWu8jP7lB/+pKg==", "dev": true, "requires": { "@typescript-eslint/experimental-utils": "2.31.0" @@ -442,8 +502,8 @@ }, "@angular-eslint/eslint-plugin-template": { "version": "0.0.1-alpha.32", - "resolved": "https://registry.npm.taobao.org/@angular-eslint/eslint-plugin-template/download/@angular-eslint/eslint-plugin-template-0.0.1-alpha.32.tgz", - "integrity": "sha1-U9Dvaje+yUs4ubGSTultHyjrNW8=", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-0.0.1-alpha.32.tgz", + "integrity": "sha512-IQtH+QW4a94cD+3dXJzPhK/gejAjqQGL/y9SaBVa7CMseG1bt4SCEMynPm7k+dE8Sm3ql6NM9Cs23szr4uBYFQ==", "dev": true, "requires": { "@typescript-eslint/experimental-utils": "2.31.0" @@ -451,14 +511,14 @@ }, "@angular-eslint/schematics": { "version": "0.0.1-alpha.32", - "resolved": "https://registry.npm.taobao.org/@angular-eslint/schematics/download/@angular-eslint/schematics-0.0.1-alpha.32.tgz", - "integrity": "sha1-MKVWCEoO6ZPEQ38fPCitpI1DpH8=", + "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-0.0.1-alpha.32.tgz", + "integrity": "sha512-eLeNgWEvtBrAXyJEfNuUucOkkJKHI0ID6SZTdtjUWiUev/fb9W5eqC2VHqsKB9kU4s+5FuTucFeNuUxBTif3kg==", "dev": true }, "@angular-eslint/template-parser": { "version": "0.0.1-alpha.32", - "resolved": "https://registry.npm.taobao.org/@angular-eslint/template-parser/download/@angular-eslint/template-parser-0.0.1-alpha.32.tgz", - "integrity": "sha1-re+331pAfiReZ2sMqRTKIe0oAv8=", + "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-0.0.1-alpha.32.tgz", + "integrity": "sha512-hq4AkDAcZSpuYAbk74R8znGMIbiBJRbnPDMtQyQWxsPDEQ+HML8AVctFWzemUR+S60PGbtxj8P8kb9shW/3zRQ==", "dev": true, "requires": { "eslint-scope": "^4.0.0" @@ -470,16 +530,16 @@ "integrity": "sha512-ane1eeQmsP7fcAiLgRhle7YIDgE88WDMMvzqJYhSxwLzXNF/hwqNeskmNcjo8bLt9h/yTIjrCQbycLCHJfU8UQ==" }, "@angular/cli": { - "version": "9.1.13", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-9.1.13.tgz", - "integrity": "sha512-KfonsB9uBdYbCipjPX/vk+ouMNT5ugxG5O0Y3uMKDnzSYGz+wKjHxOYR+lx1kaQtEsBOTX0DUmce0shZZKbbGQ==", + "version": "9.1.15", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-9.1.15.tgz", + "integrity": "sha512-jwwhXTH8ujKmx4/jsaFkSBvqyyMTUNeMHaMDKaChDtwRnNc0UGDEqMAVnVnXaXiIn1tnzzdHjW4BY35CjnvpCg==", "dev": true, "requires": { - "@angular-devkit/architect": "0.901.13", - "@angular-devkit/core": "9.1.13", - "@angular-devkit/schematics": "9.1.13", - "@schematics/angular": "9.1.13", - "@schematics/update": "0.901.13", + "@angular-devkit/architect": "0.901.15", + "@angular-devkit/core": "9.1.15", + "@angular-devkit/schematics": "9.1.15", + "@schematics/angular": "9.1.15", + "@schematics/update": "0.901.15", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.1", "debug": "4.1.1", @@ -498,19 +558,19 @@ }, "dependencies": { "@angular-devkit/architect": { - "version": "0.901.13", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.901.13.tgz", - "integrity": "sha512-vwIVlG+4TJKcnwMcgpkrMXXzjKnk87AEmgERynJVxGYpRJYppHWd6ul7bYdJQATuLUNbJrgdc+lvU4PZqi8Z2A==", + "version": "0.901.15", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.901.15.tgz", + "integrity": "sha512-t4yT34jQ3wA3NFZxph/PquITv8tFrkaexUusbNp4UN10+k+04lPF3aPnJJhM1VKjjfChznMMhLnqLjA+9o0Rmw==", "dev": true, "requires": { - "@angular-devkit/core": "9.1.13", + "@angular-devkit/core": "9.1.15", "rxjs": "6.5.4" } }, "@angular-devkit/core": { - "version": "9.1.13", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.13.tgz", - "integrity": "sha512-bwehVRsva9OWfh/yuEh9VU+0Gr1T7DHJLe8tpZk/VsIkGOD0IszEPZOIEK23bg32yiff9bh6qJEPMA7ZBYEQHg==", + "version": "9.1.15", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.15.tgz", + "integrity": "sha512-zyUDaFQvnqsptoXhodbH4u+voXIldfDx+d0M2OMLj0tbfD4zp2fy7UOeTvu+lq2/LLNAObkG4JSK5DM9v1s08w==", "dev": true, "requires": { "ajv": "6.12.3", @@ -521,34 +581,34 @@ } }, "@angular-devkit/schematics": { - "version": "9.1.13", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-9.1.13.tgz", - "integrity": "sha512-DZBmfYE6xIfC6PDMvQpR8B31TtLWOmSeTQPnmSm9gj6OZpyqFqoGWOz/0l05FH6zC8HLthAAFJSEnPYyhzWDvg==", + "version": "9.1.15", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-9.1.15.tgz", + "integrity": "sha512-phE8jNUeOiX1Co+4sLCHi1rMoOrqEmIRKOI4Saorn2d2S7b21k9lf4Z/GFwQ7djsfoxKkMP8zhd/M4hkVMxeNw==", "dev": true, "requires": { - "@angular-devkit/core": "9.1.13", + "@angular-devkit/core": "9.1.15", "ora": "4.0.3", "rxjs": "6.5.4" } }, "@schematics/angular": { - "version": "9.1.13", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-9.1.13.tgz", - "integrity": "sha512-coHvhu2jXVCN3P5Ux5ArDousMWDq4W6eInJPBpAI6yidRW1ViPVF58Bas/+Txcbhubv2cZViBXGq0OAGdJIvTQ==", + "version": "9.1.15", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-9.1.15.tgz", + "integrity": "sha512-ycbwKGurxcV8LRW4xCJtGNEj1h/ALI9RKwkBEirWfZhMeE7391A6aoVGzWrbUxWqqXA2AIQR0W34yXWne+GK3Q==", "dev": true, "requires": { - "@angular-devkit/core": "9.1.13", - "@angular-devkit/schematics": "9.1.13" + "@angular-devkit/core": "9.1.15", + "@angular-devkit/schematics": "9.1.15" } }, "@schematics/update": { - "version": "0.901.13", - "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.901.13.tgz", - "integrity": "sha512-Q+jIzDP01XvXLiDfuiBsDBE18KOA2aduNuHnTlRJpWQuMR16J2sOSrHXXn53oZ14cqiUSdUWDTivMpaUGkXd5g==", + "version": "0.901.15", + "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.901.15.tgz", + "integrity": "sha512-JOKhK7HkjPqd6pvIb6qIB9agYRJXT223NsYoVzG9GD2tmvipl6gDfR7GeSfuc7wxNQy8DkxvOfxn0lytz5NKLQ==", "dev": true, "requires": { - "@angular-devkit/core": "9.1.13", - "@angular-devkit/schematics": "9.1.13", + "@angular-devkit/core": "9.1.15", + "@angular-devkit/schematics": "9.1.15", "@yarnpkg/lockfile": "1.1.0", "ini": "1.3.6", "npm-package-arg": "^8.0.0", @@ -614,9 +674,9 @@ "dev": true }, "hosted-git-info": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.7.tgz", - "integrity": "sha512-fWqc0IcuXs+BmE9orLDyVykAG9GJtGLGuZAAqgcckPgv5xad4AcXGIv8galtQvlwutxSlaMcdw7BUtq2EIvqCQ==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -747,9 +807,9 @@ }, "dependencies": { "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "lru-cache": { @@ -832,12 +892,12 @@ "dev": true }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } }, "supports-color": { @@ -956,6 +1016,26 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "fs-extra": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz", + "integrity": "sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -963,14 +1043,20 @@ "dev": true }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -983,9 +1069,9 @@ } }, "y18n": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", - "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, "yargs": { @@ -1004,9 +1090,9 @@ } }, "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true } } @@ -1043,18 +1129,18 @@ "integrity": "sha512-AvqjCsxdzBqOGsPuyCtHb2ckfNhCEGrDfkFmZ5jT9MwohCVbChCKtwEH4cwlph6Tpxvu1a4zSryxOf5q8OSsJQ==" }, "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.10.4.tgz?cache=0&sync_timestamp=1593521328173&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.10.4.tgz", - "integrity": "sha1-Fo2ho26Q2miujUnA8bSMfGJJITo=", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "dev": true, "requires": { - "@babel/highlight": "^7.10.4" + "@babel/highlight": "^7.16.7" } }, "@babel/compat-data": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.7.tgz", - "integrity": "sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.7.tgz", + "integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==", "dev": true }, "@babel/core": { @@ -1089,16 +1175,45 @@ }, "source-map": { "version": "0.5.7", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true } } }, + "@babel/eslint-parser": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.17.0.tgz", + "integrity": "sha512-PUEJ7ZBXbRkbq3qqM/jZ2nIuakUBqCYc7Qf52Lj7dlZ6zERnqisdHioL0l4wwQZnmskMeasqUNzLBFKs3nylXA==", + "dev": true, + "requires": { + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, "@babel/generator": { "version": "7.9.3", - "resolved": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.9.3.tgz", - "integrity": "sha1-fIspVsb2izq3Mr0WMFkW+7pSHZQ=", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.3.tgz", + "integrity": "sha512-RpxM252EYsz9qLUIq6F7YJyK1sv0wWDBFuztfDGWaQKzHjqDHysxSiRUpA/X9jmfqo+WzkAVKFaUily5h+gDCQ==", "dev": true, "requires": { "@babel/types": "^7.9.0", @@ -1109,596 +1224,387 @@ "dependencies": { "source-map": { "version": "0.5.7", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true } } }, "@babel/helper-annotate-as-pure": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz", - "integrity": "sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", "dev": true, "requires": { - "@babel/types": "^7.12.10" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", - "dev": true - }, - "@babel/types": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.11.tgz", - "integrity": "sha512-ukA9SQtKThINm++CX1CwmliMrE54J6nIYB5XTwL5f/CLFW9owfls+YSU8tVW15RQ2w+a3fSbPjC6HdQNtWZkiA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + "@babel/types": "^7.16.7" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", + "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-explode-assignable-expression": "^7.16.7", + "@babel/types": "^7.16.7" } }, "@babel/helper-compilation-targets": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz", - "integrity": "sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz", + "integrity": "sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==", "dev": true, "requires": { - "@babel/compat-data": "^7.12.5", - "@babel/helper-validator-option": "^7.12.1", - "browserslist": "^4.14.5", - "semver": "^5.5.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } + "@babel/compat-data": "^7.17.7", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz", - "integrity": "sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz", + "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "regexpu-core": "^4.7.1" + "@babel/helper-annotate-as-pure": "^7.16.7", + "regexpu-core": "^5.0.1" } }, - "@babel/helper-define-map": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", - "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", + "@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" + "@babel/types": "^7.16.7" } }, "@babel/helper-explode-assignable-expression": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", - "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", + "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", "dev": true, "requires": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.16.7" } }, "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.10.4.tgz?cache=0&sync_timestamp=1593521334070&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-function-name%2Fdownload%2F%40babel%2Fhelper-function-name-7.10.4.tgz", - "integrity": "sha1-0tOyDFmtjEcRL6fSqUvAnV74Lxo=", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", + "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/template": "^7.16.7", + "@babel/types": "^7.17.0" }, "dependencies": { "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.10.4.tgz?cache=0&sync_timestamp=1593521331771&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftemplate%2Fdownload%2F%40babel%2Ftemplate-7.10.4.tgz", - "integrity": "sha1-MlGZbEIA68cdGo/EBfupQPNrong=", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", "dev": true, "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" } } } }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.10.4.tgz?cache=0&sync_timestamp=1593524745866&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-get-function-arity%2Fdownload%2F%40babel%2Fhelper-get-function-arity-7.10.4.tgz", - "integrity": "sha1-mMHL6g4jMvM/mkZhuM4VBbLBm6I=", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, "@babel/helper-hoist-variables": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", - "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.16.7" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", - "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", + "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", "dev": true, "requires": { - "@babel/types": "^7.12.7" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", - "dev": true - }, - "@babel/types": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.11.tgz", - "integrity": "sha512-ukA9SQtKThINm++CX1CwmliMrE54J6nIYB5XTwL5f/CLFW9owfls+YSU8tVW15RQ2w+a3fSbPjC6HdQNtWZkiA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + "@babel/types": "^7.17.0" } }, "@babel/helper-module-imports": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", - "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", "dev": true, "requires": { - "@babel/types": "^7.12.5" + "@babel/types": "^7.16.7" } }, "@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", + "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "lodash": "^4.17.19" + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" }, "dependencies": { - "@babel/parser": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", - "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==", - "dev": true - }, "@babel/template": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", - "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", "dev": true, "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.12.7", - "@babel/types": "^7.12.7" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", - "dev": true - }, - "@babel/types": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.11.tgz", - "integrity": "sha512-ukA9SQtKThINm++CX1CwmliMrE54J6nIYB5XTwL5f/CLFW9owfls+YSU8tVW15RQ2w+a3fSbPjC6HdQNtWZkiA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" } } } }, "@babel/helper-optimise-call-expression": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz", - "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", "dev": true, "requires": { - "@babel/types": "^7.12.10" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", - "dev": true - }, - "@babel/types": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.11.tgz", - "integrity": "sha512-ukA9SQtKThINm++CX1CwmliMrE54J6nIYB5XTwL5f/CLFW9owfls+YSU8tVW15RQ2w+a3fSbPjC6HdQNtWZkiA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + "@babel/types": "^7.16.7" } }, "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", "dev": true }, "@babel/helper-remap-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", - "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", + "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-wrap-function": "^7.10.4", - "@babel/types": "^7.12.1" + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-wrap-function": "^7.16.8", + "@babel/types": "^7.16.8" } }, "@babel/helper-replace-supers": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz", - "integrity": "sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", + "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.7", - "@babel/helper-optimise-call-expression": "^7.12.10", - "@babel/traverse": "^7.12.10", - "@babel/types": "^7.12.11" - }, - "dependencies": { - "@babel/generator": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz", - "integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.11", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", - "dev": true - }, - "@babel/parser": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", - "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==", - "dev": true - }, - "@babel/traverse": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.10.tgz", - "integrity": "sha512-6aEtf0IeRgbYWzta29lePeYSk+YAFIC3kyqESeft8o5CkFlYIMX+EQDDWEiAQ9LHOA3d0oHdgrSsID/CKqXJlg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.10", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.10", - "@babel/types": "^7.12.10", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.11.tgz", - "integrity": "sha512-ukA9SQtKThINm++CX1CwmliMrE54J6nIYB5XTwL5f/CLFW9owfls+YSU8tVW15RQ2w+a3fSbPjC6HdQNtWZkiA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" } }, "@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", + "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", "dev": true, "requires": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.17.0" } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", + "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", "dev": true, "requires": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.16.0" } }, "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha1-+KSRJErPamdhWKxCBykRuoOtCZ8=", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", "dev": true, "requires": { - "@babel/types": "^7.11.0" + "@babel/types": "^7.16.7" } }, "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha1-p4x6clHgH2FlEtMbEK3PUq2l4NI=", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", "dev": true }, "@babel/helper-validator-option": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz", - "integrity": "sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", "dev": true }, "@babel/helper-wrap-function": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", - "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", + "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-function-name": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8" }, "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", - "dev": true - }, - "@babel/parser": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", - "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==", - "dev": true - }, "@babel/template": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", - "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", "dev": true, "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.12.7", - "@babel/types": "^7.12.7" - }, - "dependencies": { - "@babel/types": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.11.tgz", - "integrity": "sha512-ukA9SQtKThINm++CX1CwmliMrE54J6nIYB5XTwL5f/CLFW9owfls+YSU8tVW15RQ2w+a3fSbPjC6HdQNtWZkiA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" } } } }, "@babel/helpers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", - "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", + "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", "dev": true, "requires": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.9", + "@babel/types": "^7.17.0" }, "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", - "dev": true - }, - "@babel/parser": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", - "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==", - "dev": true - }, "@babel/template": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", - "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", "dev": true, "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.12.7", - "@babel/types": "^7.12.7" - }, - "dependencies": { - "@babel/types": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.11.tgz", - "integrity": "sha512-ukA9SQtKThINm++CX1CwmliMrE54J6nIYB5XTwL5f/CLFW9owfls+YSU8tVW15RQ2w+a3fSbPjC6HdQNtWZkiA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" } } } }, "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.10.4.tgz?cache=0&sync_timestamp=1593521087106&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhighlight%2Fdownload%2F%40babel%2Fhighlight-7.10.4.tgz", - "integrity": "sha1-fRvf1ldTU4+r5sOFls23bZrGAUM=", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz", + "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.12.5", - "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.12.5.tgz", - "integrity": "sha1-tK8y3dRzwL+mQ71/8HKLjnG4HqA=", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.9.tgz", + "integrity": "sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==", "dev": true }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", - "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", + "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1", - "@babel/plugin-syntax-async-generators": "^7.8.0" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8", + "@babel/plugin-syntax-async-generators": "^7.8.4" } }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", - "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", + "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" } }, "@babel/plugin-proposal-json-strings": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", - "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz", + "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.0" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-json-strings": "^7.8.3" } }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", - "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", + "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, "@babel/plugin-proposal-numeric-separator": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz", - "integrity": "sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", + "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-plugin-utils": "^7.16.7", "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz", + "integrity": "sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" + "@babel/compat-data": "^7.17.0", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.16.7" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", - "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", + "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz", - "integrity": "sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", + "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", - "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz", + "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-syntax-async-generators": { @@ -1774,316 +1680,317 @@ } }, "@babel/plugin-syntax-top-level-await": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", - "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", - "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", + "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", - "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", + "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1" + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", - "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", + "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.11.tgz", - "integrity": "sha512-atR1Rxc3hM+VPg/NvNvfYw0npQEAcHuJ+MGZnFn6h3bo+1U3BWXMdFMlvVRApBTWKQMX7SOwRJZA5FBF/JQbvA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", + "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-classes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", - "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-define-map": "^7.10.4", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", + "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", - "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", + "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-destructuring": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", - "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.7.tgz", + "integrity": "sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", - "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", + "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", - "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz", + "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", - "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", + "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", "dev": true, "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-for-of": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", - "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", + "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-function-name": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", - "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", + "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", - "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", + "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", - "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", + "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", - "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz", + "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", - "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.9.tgz", + "integrity": "sha512-2TBFd/r2I6VlYn0YRTz2JdazS+FoUuQ2rIFHoAxtyP/0G3D82SBLaRq9rnUkpqlLg03Byfl/+M32mpxjO6KaPw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.12.1", + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", - "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.8.tgz", + "integrity": "sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", - "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz", + "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", - "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz", + "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1" + "@babel/helper-create-regexp-features-plugin": "^7.16.7" } }, "@babel/plugin-transform-new-target": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", - "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz", + "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-object-super": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", - "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", + "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7" } }, "@babel/plugin-transform-parameters": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", - "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", + "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-property-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", - "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", + "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-regenerator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", - "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.17.9.tgz", + "integrity": "sha512-Lc2TfbxR1HOyn/c6b4Y/b6NHoTb67n/IoWLxTu4kC7h4KQnWlhCq2S8Tx0t2SVvv5Uu87Hs+6JEJ5kt2tYGylQ==", "dev": true, "requires": { - "regenerator-transform": "^0.14.2" + "regenerator-transform": "^0.15.0" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", - "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz", + "integrity": "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", - "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", + "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", - "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", + "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz", - "integrity": "sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", + "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-template-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", - "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", + "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz", - "integrity": "sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", + "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", - "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", + "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/preset-env": { @@ -2163,9 +2070,9 @@ } }, "@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -2176,9 +2083,9 @@ } }, "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz", + "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" @@ -2186,8 +2093,8 @@ }, "@babel/template": { "version": "7.8.6", - "resolved": "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.8.6.tgz", - "integrity": "sha1-hrIq8V+CjfsIZHT5ZNzD45xDzis=", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", + "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", @@ -2196,66 +2103,65 @@ } }, "@babel/traverse": { - "version": "7.12.5", - "resolved": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.12.5.tgz", - "integrity": "sha1-eKDGjI6KNeTKz9MduLswPVYG8JU=", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.5", - "@babel/types": "^7.12.5", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.9.tgz", + "integrity": "sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.9", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.9", + "@babel/types": "^7.17.0", "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" + "globals": "^11.1.0" }, "dependencies": { "@babel/generator": { - "version": "7.12.5", - "resolved": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.12.5.tgz", - "integrity": "sha1-osUN5ci21wirlb5eYFOTbBiEpN4=", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz", + "integrity": "sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==", "dev": true, "requires": { - "@babel/types": "^7.12.5", + "@babel/types": "^7.17.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" } }, "source-map": { "version": "0.5.7", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true } } }, "@babel/types": { - "version": "7.12.6", - "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.12.6.tgz?cache=0&sync_timestamp=1604486353362&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftypes%2Fdownload%2F%40babel%2Ftypes-7.12.6.tgz", - "integrity": "sha1-rg5V7xzOH7yIHNJvgjTrPmV+3JY=", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" } }, "@eslint/eslintrc": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", - "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.1.1", "espree": "^7.3.0", - "globals": "^12.1.0", + "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^3.13.1", - "lodash": "^4.17.19", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" }, @@ -2273,12 +2179,12 @@ } }, "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", + "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", "dev": true, "requires": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" } }, "ignore": { @@ -2304,19 +2210,64 @@ "dev": true }, "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true } } }, + "@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true + }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, "@istanbuljs/schema": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", - "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, + "@jridgewell/resolve-uri": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", + "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", + "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", + "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "@jsdevtools/coverage-istanbul-loader": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.3.tgz", @@ -2354,28 +2305,28 @@ }, "@ng-select/ng-select": { "version": "3.7.3", - "resolved": "https://registry.npm.taobao.org/@ng-select/ng-select/download/@ng-select/ng-select-3.7.3.tgz", - "integrity": "sha1-MX+/lCEfsgRParIzeVzxy6tLRKM=", + "resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-3.7.3.tgz", + "integrity": "sha512-Duw5t0b9Jup/tVEoDHLm+UhGv5RnwQ7pQorCAQc4LZR35oOZFjec8FrEGGtgVAGtwaQAYyd7PSMk3nEsWPg6AQ==", "requires": { "tslib": "^1.9.0" } }, "@ngtools/webpack": { - "version": "9.1.13", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-9.1.13.tgz", - "integrity": "sha512-mTygcNgr58Mpv+WVrkXe3QXZJO5RKUEDcMoj0bscBp9G62MiMsRKnkDjb5GSXXnSGZb5GOlzdVwayib1O5y3uQ==", + "version": "9.1.15", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-9.1.15.tgz", + "integrity": "sha512-2k2SpBd8ssZ1XnLwM09t34pHck96d3ndyxBfg19IpXXXB/FbvhVXTkypB2ktpoGHy/8oSPeUDjz6O9x+p5iT8A==", "dev": true, "requires": { - "@angular-devkit/core": "9.1.13", + "@angular-devkit/core": "9.1.15", "enhanced-resolve": "4.1.1", "rxjs": "6.5.4", "webpack-sources": "1.4.3" }, "dependencies": { "@angular-devkit/core": { - "version": "9.1.13", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.13.tgz", - "integrity": "sha512-bwehVRsva9OWfh/yuEh9VU+0Gr1T7DHJLe8tpZk/VsIkGOD0IszEPZOIEK23bg32yiff9bh6qJEPMA7ZBYEQHg==", + "version": "9.1.15", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.15.tgz", + "integrity": "sha512-zyUDaFQvnqsptoXhodbH4u+voXIldfDx+d0M2OMLj0tbfD4zp2fy7UOeTvu+lq2/LLNAObkG4JSK5DM9v1s08w==", "dev": true, "requires": { "ajv": "6.12.3", @@ -2412,38 +2363,75 @@ } }, "@nodelib/fs.scandir": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", - "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "requires": { - "@nodelib/fs.stat": "2.0.3", + "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true }, "@nodelib/fs.walk": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", - "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "requires": { - "@nodelib/fs.scandir": "2.1.3", + "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, + "@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "dev": true, + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, "@npmcli/move-file": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.0.1.tgz", - "integrity": "sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", "dev": true, "requires": { - "mkdirp": "^1.0.4" + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" }, "dependencies": { "mkdirp": { @@ -2451,13 +2439,22 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } } } }, "@prettier/plugin-xml": { "version": "0.7.2", - "resolved": "https://registry.npm.taobao.org/@prettier/plugin-xml/download/@prettier/plugin-xml-0.7.2.tgz", - "integrity": "sha1-9LbnxFqeNmY9QDgo44DopMahIQY=", + "resolved": "https://registry.npmjs.org/@prettier/plugin-xml/-/plugin-xml-0.7.2.tgz", + "integrity": "sha512-c6i6OQ2y9kvWeUTrfkwHy+jdJXI3bpO8TT9EoVjJIEAApj5gLtJ/O2D9qthxWXh5zbipngueDEC2CT6tBZzBdA==", "dev": true, "requires": { "@xml-tools/parser": "^1.0.2", @@ -2466,8 +2463,8 @@ }, "@schematics/angular": { "version": "8.3.29", - "resolved": "https://registry.npm.taobao.org/@schematics/angular/download/@schematics/angular-8.3.29.tgz", - "integrity": "sha1-2nR1OSMNrhYRHFZCIznALbsXaB0=", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-8.3.29.tgz", + "integrity": "sha512-If+UhCsQzCgnQymiiF8dQRoic34+RgJ6rV0n4k7Tm4N2xNYJOG7ajjzKM7PIeafsF50FKnFP8dqaNGxCMyq5Ew==", "requires": { "@angular-devkit/core": "8.3.29", "@angular-devkit/schematics": "8.3.29" @@ -2475,8 +2472,8 @@ }, "@schematics/update": { "version": "0.803.29", - "resolved": "https://registry.npm.taobao.org/@schematics/update/download/@schematics/update-0.803.29.tgz", - "integrity": "sha1-rTyb/oxth3oOppKuR2Dw1y8+DMk=", + "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.803.29.tgz", + "integrity": "sha512-Syf6h6DYeu1WU9aLihMwIgVASpcHCxUYqhZyHfQABiK8NkdlZ+KAp4cOxihsZyDqIJNLWON+0/FLPAQF3BXh5Q==", "requires": { "@angular-devkit/core": "8.3.29", "@angular-devkit/schematics": "8.3.29", @@ -2495,8 +2492,8 @@ }, "rxjs": { "version": "6.4.0", - "resolved": "https://registry.npm.taobao.org/rxjs/download/rxjs-6.4.0.tgz?cache=0&sync_timestamp=1602773032725&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frxjs%2Fdownload%2Frxjs-6.4.0.tgz", - "integrity": "sha1-87sP572n+2nerAwW8XtQsLh5BQQ=", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", + "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", "requires": { "tslib": "^1.9.0" } @@ -2505,14 +2502,14 @@ }, "@types/eslint-visitor-keys": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/@types/eslint-visitor-keys/download/@types/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha1-HuMNeVRMqE1o1LPNsK9PIFZj3S0=", + "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", "dev": true }, "@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", "dev": true, "requires": { "@types/minimatch": "*", @@ -2520,54 +2517,54 @@ } }, "@types/jasmine": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.6.2.tgz", - "integrity": "sha512-AzfesNFLvOs6Q1mHzIsVJXSeUnqVh4ZHG8ngygKJfbkcSLwzrBVm/LKa+mR8KrOfnWtUL47112gde1MC0IXqpQ==", + "version": "3.10.6", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.10.6.tgz", + "integrity": "sha512-twY9adK/vz72oWxCWxzXaxoDtF9TpfEEsxvbc1ibjF3gMD/RThSuSud/GKUTR3aJnfbivAbC/vLqhY+gdWCHfA==", "dev": true }, "@types/jasminewd2": { - "version": "2.0.8", - "resolved": "https://registry.npm.taobao.org/@types/jasminewd2/download/@types/jasminewd2-2.0.8.tgz", - "integrity": "sha1-Z6/lCY1e8jhgc6e3OEtpqEDf6Ts=", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/jasminewd2/-/jasminewd2-2.0.10.tgz", + "integrity": "sha512-J7mDz7ovjwjc+Y9rR9rY53hFWKATcIkrr9DwQWmOas4/pnIPJTXawnzjwpHm3RSxz/e3ZVUvQ7cRbd5UQLo10g==", "dev": true, "requires": { "@types/jasmine": "*" } }, "@types/json-schema": { - "version": "7.0.6", - "resolved": "https://registry.npm.taobao.org/@types/json-schema/download/@types/json-schema-7.0.6.tgz", - "integrity": "sha1-9MfsQ+gbMZqYFRFQMXCfJph4kfA=", + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", "dev": true }, "@types/node": { - "version": "12.19.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.19.9.tgz", - "integrity": "sha512-yj0DOaQeUrk3nJ0bd3Y5PeDRJ6W0r+kilosLA+dzF3dola/o9hxhMSg2sFvVcA2UHS5JSOsZp4S0c1OEXc4m1Q==", + "version": "12.20.48", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.48.tgz", + "integrity": "sha512-4kxzqkrpwYtn6okJUcb2lfUu9ilnb3yhUOH6qX3nug8D2DupZ2drIkff2yJzYcNJVl3begnlcaBJ7tqiTTzjnQ==", "dev": true }, "@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npm.taobao.org/@types/normalize-package-data/download/@types/normalize-package-data-2.4.0.tgz", - "integrity": "sha1-5IbQ2XOW15vu3QpuM/RTT/a0lz4=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", "dev": true }, "@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", + "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==", "dev": true }, "@types/selenium-webdriver": { - "version": "3.0.17", - "resolved": "https://registry.npm.taobao.org/@types/selenium-webdriver/download/@types/selenium-webdriver-3.0.17.tgz", - "integrity": "sha1-UL6gw8KswxyVnFsedHeYs7PQbUs=", + "version": "3.0.19", + "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.19.tgz", + "integrity": "sha512-OFUilxQg+rWL2FMxtmIgCkUDlJB6pskkpvmew7yeXfzzsOBb5rc+y2+DjHm+r3r1ZPPcJefK3DveNSYWGiy68g==", "dev": true }, "@types/source-list-map": { @@ -2577,19 +2574,19 @@ "dev": true }, "@types/uuid": { - "version": "8.3.0", - "resolved": "https://registry.npm.taobao.org/@types/uuid/download/@types/uuid-8.3.0.tgz?cache=0&sync_timestamp=1605148424319&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fuuid%2Fdownload%2F%40types%2Fuuid-8.3.0.tgz", - "integrity": "sha1-IVwjHf9zbVupJBDm1gIFDM5+Jz8=" + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==" }, "@types/webpack-env": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.16.0.tgz", - "integrity": "sha512-Fx+NpfOO0CpeYX2g9bkvX8O5qh9wrU1sOF4g8sft4Mu7z+qfe387YlyY8w8daDyDsKY5vUxM0yxkAYnbkRbZEw==" + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.16.3.tgz", + "integrity": "sha512-9gtOPPkfyNoEqCQgx4qJKkuNm/x0R2hKR7fdl7zvTJyHnIisuE/LfvXOsYWL0o3qq6uiBnKZNNNzi3l0y/X+xw==" }, "@types/webpack-sources": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.8.tgz", - "integrity": "sha512-JHB2/xZlXOjzjBB6fMOpH1eQAfsrpqVVIbneE0Rok16WXwFaznaI5vfg75U5WgGJm7V9W1c4xeRQDjX/zwvghA==", + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.9.tgz", + "integrity": "sha512-bvzMnzqoK16PQIC8AYHNdW45eREJQMd6WG/msQWX5V2+vZmODCOPb4TJcbgRljTZZTwTM4wUMcsI8FftNA7new==", "dev": true, "requires": { "@types/node": "*", @@ -2607,8 +2604,8 @@ }, "@typescript-eslint/eslint-plugin": { "version": "3.10.1", - "resolved": "https://registry.npm.taobao.org/@typescript-eslint/eslint-plugin/download/@typescript-eslint/eslint-plugin-3.10.1.tgz", - "integrity": "sha1-fgYTOKE4P1ntwgTGBYmfk9wuLI8=", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.10.1.tgz", + "integrity": "sha512-PQg0emRtzZFWq6PxBcdxRH3QIQiyFO3WCVpRL3fgj5oQS3CDs3AeAKfv4DxNhzn8ITdNJGJ4D3Qw8eAJf3lXeQ==", "dev": true, "requires": { "@typescript-eslint/experimental-utils": "3.10.1", @@ -2621,8 +2618,8 @@ "dependencies": { "@typescript-eslint/experimental-utils": { "version": "3.10.1", - "resolved": "https://registry.npm.taobao.org/@typescript-eslint/experimental-utils/download/@typescript-eslint/experimental-utils-3.10.1.tgz", - "integrity": "sha1-4Xn/yBqA68ri6gTgMy+LJRNFpoY=", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz", + "integrity": "sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==", "dev": true, "requires": { "@types/json-schema": "^7.0.3", @@ -2634,8 +2631,8 @@ }, "@typescript-eslint/typescript-estree": { "version": "3.10.1", - "resolved": "https://registry.npm.taobao.org/@typescript-eslint/typescript-estree/download/@typescript-eslint/typescript-estree-3.10.1.tgz", - "integrity": "sha1-/QBhzDit1PrUUTbWVECFafNluFM=", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz", + "integrity": "sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==", "dev": true, "requires": { "@typescript-eslint/types": "3.10.1", @@ -2650,26 +2647,44 @@ }, "eslint-scope": { "version": "5.1.1", - "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-5.1.1.tgz?cache=0&sync_timestamp=1599935989085&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-5.1.1.tgz", - "integrity": "sha1-54blmmbLkrP2wfsNUIqrF0hI9Iw=", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, "semver": { - "version": "7.3.2", - "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.3.2.tgz?cache=0&sync_timestamp=1586886267748&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.2.tgz", - "integrity": "sha1-YElisFK4HtB4aq6EOJ/7pw/9OTg=", + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, "@typescript-eslint/experimental-utils": { "version": "2.31.0", - "resolved": "https://registry.npm.taobao.org/@typescript-eslint/experimental-utils/download/@typescript-eslint/experimental-utils-2.31.0.tgz", - "integrity": "sha1-qexRS/f9Xl6CvBDctqhtWLqulQg=", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.31.0.tgz", + "integrity": "sha512-MI6IWkutLYQYTQgZ48IVnRXmLR/0Q6oAyJgiOror74arUMh7EWjJkADfirZhRsUMHeLJ85U2iySDwHTSnNi9vA==", "dev": true, "requires": { "@types/json-schema": "^7.0.3", @@ -2680,8 +2695,8 @@ "dependencies": { "eslint-scope": { "version": "5.1.1", - "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-5.1.1.tgz?cache=0&sync_timestamp=1599935989085&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-5.1.1.tgz", - "integrity": "sha1-54blmmbLkrP2wfsNUIqrF0hI9Iw=", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { "esrecurse": "^4.3.0", @@ -2692,8 +2707,8 @@ }, "@typescript-eslint/parser": { "version": "3.10.1", - "resolved": "https://registry.npm.taobao.org/@typescript-eslint/parser/download/@typescript-eslint/parser-3.10.1.tgz", - "integrity": "sha1-GIOFjoPotEJifhrG9AiSUhEVVGc=", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.10.1.tgz", + "integrity": "sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw==", "dev": true, "requires": { "@types/eslint-visitor-keys": "^1.0.0", @@ -2705,8 +2720,8 @@ "dependencies": { "@typescript-eslint/experimental-utils": { "version": "3.10.1", - "resolved": "https://registry.npm.taobao.org/@typescript-eslint/experimental-utils/download/@typescript-eslint/experimental-utils-3.10.1.tgz", - "integrity": "sha1-4Xn/yBqA68ri6gTgMy+LJRNFpoY=", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz", + "integrity": "sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==", "dev": true, "requires": { "@types/json-schema": "^7.0.3", @@ -2718,8 +2733,8 @@ }, "@typescript-eslint/typescript-estree": { "version": "3.10.1", - "resolved": "https://registry.npm.taobao.org/@typescript-eslint/typescript-estree/download/@typescript-eslint/typescript-estree-3.10.1.tgz", - "integrity": "sha1-/QBhzDit1PrUUTbWVECFafNluFM=", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz", + "integrity": "sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==", "dev": true, "requires": { "@typescript-eslint/types": "3.10.1", @@ -2734,32 +2749,50 @@ }, "eslint-scope": { "version": "5.1.1", - "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-5.1.1.tgz?cache=0&sync_timestamp=1599935989085&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-5.1.1.tgz", - "integrity": "sha1-54blmmbLkrP2wfsNUIqrF0hI9Iw=", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, "semver": { - "version": "7.3.2", - "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.3.2.tgz?cache=0&sync_timestamp=1586886267748&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.2.tgz", - "integrity": "sha1-YElisFK4HtB4aq6EOJ/7pw/9OTg=", + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, "@typescript-eslint/types": { "version": "3.10.1", - "resolved": "https://registry.npm.taobao.org/@typescript-eslint/types/download/@typescript-eslint/types-3.10.1.tgz", - "integrity": "sha1-HXRj+nwy2KI6tQioA8ov4m51hyc=", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz", + "integrity": "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==", "dev": true }, "@typescript-eslint/typescript-estree": { "version": "2.31.0", - "resolved": "https://registry.npm.taobao.org/@typescript-eslint/typescript-estree/download/@typescript-eslint/typescript-estree-2.31.0.tgz", - "integrity": "sha1-rFNsLUZnKqHye6DsIUDVNnBjXP0=", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.31.0.tgz", + "integrity": "sha512-vxW149bXFXXuBrAak0eKHOzbcu9cvi6iNcJDzEtOkRwGHxJG15chiAQAwhLOsk+86p9GTr/TziYvw+H9kMaIgA==", "dev": true, "requires": { "debug": "^4.1.1", @@ -2773,8 +2806,8 @@ }, "@typescript-eslint/visitor-keys": { "version": "3.10.1", - "resolved": "https://registry.npm.taobao.org/@typescript-eslint/visitor-keys/download/@typescript-eslint/visitor-keys-3.10.1.tgz", - "integrity": "sha1-zUJ0dz4+tjsuhwrGAidEh+zR6TE=", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz", + "integrity": "sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==", "dev": true, "requires": { "eslint-visitor-keys": "^1.1.0" @@ -2957,12 +2990,12 @@ } }, "@xml-tools/parser": { - "version": "1.0.7", - "resolved": "https://registry.npm.taobao.org/@xml-tools/parser/download/@xml-tools/parser-1.0.7.tgz", - "integrity": "sha1-Iii3eFbNVSOSBXuOLlBxAbZCYcs=", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@xml-tools/parser/-/parser-1.0.11.tgz", + "integrity": "sha512-aKqQ077XnR+oQtHJlrAflaZaL7qZsulWc/i/ZEooar5JiWj1eLt0+Wg28cpa+XLney107wXqneC+oG1IZvxkTA==", "dev": true, "requires": { - "chevrotain": "7.0.1" + "chevrotain": "7.1.1" } }, "@xtuc/ieee754": { @@ -2979,13 +3012,13 @@ }, "@yarnpkg/lockfile": { "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/@yarnpkg/lockfile/download/@yarnpkg/lockfile-1.1.0.tgz", - "integrity": "sha1-53qX+9NFt22DJF7c0X05OxtB+zE=" + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==" }, "JSONStream": { "version": "1.3.5", - "resolved": "https://registry.npm.taobao.org/JSONStream/download/JSONStream-1.3.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2FJSONStream%2Fdownload%2FJSONStream-1.3.5.tgz", - "integrity": "sha1-MgjB8I06TZkmGrZPkjArwV4RHKA=", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "requires": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" @@ -2993,16 +3026,16 @@ }, "abbrev": { "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/abbrev/download/abbrev-1.1.1.tgz", - "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=" + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npm.taobao.org/accepts/download/accepts-1.3.7.tgz", - "integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" } }, "acorn": { @@ -3012,34 +3045,34 @@ "dev": true }, "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true }, "adm-zip": { "version": "0.4.16", - "resolved": "https://registry.npm.taobao.org/adm-zip/download/adm-zip-0.4.16.tgz", - "integrity": "sha1-z0xQj9/6sCwmnLx/RxqHXwVXA2U=", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", "dev": true }, "after": { "version": "0.8.2", - "resolved": "https://registry.npm.taobao.org/after/download/after-0.8.2.tgz", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" }, "agent-base": { "version": "4.3.0", - "resolved": "https://registry.npm.taobao.org/agent-base/download/agent-base-4.3.0.tgz", - "integrity": "sha1-gWXwHENgCbzK0LHRIvBe13Dvxu4=", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", "requires": { "es6-promisify": "^5.0.0" } }, "agentkeepalive": { "version": "3.5.2", - "resolved": "https://registry.npm.taobao.org/agentkeepalive/download/agentkeepalive-3.5.2.tgz?cache=0&sync_timestamp=1592194039059&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fagentkeepalive%2Fdownload%2Fagentkeepalive-3.5.2.tgz", - "integrity": "sha1-oROSTdP6JKC8O3gQjEUMKr7gD2c=", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz", + "integrity": "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==", "requires": { "humanize-ms": "^1.2.1" } @@ -3064,8 +3097,8 @@ }, "ajv": { "version": "6.12.3", - "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.3.tgz?cache=0&sync_timestamp=1604996837320&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.3.tgz", - "integrity": "sha1-GMWvOKER3etPJpe9eNaKvByr1wY=", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", + "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -3087,32 +3120,32 @@ }, "alphanum-sort": { "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/alphanum-sort/download/alphanum-sort-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", "dev": true }, "amdefine": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" }, "angular-9-datatable": { "version": "0.1.1", - "resolved": "https://registry.npm.taobao.org/angular-9-datatable/download/angular-9-datatable-0.1.1.tgz", - "integrity": "sha1-FcWRfqI0wpEdn8TBhx7tojXTjfM=" + "resolved": "https://registry.npmjs.org/angular-9-datatable/-/angular-9-datatable-0.1.1.tgz", + "integrity": "sha512-Uzda1x1iK/RLZliD61cc7DLYB3PXc6xHW/jzoNEQikGv2Sm4sSb4u8psVk6EgRvIndVQtchihbhGx4QXETs7fA==" }, "angular-datatables": { "version": "8.1.0", - "resolved": "https://registry.npm.taobao.org/angular-datatables/download/angular-datatables-8.1.0.tgz", - "integrity": "sha1-eTzUXTR14xz7BTYGlbtHvcG/tdc=", + "resolved": "https://registry.npmjs.org/angular-datatables/-/angular-datatables-8.1.0.tgz", + "integrity": "sha512-UJmF8qLdxIALyabwslvMvJ8zjkJWIfn/IfzEKO1vv6z+DhwfHlTS7oFOF40x0ZbSGfq0E1Yyscl7MOl71AulHw==", "requires": { "@angular/cli": "^8.0.2" }, "dependencies": { "@angular/cli": { "version": "8.3.29", - "resolved": "https://registry.npm.taobao.org/@angular/cli/download/@angular/cli-8.3.29.tgz", - "integrity": "sha1-SB6wSoJAkyrfsZBJpftST4VFMDc=", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-8.3.29.tgz", + "integrity": "sha512-pW+iU0eKHIae+A1b9W5g8DKefMQcehZ+drGKs4Hryh8G+XGFS00BIWkmh6c1mydWTEhdsFlhdjD/rXCem7MAQQ==", "requires": { "@angular-devkit/architect": "0.803.29", "@angular-devkit/core": "8.3.29", @@ -3134,53 +3167,51 @@ "symbol-observable": "1.2.0", "universal-analytics": "^0.4.20", "uuid": "^3.3.2" - }, - "dependencies": { - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" - } } + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" } } }, "ansi-colors": { "version": "4.1.1", - "resolved": "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-4.1.1.tgz", - "integrity": "sha1-y7muJWv3UK8eqzRPIpqif+lLo0g=" + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" }, "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-4.3.1.tgz", - "integrity": "sha1-pcR8xDGB8fOP/XB2g3cA05VSKmE=", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "requires": { - "type-fest": "^0.11.0" + "type-fest": "^0.21.3" } }, "ansi-html": { "version": "0.0.7", - "resolved": "https://registry.npm.taobao.org/ansi-html/download/ansi-html-0.0.7.tgz", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", "dev": true }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz", - "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { "color-convert": "^1.9.0" } }, "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-3.1.1.tgz", - "integrity": "sha1-xV7PAhheJGklk5kxDBc84xIzsUI=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "requires": { "normalize-path": "^3.0.0", @@ -3189,8 +3220,8 @@ }, "append-transform": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/append-transform/download/append-transform-1.0.0.tgz", - "integrity": "sha1-BGpSrlgqIovXL1is++KWfGeHWas=", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", + "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", "dev": true, "requires": { "default-require-extensions": "^2.0.0" @@ -3198,13 +3229,13 @@ }, "aproba": { "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/aproba/download/aproba-1.2.0.tgz", - "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo=" + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" }, "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npm.taobao.org/are-we-there-yet/download/are-we-there-yet-1.1.5.tgz", - "integrity": "sha1-SzXClE8GKov82mZBB2A1D+nd/CE=", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", "requires": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" @@ -3212,8 +3243,8 @@ }, "argparse": { "version": "1.0.10", - "resolved": "https://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz", - "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { "sprintf-js": "~1.0.2" @@ -3221,7 +3252,7 @@ }, "arr-diff": { "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", "dev": true }, @@ -3233,13 +3264,13 @@ }, "arr-union": { "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/arr-union/download/arr-union-3.1.0.tgz", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, "array-find-index": { "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/array-find-index/download/array-find-index-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" }, "array-flatten": { @@ -3256,13 +3287,13 @@ }, "array-uniq": { "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/array-uniq/download/array-uniq-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", "dev": true }, "array-unique": { "version": "0.3.2", - "resolved": "https://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, @@ -3273,19 +3304,19 @@ }, "arrify": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/arrify/download/arrify-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true }, "asap": { "version": "2.0.6", - "resolved": "https://registry.npm.taobao.org/asap/download/asap-2.0.6.tgz", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" }, "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz", - "integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=", + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "requires": { "safer-buffer": "~2.1.0" } @@ -3300,14 +3331,6 @@ "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0", "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } } }, "assert": { @@ -3322,13 +3345,13 @@ "dependencies": { "inherits": { "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", "dev": true }, "util": { "version": "0.10.3", - "resolved": "https://registry.npm.taobao.org/util/download/util-0.10.3.tgz?cache=0&sync_timestamp=1588238580972&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil%2Fdownload%2Futil-0.10.3.tgz", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, "requires": { @@ -3339,12 +3362,12 @@ }, "assert-plus": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, "assign-symbols": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, @@ -3355,9 +3378,9 @@ "dev": true }, "async": { - "version": "2.6.3", - "resolved": "https://registry.npm.taobao.org/async/download/async-2.6.3.tgz", - "integrity": "sha1-1yYl4jRKNlbjo61Pp0n6gymdgv8=", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, "requires": { "lodash": "^4.17.14" @@ -3371,18 +3394,18 @@ }, "async-foreach": { "version": "0.1.3", - "resolved": "https://registry.npm.taobao.org/async-foreach/download/async-foreach-0.1.3.tgz", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=" }, "async-limiter": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.1.tgz", - "integrity": "sha1-3TeelPDbgxCwgpH51kwyCXZmF/0=", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", "dev": true }, "asynckit": { "version": "0.4.0", - "resolved": "https://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "atob": { @@ -3408,27 +3431,13 @@ }, "aws-sign2": { "version": "0.7.0", - "resolved": "https://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { "version": "1.11.0", - "resolved": "https://registry.npm.taobao.org/aws4/download/aws4-1.11.0.tgz", - "integrity": "sha1-1h9G2DslGSUOJ4Ta9bCUeai0HFk=" - }, - "babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npm.taobao.org/babel-eslint/download/babel-eslint-10.1.0.tgz?cache=0&sync_timestamp=1582676908745&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-eslint%2Fdownload%2Fbabel-eslint-10.1.0.tgz", - "integrity": "sha1-aWjlaKkQt4+zd5zdi2rC9HmUMjI=", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - } + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" }, "babel-loader": { "version": "8.0.6", @@ -3492,13 +3501,13 @@ }, "backo2": { "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/backo2/download/backo2-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" }, "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "base": { "version": "0.11.2", @@ -3517,7 +3526,7 @@ "dependencies": { "define-property": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { @@ -3557,7 +3566,7 @@ }, "base64-arraybuffer": { "version": "0.1.4", - "resolved": "https://registry.npm.taobao.org/base64-arraybuffer/download/base64-arraybuffer-0.1.4.tgz", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=" }, "base64-js": { @@ -3573,13 +3582,13 @@ }, "batch": { "version": "0.6.1", - "resolved": "https://registry.npm.taobao.org/batch/download/batch-0.6.1.tgz", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", "dev": true }, "bcrypt-pbkdf": { "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "requires": { "tweetnacl": "^0.14.3" @@ -3592,11 +3601,21 @@ "dev": true }, "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-2.1.0.tgz?cache=0&sync_timestamp=1593261277008&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-2.1.0.tgz", - "integrity": "sha1-MPpAyef+B9vIlWeM0ocCTeokHdk=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, "blob": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", @@ -3604,7 +3623,7 @@ }, "block-stream": { "version": "0.0.9", - "resolved": "https://registry.npm.taobao.org/block-stream/download/block-stream-0.0.9.tgz", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", "requires": { "inherits": "~2.0.0" @@ -3612,8 +3631,8 @@ }, "blocking-proxy": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/blocking-proxy/download/blocking-proxy-1.0.1.tgz", - "integrity": "sha1-gdb9H+E6TA1pV99/kbdemNrEDLI=", + "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz", + "integrity": "sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==", "dev": true, "requires": { "minimist": "^1.2.0" @@ -3621,8 +3640,8 @@ }, "bluebird": { "version": "3.7.2", - "resolved": "https://registry.npm.taobao.org/bluebird/download/bluebird-3.7.2.tgz", - "integrity": "sha1-nyKcFb4nJFT/qXOs4NvueaGww28=" + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "bn-ng-idle": { "version": "1.0.1", @@ -3633,39 +3652,38 @@ } }, "bn.js": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", - "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==", - "dev": true + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npm.taobao.org/body-parser/download/body-parser-1.19.0.tgz", - "integrity": "sha1-lrJwnlfJxOCab9Zqj9l5hE9p8Io=", + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", "dev": true, "requires": { - "bytes": "3.1.0", + "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "~1.1.2", - "http-errors": "1.7.2", + "http-errors": "1.8.1", "iconv-lite": "0.4.24", "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "qs": "6.9.7", + "raw-body": "2.4.3", + "type-is": "~1.6.18" }, "dependencies": { "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/bytes/download/bytes-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbytes%2Fdownload%2Fbytes-3.1.0.tgz", - "integrity": "sha1-9s95M6Ng4FiPqf3oVlHNx/gF0fY=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true }, "debug": { "version": "2.6.9", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -3673,8 +3691,8 @@ }, "iconv-lite": { "version": "0.4.24", - "resolved": "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz?cache=0&sync_timestamp=1594184528294&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz", - "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" @@ -3682,21 +3700,21 @@ }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, "qs": { - "version": "6.7.0", - "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.7.0.tgz", - "integrity": "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=", + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", "dev": true } } }, "bonjour": { "version": "3.5.0", - "resolved": "https://registry.npm.taobao.org/bonjour/download/bonjour-3.5.0.tgz", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", "dev": true, "requires": { @@ -3710,19 +3728,19 @@ }, "boolbase": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/boolbase/download/boolbase-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", "dev": true }, "bootstrap": { - "version": "4.5.3", - "resolved": "https://registry.npm.taobao.org/bootstrap/download/bootstrap-4.5.3.tgz", - "integrity": "sha1-xqcrNVqvMjkgvoACRqbk7zCZf+Y=" + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.1.tgz", + "integrity": "sha512-0dj+VgI9Ecom+rvvpNZ4MUZJz8dcX7WCX+eTID9+/8HgOkv3dsRzi8BGeZJCQU6flWQVYxwTQnEZFrmJSEO7og==" }, "brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz?cache=0&sync_timestamp=1601898795150&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrace-expansion%2Fdownload%2Fbrace-expansion-1.1.11.tgz", - "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3730,8 +3748,8 @@ }, "braces": { "version": "3.0.2", - "resolved": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz", - "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { "fill-range": "^7.0.1" @@ -3739,7 +3757,7 @@ }, "brorand": { "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/brorand/download/brorand-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" }, "browserify-aes": { @@ -3787,6 +3805,14 @@ "requires": { "bn.js": "^5.0.0", "randombytes": "^2.0.1" + }, + "dependencies": { + "bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true + } } }, "browserify-sign": { @@ -3806,6 +3832,12 @@ "safe-buffer": "^5.2.0" }, "dependencies": { + "bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true + }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -3829,22 +3861,22 @@ } }, "browserslist": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.0.tgz", - "integrity": "sha512-/j6k8R0p3nxOC6kx5JGAxsnhc9ixaWJfYc+TNTzxg6+ARaESAvQGV7h0uNOB4t+pLQJZWzcrMxXOxjgsCj3dqQ==", + "version": "4.20.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", + "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001165", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.621", + "caniuse-lite": "^1.0.30001317", + "electron-to-chromium": "^1.4.84", "escalade": "^3.1.1", - "node-releases": "^1.1.67" + "node-releases": "^2.0.2", + "picocolors": "^1.0.0" } }, "browserstack": { - "version": "1.6.0", - "resolved": "https://registry.npm.taobao.org/browserstack/download/browserstack-1.6.0.tgz", - "integrity": "sha1-WlarkJh2BdnBONeouIEoNwKX+b8=", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.6.1.tgz", + "integrity": "sha512-GxtFjpIaKdbAyzHfFDKixKO8IBT7wR3NjbzrGc78nNs/Ciys9wU3/nBtsqsWv5nDSrdI5tz0peKuzCPuNXNUiw==", "dev": true, "requires": { "https-proxy-agent": "^2.2.1" @@ -3862,9 +3894,9 @@ } }, "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz", - "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "buffer-indexof": { "version": "1.1.1", @@ -3874,31 +3906,31 @@ }, "buffer-xor": { "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/buffer-xor/download/buffer-xor-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, "builtin-status-codes": { "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true }, "builtins": { "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/builtins/download/builtins-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=" }, "bytes": { "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbytes%2Fdownload%2Fbytes-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", "dev": true }, "cacache": { "version": "12.0.4", - "resolved": "https://registry.npm.taobao.org/cacache/download/cacache-12.0.4.tgz", - "integrity": "sha1-ZovL0QWutfHZL+JVcOyVJcj6pAw=", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", "requires": { "bluebird": "^3.5.5", "chownr": "^1.1.1", @@ -3919,8 +3951,8 @@ "dependencies": { "rimraf": { "version": "2.7.1", - "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz?cache=0&sync_timestamp=1581229948248&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-2.7.1.tgz", - "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "requires": { "glob": "^7.1.3" } @@ -3945,17 +3977,17 @@ } }, "call-bind": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/call-bind/download/call-bind-1.0.0.tgz?cache=0&sync_timestamp=1604115081161&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcall-bind%2Fdownload%2Fcall-bind-1.0.0.tgz", - "integrity": "sha1-JBJwVLs/m9y0sfuCQYGGBy93uM4=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "requires": { "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.0" + "get-intrinsic": "^1.0.2" } }, "caller-callsite": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/caller-callsite/download/caller-callsite-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", "dev": true, "requires": { @@ -3964,7 +3996,7 @@ }, "caller-path": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/caller-path/download/caller-path-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", "dev": true, "requires": { @@ -3973,18 +4005,18 @@ }, "callsites": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/callsites/download/callsites-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", "dev": true }, "camelcase": { "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-2.1.1.tgz", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" }, "camelcase-keys": { "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/camelcase-keys/download/camelcase-keys-2.1.0.tgz?cache=0&sync_timestamp=1585887316421&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase-keys%2Fdownload%2Fcamelcase-keys-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "requires": { "camelcase": "^2.0.0", @@ -4004,9 +4036,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001170", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001170.tgz", - "integrity": "sha512-Dd4d/+0tsK0UNLrZs3CvNukqalnVTRrxb5mcQm8rHL49t7V5ZaTygwXkrq+FB+dVDf++4ri8eJnFEJAB8332PA==", + "version": "1.0.30001332", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001332.tgz", + "integrity": "sha512-10T30NYOEQtN6C11YGg411yebhvpnC6Z102+B95eAsN0oB6KUs01ivE8u+G6FMIRtIrVlYXhL+LUwQ3/hXwDWw==", "dev": true }, "canonical-path": { @@ -4017,13 +4049,13 @@ }, "caseless": { "version": "0.12.0", - "resolved": "https://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, "chalk": { "version": "2.4.2", - "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1591687079130&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -4032,52 +4064,58 @@ }, "chardet": { "version": "0.7.0", - "resolved": "https://registry.npm.taobao.org/chardet/download/chardet-0.7.0.tgz?cache=0&sync_timestamp=1601034855780&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchardet%2Fdownload%2Fchardet-0.7.0.tgz", - "integrity": "sha1-kAlISfCTfy7twkJdDSip5fDLrZ4=" + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, "chevrotain": { - "version": "7.0.1", - "resolved": "https://registry.npm.taobao.org/chevrotain/download/chevrotain-7.0.1.tgz", - "integrity": "sha1-VdHSGpr+oKrSO00w51ZQIS60zJ8=", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-7.1.1.tgz", + "integrity": "sha512-wy3mC1x4ye+O+QkEinVJkPf5u2vsrDIYW9G7ZuwFl6v/Yu0LwUuT2POsb+NUWApebyxfkQq6+yDfRExbnI5rcw==", "dev": true, "requires": { "regexp-to-ast": "0.5.0" } }, "chokidar": { - "version": "3.4.3", - "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-3.4.3.tgz?cache=0&sync_timestamp=1602585332180&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-3.4.3.tgz", - "integrity": "sha1-wd84IxRI5FykrFiObHlXO6alfVs=", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "requires": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" + "readdirp": "~3.6.0" + }, + "dependencies": { + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + } } }, "chownr": { "version": "1.1.4", - "resolved": "https://registry.npm.taobao.org/chownr/download/chownr-1.1.4.tgz?cache=0&sync_timestamp=1581474946672&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchownr%2Fdownload%2Fchownr-1.1.4.tgz", - "integrity": "sha1-b8nXtC0ypYNZYzdmbn0ICE2izGs=" + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true }, "ci-info": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/ci-info/download/ci-info-2.0.0.tgz", - "integrity": "sha1-Z6npZL4xpR4V5QENWObxKDQAL0Y=", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, "cipher-base": { @@ -4110,7 +4148,7 @@ "dependencies": { "define-property": { "version": "0.2.5", - "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { @@ -4121,12 +4159,12 @@ }, "classlist.js": { "version": "1.1.20150312", - "resolved": "https://registry.npm.taobao.org/classlist.js/download/classlist.js-1.1.20150312.tgz", + "resolved": "https://registry.npmjs.org/classlist.js/-/classlist.js-1.1.20150312.tgz", "integrity": "sha1-HXCEL3Ai8I2awIbOaeWyUPLFd4k=" }, "clean-regexp": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/clean-regexp/download/clean-regexp-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", "integrity": "sha1-jffHquUf02h06PjQW5GAvBGj/tc=", "dev": true, "requires": { @@ -4141,27 +4179,27 @@ }, "cli-cursor": { "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-3.1.0.tgz", - "integrity": "sha1-JkMFp65JDR0Dvwybp8kl0XU68wc=", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "requires": { "restore-cursor": "^3.1.0" } }, "cli-spinners": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.5.0.tgz", - "integrity": "sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", "dev": true }, "cli-width": { "version": "2.2.1", - "resolved": "https://registry.npm.taobao.org/cli-width/download/cli-width-2.2.1.tgz", - "integrity": "sha1-sEM9C06chH7xiGik7xb9X8gnHEg=" + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" }, "cliui": { "version": "5.0.0", - "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-5.0.0.tgz", - "integrity": "sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U=", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "requires": { "string-width": "^3.1.0", "strip-ansi": "^5.2.0", @@ -4170,18 +4208,18 @@ "dependencies": { "emoji-regex": { "version": "7.0.3", - "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz?cache=0&sync_timestamp=1603212659584&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Femoji-regex%2Fdownload%2Femoji-regex-7.0.3.tgz", - "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" }, "is-fullwidth-code-point": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "string-width": { "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz", - "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", @@ -4192,7 +4230,7 @@ }, "clone": { "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/clone/download/clone-2.1.2.tgz", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", "dev": true }, @@ -4220,12 +4258,12 @@ }, "code-point-at": { "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcode-point-at%2Fdownload%2Fcode-point-at-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, "collection-visit": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { @@ -4234,54 +4272,48 @@ } }, "color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", - "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", "dev": true, "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.4" + "color-convert": "^1.9.3", + "color-string": "^1.6.0" } }, "color-convert": { "version": "1.9.3", - "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz", - "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "requires": { "color-name": "1.1.3" } }, "color-name": { "version": "1.1.3", - "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "color-string": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", - "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz", + "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==", "dev": true, "requires": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, - "colorette": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", - "dev": true - }, "colors": { "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/colors/download/colors-1.1.2.tgz", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", "dev": true }, "combined-stream": { "version": "1.0.8", - "resolved": "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcombined-stream%2Fdownload%2Fcombined-stream-1.0.8.tgz", - "integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "requires": { "delayed-stream": "~1.0.0" } @@ -4294,29 +4326,29 @@ }, "commondir": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/commondir/download/commondir-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, "compare-versions": { "version": "3.6.0", - "resolved": "https://registry.npm.taobao.org/compare-versions/download/compare-versions-3.6.0.tgz", - "integrity": "sha1-GlaJkTaF5ah2N7jT/8p1UU7EHWI=", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", + "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", "dev": true }, "component-bind": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/component-bind/download/component-bind-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" }, "component-emitter": { "version": "1.3.0", - "resolved": "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.3.0.tgz", - "integrity": "sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A=" + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, "component-inherit": { "version": "0.0.3", - "resolved": "https://registry.npm.taobao.org/component-inherit/download/component-inherit-0.0.3.tgz", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" }, "compressible": { @@ -4354,7 +4386,7 @@ }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, @@ -4368,13 +4400,13 @@ }, "concat-map": { "version": "0.0.1", - "resolved": "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "concat-stream": { "version": "1.6.2", - "resolved": "https://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz", - "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "requires": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -4384,8 +4416,8 @@ }, "connect": { "version": "3.7.0", - "resolved": "https://registry.npm.taobao.org/connect/download/connect-3.7.0.tgz", - "integrity": "sha1-XUk0iRDKpeB6AYALAw0MNfIEhPg=", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, "requires": { "debug": "2.6.9", @@ -4396,8 +4428,8 @@ "dependencies": { "debug": { "version": "2.6.9", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -4405,7 +4437,7 @@ }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } @@ -4425,42 +4457,34 @@ }, "console-control-strings": { "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/console-control-strings/download/console-control-strings-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, "constants-browserify": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/constants-browserify/download/constants-browserify-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", "dev": true }, "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "requires": { - "safe-buffer": "5.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } + "safe-buffer": "5.2.1" } }, "content-type": { "version": "1.0.4", - "resolved": "https://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz", - "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "dev": true }, "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "requires": { "safe-buffer": "~5.1.1" @@ -4475,21 +4499,20 @@ } }, "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" }, "cookie-signature": { "version": "1.0.6", - "resolved": "https://registry.npm.taobao.org/cookie-signature/download/cookie-signature-1.0.6.tgz", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", "dev": true }, "copy-concurrently": { "version": "1.0.5", - "resolved": "https://registry.npm.taobao.org/copy-concurrently/download/copy-concurrently-1.0.5.tgz", - "integrity": "sha1-kilzmMrjSTf8r9bsgTnBgFHwteA=", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "requires": { "aproba": "^1.1.1", "fs-write-stream-atomic": "^1.0.8", @@ -4501,8 +4524,8 @@ "dependencies": { "rimraf": { "version": "2.7.1", - "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz?cache=0&sync_timestamp=1581229948248&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-2.7.1.tgz", - "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "requires": { "glob": "^7.1.3" } @@ -4511,7 +4534,7 @@ }, "copy-descriptor": { "version": "0.1.1", - "resolved": "https://registry.npm.taobao.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true }, @@ -4535,11 +4558,12 @@ }, "dependencies": { "cacache": { - "version": "15.0.5", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.5.tgz", - "integrity": "sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A==", + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", "dev": true, "requires": { + "@npmcli/fs": "^1.0.0", "@npmcli/move-file": "^1.0.1", "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -4554,7 +4578,7 @@ "p-map": "^4.0.0", "promise-inflight": "^1.0.1", "rimraf": "^3.0.2", - "ssri": "^8.0.0", + "ssri": "^8.0.1", "tar": "^6.0.2", "unique-filename": "^1.1.1" } @@ -4584,9 +4608,9 @@ } }, "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -4636,18 +4660,18 @@ } }, "ssri": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz", - "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "dev": true, "requires": { "minipass": "^3.1.1" } }, "tar": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz", - "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==", + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", "dev": true, "requires": { "chownr": "^2.0.0", @@ -4672,12 +4696,12 @@ "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" }, "core-js-compat": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.8.1.tgz", - "integrity": "sha512-a16TLmy9NVD1rkjUGbwuyWkiDoN0FDpAwrfLONvHFQx0D9k7J9y0srwMT8QP/Z6HE3MIFaVynEeYwZwPX1o5RQ==", + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.1.tgz", + "integrity": "sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g==", "dev": true, "requires": { - "browserslist": "^4.15.0", + "browserslist": "^4.19.1", "semver": "7.0.0" }, "dependencies": { @@ -4690,9 +4714,9 @@ } }, "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "cosmiconfig": { "version": "5.2.1", @@ -4708,7 +4732,7 @@ "dependencies": { "parse-json": { "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { @@ -4726,14 +4750,6 @@ "requires": { "bn.js": "^4.1.0", "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } } }, "create-hash": { @@ -4765,7 +4781,7 @@ }, "cross-spawn": { "version": "3.0.1", - "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-3.0.1.tgz?cache=0&sync_timestamp=1590421014780&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-spawn-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", "requires": { "lru-cache": "^4.0.1", @@ -4774,8 +4790,8 @@ "dependencies": { "lru-cache": { "version": "4.1.5", - "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz", - "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "requires": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" @@ -4783,7 +4799,7 @@ }, "yallist": { "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" } } @@ -4829,7 +4845,7 @@ }, "css-color-names": { "version": "0.0.4", - "resolved": "https://registry.npm.taobao.org/css-color-names/download/css-color-names-0.0.4.tgz", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", "dev": true }, @@ -4894,7 +4910,7 @@ }, "css-parse": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/css-parse/download/css-parse-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-2.0.0.tgz", "integrity": "sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q=", "dev": true, "requires": { @@ -4962,9 +4978,9 @@ } }, "cssnano-preset-default": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", - "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", + "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", "dev": true, "requires": { "css-declaration-sorter": "^4.0.1", @@ -4995,19 +5011,19 @@ "postcss-ordered-values": "^4.1.2", "postcss-reduce-initial": "^4.0.3", "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.2", + "postcss-svgo": "^4.0.3", "postcss-unique-selectors": "^4.0.1" } }, "cssnano-util-get-arguments": { "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/cssnano-util-get-arguments/download/cssnano-util-get-arguments-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", "dev": true }, "cssnano-util-get-match": { "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/cssnano-util-get-match/download/cssnano-util-get-match-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", "dev": true }, @@ -5036,9 +5052,9 @@ }, "dependencies": { "css-tree": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.2.tgz", - "integrity": "sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dev": true, "requires": { "mdn-data": "2.0.14", @@ -5061,7 +5077,7 @@ }, "currently-unhandled": { "version": "0.4.1", - "resolved": "https://registry.npm.taobao.org/currently-unhandled/download/currently-unhandled-0.4.1.tgz", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "requires": { "array-find-index": "^1.0.1" @@ -5069,50 +5085,56 @@ }, "custom-event": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/custom-event/download/custom-event-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", "dev": true }, "cyclist": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/cyclist/download/cyclist-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=" }, "dashdash": { "version": "1.14.1", - "resolved": "https://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "requires": { "assert-plus": "^1.0.0" } }, "date-format": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/date-format/download/date-format-3.0.0.tgz", - "integrity": "sha1-64eANlx9KxURB4+0keZHl4DzrZU=", - "dev": true + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.6.tgz", + "integrity": "sha512-B9vvg5rHuQ8cbUXE/RMWMyX2YA5TecT3jKF5fLtGNlzPlU7zblSPmAm2OImDbWL+LDOQ6pUm+4LOFz+ywS41Zw==" }, "debug": { - "version": "4.2.0", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502921849&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz", - "integrity": "sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } } }, "debuglog": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/debuglog/download/debuglog-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=" }, "decamelize": { "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, "decode-uri-component": { "version": "0.2.0", - "resolved": "https://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, @@ -5131,9 +5153,9 @@ } }, "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "default-gateway": { @@ -5148,7 +5170,7 @@ }, "default-require-extensions": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/default-require-extensions/download/default-require-extensions-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefault-require-extensions%2Fdownload%2Fdefault-require-extensions-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", "dev": true, "requires": { @@ -5157,7 +5179,7 @@ "dependencies": { "strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/strip-bom/download/strip-bom-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true } @@ -5165,7 +5187,7 @@ }, "defaults": { "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/defaults/download/defaults-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "dev": true, "requires": { @@ -5174,7 +5196,7 @@ "dependencies": { "clone": { "version": "1.0.4", - "resolved": "https://registry.npm.taobao.org/clone/download/clone-1.0.4.tgz", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true } @@ -5182,8 +5204,8 @@ }, "define-properties": { "version": "1.1.3", - "resolved": "https://registry.npm.taobao.org/define-properties/download/define-properties-1.1.3.tgz", - "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "requires": { "object-keys": "^1.0.12" } @@ -5246,7 +5268,7 @@ "dependencies": { "array-union": { "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/array-union/download/array-union-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { @@ -5255,7 +5277,7 @@ }, "globby": { "version": "6.1.0", - "resolved": "https://registry.npm.taobao.org/globby/download/globby-6.1.0.tgz?cache=0&sync_timestamp=1591084066899&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobby%2Fdownload%2Fglobby-6.1.0.tgz", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { @@ -5268,7 +5290,7 @@ "dependencies": { "pify": { "version": "2.3.0", - "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true } @@ -5299,17 +5321,17 @@ }, "delayed-stream": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, "delegates": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/delegates/download/delegates-1.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdelegates%2Fdownload%2Fdelegates-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, "depd": { "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true }, @@ -5331,20 +5353,20 @@ }, "destroy": { "version": "1.0.4", - "resolved": "https://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", "dev": true }, "detect-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true }, "dezalgo": { - "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/dezalgo/download/dezalgo-1.0.3.tgz", - "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", "requires": { "asap": "^2.0.0", "wrappy": "1" @@ -5352,14 +5374,14 @@ }, "di": { "version": "0.0.1", - "resolved": "https://registry.npm.taobao.org/di/download/di-0.0.1.tgz", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", "dev": true }, "diff": { "version": "3.5.0", - "resolved": "https://registry.npm.taobao.org/diff/download/diff-3.5.0.tgz", - "integrity": "sha1-gAwN0eCov7yVg1wgKtIg/jF+WhI=", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, "diffie-hellman": { @@ -5371,14 +5393,6 @@ "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } } }, "dir-glob": { @@ -5400,14 +5414,14 @@ }, "dns-equal": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/dns-equal/download/dns-equal-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", "dev": true }, "dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", "dev": true, "requires": { "ip": "^1.1.0", @@ -5416,7 +5430,7 @@ }, "dns-txt": { "version": "2.0.2", - "resolved": "https://registry.npm.taobao.org/dns-txt/download/dns-txt-2.0.2.tgz", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", "dev": true, "requires": { @@ -5434,7 +5448,7 @@ }, "dom-serialize": { "version": "2.2.1", - "resolved": "https://registry.npm.taobao.org/dom-serialize/download/dom-serialize-2.2.1.tgz", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", "dev": true, "requires": { @@ -5455,9 +5469,9 @@ }, "dependencies": { "domelementtype": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", - "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true } } @@ -5495,8 +5509,8 @@ }, "duplexify": { "version": "3.7.1", - "resolved": "https://registry.npm.taobao.org/duplexify/download/duplexify-3.7.1.tgz", - "integrity": "sha1-Kk31MX9sz9kfhtb9JdjYoQO4gwk=", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "requires": { "end-of-stream": "^1.0.0", "inherits": "^2.0.1", @@ -5506,7 +5520,7 @@ }, "ecc-jsbn": { "version": "0.1.2", - "resolved": "https://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "requires": { "jsbn": "~0.1.0", @@ -5515,14 +5529,14 @@ }, "ee-first": { "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", "dev": true }, "electron-to-chromium": { - "version": "1.3.631", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.631.tgz", - "integrity": "sha512-mPEG/52142po0XK1jQkZtbMmp38MZtQ3JDFItYxV65WXyhxDYEQ54tP4rb93m0RbMlZqQ+4zBw2N7UumSgGfbA==", + "version": "1.4.107", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.107.tgz", + "integrity": "sha512-Huen6taaVrUrSy8o7mGStByba8PfOWWluHNxSHGBrCgEdFVLtvdQDBr9LBCF9Uci8SYxh28QNNMO0oC17wbGAg==", "dev": true }, "elliptic": { @@ -5537,19 +5551,12 @@ "inherits": "^2.0.4", "minimalistic-assert": "^1.0.1", "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } } }, "emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz?cache=0&sync_timestamp=1603212659584&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Femoji-regex%2Fdownload%2Femoji-regex-8.0.0.tgz", - "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "emojis-list": { "version": "3.0.0", @@ -5559,22 +5566,22 @@ }, "encodeurl": { "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "dev": true }, "encoding": { "version": "0.1.13", - "resolved": "https://registry.npm.taobao.org/encoding/download/encoding-0.1.13.tgz", - "integrity": "sha1-VldK/deR9UqOmyeFwFgqLSYhD6k=", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "requires": { "iconv-lite": "^0.6.2" } }, "end-of-stream": { "version": "1.4.4", - "resolved": "https://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.4.tgz?cache=0&sync_timestamp=1569416267505&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fend-of-stream%2Fdownload%2Fend-of-stream-1.4.4.tgz", - "integrity": "sha1-WuZKX0UFe682JuwU2gyl5LJDHrA=", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "requires": { "once": "^1.4.0" } @@ -5592,11 +5599,6 @@ "ws": "~7.4.2" }, "dependencies": { - "cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" - }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -5604,18 +5606,13 @@ "requires": { "ms": "^2.1.1" } - }, - "ws": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz", - "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==" } } }, "engine.io-client": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.1.tgz", - "integrity": "sha512-oVu9kBkGbcggulyVF0kz6BV3ganqUeqXvD79WOFKa+11oK692w1NyFkuEj4xrkFRpZhn92QOqTk4RQq5LiBXbQ==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.2.tgz", + "integrity": "sha512-QEqIp+gJ/kMHeUun7f5Vv3bteRHppHH/FMBQX/esFj/fuYfjyUKWGMo3VCvIP/V8bE9KcjHmRZrhIz2Z9oNsDA==", "requires": { "component-emitter": "~1.3.0", "component-inherit": "0.0.3", @@ -5626,7 +5623,7 @@ "parseqs": "0.0.6", "parseuri": "0.0.6", "ws": "~7.4.2", - "xmlhttprequest-ssl": "~1.5.4", + "xmlhttprequest-ssl": "~1.6.2", "yeast": "0.1.2" }, "dependencies": { @@ -5640,13 +5637,8 @@ }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "ws": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz", - "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==" } } }, @@ -5684,19 +5676,19 @@ }, "ent": { "version": "2.2.0", - "resolved": "https://registry.npm.taobao.org/ent/download/ent-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", "dev": true }, "entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true }, "err-code": { "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/err-code/download/err-code-1.1.2.tgz", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=" }, "errno": { @@ -5710,34 +5702,43 @@ }, "error-ex": { "version": "1.3.2", - "resolved": "https://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz", - "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "requires": { "is-arrayish": "^0.2.1" } }, "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.17.7.tgz?cache=0&sync_timestamp=1601503126049&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fes-abstract%2Fdownload%2Fes-abstract-1.17.7.tgz", - "integrity": "sha1-pN5hsvZpifx0IWdsHLl4dXOs5Uw=", + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.5.tgz", + "integrity": "sha512-Aa2G2+Rd3b6kxEUKTF4TaW67czBLyAv3z7VOhYRU50YBx+bbsYZ9xQP4lMNazePuFlybXI0V4MruPos7qUo5fA==", "requires": { + "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" } }, "es-to-primitive": { "version": "1.2.1", - "resolved": "https://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.2.1.tgz", - "integrity": "sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo=", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -5746,12 +5747,12 @@ }, "es6-promise": { "version": "4.2.8", - "resolved": "https://registry.npm.taobao.org/es6-promise/download/es6-promise-4.2.8.tgz", - "integrity": "sha1-TrIVlMlyvEBVPSduUQU5FD21Pgo=" + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" }, "es6-promisify": { "version": "5.0.0", - "resolved": "https://registry.npm.taobao.org/es6-promisify/download/es6-promisify-5.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fes6-promisify%2Fdownload%2Fes6-promisify-5.0.0.tgz", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", "requires": { "es6-promise": "^4.0.3" @@ -5765,39 +5766,42 @@ }, "escape-html": { "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", "dev": true }, "escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz?cache=0&sync_timestamp=1587627212242&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescape-string-regexp%2Fdownload%2Fescape-string-regexp-1.0.5.tgz", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "eslint": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.16.0.tgz", - "integrity": "sha512-iVWPS785RuDA4dWuhhgXTNrGxHHK3a8HLSMBgbbU59ruJDubUraXN8N5rn7kb8tG6sjg74eE0RA3YWT51eusEw==", + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.2.2", + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.0.1", "doctrine": "^3.0.0", "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", "eslint-scope": "^5.1.1", "eslint-utils": "^2.1.0", "eslint-visitor-keys": "^2.0.0", "espree": "^7.3.1", - "esquery": "^1.2.0", + "esquery": "^1.4.0", "esutils": "^2.0.2", - "file-entry-cache": "^6.0.0", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", @@ -5805,7 +5809,7 @@ "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.19", + "lodash.merge": "^4.6.2", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -5814,11 +5818,20 @@ "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", - "table": "^6.0.4", + "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -5829,9 +5842,9 @@ } }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -5864,6 +5877,12 @@ "which": "^2.0.1" } }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, "eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -5875,18 +5894,18 @@ } }, "eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true }, "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", + "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", "dev": true, "requires": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" } }, "has-flag": { @@ -5933,9 +5952,9 @@ "dev": true }, "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -5957,12 +5976,12 @@ "dev": true }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } }, "supports-color": { @@ -5975,9 +5994,9 @@ } }, "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, "which": { @@ -5999,8 +6018,8 @@ }, "eslint-ast-utils": { "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/eslint-ast-utils/download/eslint-ast-utils-1.1.0.tgz", - "integrity": "sha1-PVi6VXgBz7HJQdaBMe6fjDS9FYY=", + "resolved": "https://registry.npmjs.org/eslint-ast-utils/-/eslint-ast-utils-1.1.0.tgz", + "integrity": "sha512-otzzTim2/1+lVrlH19EfQQJEhVJSu0zOb9ygb3iapN6UlyaDtyRq4b5U1FuW0v1lRa9Fp/GJyHkSwm6NqABgCA==", "dev": true, "requires": { "lodash.get": "^4.4.2", @@ -6009,14 +6028,14 @@ }, "eslint-config-google": { "version": "0.14.0", - "resolved": "https://registry.npm.taobao.org/eslint-config-google/download/eslint-config-google-0.14.0.tgz", - "integrity": "sha1-T1+HWbpuEbQkKUohnb+hjFCLzBo=", + "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz", + "integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==", "dev": true }, "eslint-plugin-unicorn": { "version": "21.0.0", - "resolved": "https://registry.npm.taobao.org/eslint-plugin-unicorn/download/eslint-plugin-unicorn-21.0.0.tgz", - "integrity": "sha1-fjqLD3JfADYZ4fQNdpk57NjXCNA=", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-21.0.0.tgz", + "integrity": "sha512-S8v7+v4gZTQPj4pKKvexhgSUaLQSyItvxW2SVZDaX9Iu5IjlAmF2eni+L6w8a2aqshxgU8Lle4FIAVDtuejSKQ==", "dev": true, "requires": { "ci-info": "^2.0.0", @@ -6036,8 +6055,8 @@ "dependencies": { "find-up": { "version": "4.1.0", - "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-4.1.0.tgz", - "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { "locate-path": "^5.0.0", @@ -6046,26 +6065,35 @@ }, "locate-path": { "version": "5.0.0", - "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-5.0.0.tgz?cache=0&sync_timestamp=1597081764621&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flocate-path%2Fdownload%2Flocate-path-5.0.0.tgz", - "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { "p-locate": "^4.1.0" } }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, "p-locate": { "version": "4.1.0", - "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-4.1.0.tgz?cache=0&sync_timestamp=1597081786401&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-locate%2Fdownload%2Fp-locate-4.1.0.tgz", - "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { "p-limit": "^2.2.0" } }, "parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-5.1.0.tgz", - "integrity": "sha1-+WCIzfJKj6qa6poAny2dlCyZlkY=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -6076,14 +6104,14 @@ }, "path-exists": { "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-4.0.0.tgz", - "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, "read-pkg": { "version": "5.2.0", - "resolved": "https://registry.npm.taobao.org/read-pkg/download/read-pkg-5.2.0.tgz", - "integrity": "sha1-e/KVQ4yloz5WzTDgU7NO5yUMk8w=", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "requires": { "@types/normalize-package-data": "^2.4.0", @@ -6094,16 +6122,16 @@ "dependencies": { "type-fest": { "version": "0.6.0", - "resolved": "https://registry.npm.taobao.org/type-fest/download/type-fest-0.6.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.6.0.tgz", - "integrity": "sha1-jSojcNPfiG61yQraHFv2GIrPg4s=", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true } } }, "read-pkg-up": { "version": "7.0.1", - "resolved": "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-7.0.1.tgz?cache=0&sync_timestamp=1575620584058&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-pkg-up%2Fdownload%2Fread-pkg-up-7.0.1.tgz", - "integrity": "sha1-86YTV1hFlzOuK5VjgFbhhU5+9Qc=", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "requires": { "find-up": "^4.1.0", @@ -6113,31 +6141,40 @@ }, "safe-regex": { "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/safe-regex/download/safe-regex-2.1.1.tgz", - "integrity": "sha1-9xKPANBW4v5cEegaEyTdl0qtztI=", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz", + "integrity": "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==", "dev": true, "requires": { "regexp-tree": "~0.1.1" } }, "semver": { - "version": "7.3.2", - "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.3.2.tgz?cache=0&sync_timestamp=1586886267748&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.2.tgz", - "integrity": "sha1-YElisFK4HtB4aq6EOJ/7pw/9OTg=", - "dev": true + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } }, "type-fest": { "version": "0.8.1", - "resolved": "https://registry.npm.taobao.org/type-fest/download/type-fest-0.8.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.8.1.tgz", - "integrity": "sha1-CeJJ696FHTseSNJ8EFREZn8XuD0=", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, "eslint-scope": { "version": "4.0.3", - "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-4.0.3.tgz?cache=0&sync_timestamp=1599935989085&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-4.0.3.tgz", - "integrity": "sha1-ygODMxD2iJoyZHgaqC5j65z+eEg=", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", "dev": true, "requires": { "esrecurse": "^4.1.0", @@ -6145,21 +6182,81 @@ } }, "eslint-template-visitor": { - "version": "2.2.1", - "resolved": "https://registry.npm.taobao.org/eslint-template-visitor/download/eslint-template-visitor-2.2.1.tgz", - "integrity": "sha1-Lcyxqyj6dCnla6bdAUTe8tibwtY=", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/eslint-template-visitor/-/eslint-template-visitor-2.3.2.tgz", + "integrity": "sha512-3ydhqFpuV7x1M9EK52BPNj6V0Kwu0KKkcIAfpUhwHbR8ocRln/oUHgfxQupY8O1h4Qv/POHDumb/BwwNfxbtnA==", "dev": true, "requires": { - "babel-eslint": "^10.1.0", - "eslint-visitor-keys": "^1.3.0", + "@babel/core": "^7.12.16", + "@babel/eslint-parser": "^7.12.16", + "eslint-visitor-keys": "^2.0.0", "esquery": "^1.3.1", "multimap": "^1.1.0" + }, + "dependencies": { + "@babel/core": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.9.tgz", + "integrity": "sha512-5ug+SfZCpDAkVp9SFIZAzlW18rlzsOcJGaetCjkySnrXXDUw9AR8cDUm1iByTmdWM6yxX6/zycaV76w3YTF2gw==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.9", + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helpers": "^7.17.9", + "@babel/parser": "^7.17.9", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.9", + "@babel/types": "^7.17.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + } + }, + "@babel/generator": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz", + "integrity": "sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==", + "dev": true, + "requires": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } } }, "eslint-utils": { "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/eslint-utils/download/eslint-utils-2.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-utils%2Fdownload%2Feslint-utils-2.1.0.tgz", - "integrity": "sha1-0t5eA0JOcH3BDHQGjd7a5wh0Gyc=", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "requires": { "eslint-visitor-keys": "^1.1.0" @@ -6167,8 +6264,8 @@ }, "eslint-visitor-keys": { "version": "1.3.0", - "resolved": "https://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha1-MOvR73wv3/AcOk8VEESvJfqwUj4=", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true }, "espree": { @@ -6192,48 +6289,48 @@ }, "esprima": { "version": "4.0.1", - "resolved": "https://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fesprima%2Fdownload%2Fesprima-4.0.1.tgz", - "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, "esquery": { - "version": "1.3.1", - "resolved": "https://registry.npm.taobao.org/esquery/download/esquery-1.3.1.tgz", - "integrity": "sha1-t4tYKKqOIU4p+3TE1bdS4cAz2lc=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "requires": { "estraverse": "^5.1.0" }, "dependencies": { "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-5.2.0.tgz?cache=0&sync_timestamp=1596641700025&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-5.2.0.tgz", - "integrity": "sha1-MH30JUfmzHMk088DwVXVzbjFOIA=", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } }, "esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npm.taobao.org/esrecurse/download/esrecurse-4.3.0.tgz", - "integrity": "sha1-eteWTWeauyi+5yzsY3WLHF0smSE=", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { "estraverse": "^5.2.0" }, "dependencies": { "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-5.2.0.tgz?cache=0&sync_timestamp=1596641700025&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-5.2.0.tgz", - "integrity": "sha1-MH30JUfmzHMk088DwVXVzbjFOIA=", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } }, "estraverse": { "version": "4.3.0", - "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz?cache=0&sync_timestamp=1596641700025&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-4.3.0.tgz", - "integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, "esutils": { @@ -6244,26 +6341,26 @@ }, "etag": { "version": "1.8.1", - "resolved": "https://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", "dev": true }, "eventemitter3": { "version": "4.0.7", - "resolved": "https://registry.npm.taobao.org/eventemitter3/download/eventemitter3-4.0.7.tgz", - "integrity": "sha1-Lem2j2Uo1WRO9cWVJqG0oHMGFp8=", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, "events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true }, "eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", + "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", "dev": true, "requires": { "original": "^1.0.0" @@ -6281,8 +6378,8 @@ }, "execa": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/execa/download/execa-1.0.0.tgz?cache=0&sync_timestamp=1606973164899&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz", - "integrity": "sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, "requires": { "cross-spawn": "^6.0.0", @@ -6296,8 +6393,8 @@ "dependencies": { "cross-spawn": { "version": "6.0.5", - "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz?cache=0&sync_timestamp=1590421014780&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-spawn-6.0.5.tgz", - "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { "nice-try": "^1.0.4", @@ -6309,21 +6406,21 @@ }, "semver": { "version": "5.7.1", - "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1586886267748&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz", - "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } }, "exit": { "version": "0.1.2", - "resolved": "https://registry.npm.taobao.org/exit/download/exit-0.1.2.tgz", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true }, "expand-brackets": { "version": "2.1.4", - "resolved": "https://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { @@ -6347,7 +6444,7 @@ }, "define-property": { "version": "0.2.5", - "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { @@ -6356,7 +6453,7 @@ }, "extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { @@ -6365,24 +6462,24 @@ }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "version": "4.17.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", + "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", "dev": true, "requires": { - "accepts": "~1.3.7", + "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", + "body-parser": "1.19.2", + "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.0", + "cookie": "0.4.2", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "~1.1.2", @@ -6396,13 +6493,13 @@ "on-finished": "~2.3.0", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", + "proxy-addr": "~2.0.7", + "qs": "6.9.7", "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", "statuses": "~1.5.0", "type-is": "~1.6.18", "utils-merge": "1.0.1", @@ -6411,7 +6508,7 @@ "dependencies": { "array-flatten": { "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz?cache=0&sync_timestamp=1574313492546&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-flatten%2Fdownload%2Farray-flatten-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", "dev": true }, @@ -6426,32 +6523,26 @@ }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", "dev": true } } }, "extend": { "version": "3.0.2", - "resolved": "https://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz", - "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=" + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "extend-shallow": { "version": "3.0.2", - "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { @@ -6472,8 +6563,8 @@ }, "external-editor": { "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/external-editor/download/external-editor-3.1.0.tgz?cache=0&sync_timestamp=1562602917731&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexternal-editor%2Fdownload%2Fexternal-editor-3.1.0.tgz", - "integrity": "sha1-ywP3QL764D6k0oPK7SdBqD8zVJU=", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "requires": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -6482,8 +6573,8 @@ "dependencies": { "iconv-lite": { "version": "0.4.24", - "resolved": "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz?cache=0&sync_timestamp=1594184528294&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz", - "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -6508,7 +6599,7 @@ "dependencies": { "define-property": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { @@ -6517,7 +6608,7 @@ }, "extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { @@ -6557,43 +6648,42 @@ }, "extsprintf": { "version": "1.3.0", - "resolved": "https://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz?cache=0&sync_timestamp=1591599726441&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-deep-equal%2Fdownload%2Ffast-deep-equal-3.1.3.tgz", - "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=" + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-glob": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", - "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", + "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" + "micromatch": "^4.0.4" } }, "fast-json-stable-stringify": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.0.0.tgz?cache=0&sync_timestamp=1576340500222&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-json-stable-stringify%2Fdownload%2Ffast-json-stable-stringify-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" }, "fast-levenshtein": { "version": "2.0.6", - "resolved": "https://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, "fastq": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.0.tgz", - "integrity": "sha512-NL2Qc5L3iQEsyYzweq7qfgy5OtXCmGzGvhElGEd/SoFWEMOEczNh5s5ocaF01HDetxz+p8ecjNPA6cZxxIHmzA==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dev": true, "requires": { "reusify": "^1.0.4" @@ -6601,7 +6691,7 @@ }, "faye-websocket": { "version": "0.10.0", - "resolved": "https://registry.npm.taobao.org/faye-websocket/download/faye-websocket-0.10.0.tgz", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", "dev": true, "requires": { @@ -6610,21 +6700,21 @@ }, "figgy-pudding": { "version": "3.5.2", - "resolved": "https://registry.npm.taobao.org/figgy-pudding/download/figgy-pudding-3.5.2.tgz", - "integrity": "sha1-tO7oFIq7Adzx0aw0Nn1Z4S+mHW4=" + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" }, "figures": { "version": "3.2.0", - "resolved": "https://registry.npm.taobao.org/figures/download/figures-3.2.0.tgz?cache=0&sync_timestamp=1581865349068&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffigures%2Fdownload%2Ffigures-3.2.0.tgz", - "integrity": "sha1-YlwYvSk8YE3EqN2y/r8MiDQXRq8=", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "requires": { "escape-string-regexp": "^1.0.5" } }, "file-entry-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz", - "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "requires": { "flat-cache": "^3.0.4" @@ -6640,9 +6730,16 @@ "schema-utils": "^2.6.5" } }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, "fileset": { "version": "2.0.3", - "resolved": "https://registry.npm.taobao.org/fileset/download/fileset-2.0.3.tgz", + "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", "dev": true, "requires": { @@ -6652,8 +6749,8 @@ }, "fill-range": { "version": "7.0.1", - "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz", - "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { "to-regex-range": "^5.0.1" @@ -6661,8 +6758,8 @@ }, "finalhandler": { "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/finalhandler/download/finalhandler-1.1.2.tgz", - "integrity": "sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0=", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, "requires": { "debug": "2.6.9", @@ -6676,8 +6773,8 @@ "dependencies": { "debug": { "version": "2.6.9", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -6685,7 +6782,7 @@ }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } @@ -6758,7 +6855,7 @@ }, "find-up": { "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-1.1.2.tgz", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "requires": { "path-exists": "^2.0.0", @@ -6775,12 +6872,6 @@ "rimraf": "^3.0.2" }, "dependencies": { - "flatted": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz", - "integrity": "sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==", - "dev": true - }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -6793,41 +6884,40 @@ } }, "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npm.taobao.org/flatted/download/flatted-2.0.2.tgz?cache=0&sync_timestamp=1601444325938&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fflatted%2Fdownload%2Fflatted-2.0.2.tgz", - "integrity": "sha1-RXWyHivO50NKqb5mL0t7X5wrUTg=", - "dev": true + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==" }, "flush-write-stream": { "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/flush-write-stream/download/flush-write-stream-1.1.1.tgz", - "integrity": "sha1-jdfYc6G6vCB9lOrQwuDkQnbr8ug=", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", "requires": { "inherits": "^2.0.3", "readable-stream": "^2.3.6" } }, "follow-redirects": { - "version": "1.13.0", - "resolved": "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.13.0.tgz?cache=0&sync_timestamp=1597060336697&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.13.0.tgz", - "integrity": "sha1-tC6Nk6Kn7qXtiGM2dtZZe8jjhNs=", + "version": "1.14.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", + "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==", "dev": true }, "for-in": { "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, "forever-agent": { "version": "0.6.1", - "resolved": "https://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "form-data": { "version": "2.3.3", - "resolved": "https://registry.npm.taobao.org/form-data/download/form-data-2.3.3.tgz?cache=0&sync_timestamp=1573027037564&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fform-data%2Fdownload%2Fform-data-2.3.3.tgz", - "integrity": "sha1-3M5SwF9kTymManq5Nr1yTO/786Y=", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -6835,14 +6925,14 @@ } }, "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npm.taobao.org/forwarded/download/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true }, "fragment-cache": { "version": "0.2.1", - "resolved": "https://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { @@ -6851,13 +6941,13 @@ }, "fresh": { "version": "0.5.2", - "resolved": "https://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", "dev": true }, "from2": { "version": "2.3.0", - "resolved": "https://registry.npm.taobao.org/from2/download/from2-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "requires": { "inherits": "^2.0.1", @@ -6865,27 +6955,26 @@ } }, "fs-extra": { - "version": "4.0.2", - "resolved": "https://registry.npm.taobao.org/fs-extra/download/fs-extra-4.0.2.tgz?cache=0&sync_timestamp=1591232737566&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-extra%2Fdownload%2Ffs-extra-4.0.2.tgz", - "integrity": "sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s=", - "dev": true, + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } }, "fs-minipass": { "version": "1.2.7", - "resolved": "https://registry.npm.taobao.org/fs-minipass/download/fs-minipass-1.2.7.tgz?cache=0&sync_timestamp=1579630052120&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-minipass%2Fdownload%2Ffs-minipass-1.2.7.tgz", - "integrity": "sha1-zP+FcIQef+QmVpPaiJNsVa7X98c=", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", "requires": { "minipass": "^2.6.0" } }, "fs-write-stream-atomic": { "version": "1.0.10", - "resolved": "https://registry.npm.taobao.org/fs-write-stream-atomic/download/fs-write-stream-atomic-1.0.10.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-write-stream-atomic%2Fdownload%2Ffs-write-stream-atomic-1.0.10.tgz", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "requires": { "graceful-fs": "^4.1.2", @@ -6896,20 +6985,20 @@ }, "fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { "version": "2.1.3", - "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-2.1.3.tgz?cache=0&sync_timestamp=1604593687665&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-2.1.3.tgz", - "integrity": "sha1-+3OHA66NL5/pAMM4Nt3r7ouX8j4=", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", "dev": true, "optional": true }, "fstream": { "version": "1.0.12", - "resolved": "https://registry.npm.taobao.org/fstream/download/fstream-1.0.12.tgz", - "integrity": "sha1-Touo7i1Ivk99DeUFRVVI6uWTIEU=", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", "requires": { "graceful-fs": "^4.1.2", "inherits": "~2.0.0", @@ -6919,8 +7008,8 @@ "dependencies": { "rimraf": { "version": "2.7.1", - "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz?cache=0&sync_timestamp=1581229948248&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-2.7.1.tgz", - "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "requires": { "glob": "^7.1.3" } @@ -6929,18 +7018,18 @@ }, "function-bind": { "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz", - "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=" + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "functional-red-black-tree": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, "gauge": { "version": "2.7.4", - "resolved": "https://registry.npm.taobao.org/gauge/download/gauge-2.7.4.tgz", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "requires": { "aproba": "^1.0.3", @@ -6955,12 +7044,12 @@ "dependencies": { "ansi-regex": { "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "is-fullwidth-code-point": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "requires": { "number-is-nan": "^1.0.0" @@ -6968,7 +7057,7 @@ }, "string-width": { "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { "code-point-at": "^1.0.0", @@ -6978,7 +7067,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { "ansi-regex": "^2.0.0" @@ -6988,16 +7077,16 @@ }, "gaze": { "version": "1.1.3", - "resolved": "https://registry.npm.taobao.org/gaze/download/gaze-1.1.3.tgz", - "integrity": "sha1-xEFzPhO5J6yMD/C0w7Az8ogSkko=", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", "requires": { "globule": "^1.0.0" } }, "genfun": { "version": "5.0.0", - "resolved": "https://registry.npm.taobao.org/genfun/download/genfun-5.0.0.tgz", - "integrity": "sha1-ndlxCgaQClxKW/V6yl2k5S/nZTc=" + "resolved": "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz", + "integrity": "sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==" }, "gensync": { "version": "1.0.0-beta.2", @@ -7007,13 +7096,13 @@ }, "get-caller-file": { "version": "2.0.5", - "resolved": "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz", - "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=" + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-intrinsic": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/get-intrinsic/download/get-intrinsic-1.0.1.tgz", - "integrity": "sha1-lKl2j8vdBZWhySc6rPTInQdWMb4=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -7022,35 +7111,44 @@ }, "get-stdin": { "version": "4.0.1", - "resolved": "https://registry.npm.taobao.org/get-stdin/download/get-stdin-4.0.1.tgz", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" }, "get-stream": { "version": "4.1.0", - "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-4.1.0.tgz", - "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "requires": { "pump": "^3.0.0" } }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, "get-value": { "version": "2.0.6", - "resolved": "https://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "dev": true }, "getpass": { "version": "0.1.7", - "resolved": "https://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "requires": { "assert-plus": "^1.0.0" } }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz", - "integrity": "sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY=", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -7061,9 +7159,9 @@ } }, "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.1.tgz", - "integrity": "sha1-tsHvQXxOVmPqSY8cRa+saRa7wik=", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { "is-glob": "^4.0.1" @@ -7071,43 +7169,66 @@ }, "globals": { "version": "11.12.0", - "resolved": "https://registry.npm.taobao.org/globals/download/globals-11.12.0.tgz", - "integrity": "sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4=", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, "globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "requires": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", "slash": "^3.0.0" } }, "globule": { - "version": "1.3.2", - "resolved": "https://registry.npm.taobao.org/globule/download/globule-1.3.2.tgz", - "integrity": "sha1-2L3Z6eTu+PluJFmZpd7n612FKcQ=", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.3.tgz", + "integrity": "sha512-mb1aYtDbIjTu4ShMB85m3UzjX9BVKe9WCzsnfMSZk+K5GpIbBOexgg4PPCt5eHDEG5/ZQAUX2Kct02zfiPLsKg==", "requires": { "glob": "~7.1.1", "lodash": "~4.17.10", "minimatch": "~3.0.2" + }, + "dependencies": { + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "requires": { + "brace-expansion": "^1.1.7" + } + } } }, "glyphicons": { "version": "0.2.0", - "resolved": "https://registry.npm.taobao.org/glyphicons/download/glyphicons-0.2.0.tgz", + "resolved": "https://registry.npmjs.org/glyphicons/-/glyphicons-0.2.0.tgz", "integrity": "sha1-KR2OyXSZOp/IinK1jVQNr1UNo5k=" }, "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.2.4.tgz?cache=0&sync_timestamp=1588086905523&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgraceful-fs%2Fdownload%2Fgraceful-fs-4.2.4.tgz", - "integrity": "sha1-Ila94U02MpWMRl68ltxGfKB6Kfs=" + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, "handle-thing": { "version": "2.0.1", @@ -7117,13 +7238,13 @@ }, "har-schema": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" }, "har-validator": { "version": "5.1.5", - "resolved": "https://registry.npm.taobao.org/har-validator/download/har-validator-5.1.5.tgz?cache=0&sync_timestamp=1596085242412&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhar-validator%2Fdownload%2Fhar-validator-5.1.5.tgz", - "integrity": "sha1-HwgDufjLIMD6E4It8ezds2veHv0=", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "requires": { "ajv": "^6.12.3", "har-schema": "^2.0.0" @@ -7131,15 +7252,15 @@ }, "has": { "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz", - "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "requires": { "function-bind": "^1.1.1" } }, "has-ansi": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "requires": { "ansi-regex": "^2.0.0" @@ -7147,11 +7268,16 @@ "dependencies": { "ansi-regex": { "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" } } }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" + }, "has-binary2": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", @@ -7162,34 +7288,42 @@ "dependencies": { "isarray": { "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" } } }, "has-cors": { "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/has-cors/download/has-cors-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" }, "has-flag": { "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.1.tgz", - "integrity": "sha1-n1IUdYpEGWxAbZvXbOv4HsLdMeg=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } }, "has-unicode": { "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/has-unicode/download/has-unicode-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, "has-value": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { @@ -7200,7 +7334,7 @@ }, "has-values": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { @@ -7210,7 +7344,7 @@ "dependencies": { "is-number": { "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { @@ -7219,7 +7353,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", - "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz?cache=0&sync_timestamp=1579194589153&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-3.2.2.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { @@ -7230,7 +7364,7 @@ }, "kind-of": { "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz?cache=0&sync_timestamp=1579194589153&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { @@ -7289,13 +7423,13 @@ } }, "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.8.8.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhosted-git-info%2Fdownload%2Fhosted-git-info-2.8.8.tgz", - "integrity": "sha1-dTm9S8Hg4KiVgVouAmJCCxKFhIg=" + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" }, "hpack.js": { "version": "2.1.6", - "resolved": "https://registry.npm.taobao.org/hpack.js/download/hpack.js-2.1.6.tgz", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", "dev": true, "requires": { @@ -7307,22 +7441,16 @@ }, "hsl-regex": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/hsl-regex/download/hsl-regex-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", "dev": true }, "hsla-regex": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/hsla-regex/download/hsla-regex-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", "dev": true }, - "html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", - "dev": true - }, "html-entities": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", @@ -7331,46 +7459,38 @@ }, "html-escaper": { "version": "2.0.2", - "resolved": "https://registry.npm.taobao.org/html-escaper/download/html-escaper-2.0.2.tgz", - "integrity": "sha1-39YAJ9o2o238viNiYsAKWCJoFFM=", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, "http-cache-semantics": { "version": "3.8.1", - "resolved": "https://registry.npm.taobao.org/http-cache-semantics/download/http-cache-semantics-3.8.1.tgz", - "integrity": "sha1-ObDhat2bYFvwqe89nar0hDtMrNI=" + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==" }, "http-deceiver": { "version": "1.2.7", - "resolved": "https://registry.npm.taobao.org/http-deceiver/download/http-deceiver-1.2.7.tgz", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", "dev": true }, "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.7.2.tgz?cache=0&sync_timestamp=1593407722046&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.7.2.tgz", - "integrity": "sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, "requires": { "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } + "toidentifier": "1.0.1" } }, "http-proxy": { "version": "1.18.1", - "resolved": "https://registry.npm.taobao.org/http-proxy/download/http-proxy-1.18.1.tgz?cache=0&sync_timestamp=1589751579252&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-proxy%2Fdownload%2Fhttp-proxy-1.18.1.tgz", - "integrity": "sha1-QBVB8FNIhLv5UmAzTnL4juOXZUk=", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, "requires": { "eventemitter3": "^4.0.0", @@ -7380,8 +7500,8 @@ }, "http-proxy-agent": { "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/http-proxy-agent/download/http-proxy-agent-2.1.0.tgz", - "integrity": "sha1-5IIb7vWyFCogJr1zkm/lN2McVAU=", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", + "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", "requires": { "agent-base": "4", "debug": "3.1.0" @@ -7389,15 +7509,15 @@ "dependencies": { "debug": { "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz", - "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "requires": { "ms": "2.0.0" } }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } @@ -7434,7 +7554,7 @@ "dependencies": { "extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { @@ -7445,7 +7565,7 @@ }, "fill-range": { "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { @@ -7457,7 +7577,7 @@ "dependencies": { "extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { @@ -7468,7 +7588,7 @@ }, "is-number": { "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { @@ -7477,7 +7597,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", - "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz?cache=0&sync_timestamp=1579194589153&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-3.2.2.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { @@ -7509,7 +7629,7 @@ }, "to-regex-range": { "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { @@ -7521,7 +7641,7 @@ }, "http-signature": { "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz?cache=0&sync_timestamp=1600868992623&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-signature%2Fdownload%2Fhttp-signature-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "requires": { "assert-plus": "^1.0.0", @@ -7531,23 +7651,23 @@ }, "https-browserify": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/https-browserify/download/https-browserify-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", "dev": true }, "https-proxy-agent": { "version": "2.2.4", - "resolved": "https://registry.npm.taobao.org/https-proxy-agent/download/https-proxy-agent-2.2.4.tgz", - "integrity": "sha1-TuenN6vZJniik9mzShr00NCMeHs=", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", "requires": { "agent-base": "^4.3.0", "debug": "^3.1.0" }, "dependencies": { "debug": { - "version": "3.2.6", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz?cache=0&sync_timestamp=1600502921849&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.2.6.tgz", - "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "requires": { "ms": "^2.1.1" } @@ -7556,16 +7676,16 @@ }, "humanize-ms": { "version": "1.2.1", - "resolved": "https://registry.npm.taobao.org/humanize-ms/download/humanize-ms-1.2.1.tgz", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", "requires": { "ms": "^2.0.0" } }, "iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.6.2.tgz?cache=0&sync_timestamp=1594184528294&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.6.2.tgz", - "integrity": "sha1-zhPRh1sMOmdL1qBLf3awGxtt7QE=", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "requires": { "safer-buffer": ">= 2.1.2 < 3.0.0" } @@ -7587,39 +7707,39 @@ }, "iferr": { "version": "0.1.5", - "resolved": "https://registry.npm.taobao.org/iferr/download/iferr-0.1.5.tgz", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" }, "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true }, "ignore-walk": { - "version": "3.0.3", - "resolved": "https://registry.npm.taobao.org/ignore-walk/download/ignore-walk-3.0.3.tgz?cache=0&sync_timestamp=1570600490530&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore-walk%2Fdownload%2Fignore-walk-3.0.3.tgz", - "integrity": "sha1-AX4kRxhL/q3nwjjkrv3R6PlbHjc=", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", + "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", "requires": { "minimatch": "^3.0.4" } }, "image-size": { "version": "0.5.5", - "resolved": "https://registry.npm.taobao.org/image-size/download/image-size-0.5.5.tgz", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", "dev": true, "optional": true }, "immediate": { "version": "3.0.6", - "resolved": "https://registry.npm.taobao.org/immediate/download/immediate-3.0.6.tgz", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", "dev": true }, "import-cwd": { "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/import-cwd/download/import-cwd-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", "dev": true, "requires": { @@ -7628,7 +7748,7 @@ }, "import-fresh": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/import-fresh/download/import-fresh-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", "dev": true, "requires": { @@ -7638,7 +7758,7 @@ }, "import-from": { "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/import-from/download/import-from-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", "dev": true, "requires": { @@ -7656,24 +7776,24 @@ } }, "import-modules": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/import-modules/download/import-modules-2.0.0.tgz", - "integrity": "sha1-nB4TtOehVoL3Cm4/opU05FQM/F0=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-modules/-/import-modules-2.1.0.tgz", + "integrity": "sha512-8HEWcnkbGpovH9yInoisxaSoIg9Brbul+Ju3Kqe2UsYDUBJD/iQjSgEj0zPcTDPKfPp2fs5xlv1i+JSye/m1/A==", "dev": true }, "imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, "in-publish": { "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/in-publish/download/in-publish-2.0.1.tgz", - "integrity": "sha1-lIsaU1yAMFYc6lIvc/ePS+NX4Aw=" + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.1.tgz", + "integrity": "sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==" }, "indent-string": { "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/indent-string/download/indent-string-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", "requires": { "repeating": "^2.0.0" @@ -7681,23 +7801,23 @@ }, "indexes-of": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/indexes-of/download/indexes-of-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", "dev": true }, "indexof": { "version": "0.0.1", - "resolved": "https://registry.npm.taobao.org/indexof/download/indexof-0.0.1.tgz", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" }, "infer-owner": { "version": "1.0.4", - "resolved": "https://registry.npm.taobao.org/infer-owner/download/infer-owner-1.0.4.tgz", - "integrity": "sha1-xM78qo5RBRwqQLos6KPScpWvlGc=" + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" }, "inflight": { "version": "1.0.6", - "resolved": "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { "once": "^1.3.0", @@ -7706,18 +7826,18 @@ }, "inherits": { "version": "2.0.4", - "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz", - "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.6.tgz", - "integrity": "sha512-IZUoxEjNjubzrmvzZU4lKP7OnYmX72XRl3sqkfJhBKweKi5rnGi5+IUdlj/H1M+Ip5JQ1WzaDMOBRY90Ajc5jg==" + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "inquirer": { "version": "6.5.1", - "resolved": "https://registry.npm.taobao.org/inquirer/download/inquirer-6.5.1.tgz?cache=0&sync_timestamp=1595471691804&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finquirer%2Fdownload%2Finquirer-6.5.1.tgz", - "integrity": "sha1-i/t6WsAtrG/2QaxMX/F9oRL820I=", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.1.tgz", + "integrity": "sha512-uxNHBeQhRXIoHWTSNYUFhQVrHYFThIt6IVo2fFmSe8aBwdR3/w6b58hJpiL/fMukFkvGzjg+hSxFtwvVmKZmXw==", "requires": { "ansi-escapes": "^4.2.1", "chalk": "^2.4.2", @@ -7744,6 +7864,16 @@ "ipaddr.js": "^1.9.0" } }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -7755,18 +7885,18 @@ }, "invert-kv": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/invert-kv/download/invert-kv-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finvert-kv%2Fdownload%2Finvert-kv-2.0.0.tgz", - "integrity": "sha1-c5P1r6Weyf9fZ6J2INEcIm4+7AI=", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", "dev": true }, "ip": { "version": "1.1.5", - "resolved": "https://registry.npm.taobao.org/ip/download/ip-1.1.5.tgz", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" }, "ip-regex": { "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/ip-regex/download/ip-regex-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", "dev": true }, @@ -7778,13 +7908,13 @@ }, "is-absolute-url": { "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/is-absolute-url/download/is-absolute-url-2.1.0.tgz?cache=0&sync_timestamp=1569735663940&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-absolute-url%2Fdownload%2Fis-absolute-url-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", "dev": true }, "is-accessor-descriptor": { "version": "0.1.6", - "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { @@ -7793,7 +7923,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", - "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz?cache=0&sync_timestamp=1579194589153&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-3.2.2.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { @@ -7803,28 +7933,46 @@ } }, "is-arguments": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", - "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, "requires": { - "call-bind": "^1.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, "is-arrayish": { "version": "0.2.1", - "resolved": "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "requires": { + "has-bigints": "^1.0.1" + } + }, "is-binary-path": { "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-2.1.0.tgz", - "integrity": "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "requires": { "binary-extensions": "^2.0.0" } }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", @@ -7832,13 +7980,13 @@ "dev": true }, "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npm.taobao.org/is-callable/download/is-callable-1.2.2.tgz?cache=0&sync_timestamp=1600719717881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-callable%2Fdownload%2Fis-callable-1.2.2.tgz", - "integrity": "sha1-x8ZxXNItTdtI0+GZcCI6zquwgNk=" + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" }, "is-color-stop": { "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/is-color-stop/download/is-color-stop-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", "dev": true, "requires": { @@ -7851,16 +7999,16 @@ } }, "is-core-module": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/is-core-module/download/is-core-module-2.1.0.tgz", - "integrity": "sha1-pMwDHZsaymPuy9GKZQ4Ty07quUY=", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", "requires": { "has": "^1.0.3" } }, "is-data-descriptor": { "version": "0.1.4", - "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { @@ -7869,7 +8017,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", - "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz?cache=0&sync_timestamp=1579194589153&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-3.2.2.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { @@ -7879,9 +8027,12 @@ } }, "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/is-date-object/download/is-date-object-1.0.2.tgz", - "integrity": "sha1-vac28s2P0G0yhE53Q7+nSUw7/X4=" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } }, "is-descriptor": { "version": "0.1.6", @@ -7904,42 +8055,42 @@ }, "is-directory": { "version": "0.3.1", - "resolved": "https://registry.npm.taobao.org/is-directory/download/is-directory-0.3.1.tgz", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", "dev": true }, "is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true }, "is-extendable": { "version": "0.1.1", - "resolved": "https://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true }, "is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, "is-finite": { "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/is-finite/download/is-finite-1.1.0.tgz?cache=0&sync_timestamp=1581062011443&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-finite%2Fdownload%2Fis-finite-1.1.0.tgz", - "integrity": "sha1-kEE1x3+0LAZB1qobzbxNqo2ggvM=" + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==" }, "is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=" + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz", - "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -7952,16 +8103,24 @@ "dev": true }, "is-negative-zero": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/is-negative-zero/download/is-negative-zero-2.0.0.tgz", - "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" }, "is-number": { "version": "7.0.0", - "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz", - "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", @@ -7994,7 +8153,7 @@ }, "is-plain-obj": { "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-1.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-obj%2Fdownload%2Fis-plain-obj-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "dev": true }, @@ -8008,11 +8167,12 @@ } }, "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/is-regex/download/is-regex-1.1.1.tgz?cache=0&sync_timestamp=1596555619793&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-regex%2Fdownload%2Fis-regex-1.1.1.tgz", - "integrity": "sha1-xvmKrMVG9s7FRooHt7FTq1ZKV7k=", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "requires": { - "has-symbols": "^1.0.1" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, "is-resolvable": { @@ -8021,39 +8181,54 @@ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", "dev": true }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "requires": { + "call-bind": "^1.0.2" + } + }, "is-stream": { "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, - "is-svg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", - "dev": true, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "requires": { - "html-comment-regex": "^1.1.0" + "has-tostringtag": "^1.0.0" } }, "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/is-symbol/download/is-symbol-1.0.3.tgz?cache=0&sync_timestamp=1574296542615&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-symbol%2Fdownload%2Fis-symbol-1.0.3.tgz", - "integrity": "sha1-OOEBS55jKb4N6dJKQU/XRB7GGTc=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "requires": { - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.2" } }, "is-typedarray": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, "is-utf8": { "version": "0.2.1", - "resolved": "https://registry.npm.taobao.org/is-utf8/download/is-utf8-0.2.1.tgz", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "requires": { + "call-bind": "^1.0.2" + } + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -8062,40 +8237,40 @@ }, "is-wsl": { "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" }, "isarray": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isbinaryfile": { - "version": "4.0.6", - "resolved": "https://registry.npm.taobao.org/isbinaryfile/download/isbinaryfile-4.0.6.tgz", - "integrity": "sha1-7ctisiTitHEIMLZ0mMjk5aTSYQs=", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", "dev": true }, "isexe": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "isobject": { "version": "3.0.1", - "resolved": "https://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, "isstream": { "version": "0.1.2", - "resolved": "https://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "istanbul-api": { "version": "2.1.7", - "resolved": "https://registry.npm.taobao.org/istanbul-api/download/istanbul-api-2.1.7.tgz?cache=0&sync_timestamp=1588776113860&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fistanbul-api%2Fdownload%2Fistanbul-api-2.1.7.tgz", - "integrity": "sha1-gnhrefO5PUgTSceqHiwrTutIyKg=", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-2.1.7.tgz", + "integrity": "sha512-LYTOa2UrYFyJ/aSczZi/6lBykVMjCCvUmT64gOe+jPZFy4w6FYfPGqFT2IiQ2BxVHHDOvCD7qrIXb0EOh4uGWw==", "dev": true, "requires": { "async": "^2.6.2", @@ -8115,14 +8290,14 @@ "dependencies": { "istanbul-lib-coverage": { "version": "2.0.5", - "resolved": "https://registry.npm.taobao.org/istanbul-lib-coverage/download/istanbul-lib-coverage-2.0.5.tgz?cache=0&sync_timestamp=1577063499817&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fistanbul-lib-coverage%2Fdownload%2Fistanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha1-Z18KtpUD+tSx2En3NrqsqAM0T0k=", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", "dev": true }, "istanbul-lib-instrument": { "version": "3.3.0", - "resolved": "https://registry.npm.taobao.org/istanbul-lib-instrument/download/istanbul-lib-instrument-3.3.0.tgz?cache=0&sync_timestamp=1589107503451&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fistanbul-lib-instrument%2Fdownload%2Fistanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha1-pfY9kfC7wMPkee9MXeAnM17G1jA=", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", "dev": true, "requires": { "@babel/generator": "^7.4.0", @@ -8137,15 +8312,15 @@ } }, "istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true }, "istanbul-lib-hook": { "version": "2.0.7", - "resolved": "https://registry.npm.taobao.org/istanbul-lib-hook/download/istanbul-lib-hook-2.0.7.tgz?cache=0&sync_timestamp=1577063499949&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fistanbul-lib-hook%2Fdownload%2Fistanbul-lib-hook-2.0.7.tgz", - "integrity": "sha1-yVaV84PU+PYN8fBCUqlVDhW1sTM=", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz", + "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", "dev": true, "requires": { "append-transform": "^1.0.0" @@ -8165,8 +8340,8 @@ }, "istanbul-lib-report": { "version": "2.0.8", - "resolved": "https://registry.npm.taobao.org/istanbul-lib-report/download/istanbul-lib-report-2.0.8.tgz?cache=0&sync_timestamp=1577063500136&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fistanbul-lib-report%2Fdownload%2Fistanbul-lib-report-2.0.8.tgz", - "integrity": "sha1-WoETzXRtQ8SInro2qxDn1QybTzM=", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", "dev": true, "requires": { "istanbul-lib-coverage": "^2.0.5", @@ -8176,14 +8351,14 @@ "dependencies": { "istanbul-lib-coverage": { "version": "2.0.5", - "resolved": "https://registry.npm.taobao.org/istanbul-lib-coverage/download/istanbul-lib-coverage-2.0.5.tgz?cache=0&sync_timestamp=1577063499817&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fistanbul-lib-coverage%2Fdownload%2Fistanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha1-Z18KtpUD+tSx2En3NrqsqAM0T0k=", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", "dev": true }, "supports-color": { "version": "6.1.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1606205153904&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", - "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -8193,8 +8368,8 @@ }, "istanbul-lib-source-maps": { "version": "3.0.6", - "resolved": "https://registry.npm.taobao.org/istanbul-lib-source-maps/download/istanbul-lib-source-maps-3.0.6.tgz?cache=0&sync_timestamp=1577063500348&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fistanbul-lib-source-maps%2Fdownload%2Fistanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha1-KEmXxIIRdS7EhiU9qX44ed77qMg=", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", "dev": true, "requires": { "debug": "^4.1.1", @@ -8206,14 +8381,14 @@ "dependencies": { "istanbul-lib-coverage": { "version": "2.0.5", - "resolved": "https://registry.npm.taobao.org/istanbul-lib-coverage/download/istanbul-lib-coverage-2.0.5.tgz?cache=0&sync_timestamp=1577063499817&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fistanbul-lib-coverage%2Fdownload%2Fistanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha1-Z18KtpUD+tSx2En3NrqsqAM0T0k=", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", "dev": true }, "rimraf": { "version": "2.7.1", - "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz?cache=0&sync_timestamp=1581229948248&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-2.7.1.tgz", - "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { "glob": "^7.1.3" @@ -8221,41 +8396,41 @@ }, "source-map": { "version": "0.6.1", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, "istanbul-reports": { "version": "2.2.7", - "resolved": "https://registry.npm.taobao.org/istanbul-reports/download/istanbul-reports-2.2.7.tgz", - "integrity": "sha1-XZOfYjfXtIOTzAlZ6rQM1P0FaTE=", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", + "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", "dev": true, "requires": { "html-escaper": "^2.0.0" } }, "jasmine": { - "version": "3.6.3", - "resolved": "https://registry.npm.taobao.org/jasmine/download/jasmine-3.6.3.tgz", - "integrity": "sha1-UgzXH3a9glHp9Wa2IuE2AundzyY=", + "version": "3.99.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.99.0.tgz", + "integrity": "sha512-YIThBuHzaIIcjxeuLmPD40SjxkEcc8i//sGMDKCgkRMVgIwRJf5qyExtlJpQeh7pkeoBSOe6lQEdg+/9uKg9mw==", "dev": true, "requires": { "glob": "^7.1.6", - "jasmine-core": "~3.6.0" + "jasmine-core": "~3.99.0" } }, "jasmine-core": { - "version": "3.6.0", - "resolved": "https://registry.npm.taobao.org/jasmine-core/download/jasmine-core-3.6.0.tgz", - "integrity": "sha1-SR87sjlBeZw1POt6RbOKlQ68WiA=", + "version": "3.99.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.99.1.tgz", + "integrity": "sha512-Hu1dmuoGcZ7AfyynN3LsfruwMbxMALMka+YtZeGoLuDEySVmVAPaonkNoBRIw/ectu8b9tVQCJNgp4a4knp+tg==", "dev": true }, "jasmine-marbles": { "version": "0.6.0", - "resolved": "https://registry.npm.taobao.org/jasmine-marbles/download/jasmine-marbles-0.6.0.tgz", - "integrity": "sha1-943Bo7xFKXbeEO6LR8c9YWUyqVQ=", + "resolved": "https://registry.npmjs.org/jasmine-marbles/-/jasmine-marbles-0.6.0.tgz", + "integrity": "sha512-1uzgjEesEeCb+r+v46qn5x326TiGqk5SUZa+A3O+XnMCjG/pGcUOhL9Xsg5L7gLC6RFHyWGTkB5fei4rcvIOiQ==", "dev": true, "requires": { "lodash": "^4.5.0" @@ -8263,8 +8438,8 @@ }, "jasmine-spec-reporter": { "version": "4.2.1", - "resolved": "https://registry.npm.taobao.org/jasmine-spec-reporter/download/jasmine-spec-reporter-4.2.1.tgz", - "integrity": "sha1-HWMq7ANBZwrTJPkrqEtLMrNeniI=", + "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-4.2.1.tgz", + "integrity": "sha512-FZBoZu7VE5nR7Nilzy+Np8KuVIOxF4oXDPDknehCYBDE080EnlPu0afdZNmpGDBRCUBv3mj5qgqCRmk6W/K8vg==", "dev": true, "requires": { "colors": "1.1.2" @@ -8272,7 +8447,7 @@ }, "jasminewd2": { "version": "2.2.0", - "resolved": "https://registry.npm.taobao.org/jasminewd2/download/jasminewd2-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz", "integrity": "sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4=", "dev": true }, @@ -8304,25 +8479,25 @@ } }, "jquery": { - "version": "3.5.1", - "resolved": "https://registry.npm.taobao.org/jquery/download/jquery-3.5.1.tgz", - "integrity": "sha1-17TQjhv9uGrS8aPQOeoXMEcXq7U=" + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", + "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==" }, "js-base64": { "version": "2.6.4", - "resolved": "https://registry.npm.taobao.org/js-base64/download/js-base64-2.6.4.tgz", - "integrity": "sha1-9OaGxd4eofhn28rT1G2WlCjfmMQ=" + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==" }, "js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz?cache=0&sync_timestamp=1586796260005&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-tokens%2Fdownload%2Fjs-tokens-4.0.0.tgz", - "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk=", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.14.0.tgz", - "integrity": "sha1-p6NBcPJqIbsWJCTYray0ETpp5II=", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -8331,44 +8506,44 @@ }, "jsbn": { "version": "0.1.1", - "resolved": "https://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, "jsesc": { "version": "2.5.2", - "resolved": "https://registry.npm.taobao.org/jsesc/download/jsesc-2.5.2.tgz?cache=0&sync_timestamp=1603893693208&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsesc%2Fdownload%2Fjsesc-2.5.2.tgz", - "integrity": "sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q=", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, "json-parse-better-errors": { "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=" + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" }, "json-parse-even-better-errors": { "version": "2.3.1", - "resolved": "https://registry.npm.taobao.org/json-parse-even-better-errors/download/json-parse-even-better-errors-2.3.1.tgz?cache=0&sync_timestamp=1599066252407&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-parse-even-better-errors%2Fdownload%2Fjson-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0=" + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" }, "json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz?cache=0&sync_timestamp=1599336588554&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema-traverse%2Fdownload%2Fjson-schema-traverse-0.4.1.tgz", - "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/json-stable-stringify-without-jsonify/download/json-stable-stringify-without-jsonify-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, "json-stringify-safe": { "version": "5.0.1", - "resolved": "https://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-stringify-safe%2Fdownload%2Fjson-stringify-safe-5.0.1.tgz", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "json3": { @@ -8378,43 +8553,40 @@ "dev": true }, "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true }, "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz?cache=0&sync_timestamp=1604161809549&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsonfile%2Fdownload%2Fjsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" } }, "jsonparse": { "version": "1.3.1", - "resolved": "https://registry.npm.taobao.org/jsonparse/download/jsonparse-1.3.1.tgz", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" }, "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", - "json-schema": "0.2.3", + "json-schema": "0.4.0", "verror": "1.10.0" } }, "jszip": { - "version": "3.5.0", - "resolved": "https://registry.npm.taobao.org/jszip/download/jszip-3.5.0.tgz?cache=0&sync_timestamp=1592170674541&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjszip%2Fdownload%2Fjszip-3.5.0.tgz", - "integrity": "sha1-tP0fNoJFNGZY54H+yWdYAkieFfY=", + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.9.1.tgz", + "integrity": "sha512-H9A60xPqJ1CuC4Ka6qxzXZeU8aNmgOeP5IFqwJbQQwtu2EUYxota3LdsiZWplF7Wgd9tkAd0mdu36nceSaPuYw==", "dev": true, "requires": { "lie": "~3.3.0", @@ -8425,8 +8597,8 @@ }, "karma": { "version": "5.2.3", - "resolved": "https://registry.npm.taobao.org/karma/download/karma-5.2.3.tgz", - "integrity": "sha1-MmQCQhm60nKOklQuAFiiSS16RuQ=", + "resolved": "https://registry.npmjs.org/karma/-/karma-5.2.3.tgz", + "integrity": "sha512-tHdyFADhVVPBorIKCX8A37iLHxc6RBRphkSoQ+MLKdAtFn1k97tD8WUGi1KlEtDZKL3hui0qhsY9HXUfSNDYPQ==", "dev": true, "requires": { "body-parser": "^1.19.0", @@ -8456,8 +8628,8 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.3.0.tgz?cache=0&sync_timestamp=1606794799738&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" @@ -8465,14 +8637,14 @@ }, "camelcase": { "version": "5.3.1", - "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz", - "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "cliui": { "version": "6.0.0", - "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-6.0.0.tgz", - "integrity": "sha1-UR1wLAxOQcoVbX0OlgIfI+EyJbE=", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, "requires": { "string-width": "^4.2.0", @@ -8482,8 +8654,8 @@ }, "color-convert": { "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" @@ -8491,20 +8663,20 @@ }, "color-name": { "version": "1.1.4", - "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "colors": { "version": "1.4.0", - "resolved": "https://registry.npm.taobao.org/colors/download/colors-1.4.0.tgz", - "integrity": "sha1-xQSRR51MG9rtLJztMs98fcI2D3g=", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true }, "find-up": { "version": "4.1.0", - "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-4.1.0.tgz", - "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { "locate-path": "^5.0.0", @@ -8513,23 +8685,23 @@ }, "locate-path": { "version": "5.0.0", - "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-5.0.0.tgz?cache=0&sync_timestamp=1597081764621&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flocate-path%2Fdownload%2Flocate-path-5.0.0.tgz", - "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { "p-locate": "^4.1.0" } }, "mime": { - "version": "2.4.6", - "resolved": "https://registry.npm.taobao.org/mime/download/mime-2.4.6.tgz?cache=0&sync_timestamp=1590596706367&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-2.4.6.tgz", - "integrity": "sha1-5bQHyQ20QvK+tbFiNz0Htpr/pNE=", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true }, "p-locate": { "version": "4.1.0", - "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-4.1.0.tgz?cache=0&sync_timestamp=1597081786401&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-locate%2Fdownload%2Fp-locate-4.1.0.tgz", - "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { "p-limit": "^2.2.0" @@ -8537,14 +8709,14 @@ }, "path-exists": { "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-4.0.0.tgz", - "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, "rimraf": { "version": "3.0.2", - "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-3.0.2.tgz?cache=0&sync_timestamp=1581229948248&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-3.0.2.tgz", - "integrity": "sha1-8aVAK6YiCtUswSgrrBrjqkn9Bho=", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" @@ -8552,23 +8724,23 @@ }, "source-map": { "version": "0.6.1", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz", - "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } }, "tmp": { "version": "0.2.1", - "resolved": "https://registry.npm.taobao.org/tmp/download/tmp-0.2.1.tgz", - "integrity": "sha1-hFf8MDfc9HGcJRNnoa9lAO4czxQ=", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, "requires": { "rimraf": "^3.0.0" @@ -8576,8 +8748,8 @@ }, "wrap-ansi": { "version": "6.2.0", - "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-6.2.0.tgz", - "integrity": "sha1-6Tk7oHEC5skaOyIUePAlfNKFblM=", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "requires": { "ansi-styles": "^4.0.0", @@ -8587,8 +8759,8 @@ }, "yargs": { "version": "15.4.1", - "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-15.4.1.tgz", - "integrity": "sha1-DYehbeAa7p2L7Cv7909nhRcw9Pg=", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, "requires": { "cliui": "^6.0.0", @@ -8606,8 +8778,8 @@ }, "yargs-parser": { "version": "18.1.3", - "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-18.1.3.tgz?cache=0&sync_timestamp=1604886855135&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-18.1.3.tgz", - "integrity": "sha1-vmjEl1xrKr9GkjawyHA2L6sJp7A=", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "requires": { "camelcase": "^5.0.0", @@ -8617,9 +8789,9 @@ } }, "karma-chrome-launcher": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/karma-chrome-launcher/download/karma-chrome-launcher-3.1.0.tgz", - "integrity": "sha1-gFpYZ5mk0F9OVPcqIEl58/MGZzg=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz", + "integrity": "sha512-hsIglcq1vtboGPAN+DGCISCFOxW+ZVnIqhDQcCMqqCp+4dmJ0Qpq5QAjkbA0X2L9Mi6OBkHi2Srrbmm7pUKkzQ==", "dev": true, "requires": { "which": "^1.2.1" @@ -8627,8 +8799,8 @@ }, "karma-coverage-istanbul-reporter": { "version": "2.0.6", - "resolved": "https://registry.npm.taobao.org/karma-coverage-istanbul-reporter/download/karma-coverage-istanbul-reporter-2.0.6.tgz", - "integrity": "sha1-e26ciHgUR7uHqmrCS/dLk+VYrcM=", + "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-2.0.6.tgz", + "integrity": "sha512-WFh77RI8bMIKdOvI/1/IBmgnM+Q7NOLhnwG91QJrM8lW+CIXCjTzhhUsT/svLvAkLmR10uWY4RyYbHMLkTglvg==", "dev": true, "requires": { "istanbul-api": "^2.1.6", @@ -8637,17 +8809,17 @@ }, "karma-jasmine": { "version": "3.3.1", - "resolved": "https://registry.npm.taobao.org/karma-jasmine/download/karma-jasmine-3.3.1.tgz", - "integrity": "sha1-wBsaLslz4VMcH2U14dfWa45CdcI=", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-3.3.1.tgz", + "integrity": "sha512-Nxh7eX9mOQMyK0VSsMxdod+bcqrR/ikrmEiWj5M6fwuQ7oI+YEF1FckaDsWfs6TIpULm9f0fTKMjF7XcrvWyqQ==", "dev": true, "requires": { "jasmine-core": "^3.5.0" } }, "karma-jasmine-html-reporter": { - "version": "1.5.4", - "resolved": "https://registry.npm.taobao.org/karma-jasmine-html-reporter/download/karma-jasmine-html-reporter-1.5.4.tgz", - "integrity": "sha1-Zp8z1pTYj84bDM/aVxEd5xbLAZI=", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.7.0.tgz", + "integrity": "sha512-pzum1TL7j90DTE86eFt48/s12hqwQuiD+e5aXx2Dc9wDEn2LfGq6RoAxEZZjFiN0RDSCOnosEKRZWxbQ+iMpQQ==", "dev": true }, "karma-source-map-support": { @@ -8673,8 +8845,8 @@ }, "lcid": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/lcid/download/lcid-2.0.0.tgz", - "integrity": "sha1-bvXS32DlL4LrIopMNz6NHzlyU88=", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "dev": true, "requires": { "invert-kv": "^2.0.0" @@ -8783,22 +8955,22 @@ }, "lie": { "version": "3.3.0", - "resolved": "https://registry.npm.taobao.org/lie/download/lie-3.3.0.tgz", - "integrity": "sha1-3Pgt7lRfRgdNryAMfBxaCOD0D2o=", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", "dev": true, "requires": { "immediate": "~3.0.5" } }, "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npm.taobao.org/lines-and-columns/download/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, "load-json-file": { "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/load-json-file/download/load-json-file-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "requires": { "graceful-fs": "^4.1.2", @@ -8827,8 +8999,8 @@ }, "locate-path": { "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz?cache=0&sync_timestamp=1597081764621&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flocate-path%2Fdownload%2Flocate-path-3.0.0.tgz", - "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "requires": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -8836,43 +9008,55 @@ "dependencies": { "path-exists": { "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" } } }, "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.20.tgz?cache=0&sync_timestamp=1597338796744&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.20.tgz", - "integrity": "sha1-tEqbYpe8tpjxxRo1RaKzs2jVnFI=" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.clonedeep": { "version": "4.5.0", - "resolved": "https://registry.npm.taobao.org/lodash.clonedeep/download/lodash.clonedeep-4.5.0.tgz", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", "dev": true }, "lodash.get": { "version": "4.4.2", - "resolved": "https://registry.npm.taobao.org/lodash.get/download/lodash.get-4.4.2.tgz", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", "dev": true }, "lodash.memoize": { "version": "4.1.2", - "resolved": "https://registry.npm.taobao.org/lodash.memoize/download/lodash.memoize-4.1.2.tgz", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, "lodash.uniq": { "version": "4.5.0", - "resolved": "https://registry.npm.taobao.org/lodash.uniq/download/lodash.uniq-4.5.0.tgz", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", "dev": true }, "lodash.zip": { "version": "4.2.0", - "resolved": "https://registry.npm.taobao.org/lodash.zip/download/lodash.zip-4.2.0.tgz", + "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", "integrity": "sha1-7GZi5IlkCO1KtsVCo5kLcswIACA=", "dev": true }, @@ -8886,22 +9070,21 @@ } }, "log4js": { - "version": "6.3.0", - "resolved": "https://registry.npm.taobao.org/log4js/download/log4js-6.3.0.tgz", - "integrity": "sha1-EN+vu0NDUaPjAnegC5h5RG9xW8s=", - "dev": true, + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.4.tgz", + "integrity": "sha512-ncaWPsuw9Vl1CKA406hVnJLGQKy1OHx6buk8J4rE2lVW+NW5Y82G5/DIloO7NkqLOUtNPEANaWC1kZYVjXssPw==", "requires": { - "date-format": "^3.0.0", - "debug": "^4.1.1", - "flatted": "^2.0.1", - "rfdc": "^1.1.4", - "streamroller": "^2.2.4" + "date-format": "^4.0.6", + "debug": "^4.3.4", + "flatted": "^3.2.5", + "rfdc": "^1.3.0", + "streamroller": "^3.0.6" } }, "loglevel": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", - "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.0.tgz", + "integrity": "sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==", "dev": true }, "loose-envify": { @@ -8915,7 +9098,7 @@ }, "loud-rejection": { "version": "1.6.0", - "resolved": "https://registry.npm.taobao.org/loud-rejection/download/loud-rejection-1.6.0.tgz", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", "requires": { "currently-unhandled": "^0.4.1", @@ -8924,24 +9107,24 @@ }, "lru-cache": { "version": "5.1.1", - "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-5.1.1.tgz", - "integrity": "sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA=", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "requires": { "yallist": "^3.0.2" } }, "magic-string": { "version": "0.25.3", - "resolved": "https://registry.npm.taobao.org/magic-string/download/magic-string-0.25.3.tgz", - "integrity": "sha1-NLjSosf+ydm9+ZKaP9gdJx7zW+k=", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.3.tgz", + "integrity": "sha512-6QK0OpF/phMz0Q2AxILkX2mFhi7m+WMwTRg0LQKq/WBB0cDP4rYH3Wp4/d3OTXlrPLVJT/RFqj8tFeAR4nk8AA==", "requires": { "sourcemap-codec": "^1.4.4" } }, "make-dir": { "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-2.1.0.tgz", - "integrity": "sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU=", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { "pify": "^4.0.1", @@ -8950,28 +9133,28 @@ "dependencies": { "pify": { "version": "4.0.1", - "resolved": "https://registry.npm.taobao.org/pify/download/pify-4.0.1.tgz", - "integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, "semver": { "version": "5.7.1", - "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1586886267748&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz", - "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } }, "make-error": { "version": "1.3.6", - "resolved": "https://registry.npm.taobao.org/make-error/download/make-error-1.3.6.tgz", - "integrity": "sha1-LrLjfqm2fEiR9oShOUeZr0hM96I=", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, "make-fetch-happen": { "version": "5.0.2", - "resolved": "https://registry.npm.taobao.org/make-fetch-happen/download/make-fetch-happen-5.0.2.tgz", - "integrity": "sha1-qoOHEE8mh+3KAchofuRQE9AtGb0=", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz", + "integrity": "sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag==", "requires": { "agentkeepalive": "^3.4.1", "cacache": "^12.0.0", @@ -8994,8 +9177,8 @@ }, "map-age-cleaner": { "version": "0.1.3", - "resolved": "https://registry.npm.taobao.org/map-age-cleaner/download/map-age-cleaner-0.1.3.tgz", - "integrity": "sha1-fVg6cwZDTAVf5HSw9FB45uG0uSo=", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "dev": true, "requires": { "p-defer": "^1.0.0" @@ -9003,18 +9186,18 @@ }, "map-cache": { "version": "0.2.2", - "resolved": "https://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true }, "map-obj": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/map-obj/download/map-obj-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" }, "map-visit": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/map-visit/download/map-visit-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { @@ -9040,14 +9223,14 @@ }, "media-typer": { "version": "0.3.0", - "resolved": "https://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, "mem": { "version": "4.3.0", - "resolved": "https://registry.npm.taobao.org/mem/download/mem-4.3.0.tgz", - "integrity": "sha1-Rhr0l7xK4JYIzbLmDu+2m/90QXg=", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", "dev": true, "requires": { "map-age-cleaner": "^0.1.1", @@ -9067,7 +9250,7 @@ }, "meow": { "version": "3.7.0", - "resolved": "https://registry.npm.taobao.org/meow/download/meow-3.7.0.tgz", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "requires": { "camelcase-keys": "^2.0.0", @@ -9084,7 +9267,7 @@ }, "merge-descriptors": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", "dev": true }, @@ -9119,18 +9302,18 @@ }, "methods": { "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", "dev": true }, "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" + "braces": "^3.0.2", + "picomatch": "^2.3.1" } }, "miller-rabin": { @@ -9141,14 +9324,6 @@ "requires": { "bn.js": "^4.0.0", "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } } }, "mime": { @@ -9158,22 +9333,22 @@ "dev": true }, "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npm.taobao.org/mime-db/download/mime-db-1.44.0.tgz", - "integrity": "sha1-+hHF6wrKEzS0Izy01S8QxaYnL5I=" + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.27.tgz", - "integrity": "sha1-R5SfmOJ56lMRn1ci4PNOUpvsAJ8=", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "requires": { - "mime-db": "1.44.0" + "mime-db": "1.52.0" } }, "mimic-fn": { "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz?cache=0&sync_timestamp=1596096817053&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-2.1.0.tgz", - "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=" + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, "mini-css-extract-plugin": { "version": "0.9.0", @@ -9209,7 +9384,7 @@ }, "normalize-url": { "version": "1.9.1", - "resolved": "https://registry.npm.taobao.org/normalize-url/download/normalize-url-1.9.1.tgz", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", "dev": true, "requires": { @@ -9243,22 +9418,22 @@ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz", - "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz", - "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=" + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "minipass": { "version": "2.9.0", - "resolved": "https://registry.npm.taobao.org/minipass/download/minipass-2.9.0.tgz?cache=0&sync_timestamp=1589332639319&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminipass%2Fdownload%2Fminipass-2.9.0.tgz", - "integrity": "sha1-5xN2Ln0+Mv7YAxFc+T4EvKn8yaY=", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -9274,9 +9449,9 @@ }, "dependencies": { "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -9300,9 +9475,9 @@ }, "dependencies": { "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -9326,9 +9501,9 @@ }, "dependencies": { "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -9344,16 +9519,16 @@ }, "minizlib": { "version": "1.3.3", - "resolved": "https://registry.npm.taobao.org/minizlib/download/minizlib-1.3.3.tgz", - "integrity": "sha1-IpDeloGKNMKVUcio0wEha9Zahh0=", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", "requires": { "minipass": "^2.9.0" } }, "mississippi": { "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/mississippi/download/mississippi-3.0.0.tgz", - "integrity": "sha1-6goykfl+C16HdrNj1fChLZTGcCI=", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", "requires": { "concat-stream": "^1.5.0", "duplexify": "^3.4.2", @@ -9389,16 +9564,16 @@ } }, "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.5.tgz?cache=0&sync_timestamp=1587535418745&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.5.tgz", - "integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "requires": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" } }, "move-concurrently": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "requires": { "aproba": "^1.1.1", @@ -9411,8 +9586,8 @@ "dependencies": { "rimraf": { "version": "2.7.1", - "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz?cache=0&sync_timestamp=1581229948248&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-2.7.1.tgz", - "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "requires": { "glob": "^7.1.3" } @@ -9420,9 +9595,9 @@ } }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "multicast-dns": { "version": "6.2.3", @@ -9436,25 +9611,25 @@ }, "multicast-dns-service-types": { "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/multicast-dns-service-types/download/multicast-dns-service-types-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", "dev": true }, "multimap": { "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/multimap/download/multimap-1.1.0.tgz", - "integrity": "sha1-UmP+vAhaF5HDO1m7OvxqdqKhDKg=", + "resolved": "https://registry.npmjs.org/multimap/-/multimap-1.1.0.tgz", + "integrity": "sha512-0ZIR9PasPxGXmRsEF8jsDzndzHDj7tIav+JUmvIFB/WHswliFnquxECT/De7GR4yg99ky/NlRKJT82G1y271bw==", "dev": true }, "mute-stream": { "version": "0.0.8", - "resolved": "https://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.8.tgz", - "integrity": "sha1-FjDEKyJR/4HiooPelqVJfqkuXg0=" + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, "nan": { - "version": "2.14.2", - "resolved": "https://registry.npm.taobao.org/nan/download/nan-2.14.2.tgz?cache=0&sync_timestamp=1602591586255&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnan%2Fdownload%2Fnan-2.14.2.tgz", - "integrity": "sha1-9TdkAGlRaPTMaUrJOT0MlYXu6hk=" + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==" }, "nanomatch": { "version": "1.2.13", @@ -9477,14 +9652,14 @@ }, "natural-compare": { "version": "1.4.0", - "resolved": "https://registry.npm.taobao.org/natural-compare/download/natural-compare-1.4.0.tgz", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz", - "integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs=" + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" }, "neo-async": { "version": "2.6.2", @@ -9494,56 +9669,56 @@ }, "ng-connection-service": { "version": "1.0.4", - "resolved": "https://registry.npm.taobao.org/ng-connection-service/download/ng-connection-service-1.0.4.tgz", - "integrity": "sha1-AoVKbqvZqP5E8K1jAkKJZSA5oXk=", + "resolved": "https://registry.npmjs.org/ng-connection-service/-/ng-connection-service-1.0.4.tgz", + "integrity": "sha512-WrZfK+hUzrJS77ItxXI08rUN6Av77W3+LsaJEPufyo2wRe7Tn8xG18FHHEbbgqKkJeDT/yGJBH2xOaT+1jb22g==", "requires": { "tslib": "^1.9.0" } }, "ngx-bootstrap": { "version": "5.6.2", - "resolved": "https://registry.npm.taobao.org/ngx-bootstrap/download/ngx-bootstrap-5.6.2.tgz", - "integrity": "sha1-5kj4JtMDwpJVwWdyZ279MGlXQNE=" + "resolved": "https://registry.npmjs.org/ngx-bootstrap/-/ngx-bootstrap-5.6.2.tgz", + "integrity": "sha512-6YHXtdXkGH3w0NQoaUgNYAcrj064Lv5RTO284ha/hvpNTrh55yQz2cVh0VvwBk3MjyY2tdmLH4SuCJDszYdYiw==" }, "ngx-cookie-service": { "version": "3.1.3", - "resolved": "https://registry.npm.taobao.org/ngx-cookie-service/download/ngx-cookie-service-3.1.3.tgz", - "integrity": "sha1-HS0UQXADboq4I6KnyMxi+O34Hz0=", + "resolved": "https://registry.npmjs.org/ngx-cookie-service/-/ngx-cookie-service-3.1.3.tgz", + "integrity": "sha512-7bKSmpoUzfz9y7KSw83UqNnFGXnssMu5hFHyXvKKeqMBnhMqrpX1caZwNjvPW/61q71fGEdS/ZLZKvEedn2Wug==", "requires": { "tslib": "^1.10.0" } }, "ngx-pagination": { - "version": "5.0.0", - "resolved": "https://registry.npm.taobao.org/ngx-pagination/download/ngx-pagination-5.0.0.tgz", - "integrity": "sha1-pLTBUKcK7xfM2CXkVD4XSpdLvRQ=" + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/ngx-pagination/-/ngx-pagination-5.1.1.tgz", + "integrity": "sha512-KxHES+Dn6pbetytO9ng2GAdclmo4UcwzFmQyVPWh2xRPbAlv5/ezL2xnDVBFMqCoJQaZagvdQ+ZZFbqGWqAvCQ==" }, "ngx-spinner": { "version": "7.0.0", - "resolved": "https://registry.npm.taobao.org/ngx-spinner/download/ngx-spinner-7.0.0.tgz", - "integrity": "sha1-RHYu9oQ2GpKK5Y5zVpxUPiCsC9E=", + "resolved": "https://registry.npmjs.org/ngx-spinner/-/ngx-spinner-7.0.0.tgz", + "integrity": "sha512-njAJ8emEgI70hhP4f+/LIsuiQLrY8nvV/l8xBDbuQJwGmSz2TjJnIVCz641IZXgUkKQEqK2FAsjYcUX/52eesw==", "requires": { "tslib": "^1.9.0" } }, "ngx-toastr": { "version": "12.1.0", - "resolved": "https://registry.npm.taobao.org/ngx-toastr/download/ngx-toastr-12.1.0.tgz", - "integrity": "sha1-UPbu5CYvS6NCkY8G+YplfyIxlM8=", + "resolved": "https://registry.npmjs.org/ngx-toastr/-/ngx-toastr-12.1.0.tgz", + "integrity": "sha512-rytCRBhvuudj614Kfj9GoIVQDrFuLvHSMP1YrMwTmR1SNkNJZOpGKmaSDCCBrNDkSrGouzMWBlFbl1UDBBsiqw==", "requires": { "tslib": "^1.10.0" } }, "nice-try": { "version": "1.0.5", - "resolved": "https://registry.npm.taobao.org/nice-try/download/nice-try-1.0.5.tgz?cache=0&sync_timestamp=1602353330797&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnice-try%2Fdownload%2Fnice-try-1.0.5.tgz", - "integrity": "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, "node-fetch-npm": { "version": "2.0.4", - "resolved": "https://registry.npm.taobao.org/node-fetch-npm/download/node-fetch-npm-2.0.4.tgz", - "integrity": "sha1-ZQfQ4XqewL477FFpWKSXzsVL9aQ=", + "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz", + "integrity": "sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg==", "requires": { "encoding": "^0.1.11", "json-parse-better-errors": "^1.0.0", @@ -9558,8 +9733,8 @@ }, "node-gyp": { "version": "3.8.0", - "resolved": "https://registry.npm.taobao.org/node-gyp/download/node-gyp-3.8.0.tgz?cache=0&sync_timestamp=1602898932859&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-gyp%2Fdownload%2Fnode-gyp-3.8.0.tgz", - "integrity": "sha1-VAMEJhwzDoDQ1e3OJTpoyzlkIYw=", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", + "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", "requires": { "fstream": "^1.0.0", "glob": "^7.0.3", @@ -9577,21 +9752,21 @@ "dependencies": { "rimraf": { "version": "2.7.1", - "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz?cache=0&sync_timestamp=1581229948248&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-2.7.1.tgz", - "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "requires": { "glob": "^7.1.3" } }, "semver": { "version": "5.3.0", - "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.3.0.tgz?cache=0&sync_timestamp=1606852076134&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.3.0.tgz", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" }, "tar": { "version": "2.2.2", - "resolved": "https://registry.npm.taobao.org/tar/download/tar-2.2.2.tgz", - "integrity": "sha1-DKiEhWLHKZuLRG/2pNYM27I+3EA=", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", "requires": { "block-stream": "*", "fstream": "^1.0.12", @@ -9633,22 +9808,22 @@ "dependencies": { "punycode": { "version": "1.4.1", - "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true } } }, "node-releases": { - "version": "1.1.67", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz", - "integrity": "sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.3.tgz", + "integrity": "sha512-maHFz6OLqYxz+VQyCAtA3PTX4UP/53pa05fyDNc9CwjvJ0yEh6+xBwKsgCxMNhS8taUKBFYxfuiaD9U/55iFaw==", "dev": true }, "node-sass": { "version": "4.14.1", - "resolved": "https://registry.npm.taobao.org/node-sass/download/node-sass-4.14.1.tgz", - "integrity": "sha1-mch+wu+3BH7WOPtMnbfzpC4iF7U=", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.14.1.tgz", + "integrity": "sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g==", "requires": { "async-foreach": "^0.1.3", "chalk": "^1.1.1", @@ -9671,17 +9846,17 @@ "dependencies": { "ansi-regex": { "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "ansi-styles": { "version": "2.2.1", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz?cache=0&sync_timestamp=1591687079130&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { "ansi-styles": "^2.2.1", @@ -9693,7 +9868,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { "ansi-regex": "^2.0.0" @@ -9701,14 +9876,14 @@ }, "supports-color": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598613527834&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" } } }, "nopt": { "version": "3.0.6", - "resolved": "https://registry.npm.taobao.org/nopt/download/nopt-3.0.6.tgz?cache=0&sync_timestamp=1597650252237&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnopt%2Fdownload%2Fnopt-3.0.6.tgz", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "requires": { "abbrev": "1" @@ -9716,8 +9891,8 @@ }, "normalize-package-data": { "version": "2.5.0", - "resolved": "https://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.5.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-package-data%2Fdownload%2Fnormalize-package-data-2.5.0.tgz", - "integrity": "sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg=", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "requires": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -9727,20 +9902,20 @@ "dependencies": { "semver": { "version": "5.7.1", - "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1586886267748&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz", - "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=" + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, "normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz", - "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, "normalize-range": { "version": "0.1.2", - "resolved": "https://registry.npm.taobao.org/normalize-range/download/normalize-range-0.1.2.tgz", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", "dev": true }, @@ -9751,9 +9926,9 @@ "dev": true }, "npm-bundled": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/npm-bundled/download/npm-bundled-1.1.1.tgz", - "integrity": "sha1-Ht1XCGWpTNsbyCIHdeKUZsn7I0s=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", "requires": { "npm-normalize-package-bin": "^1.0.1" } @@ -9777,9 +9952,9 @@ } }, "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -9795,13 +9970,13 @@ }, "npm-normalize-package-bin": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/npm-normalize-package-bin/download/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha1-bnmkHyP9I1wGIyGCKNp9nCO49uI=" + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" }, "npm-package-arg": { "version": "6.1.0", - "resolved": "https://registry.npm.taobao.org/npm-package-arg/download/npm-package-arg-6.1.0.tgz", - "integrity": "sha1-Fa4eJ1ilAn77TCUFVLhac323/ME=", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.0.tgz", + "integrity": "sha512-zYbhP2k9DbJhA0Z3HKUePUgdB1x7MfIfKssC+WLPFMKTBZKpZh5m13PgexJjCq6KW7j17r0jHWcCpxEqnnncSA==", "requires": { "hosted-git-info": "^2.6.0", "osenv": "^0.1.5", @@ -9811,15 +9986,15 @@ "dependencies": { "semver": { "version": "5.7.1", - "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1586886267748&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz", - "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=" + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, "npm-packlist": { "version": "1.4.8", - "resolved": "https://registry.npm.taobao.org/npm-packlist/download/npm-packlist-1.4.8.tgz", - "integrity": "sha1-Vu5swTW5+YrT1Rwcldoiu7my7z4=", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", + "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", "requires": { "ignore-walk": "^3.0.1", "npm-bundled": "^1.0.1", @@ -9828,8 +10003,8 @@ }, "npm-pick-manifest": { "version": "3.0.2", - "resolved": "https://registry.npm.taobao.org/npm-pick-manifest/download/npm-pick-manifest-3.0.2.tgz", - "integrity": "sha1-9Nnl/UviFT5fTl+be+jcQZqZq7c=", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz", + "integrity": "sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw==", "requires": { "figgy-pudding": "^3.5.1", "npm-package-arg": "^6.0.0", @@ -9838,15 +10013,15 @@ "dependencies": { "semver": { "version": "5.7.1", - "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1586886267748&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz", - "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=" + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, "npm-registry-fetch": { "version": "4.0.7", - "resolved": "https://registry.npm.taobao.org/npm-registry-fetch/download/npm-registry-fetch-4.0.7.tgz", - "integrity": "sha1-V5Ub9lQeAkazTJ+aOKtzYHyUSdc=", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-4.0.7.tgz", + "integrity": "sha512-cny9v0+Mq6Tjz+e0erFAB+RYJ/AVGzkjnISiobqP8OWj9c9FLoZZu8/SPSKJWE17F1tk4018wfjV+ZbIbqC7fQ==", "requires": { "JSONStream": "^1.3.4", "bluebird": "^3.5.1", @@ -9859,7 +10034,7 @@ }, "npm-run-path": { "version": "2.0.2", - "resolved": "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { @@ -9868,8 +10043,8 @@ }, "npmlog": { "version": "4.1.2", - "resolved": "https://registry.npm.taobao.org/npmlog/download/npmlog-4.1.2.tgz", - "integrity": "sha1-CKfyqL9zRgR3mp76StXMcXq7lUs=", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "requires": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", @@ -9888,33 +10063,33 @@ }, "num2fraction": { "version": "1.2.2", - "resolved": "https://registry.npm.taobao.org/num2fraction/download/num2fraction-1.2.2.tgz", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", "dev": true }, "number-is-nan": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz?cache=0&sync_timestamp=1581061963259&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnumber-is-nan%2Fdownload%2Fnumber-is-nan-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, "oauth-pkce": { "version": "0.0.4", - "resolved": "https://registry.npm.taobao.org/oauth-pkce/download/oauth-pkce-0.0.4.tgz", - "integrity": "sha1-FPcEMI/WVNtX3WX++kwvDodlisE=" + "resolved": "https://registry.npmjs.org/oauth-pkce/-/oauth-pkce-0.0.4.tgz", + "integrity": "sha512-69SZuPiq9kQUlZmhUjp+GsnsvAwCkxIIdsxuKVnpUeHedIet1cW+alb4GEpfVA2vDjhS6WJVwddCB4gFm44s0w==" }, "oauth-sign": { "version": "0.9.0", - "resolved": "https://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Foauth-sign%2Fdownload%2Foauth-sign-0.9.0.tgz", - "integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU=" + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" }, "object-assign": { "version": "4.1.1", - "resolved": "https://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "object-copy": { "version": "0.1.0", - "resolved": "https://registry.npm.taobao.org/object-copy/download/object-copy-0.1.0.tgz", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { @@ -9925,7 +10100,7 @@ "dependencies": { "define-property": { "version": "0.2.5", - "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { @@ -9934,7 +10109,7 @@ }, "kind-of": { "version": "3.2.2", - "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz?cache=0&sync_timestamp=1579194589153&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-3.2.2.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { @@ -9944,28 +10119,28 @@ } }, "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npm.taobao.org/object-inspect/download/object-inspect-1.8.0.tgz?cache=0&sync_timestamp=1592545459045&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-inspect%2Fdownload%2Fobject-inspect-1.8.0.tgz", - "integrity": "sha1-34B+Xs9TpgnMa/6T6sPMe+WzqdA=" + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==" }, "object-is": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.4.tgz", - "integrity": "sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, "requires": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3" } }, "object-keys": { "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/object-keys/download/object-keys-1.1.1.tgz", - "integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4=" + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object-visit": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/object-visit/download/object-visit-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { @@ -9974,8 +10149,8 @@ }, "object.assign": { "version": "4.1.2", - "resolved": "https://registry.npm.taobao.org/object.assign/download/object.assign-4.1.2.tgz", - "integrity": "sha1-DtVKNC7Os3s4/3brgxoOeIy2OUA=", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "requires": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", @@ -9984,17 +10159,18 @@ } }, "object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha1-Npvx+VktiridcS3O1cuBx8U1Jkk=", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", + "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", "requires": { + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" + "es-abstract": "^1.19.1" } }, "object.pick": { "version": "1.3.0", - "resolved": "https://registry.npm.taobao.org/object.pick/download/object.pick-1.3.0.tgz", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { @@ -10002,37 +10178,14 @@ } }, "object.values": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz", - "integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" } }, "obuf": { @@ -10043,7 +10196,7 @@ }, "on-finished": { "version": "2.3.0", - "resolved": "https://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", "dev": true, "requires": { @@ -10058,7 +10211,7 @@ }, "once": { "version": "1.4.0", - "resolved": "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { "wrappy": "1" @@ -10066,16 +10219,16 @@ }, "onetime": { "version": "5.1.2", - "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-5.1.2.tgz", - "integrity": "sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4=", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "requires": { "mimic-fn": "^2.1.0" } }, "open": { "version": "6.4.0", - "resolved": "https://registry.npm.taobao.org/open/download/open-6.4.0.tgz?cache=0&sync_timestamp=1601376246786&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fopen%2Fdownload%2Fopen-6.4.0.tgz", - "integrity": "sha1-XBPpbQ3IlGhhZPGJZez+iJ7PyKk=", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", "requires": { "is-wsl": "^1.1.0" } @@ -10160,12 +10313,12 @@ "dev": true }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } }, "supports-color": { @@ -10190,19 +10343,19 @@ }, "os-browserify": { "version": "0.3.0", - "resolved": "https://registry.npm.taobao.org/os-browserify/download/os-browserify-0.3.0.tgz", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, "os-homedir": { "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/os-homedir/download/os-homedir-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, "os-locale": { "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/os-locale/download/os-locale-3.1.0.tgz", - "integrity": "sha1-qAKm7hfyTBBIOrmTVxnO9O0Wvxo=", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", "dev": true, "requires": { "execa": "^1.0.0", @@ -10212,13 +10365,13 @@ }, "os-tmpdir": { "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, "osenv": { "version": "0.1.5", - "resolved": "https://registry.npm.taobao.org/osenv/download/osenv-0.1.5.tgz", - "integrity": "sha1-hc36+uso6Gd/QW4odZK18/SepBA=", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "requires": { "os-homedir": "^1.0.0", "os-tmpdir": "^1.0.0" @@ -10226,34 +10379,34 @@ }, "p-defer": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/p-defer/download/p-defer-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", "dev": true }, "p-finally": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true }, "p-is-promise": { "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/p-is-promise/download/p-is-promise-2.1.0.tgz?cache=0&sync_timestamp=1561997559793&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-is-promise%2Fdownload%2Fp-is-promise-2.1.0.tgz", - "integrity": "sha1-kYzrrqJIpiz3/6uOO8qMX4gvxC4=", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", "dev": true }, "p-limit": { "version": "2.3.0", - "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-2.3.0.tgz?cache=0&sync_timestamp=1606288847193&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-2.3.0.tgz", - "integrity": "sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE=", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "requires": { "p-try": "^2.0.0" } }, "p-locate": { "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz?cache=0&sync_timestamp=1597081786401&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-locate%2Fdownload%2Fp-locate-3.0.0.tgz", - "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "requires": { "p-limit": "^2.0.0" } @@ -10278,7 +10431,7 @@ "dependencies": { "retry": { "version": "0.12.0", - "resolved": "https://registry.npm.taobao.org/retry/download/retry-0.12.0.tgz", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", "dev": true } @@ -10286,13 +10439,13 @@ }, "p-try": { "version": "2.2.0", - "resolved": "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz", - "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=" + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, "pacote": { "version": "9.5.5", - "resolved": "https://registry.npm.taobao.org/pacote/download/pacote-9.5.5.tgz", - "integrity": "sha1-YzVaOTYUw0JOc1ggw3MeLLvtrus=", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.5.5.tgz", + "integrity": "sha512-jAEP+Nqj4kyMWyNpfTU/Whx1jA7jEc5cCOlurm0/0oL+v8TAp1QSsK83N7bYe+2bEdFzMAtPG5TBebjzzGV0cA==", "requires": { "bluebird": "^3.5.3", "cacache": "^12.0.2", @@ -10326,8 +10479,8 @@ "dependencies": { "npm-pick-manifest": { "version": "2.2.3", - "resolved": "https://registry.npm.taobao.org/npm-pick-manifest/download/npm-pick-manifest-2.2.3.tgz", - "integrity": "sha1-MhEdKpViY4uyyPK/J/fzCSyPrkA=", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-2.2.3.tgz", + "integrity": "sha512-+IluBC5K201+gRU85vFlUwX3PFShZAbAgDNp2ewJdWMVSppdo/Zih0ul2Ecky/X7b51J7LrrUAP+XOmOCvYZqA==", "requires": { "figgy-pudding": "^3.5.1", "npm-package-arg": "^6.0.0", @@ -10336,29 +10489,29 @@ }, "rimraf": { "version": "2.7.1", - "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz?cache=0&sync_timestamp=1581229948248&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-2.7.1.tgz", - "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "requires": { "glob": "^7.1.3" } }, "semver": { "version": "5.7.1", - "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1586886267748&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz", - "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=" + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, "pako": { "version": "1.0.11", - "resolved": "https://registry.npm.taobao.org/pako/download/pako-1.0.11.tgz", - "integrity": "sha1-bJWZ00DVTf05RjgCUqNXBaa5kr8=", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, "parallel-transform": { "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/parallel-transform/download/parallel-transform-1.2.0.tgz", - "integrity": "sha1-kEnKN9bLIYLDsdLHIL6U0UpYFPw=", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", "requires": { "cyclist": "^1.0.1", "inherits": "^2.0.3", @@ -10397,7 +10550,7 @@ }, "parse-json": { "version": "2.2.0", - "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "requires": { "error-ex": "^1.2.0" @@ -10421,13 +10574,13 @@ }, "parseurl": { "version": "1.3.3", - "resolved": "https://registry.npm.taobao.org/parseurl/download/parseurl-1.3.3.tgz", - "integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true }, "pascalcase": { "version": "0.1.1", - "resolved": "https://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", "dev": true }, @@ -10439,13 +10592,13 @@ }, "path-dirname": { "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/path-dirname/download/path-dirname-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", "dev": true }, "path-exists": { "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "requires": { "pinkie-promise": "^2.0.0" @@ -10453,35 +10606,35 @@ }, "path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-is-inside": { "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/path-is-inside/download/path-is-inside-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", "dev": true }, "path-key": { "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz", - "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-to-regexp": { "version": "0.1.7", - "resolved": "https://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz?cache=0&sync_timestamp=1601400380000&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-to-regexp%2Fdownload%2Fpath-to-regexp-0.1.7.tgz", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", "dev": true }, "path-type": { "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/path-type/download/path-type-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "requires": { "graceful-fs": "^4.1.2", @@ -10490,9 +10643,9 @@ } }, "pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, "requires": { "create-hash": "^1.1.2", @@ -10504,37 +10657,43 @@ }, "performance-now": { "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fperformance-now%2Fdownload%2Fperformance-now-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.2.tgz", - "integrity": "sha1-IfMz6ba46v8CRo9RRupAbTRfTa0=", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, "pify": { "version": "2.3.0", - "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" }, "pinkie": { "version": "2.0.4", - "resolved": "https://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" }, "pinkie-promise": { "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "requires": { "pinkie": "^2.0.0" } }, "pkce-challenge": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/pkce-challenge/download/pkce-challenge-2.1.0.tgz", - "integrity": "sha1-kHMPg5sqsAqMvdboCLuuzBDgmxw=" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-2.2.0.tgz", + "integrity": "sha512-Ly0Y0OwhtG2N1ynk5ruqoyJxkrWhAPmvdRk0teiLh9Dp2+J4URKpv1JSKWD0j1Sd+QCeiwO9lTl0EjmrB2jWeA==" }, "pkg-dir": { "version": "3.0.0", @@ -10558,14 +10717,14 @@ }, "pluralize": { "version": "8.0.0", - "resolved": "https://registry.npm.taobao.org/pluralize/download/pluralize-8.0.0.tgz", - "integrity": "sha1-Gm+hajjRKhkB4DIPoBcFHFOc47E=", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", "dev": true }, "popper.js": { "version": "1.16.1", - "resolved": "https://registry.npm.taobao.org/popper.js/download/popper.js-1.16.1.tgz", - "integrity": "sha1-KiI8s9x7YhPXQOQDcr5A3kPmWxs=" + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" }, "portfinder": { "version": "1.0.28", @@ -10591,35 +10750,31 @@ }, "posix-character-classes": { "version": "0.1.1", - "resolved": "https://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", "dev": true }, "postcss": { - "version": "7.0.27", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz", - "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -10937,15 +11092,20 @@ "postcss-value-parser": "^4.1.0" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -10953,15 +11113,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -11200,24 +11351,21 @@ } }, "postcss-selector-parser": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", - "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", "dev": true, "requires": { "cssesc": "^3.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1", "util-deprecate": "^1.0.2" } }, "postcss-svgo": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", - "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", + "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", "dev": true, "requires": { - "is-svg": "^3.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "svgo": "^1.0.0" @@ -11243,9 +11391,9 @@ } }, "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, "prelude-ls": { @@ -11256,7 +11404,7 @@ }, "prepend-http": { "version": "1.0.4", - "resolved": "https://registry.npm.taobao.org/prepend-http/download/prepend-http-1.0.4.tgz", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", "dev": true }, @@ -11268,14 +11416,14 @@ }, "process": { "version": "0.11.10", - "resolved": "https://registry.npm.taobao.org/process/download/process-0.11.10.tgz", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", "dev": true }, "process-nextick-args": { "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz", - "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I=" + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "progress": { "version": "2.0.3", @@ -11295,12 +11443,12 @@ }, "promise-inflight": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/promise-inflight/download/promise-inflight-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" }, "promise-retry": { "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/promise-retry/download/promise-retry-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", "requires": { "err-code": "^1.0.0", @@ -11309,16 +11457,16 @@ }, "protoduck": { "version": "5.0.1", - "resolved": "https://registry.npm.taobao.org/protoduck/download/protoduck-5.0.1.tgz", - "integrity": "sha1-A8NlnKGAB7aaUP2Cp+vMUWJhFR8=", + "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz", + "integrity": "sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg==", "requires": { "genfun": "^5.0.0" } }, "protractor": { "version": "5.4.4", - "resolved": "https://registry.npm.taobao.org/protractor/download/protractor-5.4.4.tgz", - "integrity": "sha1-skFGaq+Dt2vCxY32feuaXN/GFSk=", + "resolved": "https://registry.npmjs.org/protractor/-/protractor-5.4.4.tgz", + "integrity": "sha512-BaL4vePgu3Vfa/whvTUAlgaCAId4uNSGxIFSCXMgj7LMYENPWLp85h5RBi9pdpX/bWQ8SF6flP7afmi2TC4eHw==", "dev": true, "requires": { "@types/q": "^0.0.32", @@ -11340,25 +11488,25 @@ "dependencies": { "@types/q": { "version": "0.0.32", - "resolved": "https://registry.npm.taobao.org/@types/q/download/@types/q-0.0.32.tgz", + "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=", "dev": true }, "ansi-regex": { "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, "ansi-styles": { "version": "2.2.1", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true }, "array-union": { "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/array-union/download/array-union-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { @@ -11367,13 +11515,13 @@ }, "camelcase": { "version": "5.3.1", - "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz", - "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz?cache=0&sync_timestamp=1591687079130&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -11386,8 +11534,8 @@ }, "cliui": { "version": "4.1.0", - "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-4.1.0.tgz", - "integrity": "sha1-NIQi2+gtgAswIu709qwQvy5NG0k=", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { "string-width": "^2.1.1", @@ -11396,14 +11544,14 @@ }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true }, "strip-ansi": { "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { @@ -11414,7 +11562,7 @@ }, "del": { "version": "2.2.2", - "resolved": "https://registry.npm.taobao.org/del/download/del-2.2.2.tgz?cache=0&sync_timestamp=1601079379185&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdel%2Fdownload%2Fdel-2.2.2.tgz", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", "dev": true, "requires": { @@ -11429,8 +11577,8 @@ }, "find-up": { "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz", - "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { "locate-path": "^3.0.0" @@ -11438,13 +11586,13 @@ }, "get-caller-file": { "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-1.0.3.tgz", - "integrity": "sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o=", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", "dev": true }, "globby": { "version": "5.0.0", - "resolved": "https://registry.npm.taobao.org/globby/download/globby-5.0.0.tgz?cache=0&sync_timestamp=1591084066899&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobby%2Fdownload%2Fglobby-5.0.0.tgz", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", "dev": true, "requires": { @@ -11458,20 +11606,20 @@ }, "is-fullwidth-code-point": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, "is-path-cwd": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", "dev": true }, "is-path-in-cwd": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/is-path-in-cwd/download/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha1-WsSLNF72dTOb1sekipEhELJBz1I=", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "dev": true, "requires": { "is-path-inside": "^1.0.0" @@ -11479,7 +11627,7 @@ }, "is-path-inside": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/is-path-inside/download/is-path-inside-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { @@ -11488,7 +11636,7 @@ }, "jasmine": { "version": "2.8.0", - "resolved": "https://registry.npm.taobao.org/jasmine/download/jasmine-2.8.0.tgz", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz", "integrity": "sha1-awicChFXax8W3xG4AUbZHU6Lij4=", "dev": true, "requires": { @@ -11499,26 +11647,26 @@ }, "jasmine-core": { "version": "2.8.0", - "resolved": "https://registry.npm.taobao.org/jasmine-core/download/jasmine-core-2.8.0.tgz", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz", "integrity": "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=", "dev": true }, "q": { "version": "1.4.1", - "resolved": "https://registry.npm.taobao.org/q/download/q-1.4.1.tgz", + "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", "dev": true }, "require-main-filename": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-1.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frequire-main-filename%2Fdownload%2Frequire-main-filename-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", "dev": true }, "rimraf": { "version": "2.7.1", - "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz?cache=0&sync_timestamp=1581229948248&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-2.7.1.tgz", - "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { "glob": "^7.1.3" @@ -11526,20 +11674,20 @@ }, "semver": { "version": "5.7.1", - "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1586886267748&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz", - "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "source-map": { "version": "0.5.7", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true }, "source-map-support": { "version": "0.4.18", - "resolved": "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.4.18.tgz?cache=0&sync_timestamp=1587719493563&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-support%2Fdownload%2Fsource-map-support-0.4.18.tgz", - "integrity": "sha1-Aoam3ovkJkEzhZTpfM6nXwosWF8=", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", "dev": true, "requires": { "source-map": "^0.5.6" @@ -11547,8 +11695,8 @@ }, "string-width": { "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz", - "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", @@ -11556,14 +11704,14 @@ }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true }, "strip-ansi": { "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { @@ -11574,7 +11722,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -11583,14 +11731,14 @@ }, "supports-color": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598613527834&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true }, "webdriver-manager": { - "version": "12.1.7", - "resolved": "https://registry.npm.taobao.org/webdriver-manager/download/webdriver-manager-12.1.7.tgz", - "integrity": "sha1-7U6u6PkGszwUboabVehQVTobEWI=", + "version": "12.1.8", + "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.8.tgz", + "integrity": "sha512-qJR36SXG2VwKugPcdwhaqcLQOD7r8P2Xiv9sfNbfZrKBnX243iAkOueX1yAmeNgIKhJ3YAT/F2gq6IiEZzahsg==", "dev": true, "requires": { "adm-zip": "^0.4.9", @@ -11608,7 +11756,7 @@ }, "wrap-ansi": { "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { @@ -11618,7 +11766,7 @@ "dependencies": { "is-fullwidth-code-point": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { @@ -11627,7 +11775,7 @@ }, "string-width": { "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { @@ -11640,8 +11788,8 @@ }, "yargs": { "version": "12.0.5", - "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-12.0.5.tgz", - "integrity": "sha1-BfWZe2CWR7ZPZrgeO0sQo2jnrRM=", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", "dev": true, "requires": { "cliui": "^4.0.0", @@ -11660,8 +11808,8 @@ }, "yargs-parser": { "version": "11.1.1", - "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-11.1.1.tgz?cache=0&sync_timestamp=1604886855135&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-11.1.1.tgz", - "integrity": "sha1-h5oIZZc7yp9rq1y987HGfsfTvPQ=", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", "dev": true, "requires": { "camelcase": "^5.0.0", @@ -11671,30 +11819,30 @@ } }, "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, "requires": { - "forwarded": "~0.1.2", + "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "prr": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/prr/download/prr-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", "dev": true }, "pseudomap": { "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "psl": { "version": "1.8.0", - "resolved": "https://registry.npm.taobao.org/psl/download/psl-1.8.0.tgz", - "integrity": "sha1-kyb4vPsBOtzABf3/BWrM4CDlHCQ=" + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" }, "public-encrypt": { "version": "4.0.3", @@ -11708,20 +11856,12 @@ "parse-asn1": "^5.0.0", "randombytes": "^2.0.1", "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } } }, "pump": { "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz", - "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -11729,8 +11869,8 @@ }, "pumpify": { "version": "1.5.1", - "resolved": "https://registry.npm.taobao.org/pumpify/download/pumpify-1.5.1.tgz", - "integrity": "sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4=", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "requires": { "duplexify": "^3.6.0", "inherits": "^2.0.3", @@ -11739,8 +11879,8 @@ "dependencies": { "pump": { "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/pump/download/pump-2.0.1.tgz", - "integrity": "sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk=", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -11750,29 +11890,29 @@ }, "punycode": { "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz", - "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=" + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "q": { "version": "1.5.1", - "resolved": "https://registry.npm.taobao.org/q/download/q-1.5.1.tgz", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", "dev": true }, "qjobs": { "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/qjobs/download/qjobs-1.2.0.tgz", - "integrity": "sha1-xF6cYYAL0IfviNfiVkI73Unl0HE=", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", "dev": true }, "qs": { - "version": "6.5.2", - "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz", - "integrity": "sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=" + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==" }, "query-string": { "version": "4.3.4", - "resolved": "https://registry.npm.taobao.org/query-string/download/query-string-4.3.4.tgz", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", "dev": true, "requires": { @@ -11782,13 +11922,13 @@ }, "querystring": { "version": "0.2.0", - "resolved": "https://registry.npm.taobao.org/querystring/download/querystring-0.2.0.tgz", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", "dev": true }, "querystring-es3": { "version": "0.2.1", - "resolved": "https://registry.npm.taobao.org/querystring-es3/download/querystring-es3-0.2.1.tgz", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", "dev": true }, @@ -11798,6 +11938,12 @@ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", "dev": true }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -11819,32 +11965,32 @@ }, "range-parser": { "version": "1.2.1", - "resolved": "https://registry.npm.taobao.org/range-parser/download/range-parser-1.2.1.tgz", - "integrity": "sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE=", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true }, "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npm.taobao.org/raw-body/download/raw-body-2.4.0.tgz", - "integrity": "sha1-oc5vucm8NWylLoklarWQWeE9AzI=", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", + "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", "dev": true, "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", + "bytes": "3.1.2", + "http-errors": "1.8.1", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, "dependencies": { "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/bytes/download/bytes-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbytes%2Fdownload%2Fbytes-3.1.0.tgz", - "integrity": "sha1-9s95M6Ng4FiPqf3oVlHNx/gF0fY=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true }, "iconv-lite": { "version": "0.4.24", - "resolved": "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz?cache=0&sync_timestamp=1594184528294&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz", - "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" @@ -11886,7 +12032,7 @@ }, "read-cache": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/read-cache/download/read-cache-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", "dev": true, "requires": { @@ -11895,8 +12041,8 @@ }, "read-package-json": { "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/read-package-json/download/read-package-json-2.1.2.tgz", - "integrity": "sha1-aZKytmxxdyWf646qxzw6zSi5Iio=", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz", + "integrity": "sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==", "requires": { "glob": "^7.1.1", "json-parse-even-better-errors": "^2.3.0", @@ -11906,8 +12052,8 @@ }, "read-package-tree": { "version": "5.3.1", - "resolved": "https://registry.npm.taobao.org/read-package-tree/download/read-package-tree-5.3.1.tgz", - "integrity": "sha1-oyy2TH8x64pvMe8G+c7fdAaP5jY=", + "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.3.1.tgz", + "integrity": "sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw==", "requires": { "read-package-json": "^2.0.0", "readdir-scoped-modules": "^1.0.0", @@ -11916,7 +12062,7 @@ }, "read-pkg": { "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/read-pkg/download/read-pkg-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "requires": { "load-json-file": "^1.0.0", @@ -11926,7 +12072,7 @@ }, "read-pkg-up": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-1.0.1.tgz?cache=0&sync_timestamp=1575620584058&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-pkg-up%2Fdownload%2Fread-pkg-up-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "requires": { "find-up": "^1.0.0", @@ -11935,8 +12081,8 @@ }, "readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.7.tgz", - "integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -11949,15 +12095,15 @@ "dependencies": { "safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz?cache=0&sync_timestamp=1589129978562&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.1.2.tgz", - "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" } } }, "readdir-scoped-modules": { "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/readdir-scoped-modules/download/readdir-scoped-modules-1.1.0.tgz", - "integrity": "sha1-jUVAe0+HCg3K68DihnDRjnRRQwk=", + "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", + "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", "requires": { "debuglog": "^1.0.1", "dezalgo": "^1.0.0", @@ -11966,9 +12112,9 @@ } }, "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-3.5.0.tgz?cache=0&sync_timestamp=1602584407143&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freaddirp%2Fdownload%2Freaddirp-3.5.0.tgz", - "integrity": "sha1-m6dMAZsV02UnjS6Ru4xI17TULJ4=", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "requires": { "picomatch": "^2.2.1" @@ -11976,7 +12122,7 @@ }, "redent": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/redent/download/redent-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", "requires": { "indent-string": "^2.1.0", @@ -11996,12 +12142,12 @@ "dev": true }, "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", + "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", "dev": true, "requires": { - "regenerate": "^1.4.0" + "regenerate": "^1.4.2" } }, "regenerator-runtime": { @@ -12011,9 +12157,9 @@ "dev": true }, "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", "dev": true, "requires": { "@babel/runtime": "^7.8.4" @@ -12031,56 +12177,56 @@ }, "regexp-to-ast": { "version": "0.5.0", - "resolved": "https://registry.npm.taobao.org/regexp-to-ast/download/regexp-to-ast-0.5.0.tgz", - "integrity": "sha1-Vsc4Vr7l4f739zoA8Uc0UqtxKiQ=", + "resolved": "https://registry.npmjs.org/regexp-to-ast/-/regexp-to-ast-0.5.0.tgz", + "integrity": "sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==", "dev": true }, "regexp-tree": { - "version": "0.1.21", - "resolved": "https://registry.npm.taobao.org/regexp-tree/download/regexp-tree-0.1.21.tgz", - "integrity": "sha1-VeIka399NvG0YUkJQvp4ApnEANc=", + "version": "0.1.24", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.24.tgz", + "integrity": "sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==", "dev": true }, "regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.2.tgz", + "integrity": "sha512-Ynz8fTQW5/1elh+jWU2EDDzeoNbD0OQ0R+D1VJU5ATOkUaro4A9YEkdN2ODQl/8UQFPPpZNw91fOcLFamM7Pww==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/regexpp/download/regexpp-3.1.0.tgz?cache=0&sync_timestamp=1586019316504&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregexpp%2Fdownload%2Fregexpp-3.1.0.tgz", - "integrity": "sha1-IG0K0KVkjP+9uK5GQ489xRyfeOI=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, "regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", + "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", "dev": true, "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" } }, "regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", "dev": true }, "regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", + "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -12088,7 +12234,7 @@ "dependencies": { "jsesc": { "version": "0.5.0", - "resolved": "https://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz?cache=0&sync_timestamp=1603893693208&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsesc%2Fdownload%2Fjsesc-0.5.0.tgz", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "dev": true } @@ -12096,25 +12242,25 @@ }, "remove-trailing-separator": { "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", "dev": true }, "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", "dev": true }, "repeat-string": { "version": "1.6.1", - "resolved": "https://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, "repeating": { "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/repeating/download/repeating-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "requires": { "is-finite": "^1.0.0" @@ -12122,8 +12268,8 @@ }, "request": { "version": "2.88.2", - "resolved": "https://registry.npm.taobao.org/request/download/request-2.88.2.tgz", - "integrity": "sha1-1zyRhzHLWofaBH4gcjQUb2ZNErM=", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -12149,38 +12295,45 @@ }, "require-directory": { "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frequire-directory%2Fdownload%2Frequire-directory-2.1.1.tgz", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, "require-main-filename": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frequire-main-filename%2Fdownload%2Frequire-main-filename-2.0.0.tgz", - "integrity": "sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs=" + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, "requires-port": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/requires-port/download/requires-port-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", "dev": true }, "reserved-words": { "version": "0.1.2", - "resolved": "https://registry.npm.taobao.org/reserved-words/download/reserved-words-0.1.2.tgz", + "resolved": "https://registry.npmjs.org/reserved-words/-/reserved-words-0.1.2.tgz", "integrity": "sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE=", "dev": true }, "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.19.0.tgz", - "integrity": "sha1-GvW/YwQJc0oGfK4pMYqsf6KaJnw=", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", "requires": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, "resolve-cwd": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/resolve-cwd/download/resolve-cwd-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", "dev": true, "requires": { @@ -12189,20 +12342,20 @@ }, "resolve-from": { "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", "dev": true }, "resolve-url": { "version": "0.2.1", - "resolved": "https://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, "restore-cursor": { "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-3.1.0.tgz", - "integrity": "sha1-OfZ8VLOnpYzqUjbZXPADQjljH34=", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "requires": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -12216,7 +12369,7 @@ }, "retry": { "version": "0.10.1", - "resolved": "https://registry.npm.taobao.org/retry/download/retry-0.10.1.tgz", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=" }, "reusify": { @@ -12226,27 +12379,26 @@ "dev": true }, "rfdc": { - "version": "1.1.4", - "resolved": "https://registry.npm.taobao.org/rfdc/download/rfdc-1.1.4.tgz", - "integrity": "sha1-unLME2egzNnPgahws7WL060H+MI=", - "dev": true + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" }, "rgb-regex": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/rgb-regex/download/rgb-regex-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", "dev": true }, "rgba-regex": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/rgba-regex/download/rgba-regex-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", "dev": true }, "rimraf": { "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-3.0.0.tgz?cache=0&sync_timestamp=1581229948248&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-3.0.0.tgz", - "integrity": "sha1-YUF21LMBC3Xlw5DrDulvbcDOu5s=", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.0.tgz", + "integrity": "sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg==", "requires": { "glob": "^7.1.3" } @@ -12272,18 +12424,21 @@ }, "run-async": { "version": "2.4.1", - "resolved": "https://registry.npm.taobao.org/run-async/download/run-async-2.4.1.tgz?cache=0&sync_timestamp=1587993318918&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frun-async%2Fdownload%2Frun-async-2.4.1.tgz", - "integrity": "sha1-hEDsz5nqPnC9QJ1JqriOEMGJpFU=" + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" }, "run-parallel": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", - "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==", - "dev": true + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } }, "run-queue": { "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/run-queue/download/run-queue-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "requires": { "aproba": "^1.1.1" @@ -12291,20 +12446,20 @@ }, "rxjs": { "version": "6.5.5", - "resolved": "https://registry.npm.taobao.org/rxjs/download/rxjs-6.5.5.tgz", - "integrity": "sha1-xciE4wlMjP7jG/J+uH5UzPyH+ew=", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", + "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", "requires": { "tslib": "^1.9.0" } }, "safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz?cache=0&sync_timestamp=1589129978562&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.2.1.tgz", - "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=" + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "safe-regex": { "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/safe-regex/download/safe-regex-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { @@ -12313,8 +12468,8 @@ }, "safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz", - "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=" + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sass": { "version": "1.26.3", @@ -12327,8 +12482,8 @@ }, "sass-graph": { "version": "2.2.5", - "resolved": "https://registry.npm.taobao.org/sass-graph/download/sass-graph-2.2.5.tgz?cache=0&sync_timestamp=1588597611605&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsass-graph%2Fdownload%2Fsass-graph-2.2.5.tgz", - "integrity": "sha1-qYHIdEa4MZ2W3OBnHkh4eb0kwug=", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.5.tgz", + "integrity": "sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag==", "requires": { "glob": "^7.0.0", "lodash": "^4.0.0", @@ -12373,8 +12528,8 @@ }, "saucelabs": { "version": "1.5.0", - "resolved": "https://registry.npm.taobao.org/saucelabs/download/saucelabs-1.5.0.tgz", - "integrity": "sha1-lAWnPDYNRJsjKDmRmobDltN5/Z0=", + "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz", + "integrity": "sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==", "dev": true, "requires": { "https-proxy-agent": "^2.2.1" @@ -12382,8 +12537,8 @@ }, "sax": { "version": "1.2.4", - "resolved": "https://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz", - "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true }, "schema-utils": { @@ -12413,7 +12568,7 @@ }, "scss-tokenizer": { "version": "0.2.3", - "resolved": "https://registry.npm.taobao.org/scss-tokenizer/download/scss-tokenizer-0.2.3.tgz", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", "requires": { "js-base64": "^2.1.8", @@ -12422,7 +12577,7 @@ "dependencies": { "source-map": { "version": "0.4.4", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.4.4.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "requires": { "amdefine": ">=0.0.4" @@ -12432,14 +12587,14 @@ }, "select-hose": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/select-hose/download/select-hose-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", "dev": true }, "selenium-webdriver": { "version": "3.6.0", - "resolved": "https://registry.npm.taobao.org/selenium-webdriver/download/selenium-webdriver-3.6.0.tgz", - "integrity": "sha1-K6h6FmLAILiYjJga5iyyoBKY6vw=", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", + "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", "dev": true, "requires": { "jszip": "^3.1.3", @@ -12450,8 +12605,8 @@ "dependencies": { "rimraf": { "version": "2.7.1", - "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz?cache=0&sync_timestamp=1581229948248&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-2.7.1.tgz", - "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { "glob": "^7.1.3" @@ -12459,7 +12614,7 @@ }, "tmp": { "version": "0.0.30", - "resolved": "https://registry.npm.taobao.org/tmp/download/tmp-0.0.30.tgz", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", "dev": true, "requires": { @@ -12469,9 +12624,9 @@ } }, "selfsigned": { - "version": "1.10.8", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", - "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", + "version": "1.10.14", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.14.tgz", + "integrity": "sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==", "dev": true, "requires": { "node-forge": "^0.10.0" @@ -12479,28 +12634,28 @@ }, "semver": { "version": "6.3.0", - "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1586886267748&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz", - "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=" + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, "semver-intersect": { "version": "1.4.0", - "resolved": "https://registry.npm.taobao.org/semver-intersect/download/semver-intersect-1.4.0.tgz", - "integrity": "sha1-vdnAa+3N0v7bjNNSw8Q+6MYTIfM=", + "resolved": "https://registry.npmjs.org/semver-intersect/-/semver-intersect-1.4.0.tgz", + "integrity": "sha512-d8fvGg5ycKAq0+I6nfWeCx6ffaWJCsBYU0H2Rq56+/zFePYfT8mXkB3tWBSjR5BerkHNZ5eTPIk1/LBYas35xQ==", "requires": { "semver": "^5.0.0" }, "dependencies": { "semver": { "version": "5.7.1", - "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1586886267748&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz", - "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=" + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", "dev": true, "requires": { "debug": "2.6.9", @@ -12510,9 +12665,9 @@ "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.7.2", + "http-errors": "1.8.1", "mime": "1.6.0", - "ms": "2.1.1", + "ms": "2.1.3", "on-finished": "~2.3.0", "range-parser": "~1.2.1", "statuses": "~1.5.0" @@ -12529,17 +12684,11 @@ "dependencies": { "ms": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true } } }, @@ -12554,7 +12703,7 @@ }, "serve-index": { "version": "1.9.1", - "resolved": "https://registry.npm.taobao.org/serve-index/download/serve-index-1.9.1.tgz", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "dev": true, "requires": { @@ -12578,7 +12727,7 @@ }, "http-errors": { "version": "1.6.3", - "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz?cache=0&sync_timestamp=1593407722046&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.6.3.tgz", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, "requires": { @@ -12590,13 +12739,13 @@ }, "inherits": { "version": "2.0.3", - "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, @@ -12609,25 +12758,25 @@ } }, "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", "dev": true, "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.1" + "send": "0.17.2" } }, "set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "set-immediate-shim": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/set-immediate-shim/download/set-immediate-shim-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", "dev": true }, @@ -12645,7 +12794,7 @@ "dependencies": { "extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { @@ -12656,14 +12805,14 @@ }, "setimmediate": { "version": "1.0.5", - "resolved": "https://registry.npm.taobao.org/setimmediate/download/setimmediate-1.0.5.tgz", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", "dev": true }, "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.1.tgz", - "integrity": "sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, "sha.js": { @@ -12687,7 +12836,7 @@ }, "shebang-command": { "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fshebang-command%2Fdownload%2Fshebang-command-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { @@ -12696,18 +12845,28 @@ }, "shebang-regex": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.3.tgz", - "integrity": "sha1-oUEMLt2PB3sItOJTyOrPyvBXRhw=" + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "simple-swizzle": { "version": "0.2.2", - "resolved": "https://registry.npm.taobao.org/simple-swizzle/download/simple-swizzle-0.2.2.tgz", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", "dev": true, "requires": { @@ -12766,9 +12925,9 @@ } }, "smart-buffer": { - "version": "4.1.0", - "resolved": "https://registry.npm.taobao.org/smart-buffer/download/smart-buffer-4.1.0.tgz", - "integrity": "sha1-kWBcJdkWUvRmHqacz0XxszHKIbo=" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" }, "snapdragon": { "version": "0.8.2", @@ -12797,7 +12956,7 @@ }, "define-property": { "version": "0.2.5", - "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { @@ -12806,7 +12965,7 @@ }, "extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { @@ -12815,13 +12974,13 @@ }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, "source-map": { "version": "0.5.7", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true } @@ -12840,7 +12999,7 @@ "dependencies": { "define-property": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { @@ -12889,7 +13048,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", - "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz?cache=0&sync_timestamp=1579194589153&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-3.2.2.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { @@ -12899,9 +13058,9 @@ } }, "socket.io": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.0.tgz", - "integrity": "sha512-9UPJ1UTvKayuQfVv2IQ3k7tCQC/fboDyIK62i99dAQIyHKaBsNdTpwHLgKJ6guRWxRtC9H+138UwpaGuQO9uWQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.1.tgz", + "integrity": "sha512-Si18v0mMXGAqLqCVpTxBa8MGqriHGQh8ccEOhmsmNS3thNCGBwO8WGrwMibANsWtQQ5NStdZwHqZR3naJVFc3w==", "requires": { "debug": "~4.1.0", "engine.io": "~3.5.0", @@ -12954,7 +13113,7 @@ }, "isarray": { "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" }, "ms": { @@ -12986,7 +13145,7 @@ "dependencies": { "component-emitter": { "version": "1.2.1", - "resolved": "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.2.1.tgz", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" }, "debug": { @@ -12999,7 +13158,7 @@ }, "isarray": { "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" } } @@ -13039,9 +13198,9 @@ } }, "faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, "requires": { "websocket-driver": ">=0.5.1" @@ -13051,8 +13210,8 @@ }, "socks": { "version": "2.3.3", - "resolved": "https://registry.npm.taobao.org/socks/download/socks-2.3.3.tgz", - "integrity": "sha1-ARKfCl1TTSuJdxLtis6rfuZdeOM=", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz", + "integrity": "sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==", "requires": { "ip": "1.1.5", "smart-buffer": "^4.1.0" @@ -13060,8 +13219,8 @@ }, "socks-proxy-agent": { "version": "4.0.2", - "resolved": "https://registry.npm.taobao.org/socks-proxy-agent/download/socks-proxy-agent-4.0.2.tgz", - "integrity": "sha1-PImR8xRbJ5nnDhG9X7yLGWMRY4Y=", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz", + "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==", "requires": { "agent-base": "~4.2.1", "socks": "~2.3.2" @@ -13069,8 +13228,8 @@ "dependencies": { "agent-base": { "version": "4.2.1", - "resolved": "https://registry.npm.taobao.org/agent-base/download/agent-base-4.2.1.tgz", - "integrity": "sha1-2J5ZmfeXh1Z0wH2H8mD8Qeg+jKk=", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", "requires": { "es6-promisify": "^5.0.0" } @@ -13079,7 +13238,7 @@ }, "sort-keys": { "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/sort-keys/download/sort-keys-1.1.2.tgz", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", "dev": true, "requires": { @@ -13093,8 +13252,8 @@ }, "source-map": { "version": "0.7.3", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.7.3.tgz", - "integrity": "sha1-UwL4FpAxc1ImVECS5kmB91F1A4M=" + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" }, "source-map-loader": { "version": "0.2.4", @@ -13142,9 +13301,9 @@ } }, "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.5.19.tgz?cache=0&sync_timestamp=1587719493563&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-support%2Fdownload%2Fsource-map-support-0.5.19.tgz", - "integrity": "sha1-qYti+G3K9PZzmWSMCFKRq56P7WE=", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -13153,27 +13312,27 @@ "dependencies": { "source-map": { "version": "0.6.1", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", "dev": true }, "sourcemap-codec": { "version": "1.4.8", - "resolved": "https://registry.npm.taobao.org/sourcemap-codec/download/sourcemap-codec-1.4.8.tgz", - "integrity": "sha1-6oBL2UhXQC5pktBaOO8a41qatMQ=" + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" }, "spdx-correct": { "version": "3.1.1", - "resolved": "https://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdx-correct%2Fdownload%2Fspdx-correct-3.1.1.tgz", - "integrity": "sha1-3s6BrJweZxPl99G28X1Gj6U9iak=", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -13181,22 +13340,22 @@ }, "spdx-exceptions": { "version": "2.3.0", - "resolved": "https://registry.npm.taobao.org/spdx-exceptions/download/spdx-exceptions-2.3.0.tgz?cache=0&sync_timestamp=1587423301853&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdx-exceptions%2Fdownload%2Fspdx-exceptions-2.3.0.tgz", - "integrity": "sha1-PyjOGnegA3JoPq3kpDMYNSeiFj0=" + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" }, "spdx-expression-parse": { "version": "3.0.1", - "resolved": "https://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-3.0.1.tgz?cache=0&sync_timestamp=1589386592301&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdx-expression-parse%2Fdownload%2Fspdx-expression-parse-3.0.1.tgz", - "integrity": "sha1-z3D1BILu/cmOPOCmgz5KU87rpnk=", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { - "version": "3.0.6", - "resolved": "https://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-3.0.6.tgz", - "integrity": "sha1-yAdXODwoq/cpZ0SZjLwQaui4VM4=" + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==" }, "spdy": { "version": "4.0.2", @@ -13258,14 +13417,14 @@ }, "sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npm.taobao.org/sshpk/download/sshpk-1.16.1.tgz", - "integrity": "sha1-+2YcC+8ps520B2nuOfpwCT1vaHc=", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -13279,9 +13438,9 @@ } }, "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npm.taobao.org/ssri/download/ssri-6.0.1.tgz", - "integrity": "sha1-KjxBso3UW2K2Nnbst0ABJlrp7dg=", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", "requires": { "figgy-pudding": "^3.5.1" } @@ -13294,7 +13453,7 @@ }, "static-extend": { "version": "0.1.2", - "resolved": "https://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { @@ -13304,7 +13463,7 @@ "dependencies": { "define-property": { "version": "0.2.5", - "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { @@ -13315,14 +13474,14 @@ }, "statuses": { "version": "1.5.0", - "resolved": "https://registry.npm.taobao.org/statuses/download/statuses-1.5.0.tgz", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true }, "stdout-stream": { "version": "1.4.1", - "resolved": "https://registry.npm.taobao.org/stdout-stream/download/stdout-stream-1.4.1.tgz", - "integrity": "sha1-WsF0zdXNcmEEqgwLK9g4FdjVNd4=", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", "requires": { "readable-stream": "^2.0.1" } @@ -13339,8 +13498,8 @@ }, "stream-each": { "version": "1.2.3", - "resolved": "https://registry.npm.taobao.org/stream-each/download/stream-each-1.2.3.tgz", - "integrity": "sha1-6+J6DDibBPvMIzZClS4Qcxr6m64=", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", "requires": { "end-of-stream": "^1.1.0", "stream-shift": "^1.0.0" @@ -13361,158 +13520,96 @@ }, "stream-shift": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/stream-shift/download/stream-shift-1.0.1.tgz?cache=0&sync_timestamp=1576147098796&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstream-shift%2Fdownload%2Fstream-shift-1.0.1.tgz", - "integrity": "sha1-1wiCgVWasneEJCebCHfaPDktWj0=" + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" }, "streamroller": { - "version": "2.2.4", - "resolved": "https://registry.npm.taobao.org/streamroller/download/streamroller-2.2.4.tgz", - "integrity": "sha1-wZjO1C25QIamGTYIGHzoCl8rDlM=", - "dev": true, + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.6.tgz", + "integrity": "sha512-Qz32plKq/MZywYyhEatxyYc8vs994Gz0Hu2MSYXXLD233UyPeIeRBZARIIGwFer4Mdb8r3Y2UqKkgyDghM6QCg==", "requires": { - "date-format": "^2.1.0", - "debug": "^4.1.1", - "fs-extra": "^8.1.0" - }, - "dependencies": { - "date-format": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/date-format/download/date-format-2.1.0.tgz", - "integrity": "sha1-MdW16iEc9f12TNOLr50DPffhJc8=", - "dev": true - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npm.taobao.org/fs-extra/download/fs-extra-8.1.0.tgz?cache=0&sync_timestamp=1591232737566&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-extra%2Fdownload%2Ffs-extra-8.1.0.tgz", - "integrity": "sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA=", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } + "date-format": "^4.0.6", + "debug": "^4.3.4", + "fs-extra": "^10.0.1" } }, "strict-uri-encode": { "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/strict-uri-encode/download/strict-uri-encode-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", "dev": true }, "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.0.tgz", - "integrity": "sha1-lSGCxGzHssMT0VluYjmSvRY7crU=", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" }, "dependencies": { "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz", - "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } } } }, "string.prototype.trimend": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/string.prototype.trimend/download/string.prototype.trimend-1.0.2.tgz", - "integrity": "sha1-bd2ah5a8cUtImjriIkaiCPN7+kY=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.18.0-next.1.tgz?cache=0&sync_timestamp=1601503126049&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fes-abstract%2Fdownload%2Fes-abstract-1.18.0-next.1.tgz", - "integrity": "sha1-bjoKS9pxflAjqzuOkL7DYQjSLGg=", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, "string.prototype.trimstart": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/string.prototype.trimstart/download/string.prototype.trimstart-1.0.2.tgz", - "integrity": "sha1-ItRdqBAVMJzQzdeXh+iRn8XGE+c=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.18.0-next.1.tgz?cache=0&sync_timestamp=1601503126049&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fes-abstract%2Fdownload%2Fes-abstract-1.18.0-next.1.tgz", - "integrity": "sha1-bjoKS9pxflAjqzuOkL7DYQjSLGg=", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz", - "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" }, "dependencies": { "safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz?cache=0&sync_timestamp=1589129978562&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.1.2.tgz", - "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" } } }, "strip-ansi": { "version": "5.2.0", - "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz", - "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "requires": { "ansi-regex": "^4.1.0" }, "dependencies": { "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz", - "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" } } }, "strip-bom": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/strip-bom/download/strip-bom-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "requires": { "is-utf8": "^0.2.0" @@ -13520,13 +13617,13 @@ }, "strip-eof": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, "strip-indent": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/strip-indent/download/strip-indent-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", "requires": { "get-stdin": "^4.0.1" @@ -13621,7 +13718,7 @@ }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } @@ -13662,12 +13759,17 @@ }, "supports-color": { "version": "5.5.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1598613527834&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { "has-flag": "^3.0.0" } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, "svgo": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", @@ -13691,32 +13793,48 @@ }, "symbol-observable": { "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/symbol-observable/download/symbol-observable-1.2.0.tgz?cache=0&sync_timestamp=1604341758298&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsymbol-observable%2Fdownload%2Fsymbol-observable-1.2.0.tgz", - "integrity": "sha1-wiaIrtTqs83C3+rLtWFmBWCgCAQ=" + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" }, "table": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/table/-/table-6.0.4.tgz", - "integrity": "sha512-sBT4xRLdALd+NFBvwOz8bw4b15htyythha+q+DVZqy2RS08PPC8O2sZFgJYEY7bJvbCFKccs+WIZ/cd+xxTWCw==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", + "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", "dev": true, "requires": { - "ajv": "^6.12.4", - "lodash": "^4.17.20", + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", - "string-width": "^4.2.0" + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, "dependencies": { "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", "uri-js": "^4.2.2" } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } } } }, @@ -13727,17 +13845,17 @@ "dev": true }, "tar": { - "version": "4.4.13", - "resolved": "https://registry.npm.taobao.org/tar/download/tar-4.4.13.tgz", - "integrity": "sha1-Q7NkvFKIjVVSmGN7ENYHkCVKtSU=", + "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" } }, "terser": { @@ -13777,11 +13895,12 @@ }, "dependencies": { "cacache": { - "version": "15.0.5", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.5.tgz", - "integrity": "sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A==", + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", "dev": true, "requires": { + "@npmcli/fs": "^1.0.0", "@npmcli/move-file": "^1.0.1", "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -13796,7 +13915,7 @@ "p-map": "^4.0.0", "promise-inflight": "^1.0.1", "rimraf": "^3.0.2", - "ssri": "^8.0.0", + "ssri": "^8.0.1", "tar": "^6.0.2", "unique-filename": "^1.1.1" } @@ -13843,9 +13962,9 @@ } }, "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -13901,9 +14020,9 @@ "dev": true }, "ssri": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz", - "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "dev": true, "requires": { "minipass": "^3.1.1" @@ -13919,9 +14038,9 @@ } }, "tar": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz", - "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==", + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", "dev": true, "requires": { "chownr": "^2.0.0", @@ -13953,19 +14072,19 @@ }, "text-table": { "version": "0.2.0", - "resolved": "https://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, "through": { "version": "2.3.8", - "resolved": "https://registry.npm.taobao.org/through/download/through-2.3.8.tgz", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "through2": { "version": "2.0.5", - "resolved": "https://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz?cache=0&sync_timestamp=1593478749666&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fthrough2%2Fdownload%2Fthrough2-2.0.5.tgz", - "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "requires": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -13988,38 +14107,38 @@ }, "timsort": { "version": "0.3.0", - "resolved": "https://registry.npm.taobao.org/timsort/download/timsort-0.3.0.tgz", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", "dev": true }, "tmp": { "version": "0.0.33", - "resolved": "https://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz", - "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "requires": { "os-tmpdir": "~1.0.2" } }, "to-array": { "version": "0.1.4", - "resolved": "https://registry.npm.taobao.org/to-array/download/to-array-0.1.4.tgz", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" }, "to-arraybuffer": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", "dev": true }, "to-fast-properties": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fto-fast-properties%2Fdownload%2Fto-fast-properties-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true }, "to-object-path": { "version": "0.3.0", - "resolved": "https://registry.npm.taobao.org/to-object-path/download/to-object-path-0.3.0.tgz", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { @@ -14028,7 +14147,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", - "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz?cache=0&sync_timestamp=1579194589153&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-3.2.2.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { @@ -14051,23 +14170,23 @@ }, "to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz", - "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { "is-number": "^7.0.0" } }, "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/toidentifier/download/toidentifier-1.0.0.tgz", - "integrity": "sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true }, "tough-cookie": { "version": "2.5.0", - "resolved": "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.5.0.tgz", - "integrity": "sha1-zZ+yoKodWhK0c72fuW+j3P9lreI=", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "requires": { "psl": "^1.1.28", "punycode": "^2.1.1" @@ -14081,21 +14200,21 @@ }, "trim-newlines": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/trim-newlines/download/trim-newlines-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" }, "true-case-path": { "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/true-case-path/download/true-case-path-1.0.3.tgz", - "integrity": "sha1-+BO1qMhrQNpZYGcisUTjIleZ9H0=", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", "requires": { "glob": "^7.1.2" } }, "ts-node": { "version": "7.0.1", - "resolved": "https://registry.npm.taobao.org/ts-node/download/ts-node-7.0.1.tgz", - "integrity": "sha1-lWLcLR5tJI0kvFX3c+P2FDN9m68=", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz", + "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==", "dev": true, "requires": { "arrify": "^1.0.0", @@ -14110,13 +14229,13 @@ }, "tslib": { "version": "1.14.1", - "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-1.14.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftslib%2Fdownload%2Ftslib-1.14.1.tgz", - "integrity": "sha1-zy04vcNKE0vK8QkcQfZhni9nLQA=" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "tsutils": { - "version": "3.17.1", - "resolved": "https://registry.npm.taobao.org/tsutils/download/tsutils-3.17.1.tgz", - "integrity": "sha1-7XGZF/EcoN7lhicrKsSeAVot11k=", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "requires": { "tslib": "^1.8.1" @@ -14124,13 +14243,13 @@ }, "tty-browserify": { "version": "0.0.0", - "resolved": "https://registry.npm.taobao.org/tty-browserify/download/tty-browserify-0.0.0.tgz", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", "dev": true }, "tunnel-agent": { "version": "0.6.0", - "resolved": "https://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftunnel-agent%2Fdownload%2Ftunnel-agent-0.6.0.tgz", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "requires": { "safe-buffer": "^5.0.1" @@ -14138,7 +14257,7 @@ }, "tweetnacl": { "version": "0.14.5", - "resolved": "https://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, "type-check": { @@ -14151,14 +14270,14 @@ } }, "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npm.taobao.org/type-fest/download/type-fest-0.11.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.11.0.tgz", - "integrity": "sha1-l6vwhyMQ/tiKXEZrJWgVdhReM/E=" + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" }, "type-is": { "version": "1.6.18", - "resolved": "https://registry.npm.taobao.org/type-is/download/type-is-1.6.18.tgz", - "integrity": "sha1-TlUs0F3wlGfcvE73Od6J8s83wTE=", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "requires": { "media-typer": "0.3.0", @@ -14167,47 +14286,58 @@ }, "typedarray": { "version": "0.0.6", - "resolved": "https://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "typescript": { "version": "3.8.3", - "resolved": "https://registry.npm.taobao.org/typescript/download/typescript-3.8.3.tgz?cache=0&sync_timestamp=1607329356823&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftypescript%2Fdownload%2Ftypescript-3.8.3.tgz", - "integrity": "sha1-QJ64VE6gM1cRIFhp7EWKsQnuEGE=", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz", + "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==", "dev": true }, "ua-parser-js": { "version": "0.7.22", - "resolved": "https://registry.npm.taobao.org/ua-parser-js/download/ua-parser-js-0.7.22.tgz", - "integrity": "sha1-lg32Cl+RHqjxyBjzdHuZxuF36uM=", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.22.tgz", + "integrity": "sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q==", "dev": true }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } + }, "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "dev": true }, "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" } }, "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", "dev": true }, "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", "dev": true }, "union-value": { @@ -14224,36 +14354,36 @@ }, "uniq": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/uniq/download/uniq-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", "dev": true }, "uniqs": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/uniqs/download/uniqs-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", "dev": true }, "unique-filename": { "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/unique-filename/download/unique-filename-1.1.1.tgz", - "integrity": "sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA=", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "requires": { "unique-slug": "^2.0.0" } }, "unique-slug": { "version": "2.0.2", - "resolved": "https://registry.npm.taobao.org/unique-slug/download/unique-slug-2.0.2.tgz", - "integrity": "sha1-uqvOkQg/xk6UWw861hPiZPfNTmw=", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", "requires": { "imurmurhash": "^0.1.4" } }, "universal-analytics": { "version": "0.4.23", - "resolved": "https://registry.npm.taobao.org/universal-analytics/download/universal-analytics-0.4.23.tgz?cache=0&sync_timestamp=1594104485352&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funiversal-analytics%2Fdownload%2Funiversal-analytics-0.4.23.tgz", - "integrity": "sha1-2RXmdoUMJcQVZ2JHG9188uqsqKw=", + "resolved": "https://registry.npmjs.org/universal-analytics/-/universal-analytics-0.4.23.tgz", + "integrity": "sha512-lgMIH7XBI6OgYn1woDEmxhGdj8yDefMKg7GkWdeATAlQZFrMrNyxSkpDzY57iY0/6fdlzTbBV03OawvvzG+q7A==", "requires": { "debug": "^4.1.1", "request": "^2.88.2", @@ -14261,26 +14391,25 @@ } }, "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz?cache=0&sync_timestamp=1603182577925&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funiversalify%2Fdownload%2Funiversalify-0.1.2.tgz", - "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" }, "unpipe": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", "dev": true }, "unquote": { "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/unquote/download/unquote-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", "dev": true }, "unset-value": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/unset-value/download/unset-value-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { @@ -14290,7 +14419,7 @@ "dependencies": { "has-value": { "version": "0.3.1", - "resolved": "https://registry.npm.taobao.org/has-value/download/has-value-0.3.1.tgz", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { @@ -14301,7 +14430,7 @@ "dependencies": { "isobject": { "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "dev": true, "requires": { @@ -14312,7 +14441,7 @@ }, "has-values": { "version": "0.1.4", - "resolved": "https://registry.npm.taobao.org/has-values/download/has-values-0.1.4.tgz", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", "dev": true } @@ -14325,22 +14454,22 @@ "dev": true }, "uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npm.taobao.org/uri-js/download/uri-js-4.4.0.tgz?cache=0&sync_timestamp=1598815890192&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furi-js%2Fdownload%2Furi-js-4.4.0.tgz", - "integrity": "sha1-qnFCYd55PoqCNHp7zJznTobyhgI=", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "requires": { "punycode": "^2.1.0" } }, "urix": { "version": "0.1.0", - "resolved": "https://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", "dev": true }, "url": { "version": "0.11.0", - "resolved": "https://registry.npm.taobao.org/url/download/url-0.11.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furl%2Fdownload%2Furl-0.11.0.tgz", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", "dev": true, "requires": { @@ -14350,16 +14479,16 @@ "dependencies": { "punycode": { "version": "1.3.2", - "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-1.3.2.tgz", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", "dev": true } } }, "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dev": true, "requires": { "querystringify": "^2.1.1", @@ -14383,7 +14512,7 @@ "dependencies": { "inherits": { "version": "2.0.3", - "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true } @@ -14391,12 +14520,12 @@ }, "util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "util-promisify": { "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/util-promisify/download/util-promisify-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/util-promisify/-/util-promisify-2.1.0.tgz", "integrity": "sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=", "requires": { "object.getownpropertydescriptors": "^2.0.3" @@ -14416,25 +14545,25 @@ }, "utils-merge": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", "dev": true }, "uuid": { "version": "3.4.0", - "resolved": "https://registry.npm.taobao.org/uuid/download/uuid-3.4.0.tgz", - "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=" + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" }, "v8-compile-cache": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", - "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, "validate-npm-package-license": { "version": "3.0.4", - "resolved": "https://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -14442,7 +14571,7 @@ }, "validate-npm-package-name": { "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/validate-npm-package-name/download/validate-npm-package-name-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", "requires": { "builtins": "^1.0.3" @@ -14450,7 +14579,7 @@ }, "vary": { "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", "dev": true }, @@ -14462,12 +14591,19 @@ }, "verror": { "version": "1.10.0", - "resolved": "https://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + } } }, "vm-browserify": { @@ -14478,7 +14614,7 @@ }, "void-elements": { "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/void-elements/download/void-elements-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", "dev": true }, @@ -14517,7 +14653,7 @@ "dependencies": { "normalize-path": { "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "optional": true, @@ -14555,7 +14691,7 @@ "dependencies": { "extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "optional": true, @@ -14588,7 +14724,7 @@ }, "fill-range": { "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "optional": true, @@ -14601,7 +14737,7 @@ "dependencies": { "extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "optional": true, @@ -14618,12 +14754,13 @@ "dev": true, "optional": true, "requires": { + "bindings": "^1.5.0", "nan": "^2.12.1" } }, "glob-parent": { "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "optional": true, @@ -14634,7 +14771,7 @@ "dependencies": { "is-glob": { "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "optional": true, @@ -14646,7 +14783,7 @@ }, "is-binary-path": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "optional": true, @@ -14656,7 +14793,7 @@ }, "is-number": { "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "optional": true, @@ -14666,7 +14803,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", - "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz?cache=0&sync_timestamp=1579194589153&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-3.2.2.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "optional": true, @@ -14712,7 +14849,7 @@ }, "to-regex-range": { "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "optional": true, @@ -14734,7 +14871,7 @@ }, "wcwidth": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/wcwidth/download/wcwidth-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", "dev": true, "requires": { @@ -14743,13 +14880,13 @@ }, "web-animations-js": { "version": "2.3.2", - "resolved": "https://registry.npm.taobao.org/web-animations-js/download/web-animations-js-2.3.2.tgz", - "integrity": "sha1-pRljo1nFQ/l7R8fUvC2BH5/J4VM=" + "resolved": "https://registry.npmjs.org/web-animations-js/-/web-animations-js-2.3.2.tgz", + "integrity": "sha512-TOMFWtQdxzjWp8qx4DAraTWTsdhxVSiWa6NkPFSaPtZ1diKUxTn4yTix73A1euG1WbSOMMPcY51cnjTIHrGtDA==" }, "webdriver-js-extender": { "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/webdriver-js-extender/download/webdriver-js-extender-2.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebdriver-js-extender%2Fdownload%2Fwebdriver-js-extender-2.1.0.tgz", - "integrity": "sha1-V9epPADbTMjVVuTT20tdsKgMO7c=", + "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz", + "integrity": "sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ==", "dev": true, "requires": { "@types/selenium-webdriver": "^3.0.0", @@ -14807,7 +14944,7 @@ "dependencies": { "extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { @@ -14818,7 +14955,7 @@ }, "fill-range": { "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { @@ -14830,7 +14967,7 @@ "dependencies": { "extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { @@ -14852,7 +14989,7 @@ }, "is-number": { "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { @@ -14861,7 +14998,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", - "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz?cache=0&sync_timestamp=1579194589153&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-3.2.2.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { @@ -14892,7 +15029,7 @@ }, "memory-fs": { "version": "0.4.1", - "resolved": "https://registry.npm.taobao.org/memory-fs/download/memory-fs-0.4.1.tgz?cache=0&sync_timestamp=1570537511500&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmemory-fs%2Fdownload%2Fmemory-fs-0.4.1.tgz", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { @@ -14957,7 +15094,7 @@ }, "to-regex-range": { "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { @@ -14982,7 +15119,7 @@ "dependencies": { "memory-fs": { "version": "0.4.1", - "resolved": "https://registry.npm.taobao.org/memory-fs/download/memory-fs-0.4.1.tgz?cache=0&sync_timestamp=1570537511500&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmemory-fs%2Fdownload%2Fmemory-fs-0.4.1.tgz", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { @@ -14991,9 +15128,9 @@ } }, "mime": { - "version": "2.4.7", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.7.tgz", - "integrity": "sha512-dhNd1uA2u397uQk3Nv5LM4lm93WYDUXFn3Fu291FJerns4jyTudqhIWe4W04YLy7Uk1tm1Ore04NpjRvQp/NPA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true } } @@ -15041,7 +15178,7 @@ "dependencies": { "ansi-regex": { "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, @@ -15057,7 +15194,7 @@ "dependencies": { "normalize-path": { "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { @@ -15092,7 +15229,7 @@ "dependencies": { "extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { @@ -15123,7 +15260,7 @@ }, "fill-range": { "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { @@ -15135,7 +15272,7 @@ "dependencies": { "extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { @@ -15151,12 +15288,13 @@ "dev": true, "optional": true, "requires": { + "bindings": "^1.5.0", "nan": "^2.12.1" } }, "glob-parent": { "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { @@ -15166,7 +15304,7 @@ "dependencies": { "is-glob": { "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { @@ -15183,7 +15321,7 @@ }, "is-binary-path": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { @@ -15192,7 +15330,7 @@ }, "is-number": { "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { @@ -15201,7 +15339,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", - "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz?cache=0&sync_timestamp=1579194589153&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-3.2.2.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { @@ -15255,7 +15393,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -15273,13 +15411,22 @@ }, "to-regex-range": { "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" } + }, + "ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } } } }, @@ -15327,16 +15474,16 @@ } }, "webpack-subresource-integrity": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.5.1.tgz", - "integrity": "sha512-uekbQ93PZ9e7BFB8Hl9cFIVYQyQqiXp2ExKk9Zv+qZfH/zHXHrCFAfw1VW0+NqWbTWrs/HnuDrto3+tiPXh//Q==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.5.2.tgz", + "integrity": "sha512-GBWYBoyalbo5YClwWop9qe6Zclp8CIXYGIz12OPclJhIrSplDxs1Ls1JDMH8xBPPrg1T6ISaTW9Y6zOrwEiAzw==", "requires": { "webpack-sources": "^1.3.0" } }, "websocket-driver": { "version": "0.6.5", - "resolved": "https://registry.npm.taobao.org/websocket-driver/download/websocket-driver-0.6.5.tgz?cache=0&sync_timestamp=1591289265696&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebsocket-driver%2Fdownload%2Fwebsocket-driver-0.6.5.tgz", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", "dev": true, "requires": { @@ -15351,58 +15498,41 @@ }, "when": { "version": "3.6.4", - "resolved": "https://registry.npm.taobao.org/when/download/when-3.6.4.tgz", + "resolved": "https://registry.npmjs.org/when/-/when-3.6.4.tgz", "integrity": "sha1-RztRfsFZ4rhQBUl6E5g/CVQS404=", "dev": true }, "which": { "version": "1.3.1", - "resolved": "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz?cache=0&sync_timestamp=1574116092455&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-1.3.1.tgz", - "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "requires": { "isexe": "^2.0.0" } }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, "which-module": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npm.taobao.org/wide-align/download/wide-align-1.1.3.tgz", - "integrity": "sha1-rgdOa9wMFKQx6ATmJFScYzsABFc=", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "requires": { - "string-width": "^1.0.2 || 2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz", - "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } + "string-width": "^1.0.2 || 2 || 3 || 4" } }, "word-wrap": { @@ -15453,8 +15583,8 @@ }, "wrap-ansi": { "version": "5.1.0", - "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-5.1.0.tgz", - "integrity": "sha1-H9H2cjXVttD+54EFYAG/tpTAOwk=", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "requires": { "ansi-styles": "^3.2.0", "string-width": "^3.0.0", @@ -15463,18 +15593,18 @@ "dependencies": { "emoji-regex": { "version": "7.0.3", - "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz?cache=0&sync_timestamp=1603212659584&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Femoji-regex%2Fdownload%2Femoji-regex-7.0.3.tgz", - "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" }, "is-fullwidth-code-point": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "string-width": { "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz", - "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", @@ -15485,22 +15615,18 @@ }, "wrappy": { "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" }, "xml2js": { "version": "0.4.23", - "resolved": "https://registry.npm.taobao.org/xml2js/download/xml2js-0.4.23.tgz?cache=0&sync_timestamp=1576778216906&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fxml2js%2Fdownload%2Fxml2js-0.4.23.tgz", - "integrity": "sha1-oMaVFnUkIesqx1juTUzPWIQ+rGY=", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", "dev": true, "requires": { "sax": ">=0.6.0", @@ -15509,19 +15635,19 @@ }, "xmlbuilder": { "version": "11.0.1", - "resolved": "https://registry.npm.taobao.org/xmlbuilder/download/xmlbuilder-11.0.1.tgz", - "integrity": "sha1-vpuuHIoEbnazESdyY0fQrXACvrM=", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "dev": true }, "xmlhttprequest-ssl": { - "version": "1.5.5", - "resolved": "https://registry.npm.taobao.org/xmlhttprequest-ssl/download/xmlhttprequest-ssl-1.5.5.tgz", - "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz", + "integrity": "sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q==" }, "xtend": { "version": "4.0.2", - "resolved": "https://registry.npm.taobao.org/xtend/download/xtend-4.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fxtend%2Fdownload%2Fxtend-4.0.2.tgz", - "integrity": "sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q=" + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, "y18n": { "version": "4.0.3", @@ -15530,13 +15656,13 @@ }, "yallist": { "version": "3.1.1", - "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-3.1.1.tgz", - "integrity": "sha1-27fa+b/YusmrRev2ArjLrQ1dCP0=" + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "yargs": { "version": "13.3.2", - "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-13.3.2.tgz", - "integrity": "sha1-rX/+/sGqWVZayRX4Lcyzipwxot0=", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "requires": { "cliui": "^5.0.0", "find-up": "^3.0.0", @@ -15552,26 +15678,26 @@ "dependencies": { "emoji-regex": { "version": "7.0.3", - "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz?cache=0&sync_timestamp=1603212659584&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Femoji-regex%2Fdownload%2Femoji-regex-7.0.3.tgz", - "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" }, "find-up": { "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz", - "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "requires": { "locate-path": "^3.0.0" } }, "is-fullwidth-code-point": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "string-width": { "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz", - "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", @@ -15582,8 +15708,8 @@ }, "yargs-parser": { "version": "13.1.2", - "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-13.1.2.tgz?cache=0&sync_timestamp=1604886855135&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-13.1.2.tgz", - "integrity": "sha1-Ew8JcC667vJlDVTObj5XBvek+zg=", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -15591,19 +15717,19 @@ "dependencies": { "camelcase": { "version": "5.3.1", - "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz", - "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=" + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" } } }, "yeast": { "version": "0.1.2", - "resolved": "https://registry.npm.taobao.org/yeast/download/yeast-0.1.2.tgz", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" }, "yn": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/yn/download/yn-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", "dev": true }, @@ -15615,8 +15741,8 @@ }, "zone.js": { "version": "0.10.3", - "resolved": "https://registry.npm.taobao.org/zone.js/download/zone.js-0.10.3.tgz", - "integrity": "sha1-Pl5NoDxgfJ3NkuN901aHoUoUDBY=" + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz", + "integrity": "sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg==" } } } diff --git a/participant-manager/package.json b/participant-manager/package.json index d9ed7d4f8b..78c7f12d3c 100644 --- a/participant-manager/package.json +++ b/participant-manager/package.json @@ -40,6 +40,7 @@ "glyphicons": "^0.2.0", "ini": "^1.3.6", "jquery": "^3.4.1", + "log4js": "^6.4.0", "ng-connection-service": "^1.0.4", "ngx-bootstrap": "^5.6.1", "ngx-cookie-service": "^3.1.1", diff --git a/participant-manager/src/app/about/about.component.scss b/participant-manager/src/app/about/about.component.scss index ce6cc9ed0e..7c609ce867 100644 --- a/participant-manager/src/app/about/about.component.scss +++ b/participant-manager/src/app/about/about.component.scss @@ -8,3 +8,9 @@ color: var(--light-gray); font-size: 100%; } + +@media only screen and (max-width: 1024px) and (min-width: 200px) { + #desktop-menu { + display: block !important; + } +} diff --git a/participant-manager/src/app/auth/forgot-password/forgot-password.component.scss b/participant-manager/src/app/auth/forgot-password/forgot-password.component.scss index e69de29bb2..70b2756c4d 100644 --- a/participant-manager/src/app/auth/forgot-password/forgot-password.component.scss +++ b/participant-manager/src/app/auth/forgot-password/forgot-password.component.scss @@ -0,0 +1,5 @@ +@media only screen and (max-width: 1024px) and (min-width: 200px) { + #desktop-menu { + display: block !important; + } +} diff --git a/participant-manager/src/app/auth/forgot-password/forgot-password.component.ts b/participant-manager/src/app/auth/forgot-password/forgot-password.component.ts index b22ae798cd..2ff0f78ec7 100644 --- a/participant-manager/src/app/auth/forgot-password/forgot-password.component.ts +++ b/participant-manager/src/app/auth/forgot-password/forgot-password.component.ts @@ -45,8 +45,9 @@ export class ForgotPasswordComponent extends UnsubscribeOnDestroyAdapter { } else { this.toastr.success('sucess'); } + this.authService.initSessionStorage(); setTimeout(() => { - void this.router.navigate(['/login']); + this.authService.beginLoginConsentFlow(); }, 5000); }), ); diff --git a/participant-manager/src/app/auth/set-up-account/set-up-account.component.html b/participant-manager/src/app/auth/set-up-account/set-up-account.component.html index 1e29d0f81c..b12da0a4e8 100644 --- a/participant-manager/src/app/auth/set-up-account/set-up-account.component.html +++ b/participant-manager/src/app/auth/set-up-account/set-up-account.component.html @@ -50,8 +50,8 @@

Set up account

class="form-control" id="fname" placeholder="Enter first name" + pattern="^(?!\s)[A-Za-z0-9\s*()_+|:.-]*$" formControlName="firstName" - pattern="^[A-Za-z0-9*()_+|:.-]*$" />
Set up account
-
Set up account Password criteria +
--> + + +

Create password

@@ -179,39 +206,60 @@

Create password

>
- {{ getError("EC_0084") }} -
-
- {{ getError("EC_0081") }} -
-
- {{ getError("EC_0082") }} -
-
- {{ getError("EC_0083") }} + + Enter a password + +
+ {{ getError("EC_0084") }} +
+
+ {{ getError("EC_0081") }} +
+
+ {{ getError("EC_0082") }} +
+
+ {{ getError("EC_0083") }} +
+ + + Enter a password +
- - - Enter a password - diff --git a/participant-manager/src/app/auth/set-up-account/set-up-account.component.scss b/participant-manager/src/app/auth/set-up-account/set-up-account.component.scss index a693eca455..ce957b4714 100644 --- a/participant-manager/src/app/auth/set-up-account/set-up-account.component.scss +++ b/participant-manager/src/app/auth/set-up-account/set-up-account.component.scss @@ -102,3 +102,7 @@ meter::-webkit-meter-even-less-good-value{background:red;} */ .cursor__none { cursor: default !important; } + +.form-group .custom__labels label:before { + display: none !important; +} diff --git a/participant-manager/src/app/error/error.component.scss b/participant-manager/src/app/error/error.component.scss index eb4f2acf38..5d7fd3620e 100644 --- a/participant-manager/src/app/error/error.component.scss +++ b/participant-manager/src/app/error/error.component.scss @@ -13,3 +13,8 @@ #desktop-menu { display: block; } +@media only screen and (max-width: 1024px) and (min-width: 200px) { + #desktop-menu { + display: block !important; + } +} diff --git a/participant-manager/src/app/page-not-found/page-not-found.component.scss b/participant-manager/src/app/page-not-found/page-not-found.component.scss index df4f3a3c8e..f0a85fa63f 100644 --- a/participant-manager/src/app/page-not-found/page-not-found.component.scss +++ b/participant-manager/src/app/page-not-found/page-not-found.component.scss @@ -28,3 +28,8 @@ #desktop-menu { display: block; } +@media only screen and (max-width: 1024px) and (min-width: 200px) { + #desktop-menu { + display: block !important; + } +} diff --git a/participant-manager/src/app/site-coordinator/account/account-profile/account-profile.component.html b/participant-manager/src/app/site-coordinator/account/account-profile/account-profile.component.html index fca35bbd7c..7309e88ea9 100644 --- a/participant-manager/src/app/site-coordinator/account/account-profile/account-profile.component.html +++ b/participant-manager/src/app/site-coordinator/account/account-profile/account-profile.component.html @@ -105,13 +105,17 @@ name="cancel" (click)="cancel()" type="button" - class="btn bt__cancel" + class="btn bt__cancel btn_mb_2" > Cancel
-
diff --git a/participant-manager/src/app/site-coordinator/account/change-password/change-password.component.html b/participant-manager/src/app/site-coordinator/account/change-password/change-password.component.html index 5072c81750..d710956edc 100644 --- a/participant-manager/src/app/site-coordinator/account/change-password/change-password.component.html +++ b/participant-manager/src/app/site-coordinator/account/change-password/change-password.component.html @@ -17,7 +17,7 @@ {{ changePasswordTitle }} -
Password criteria +
--> + + @@ -209,7 +237,7 @@
diff --git a/participant-manager/src/app/site-coordinator/account/change-password/change-password.component.scss b/participant-manager/src/app/site-coordinator/account/change-password/change-password.component.scss index 1579f8f0c0..4260ad1be0 100644 --- a/participant-manager/src/app/site-coordinator/account/change-password/change-password.component.scss +++ b/participant-manager/src/app/site-coordinator/account/change-password/change-password.component.scss @@ -90,3 +90,7 @@ meter::-webkit-meter-even-less-good-value{background:red;} */ /* meter::-moz-meter-bar { background: red; } */ + +.form-group .custom__labels label:before { + display: none !important; +} diff --git a/participant-manager/src/app/site-coordinator/apps/app-details/app-details.component.html b/participant-manager/src/app/site-coordinator/apps/app-details/app-details.component.html index b2b7458bd7..65686624f9 100644 --- a/participant-manager/src/app/site-coordinator/apps/app-details/app-details.component.html +++ b/participant-manager/src/app/site-coordinator/apps/app-details/app-details.component.html @@ -45,7 +45,7 @@
Sort by: diff --git a/participant-manager/src/app/site-coordinator/apps/app-details/app-details.component.scss b/participant-manager/src/app/site-coordinator/apps/app-details/app-details.component.scss index 475111b998..77128b6e3c 100644 --- a/participant-manager/src/app/site-coordinator/apps/app-details/app-details.component.scss +++ b/participant-manager/src/app/site-coordinator/apps/app-details/app-details.component.scss @@ -47,3 +47,9 @@ opacity: 1; border-top-right-radius: 10px; } +table.custom-table-css > :not(:first-child) { + border-top: 0px; +} +.table.custom-table-css > :not(caption) > * > * { + box-shadow: none; +} diff --git a/participant-manager/src/app/site-coordinator/apps/app-list/app-list.component.html b/participant-manager/src/app/site-coordinator/apps/app-list/app-list.component.html index adf8e93a01..49fa246532 100644 --- a/participant-manager/src/app/site-coordinator/apps/app-list/app-list.component.html +++ b/participant-manager/src/app/site-coordinator/apps/app-list/app-list.component.html @@ -55,10 +55,10 @@ -
+
-
+
-
Enrollment progress
+
+ Enrollment + _ + progress +
diff --git a/participant-manager/src/app/site-coordinator/apps/app-list/app-list.component.scss b/participant-manager/src/app/site-coordinator/apps/app-list/app-list.component.scss new file mode 100644 index 0000000000..6d0ebdcf19 --- /dev/null +++ b/participant-manager/src/app/site-coordinator/apps/app-list/app-list.component.scss @@ -0,0 +1,10 @@ +@media only screen and (max-width: 900px) and (min-width: 500px) { + .tab_pull_right { + float: right !important; + text-align: right !important; + } + + .mb__width__100 { + width: 100% !important; + } +} diff --git a/participant-manager/src/app/site-coordinator/apps/app-list/app-list.component.ts b/participant-manager/src/app/site-coordinator/apps/app-list/app-list.component.ts index ca607367cb..c3d3fa2992 100644 --- a/participant-manager/src/app/site-coordinator/apps/app-list/app-list.component.ts +++ b/participant-manager/src/app/site-coordinator/apps/app-list/app-list.component.ts @@ -13,6 +13,7 @@ const limit = 10; @Component({ selector: 'app-app-list', templateUrl: './app-list.component.html', + styleUrls: ['./app-list.component.scss'], }) export class AppListComponent implements OnInit { query$ = new BehaviorSubject(''); diff --git a/participant-manager/src/app/site-coordinator/location/location-list/location-list.component.html b/participant-manager/src/app/site-coordinator/location/location-list/location-list.component.html index 717025f04d..b328e231fc 100644 --- a/participant-manager/src/app/site-coordinator/location/location-list/location-list.component.html +++ b/participant-manager/src/app/site-coordinator/location/location-list/location-list.component.html @@ -19,7 +19,7 @@
- + Sort by:
diff --git a/participant-manager/src/app/site-coordinator/mobile-menu/mobile-menu.component.html b/participant-manager/src/app/site-coordinator/mobile-menu/mobile-menu.component.html index a00826a347..0884fec7a8 100644 --- a/participant-manager/src/app/site-coordinator/mobile-menu/mobile-menu.component.html +++ b/participant-manager/src/app/site-coordinator/mobile-menu/mobile-menu.component.html @@ -1,6 +1,6 @@
-
+ + +
-
Participant details
+
+ Participant + _ + details +
@@ -321,15 +325,15 @@

Enrollment history

- +
- - - + + + @@ -359,9 +363,9 @@

{{ enrollmentDetails.enrollmentStatus }} -

- - + + + @@ -378,12 +382,14 @@

Date of enrollment Date of withdrawal Last enrollment status      
      

- Consent history + Consent + _ + history

Sort by: diff --git a/participant-manager/src/app/site-coordinator/participant-details/participant-details.component.scss b/participant-manager/src/app/site-coordinator/participant-details/participant-details.component.scss index 46d35e657e..0242fe8dea 100644 --- a/participant-manager/src/app/site-coordinator/participant-details/participant-details.component.scss +++ b/participant-manager/src/app/site-coordinator/participant-details/participant-details.component.scss @@ -114,3 +114,9 @@ table tbody.custom__tbody_2 tr td:nth-child(5) { outline: 0px solid slategrey; } } +table.custom-table-css > :not(:first-child) { + border-top: 0px; +} +.table.custom-table-css > :not(caption) > * > * { + box-shadow: none; +} diff --git a/participant-manager/src/app/site-coordinator/sites/add-site/add-site.component.html b/participant-manager/src/app/site-coordinator/sites/add-site/add-site.component.html index b905f81d87..9330d32bad 100644 --- a/participant-manager/src/app/site-coordinator/sites/add-site/add-site.component.html +++ b/participant-manager/src/app/site-coordinator/sites/add-site/add-site.component.html @@ -19,7 +19,7 @@ class="row border__bottom__c4d1e6" >
-
+
@@ -31,7 +31,14 @@ #location="ngModel" placeholder="Enter app ID or name" > - +
Sort by: diff --git a/participant-manager/src/app/site-coordinator/sites/site-details/site-details.component.scss b/participant-manager/src/app/site-coordinator/sites/site-details/site-details.component.scss index 4ee2d506a1..ed4b405764 100644 --- a/participant-manager/src/app/site-coordinator/sites/site-details/site-details.component.scss +++ b/participant-manager/src/app/site-coordinator/sites/site-details/site-details.component.scss @@ -170,3 +170,9 @@ input[type="checkbox"]:checked + label::before { padding-bottom: 20px; } } +table.custom-table-css > :not(:first-child) { + border-top: 0px; +} +.table.custom-table-css > :not(caption) > * > * { + box-shadow: none; +} diff --git a/participant-manager/src/app/site-coordinator/studies/study-details/study-details.component.html b/participant-manager/src/app/site-coordinator/studies/study-details/study-details.component.html index 536cfa07db..42e7e93aaa 100644 --- a/participant-manager/src/app/site-coordinator/studies/study-details/study-details.component.html +++ b/participant-manager/src/app/site-coordinator/studies/study-details/study-details.component.html @@ -1,8 +1,8 @@
-
+
+
-
+
- Enrolled / Invited + Enrolled + _ + / + _ + Invited - Enrolled / Target + Enrolled + _ + / + _ + Target
diff --git a/participant-manager/src/app/site-coordinator/studies/study-list/study-list.component.scss b/participant-manager/src/app/site-coordinator/studies/study-list/study-list.component.scss index e69de29bb2..6d0ebdcf19 100644 --- a/participant-manager/src/app/site-coordinator/studies/study-list/study-list.component.scss +++ b/participant-manager/src/app/site-coordinator/studies/study-list/study-list.component.scss @@ -0,0 +1,10 @@ +@media only screen and (max-width: 900px) and (min-width: 500px) { + .tab_pull_right { + float: right !important; + text-align: right !important; + } + + .mb__width__100 { + width: 100% !important; + } +} diff --git a/participant-manager/src/app/site-coordinator/user/new-user/new-user.component.html b/participant-manager/src/app/site-coordinator/user/new-user/new-user.component.html index 378d04f5b9..8ab919b2f7 100644 --- a/participant-manager/src/app/site-coordinator/user/new-user/new-user.component.html +++ b/participant-manager/src/app/site-coordinator/user/new-user/new-user.component.html @@ -94,7 +94,7 @@
-
+
studyVersionMap = new HashMap<>(); studyVersionMap.put("studyVersion", dataToStoreActivityResults.get("studyVersion")); ApiFuture futuresStudyColl = @@ -485,4 +499,34 @@ private StoredResponseBean initStoredResponseBean() { retStoredResponseBean.setQueryName(AppConstants.RESPONSE_DATA_QUERY_NAME_LEGACY); return retStoredResponseBean; } + + private boolean isResponseExists( + String studyCollectionName, + String studyId, + String participantId, + String activityId, + String activityRunId) { + initializeFirestore(); + // 1. Check if the + try { + final Query queryByActivityRuns = + this.responsesDb + .collection(studyCollectionName) + .document(studyId) + .collection(AppConstants.ACTIVITIES_COLLECTION_NAME) + .whereEqualTo(AppConstants.PARTICIPANT_ID_KEY, participantId) + .whereEqualTo(AppConstants.ACTIVITY_ID_KEY, activityId) + .whereEqualTo(AppConstants.ACTIVITY_RUN_ID_KEY, activityRunId); + final ApiFuture querySnapshot = queryByActivityRuns.get(); + List documents = querySnapshot.get().getDocuments(); + if (!documents.isEmpty()) { + return true; + } + // if + } catch (Exception e) { + logger.error("isResponseExists() method. Exception is: " + e.getMessage(), e); + return false; + } + return false; + } } diff --git a/response-datastore/response-server-service/src/main/java/com/google/cloud/healthcare/fdamystudies/service/ParticipantActivityStateResponseServiceImpl.java b/response-datastore/response-server-service/src/main/java/com/google/cloud/healthcare/fdamystudies/service/ParticipantActivityStateResponseServiceImpl.java index 4a61548391..03bfbf6eaa 100644 --- a/response-datastore/response-server-service/src/main/java/com/google/cloud/healthcare/fdamystudies/service/ParticipantActivityStateResponseServiceImpl.java +++ b/response-datastore/response-server-service/src/main/java/com/google/cloud/healthcare/fdamystudies/service/ParticipantActivityStateResponseServiceImpl.java @@ -130,13 +130,22 @@ private List getConsolidatedParticipantListToUpdate participantActivityInput.getActivityVersion()); participantActivityExisting.setActivityState( participantActivityInput.getActivityState()); - participantActivityExisting.setActivityRunId( - participantActivityInput.getActivityRunId()); participantActivityExisting.setBookmark(participantActivityInput.getBookmark()); - participantActivityExisting.setTotalCount(participantActivityInput.getTotalCount()); - participantActivityExisting.setCompletedCount( - participantActivityInput.getCompletedCount()); - participantActivityExisting.setMissedCount(participantActivityInput.getMissedCount()); + if (StringUtils.isNotBlank(participantActivityInput.getActivityRunId())) { + participantActivityExisting.setActivityRunId( + participantActivityInput.getActivityRunId()); + } + if (participantActivityInput.getTotalCount() != null) { + participantActivityExisting.setTotalCount(participantActivityInput.getTotalCount()); + } + if (participantActivityInput.getCompletedCount() != null) { + participantActivityExisting.setCompletedCount( + participantActivityInput.getCompletedCount()); + } + if (participantActivityInput.getMissedCount() != null) { + participantActivityExisting.setMissedCount( + participantActivityInput.getMissedCount()); + } } } } diff --git a/response-datastore/response-server-service/src/main/java/com/google/cloud/healthcare/fdamystudies/utils/AppConstants.java b/response-datastore/response-server-service/src/main/java/com/google/cloud/healthcare/fdamystudies/utils/AppConstants.java index b89068e785..dae95acc34 100644 --- a/response-datastore/response-server-service/src/main/java/com/google/cloud/healthcare/fdamystudies/utils/AppConstants.java +++ b/response-datastore/response-server-service/src/main/java/com/google/cloud/healthcare/fdamystudies/utils/AppConstants.java @@ -44,6 +44,7 @@ public class AppConstants { public static final String AUTHORIZATION_HEADER = "Authorization"; public static final String STUDY_ID_PARAM = "studyId"; public static final String ACTIVITY_ID_KEY = "activityId"; + public static final String ACTIVITY_RUN_ID_KEY = "activityRunId"; public static final String ACTIVITY_VERSION_PARAM = "activityVersion"; public static final String ERROR_STR = "Error"; public static final String OPTIONS_METHOD = "OPTIONS"; @@ -55,7 +56,7 @@ public class AppConstants { public static final String PARTICIPANT_METADATA_KEY = "Participants"; public static final String ACTIVITIES_COLLECTION_NAME = "Activities"; public static final String SUCCESS_MSG = "SUCCESS"; - public static final String COMPLETED = "Completed"; + public static final String COMPLETED = "completed"; public static final String WITHDRAWAL_STATUS_KEY = "withdrawalStatus"; public static final int FS_BATCH_COMMIT_LIMIT = 500; diff --git a/study-builder/fdahpStudyDesigner/pom.xml b/study-builder/fdahpStudyDesigner/pom.xml index 01580d0a47..4edbf263bf 100644 --- a/study-builder/fdahpStudyDesigner/pom.xml +++ b/study-builder/fdahpStudyDesigner/pom.xml @@ -12,8 +12,8 @@ UTF-8 fdahpStudyDesigner - 3.2.18.RELEASE - 3.2.3.RELEASE + 5.3.18 + 5.6.2 studybuilder @@ -52,17 +52,31 @@ - **/*min.js + **/*.js **/*min.css true + + com.google.cloud.tools + jib-maven-plugin + 2.6.0 + + tomcat:9.0.33-jdk11-openjdk + /usr/local/tomcat/webapps/studybuilder + + + + org.apache.maven + maven-artifact + 3.6.3 + com.google.cloud libraries-bom @@ -73,15 +87,15 @@ - - org.apache.maven - maven-artifact - 3.6.3 - com.google.cloud google-cloud-logging + + com.google.firebase + firebase-admin + 6.11.0 + org.apache.httpcomponents httpcore @@ -125,6 +139,11 @@ + + org.springframework + spring-beans + ${org.springframework.version} + org.springframework spring-jdbc @@ -133,6 +152,11 @@ + + org.springframework + spring-context + ${org.springframework.version} + org.springframework spring-orm @@ -155,7 +179,7 @@ org.springframework spring-instrument-tomcat - ${org.springframework.version} + 4.3.30.RELEASE org.springframework @@ -178,6 +202,17 @@ 2.0.8 + + com.h2database + h2 + 2.1.210 + test + + + org.apache.tomcat + tomcat-dbcp + 9.0.1 + cglib cglib-nodep @@ -205,7 +240,7 @@ junit junit - 4.13.1 + 4.13.2 jar compile @@ -254,7 +289,7 @@ mysql mysql-connector-java - 8.0.16 + 8.0.28 jar compile @@ -278,16 +313,14 @@ org.hibernate hibernate-core - 3.3.2.GA + 5.6.7.Final jar compile - javax.persistence - persistence-api - 1.0 - jar - compile + javax.transaction + jta + 1.1 @@ -307,50 +340,38 @@ org.slf4j slf4j-api - 1.5.8 + 1.7.25 jar compile org.slf4j slf4j-log4j12 - 1.5.8 + 1.7.36 jar compile - - org.hibernate - hibernate-annotations - 3.4.0.GA - jar - compile - - + org.hibernate hibernate-entitymanager - 3.3.2.GA - - - - org.hibernate - ejb3-persistence - 3.3.2.Beta1 + 5.6.7.Final + org.apache.tiles tiles-api - 2.1.2 + 3.0.8 org.apache.tiles tiles-jsp - 2.1.2 + 3.0.8 org.apache.tiles tiles-core - 2.1.2 + 3.0.8 org.apache.httpcomponents @@ -361,28 +382,29 @@ org.apache.tiles tiles-template - 2.2.2 + 3.0.8 org.apache.tiles tiles-request-api - 1.0.5 + 1.0.7 org.codehaus.mojo xmlbeans-maven-plugin - 2.3.0 + 2.3.2 org.apache.tiles tiles-servlet - 2.1.2 + 3.0.8 + - javax.mail - mail - 1.4 + com.sun.mail + javax.mail + 1.6.2 org.ajaxtags @@ -405,7 +427,7 @@ org.jsoup jsoup - 1.7.1 + 1.14.2 net.sf.json-lib @@ -486,7 +508,7 @@ com.h2database h2 - 1.3.165 + 2.1.210 runtime @@ -515,17 +537,17 @@ org.slf4j slf4j-ext - 1.5.8 + 1.7.36 com.fasterxml.jackson.core jackson-databind - 2.10.0 + 2.10.5.1 org.springframework.security spring-security-test - 4.2.2.RELEASE + ${spring.security.version} test @@ -533,15 +555,16 @@ commons-text 1.9 - + com.google.cloud google-cloud-storage 1.96.0 - + org.apache.commons commons-text 1.4 + \ No newline at end of file diff --git a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/bo/StudyVersionBo.java b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/bo/StudyVersionBo.java index 607272789f..1a770cc244 100644 --- a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/bo/StudyVersionBo.java +++ b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/bo/StudyVersionBo.java @@ -42,7 +42,7 @@ @NamedQuery( name = "getStudyByCustomStudyId", query = - " From StudyVersionBo SVBO WHERE SVBO.customStudyId =:customStudyId order by studyVersion DESC LIMIT 1"), + " From StudyVersionBo SVBO WHERE SVBO.customStudyId =:customStudyId order by studyVersion DESC"), @NamedQuery( name = "getStudyVersionsByCustomStudyId", query = diff --git a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/bo/UserBO.java b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/bo/UserBO.java index ded25a9e14..910d84c88a 100644 --- a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/bo/UserBO.java +++ b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/bo/UserBO.java @@ -73,8 +73,8 @@ public class UserBO implements Serializable { @Column(name = "credentialsNonExpired", length = 1) private boolean credentialsNonExpired; - @Column(name = "email_changed", columnDefinition = "TINYINT(1)") - private Boolean emailChanged = false; + @Column(name = "email_changed", columnDefinition = "int default 0") + private Integer emailChanged = 0; @Column(name = "status", length = 1) private boolean enabled; @@ -152,7 +152,7 @@ public String getCreatedOn() { return createdOn; } - public Boolean getEmailChanged() { + public Integer getEmailChanged() { return emailChanged; } @@ -268,7 +268,7 @@ public void setCredentialsNonExpired(boolean credentialsNonExpired) { this.credentialsNonExpired = credentialsNonExpired; } - public void setEmailChanged(Boolean emailChanged) { + public void setEmailChanged(Integer emailChanged) { this.emailChanged = emailChanged; } diff --git a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/bo/UserPermissions.java b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/bo/UserPermissions.java index 70efc5485b..0e7bf77849 100644 --- a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/bo/UserPermissions.java +++ b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/bo/UserPermissions.java @@ -24,51 +24,39 @@ package com.fdahpstudydesigner.bo; -import java.util.Set; +import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; -import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; -import javax.persistence.ManyToMany; import javax.persistence.Table; import org.hibernate.annotations.GenericGenerator; @Entity @Table(name = "user_permissions") -public class UserPermissions { +public class UserPermissions implements Serializable { + private static final long serialVersionUID = 135353554543L; + + @Column(name = "permissions", nullable = false, length = 45) private String permissions; + @Id + @GeneratedValue(generator = "system-uuid") + @GenericGenerator(name = "system-uuid", strategy = "uuid") + @Column(name = "permission_id", updatable = false, nullable = false) private Integer userRoleId; - private Set users; - public UserPermissions() {} - public UserPermissions(Set users, String permissions) { - this.setUsers(users); - this.setPermissions(permissions); - } - - @Column(name = "permissions", nullable = false, length = 45) public String getPermissions() { return permissions; } - @Id - @GeneratedValue(generator = "system-uuid") - @GenericGenerator(name = "system-uuid", strategy = "uuid") - @Column(name = "permission_id", updatable = false, nullable = false) public Integer getUserRoleId() { return this.userRoleId; } - @ManyToMany(fetch = FetchType.EAGER) - public Set getUsers() { - return users; - } - public void setPermissions(String permissions) { this.permissions = permissions; } @@ -76,8 +64,4 @@ public void setPermissions(String permissions) { public void setUserRoleId(Integer userRoleId) { this.userRoleId = userRoleId; } - - public void setUsers(Set users) { - this.users = users; - } } diff --git a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/common/StudyBuilderAuditEvent.java b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/common/StudyBuilderAuditEvent.java index 54f000b79a..2512ae4c60 100644 --- a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/common/StudyBuilderAuditEvent.java +++ b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/common/StudyBuilderAuditEvent.java @@ -578,7 +578,10 @@ public enum StudyBuilderAuditEvent { STUDY_DATASTORE, null, "App record deactivated. App record status: '${app_record_status}'", - "APP_RECORD_VIEWED"); + "APP_RECORD_VIEWED"), + + STUDY_DELETED( + STUDY_BUILDER, STUDY_DATASTORE, null, "Study deleted before Publishing", "STUDY_DELETED"); private final PlatformComponent source; private final PlatformComponent destination; diff --git a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/controller/StudyController.java b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/controller/StudyController.java index 2d305eaa4f..56663df756 100644 --- a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/controller/StudyController.java +++ b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/controller/StudyController.java @@ -670,7 +670,7 @@ public void deleteEligibiltyTestQusAns(HttpServletRequest request, HttpServletRe logger.exit("deleteEligibiltyTestQusAns() - Ends"); } - @RequestMapping(value = "/adminStudies/deleteResourceInfo", method = RequestMethod.POST) + @RequestMapping(value = "/adminStudies/deleteResourceInfo.do", method = RequestMethod.POST) public void deleteResourceInfo(HttpServletRequest request, HttpServletResponse response) { logger.entry("begin deleteResourceInfo()"); JSONObject jsonobject = new JSONObject(); @@ -4075,7 +4075,7 @@ public void studyPlatformValidation(HttpServletRequest request, HttpServletRespo } @RequestMapping( - value = "/adminStudies/studyPlatformValidationforActiveTask", + value = "/adminStudies/studyPlatformValidationforActiveTask.do", method = RequestMethod.POST) public void studyPlatformValidationforActiveTask( HttpServletRequest request, HttpServletResponse response) { @@ -4123,7 +4123,7 @@ public void studyPlatformValidationforActiveTask( logger.exit("studyPlatformValidationforActiveTask() - Ends"); } - @RequestMapping(value = "/adminStudies/updateStudyAction", method = RequestMethod.POST) + @RequestMapping(value = "/adminStudies/updateStudyAction.do", method = RequestMethod.POST) public ModelAndView updateStudyActionOnAction( HttpServletRequest request, HttpServletResponse response) { logger.entry("begin updateStudyActionOnAction()"); @@ -4528,14 +4528,16 @@ public ModelAndView viewBasicInfo(HttpServletRequest request) { } else if (StringUtils.isEmpty(studyBo.getCustomStudyId()) && StringUtils.isNotEmpty(studyBo.getDestinationCustomStudyId())) { - String[] copyCustomIdArray = studyBo.getDestinationCustomStudyId().split("@"); - String customId = ""; - if (copyCustomIdArray[1].contains("COPY")) { - customId = copyCustomIdArray[0]; - studyBo.setDestinationCustomStudyId(customId); - } else if (copyCustomIdArray[1].equalsIgnoreCase("EXPORT")) { - customId = copyCustomIdArray[0]; - studyBo.setDestinationCustomStudyId(customId + "@Export"); + if (studyBo.getDestinationCustomStudyId().contains("@")) { + String[] copyCustomIdArray = studyBo.getDestinationCustomStudyId().split("@"); + String customId = ""; + if (copyCustomIdArray[1].contains("COPY")) { + customId = copyCustomIdArray[0]; + studyBo.setDestinationCustomStudyId(customId); + } else if (copyCustomIdArray[1].equalsIgnoreCase("EXPORT")) { + customId = copyCustomIdArray[0]; + studyBo.setDestinationCustomStudyId(customId + "@Export"); + } } map.addAttribute( @@ -5521,4 +5523,40 @@ public ModelAndView replicateStudy(HttpServletRequest request, HttpServletRespon logger.info("StudyController - replicateStudy() - Ends"); return new ModelAndView("redirect:/adminStudies/studyList.do"); } + + @RequestMapping(value = "/adminStudies/deleteStudy.do") + public ModelAndView deleteById(HttpServletRequest request) { + logger.entry("begin studydeleteById()"); + ModelAndView mav = new ModelAndView(); + String msg = ""; + Map propMap = FdahpStudyDesignerUtil.getAppProperties(); + AuditLogEventRequest auditRequest = AuditEventMapper.fromHttpServletRequest(request); + try { + HttpSession session = request.getSession(); + SessionObject userSession = + (SessionObject) session.getAttribute(FdahpStudyDesignerConstants.SESSION_OBJECT); + + String studyId = + FdahpStudyDesignerUtil.isEmpty(request.getParameter(FdahpStudyDesignerConstants.STUDY_ID)) + ? "" + : request.getParameter(FdahpStudyDesignerConstants.STUDY_ID); + if (StringUtils.isNotEmpty(studyId)) { + msg = studyService.deleteById(studyId, auditRequest); + } + + if (FdahpStudyDesignerConstants.SUCCESS.equals(msg)) { + + request + .getSession() + .setAttribute( + FdahpStudyDesignerConstants.SUC_MSG, propMap.get("delete.study.success.message")); + auditLogEventHelper.logEvent(StudyBuilderAuditEvent.STUDY_DELETED, auditRequest); + } + } catch (Exception e) { + logger.error("StudyController - deleteById() - ERROR", e); + } + logger.exit("deleteById() - Ends"); + + return new ModelAndView("redirect:/adminStudies/studyList.do"); + } } diff --git a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/controller/UsersController.java b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/controller/UsersController.java index 90e2e3db30..684a60109b 100644 --- a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/controller/UsersController.java +++ b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/controller/UsersController.java @@ -596,4 +596,40 @@ public ModelAndView viewUserDetails(HttpServletRequest request) { logger.exit("viewUserDetails() - Ends"); return mav; } + + @RequestMapping(value = "/adminUsersView/deleteUser.do") + public ModelAndView deleteByUserId(HttpServletRequest request) { + logger.entry("begin deleteAdminDetails()"); + ModelAndView mav = new ModelAndView(); + String msg = ""; + UserBO userBo = null; + Map propMap = FdahpStudyDesignerUtil.getAppProperties(); + AuditLogEventRequest auditRequest = AuditEventMapper.fromHttpServletRequest(request); + try { + HttpSession session = request.getSession(); + SessionObject userSession = + (SessionObject) session.getAttribute(FdahpStudyDesignerConstants.SESSION_OBJECT); + if (null != userSession) { + String userId = + FdahpStudyDesignerUtil.isEmpty(request.getParameter("userId")) + ? "" + : request.getParameter("userId"); + if (StringUtils.isNotEmpty(userId)) { + msg = usersService.deleteByUserId(userId); + } + } + if (FdahpStudyDesignerConstants.SUCCESS.equals(msg)) { + + request + .getSession() + .setAttribute( + FdahpStudyDesignerConstants.SUC_MSG, propMap.get("delete.user.success.message")); + } + } catch (Exception e) { + logger.error("UsersController - deleteByUserId() - ERROR", e); + } + logger.exit("deleteByUserId() - Ends"); + + return new ModelAndView("redirect:getUserList.do"); + } } diff --git a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/AppDAOImpl.java b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/AppDAOImpl.java index 8d0f4c4a80..cf7ca0c938 100644 --- a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/AppDAOImpl.java +++ b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/AppDAOImpl.java @@ -48,7 +48,7 @@ import org.slf4j.ext.XLogger; import org.slf4j.ext.XLoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.orm.hibernate3.HibernateTemplate; +import org.springframework.orm.hibernate5.HibernateTemplate; import org.springframework.stereotype.Repository; @Repository @@ -295,18 +295,47 @@ public String saveOrUpdateApp(AppsBo appBo, SessionObject sessionObject) { StudyBuilderAuditEvent auditLogEvent = null; AppSequenceBo appSequenceBo = null; String appId = null; + String userId = null; + List userSuperAdminList = null; + try { AuditLogEventRequest auditRequest = AuditEventMapper.fromHttpServletRequest(request); session = hibernateTemplate.getSessionFactory().openSession(); transaction = session.beginTransaction(); + userId = appBo.getUserId(); if (StringUtils.isEmpty(appBo.getId())) { appBo.setCreatedOn(FdahpStudyDesignerUtil.getCurrentDateTime()); - appSequenceBo = new AppSequenceBo(); appBo.setAppStatus("Draft"); appBo.setCreatedBy(appBo.getUserId()); appId = (String) session.save(appBo); + AppPermissionBO appPermissionBO = new AppPermissionBO(); + appPermissionBO.setUserId(userId); + appPermissionBO.setAppId(appId); + appPermissionBO.setViewPermission(true); + session.save(appPermissionBO); + + // give permission to all super admin Start + query = + session + .createSQLQuery( + "Select upm.user_id from user_permission_mapping upm where upm.permission_id =:superAdminId") + .setInteger("superAdminId", FdahpStudyDesignerConstants.ROLE_SUPERADMIN); + userSuperAdminList = query.list(); + if ((userSuperAdminList != null) && !userSuperAdminList.isEmpty()) { + for (String superAdminId : userSuperAdminList) { + if ((null != userId) && !userId.equals(superAdminId)) { + appPermissionBO = new AppPermissionBO(); + appPermissionBO.setUserId(superAdminId); + appPermissionBO.setAppId(appId); + appPermissionBO.setViewPermission(true); + session.save(appPermissionBO); + } + } + } + + appSequenceBo = new AppSequenceBo(); appSequenceBo.setAppId(appId); session.save(appSequenceBo); } else { @@ -749,6 +778,10 @@ public List getAllApps() { appList = query.list(); } catch (Exception e) { logger.error("StudyDAOImpl - getAllStudyList() - ERROR ", e); + } finally { + if ((null != session) && session.isOpen()) { + session.close(); + } } logger.exit("getAllStudyList() - Ends"); return appList; @@ -983,6 +1016,10 @@ public int getStudiesByAppId(String customAppId) { } } catch (Exception e) { logger.error("AppDAOImpl - getAppById() - ERROR ", e); + } finally { + if ((null != session) && session.isOpen()) { + session.close(); + } } logger.exit("getAppById() - Ends"); return count; @@ -1158,6 +1195,10 @@ private int getAppsByCustomAppId(String customAppId) { } } catch (Exception e) { logger.error("AppDAOImpl - getAppsByCustomAppId() - ERROR ", e); + } finally { + if ((null != session) && session.isOpen()) { + session.close(); + } } logger.exit("getAppsByCustomAppId() - Ends"); return count; @@ -1185,6 +1226,10 @@ public int getStudiesCountByAppId(String customAppId) { } } catch (Exception e) { logger.error("AppDAOImpl - getStudiesCountByAppId() - ERROR ", e); + } finally { + if ((null != session) && session.isOpen()) { + session.close(); + } } logger.exit("getStudiesCountByAppId() - Ends"); return count; diff --git a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/AuditLogDAOImpl.java b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/AuditLogDAOImpl.java index d09476549d..ca66cbfcbd 100644 --- a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/AuditLogDAOImpl.java +++ b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/AuditLogDAOImpl.java @@ -29,7 +29,7 @@ import org.hibernate.Transaction; import org.slf4j.ext.XLogger; import org.slf4j.ext.XLoggerFactory; -import org.springframework.orm.hibernate3.HibernateTemplate; +import org.springframework.orm.hibernate5.HibernateTemplate; import org.springframework.stereotype.Repository; @Repository diff --git a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/DashBoardAndProfileDAOImpl.java b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/DashBoardAndProfileDAOImpl.java index 96b9049f3c..ca4671de2d 100644 --- a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/DashBoardAndProfileDAOImpl.java +++ b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/DashBoardAndProfileDAOImpl.java @@ -34,7 +34,7 @@ import org.slf4j.ext.XLogger; import org.slf4j.ext.XLoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.orm.hibernate3.HibernateTemplate; +import org.springframework.orm.hibernate5.HibernateTemplate; import org.springframework.stereotype.Repository; @Repository diff --git a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/LoginDAOImpl.java b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/LoginDAOImpl.java index abceb8f7f9..eafeac16a3 100644 --- a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/LoginDAOImpl.java +++ b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/LoginDAOImpl.java @@ -51,7 +51,7 @@ import org.slf4j.ext.XLogger; import org.slf4j.ext.XLoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.orm.hibernate3.HibernateTemplate; +import org.springframework.orm.hibernate5.HibernateTemplate; import org.springframework.security.authentication.LockedException; import org.springframework.stereotype.Repository; diff --git a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/NotificationDAOImpl.java b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/NotificationDAOImpl.java index f61e5c9577..71d6d7bd0f 100644 --- a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/NotificationDAOImpl.java +++ b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/NotificationDAOImpl.java @@ -62,7 +62,7 @@ import org.slf4j.ext.XLogger; import org.slf4j.ext.XLoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.orm.hibernate3.HibernateTemplate; +import org.springframework.orm.hibernate5.HibernateTemplate; import org.springframework.stereotype.Repository; @Repository diff --git a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/StudyActiveTasksDAOImpl.java b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/StudyActiveTasksDAOImpl.java index 735e962cce..ebc4d3d51e 100644 --- a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/StudyActiveTasksDAOImpl.java +++ b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/StudyActiveTasksDAOImpl.java @@ -62,7 +62,7 @@ import org.slf4j.ext.XLogger; import org.slf4j.ext.XLoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.orm.hibernate3.HibernateTemplate; +import org.springframework.orm.hibernate5.HibernateTemplate; import org.springframework.stereotype.Repository; @Repository diff --git a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/StudyDAO.java b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/StudyDAO.java index 30a61f3bab..b711939c7a 100644 --- a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/StudyDAO.java +++ b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/StudyDAO.java @@ -24,6 +24,7 @@ package com.fdahpstudydesigner.dao; +import com.fdahpstudydesigner.bean.AuditLogEventRequest; import com.fdahpstudydesigner.bean.StudyIdBean; import com.fdahpstudydesigner.bean.StudyListBean; import com.fdahpstudydesigner.bean.StudyPageBean; @@ -269,4 +270,6 @@ public List getComprehensionTestResponses( public List getConsentInfoList( String studyId, String customStudyId, String copyVersion); + + public String deleteById(String studyId, AuditLogEventRequest auditRequest); } diff --git a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/StudyDAOImpl.java b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/StudyDAOImpl.java index 46909fc24d..e88b83c6a9 100644 --- a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/StudyDAOImpl.java +++ b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/StudyDAOImpl.java @@ -125,7 +125,7 @@ import org.slf4j.ext.XLogger; import org.slf4j.ext.XLoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.orm.hibernate3.HibernateTemplate; +import org.springframework.orm.hibernate5.HibernateTemplate; import org.springframework.stereotype.Repository; @Repository @@ -1427,6 +1427,10 @@ public int eligibilityTestOrderCount(String eligibilityId) { } } catch (Exception e) { logger.error("StudyDAOImpl - eligibilityTestOrderCount - Error", e); + } finally { + if ((null != session) && session.isOpen()) { + session.close(); + } } logger.exit("eligibilityTestOrderCount - Ends"); return count; @@ -1868,7 +1872,7 @@ public List getOverviewStudyPagesById(String studyId, String userId if (StringUtils.isNotEmpty(studyId)) { query = session.createQuery( - "from StudyPageBo where studyId=:studyId order by createdOn, sequenceNumber"); + "from StudyPageBo where studyId=:studyId order by createdOn, CASE WHEN sequenceNumber IS NULL THEN 1 ELSE 0 END, sequenceNumber"); query.setString("studyId", studyId); studyPageBo = query.list(); } @@ -3360,7 +3364,7 @@ public boolean resetDraftStudyByCustomStudyId( && !existingQuestionResponseSubTypeList.isEmpty()) { for (QuestionResponseSubTypeBo questionResponseSubTypeBo : existingQuestionResponseSubTypeList) { - if (questionResponseSubTypeBo.getDestinationStepId() == null) { + if (StringUtils.isEmpty(questionResponseSubTypeBo.getDestinationStepId())) { sequenceSubTypeList.add(null); } else if ((questionResponseSubTypeBo.getDestinationStepId() != null) && questionResponseSubTypeBo.getDestinationStepId().equals(String.valueOf(0))) { @@ -4344,33 +4348,47 @@ public String saveOrUpdateStudy(StudyBo studyBo, SessionObject sessionObject) { if (StringUtils.isNotEmpty(dbStudyBo.getDestinationCustomStudyId()) && StringUtils.isEmpty(dbStudyBo.getCustomStudyId())) { - String[] copyCustomIdArray = dbStudyBo.getDestinationCustomStudyId().split("@"); - String customId = ""; - if (copyCustomIdArray[1].contains("COPY")) { - customId = copyCustomIdArray[0]; - int isLive = - copyCustomIdArray[1].contains(FdahpStudyDesignerConstants.PUBLISHED_VERSION) - ? 1 - : 0; + if (dbStudyBo.getDestinationCustomStudyId().contains("@")) { + String[] copyCustomIdArray = dbStudyBo.getDestinationCustomStudyId().split("@"); + String customId = ""; + if (copyCustomIdArray[1].contains("COPY")) { + customId = copyCustomIdArray[0]; + int isLive = + copyCustomIdArray[1].contains(FdahpStudyDesignerConstants.PUBLISHED_VERSION) + ? 1 + : 0; + StudyBo study = + (StudyBo) + session + .createQuery( + "From StudyBo SBO WHERE SBO.live=:isLive AND customStudyId=:customStudyId") + .setString("customStudyId", customId) + .setInteger("isLive", isLive) + .uniqueResult(); + if (study != null) { + moveOrCopyCloudStorage(session, study, false, false, studyBo.getCustomStudyId()); + } + } else if (copyCustomIdArray[1].equalsIgnoreCase("EXPORT")) { + moveOrCopyCloudStorageForExportStudy( + session, + dbStudyBo, + false, + false, + studyBo.getCustomStudyId(), + dbStudyBo.getDestinationCustomStudyId()); + } + } else { StudyBo study = (StudyBo) session .createQuery( "From StudyBo SBO WHERE SBO.live=:isLive AND customStudyId=:customStudyId") - .setString("customStudyId", customId) - .setInteger("isLive", isLive) + .setString("customStudyId", dbStudyBo.getDestinationCustomStudyId()) + .setInteger("isLive", 0) .uniqueResult(); if (study != null) { moveOrCopyCloudStorage(session, study, false, false, studyBo.getCustomStudyId()); } - } else if (copyCustomIdArray[1].equalsIgnoreCase("EXPORT")) { - moveOrCopyCloudStorageForExportStudy( - session, - dbStudyBo, - false, - false, - studyBo.getCustomStudyId(), - dbStudyBo.getDestinationCustomStudyId()); } } else if (!dbStudyBo.getCustomStudyId().equals(studyBo.getCustomStudyId())) { @@ -5381,7 +5399,7 @@ public String studyDraftCreation( && !existingQuestionResponseTypeList.isEmpty()) { for (QuestionReponseTypeBo questionResponseTypeBo : existingQuestionResponseTypeList) { - if (questionResponseTypeBo.getOtherDestinationStepId() == null) { + if (StringUtils.isEmpty(questionResponseTypeBo.getOtherDestinationStepId())) { sequenceTypeList.add(null); } else if ((questionResponseTypeBo.getOtherDestinationStepId() != null) && questionResponseTypeBo @@ -6444,6 +6462,10 @@ public String validateEligibilityTestKey( } } catch (Exception e) { logger.error("StudyDAOImpl - getStudyVersionInfo() - ERROR ", e); + } finally { + if ((null != session) && session.isOpen()) { + session.close(); + } } logger.exit("getStudyVersionInfo() - Ends"); return result; @@ -6625,6 +6647,10 @@ public Boolean isAnchorDateExistForEnrollment(String studyId, String customStudy } } catch (Exception e) { + } finally { + if ((null != session) && session.isOpen()) { + session.close(); + } } logger.exit("isAnchorDateExistForEnrollment - Ends"); return isExist; @@ -6695,6 +6721,10 @@ public Boolean isAnchorDateExistForEnrollmentDraftStudy(String studyId, String c } } catch (Exception e) { + } finally { + if ((null != session) && session.isOpen()) { + session.close(); + } } logger.exit("isAnchorDateExistForEnrollmentDraftStudy - Ends"); return isExist; @@ -7360,6 +7390,10 @@ public List getComprehensionTestResponseList( } } catch (Exception e) { logger.error("StudyDAOImpl - getComprehensionTestResponseList() - ERROR ", e); + } finally { + if ((null != session) && session.isOpen()) { + session.close(); + } } return comprehensionTestResponseList; } @@ -8119,6 +8153,10 @@ public List getComprehensionTestResponses( } } catch (Exception e) { logger.error("StudyDAOImpl - getComprehensionTestResponseList() - ERROR ", e); + } finally { + if ((null != session) && session.isOpen()) { + session.close(); + } } return comprehensionTestResponseList; } @@ -8491,4 +8529,132 @@ private void updateStudyToDraftStatus( .setParameter("studyId", studyId) .executeUpdate(); } + + public String deleteById(String studyId, AuditLogEventRequest auditRequest) { + logger.entry("begin studydeleteById()"); + String message = FdahpStudyDesignerConstants.FAILURE; + Query query = null; + Session session = null; + try { + StudyBo studyBo = getStudy(studyId); + if (studyBo != null && studyBo.getCustomStudyId() != null) { + auditRequest.setStudyId(studyBo.getCustomStudyId()); + if (studyBo.getAppId() != null) { + auditRequest.setAppId(studyBo.getAppId()); + } + } + session = hibernateTemplate.getSessionFactory().openSession(); + Transaction transaction = session.beginTransaction(); + + query = + session + .createSQLQuery(" delete FROM study_page WHERE study_id=:studyId") + .setParameter("studyId", studyId); + query.executeUpdate(); + query = + session + .createSQLQuery(" DELETE from study_permission WHERE study_id=:studyId") + .setParameter("studyId", studyId); + query.executeUpdate(); + query = + session + .createSQLQuery(" DELETE FROM consent WHERE study_id=:studyId") + .setParameter("studyId", studyId); + query.executeUpdate(); + query = + session + .createSQLQuery( + " delete FROM active_task_custom_frequencies WHERE active_task_id IN(SELECT id FROM active_task WHERE study_id in (SELECT id FROM studies WHERE id=:studyId))") + .setParameter("studyId", studyId); + query.executeUpdate(); + query = + session + .createSQLQuery( + " delete FROM active_task_attrtibutes_values WHERE active_task_id IN(SELECT id FROM active_task WHERE study_id in (SELECT id FROM studies WHERE id=:studyId) )") + .setParameter("studyId", studyId); + query.executeUpdate(); + // active_task_frequencies + query = + session + .createSQLQuery( + " delete FROM active_task_frequencies WHERE active_task_id IN (SELECT id FROM active_task WHERE study_id in (SELECT id FROM studies WHERE id=:studyId))") + .setParameter("studyId", studyId); + query.executeUpdate(); + query = + session + .createSQLQuery(" delete FROM active_task WHERE study_id=:studyId") + .setParameter("studyId", studyId); + query.executeUpdate(); + query = + session + .createSQLQuery( + "delete FROM questionnaires_frequencies WHERE questionnaires_id IN (SELECT id FROM questionnaires WHERE study_id in (SELECT id FROM studies WHERE id=:studyId))") + .setParameter("studyId", studyId); + query.executeUpdate(); + query = + session + .createSQLQuery( + " DELETE FROM questionnaires_steps WHERE questionnaires_id IN (SELECT id FROM questionnaires WHERE study_id in (SELECT id FROM studies WHERE id=:studyId))") + .setParameter("studyId", studyId); + query.executeUpdate(); + query = + session + .createSQLQuery(" delete from questionnaires WHERE study_id=:studyId") + .setParameter("studyId", studyId); + query.executeUpdate(); + query = + session + .createSQLQuery("DELETE FROM consent_info WHERE study_id=:studyId") + .setParameter("studyId", studyId); + query.executeUpdate(); + query = + session + .createSQLQuery( + "delete from comprehension_test_response where comprehension_test_question_id in(select id from comprehension_test_question where study_id in (SELECT id FROM studies WHERE id=:studyId))") + .setParameter("studyId", studyId); + query.executeUpdate(); + query = + session + .createSQLQuery("delete from comprehension_test_question WHERE study_id=:studyId") + .setParameter("studyId", studyId); + query.executeUpdate(); + query = + session + .createSQLQuery( + "delete from eligibility_test where eligibility_id in(select id from eligibility where study_id in (SELECT id FROM studies WHERE id=:studyId))") + .setParameter("studyId", studyId); + query.executeUpdate(); + query = + session + .createSQLQuery("delete from eligibility WHERE study_id =:studyId") + .setParameter("studyId", studyId); + query.executeUpdate(); + + query = + session + .createSQLQuery( + "delete FROM resources WHERE study_id in (SELECT id FROM studies WHERE id=:studyId)") + .setParameter("studyId", studyId); + query.executeUpdate(); + query = + session + .createSQLQuery("delete from studies WHERE id =:studyId") + .setParameter("studyId", studyId); + query.executeUpdate(); + + transaction.commit(); + message = FdahpStudyDesignerConstants.SUCCESS; + } catch (Exception e) { + if (null != transaction) { + transaction.rollback(); + } + logger.error("StudyDAOImpl - deleteStudyById() - ERROR", e); + } finally { + if (null != session) { + session.close(); + } + } + logger.exit("deleteStudyById() - Ends"); + return message; + } } diff --git a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/StudyQuestionnaireDAOImpl.java b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/StudyQuestionnaireDAOImpl.java index 1bc4f01cba..58ffae54bf 100644 --- a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/StudyQuestionnaireDAOImpl.java +++ b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/StudyQuestionnaireDAOImpl.java @@ -87,7 +87,7 @@ import org.slf4j.ext.XLogger; import org.slf4j.ext.XLoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.orm.hibernate3.HibernateTemplate; +import org.springframework.orm.hibernate5.HibernateTemplate; import org.springframework.stereotype.Repository; @Repository @@ -933,7 +933,7 @@ public QuestionnaireBo copyStudyQuestionnaireBo( if ((existingQuestionResponseTypeList != null) && !existingQuestionResponseTypeList.isEmpty()) { for (QuestionReponseTypeBo questionResponseTypeBo : existingQuestionResponseTypeList) { - if (questionResponseTypeBo.getOtherDestinationStepId() == null) { + if (StringUtils.isEmpty(questionResponseTypeBo.getOtherDestinationStepId())) { sequenceTypeList.add(null); } else if ((questionResponseTypeBo.getOtherDestinationStepId() != null) && questionResponseTypeBo.getOtherDestinationStepId().equals("0")) { @@ -3495,19 +3495,18 @@ public QuestionnairesStepsBo saveOrUpdateFromQuestionnaireStep( .getType() .equalsIgnoreCase(FdahpStudyDesignerConstants.ACTION_TYPE_SAVE)) { addOrUpdateQuestionnairesStepsBo.setStatus(false); - - query = - session - .createSQLQuery( - "update questionnaires q set q.status=0 where q.id=:questionnaireId ") - .setString( - "questionnaireId", addOrUpdateQuestionnairesStepsBo.getQuestionnairesId()); - query.executeUpdate(); } else if (questionnairesStepsBo .getType() .equalsIgnoreCase(FdahpStudyDesignerConstants.ACTION_TYPE_COMPLETE)) { addOrUpdateQuestionnairesStepsBo.setStatus(true); } + query = + session + .createSQLQuery( + "update questionnaires q set q.status=0 where q.id=:questionnaireId ") + .setString( + "questionnaireId", addOrUpdateQuestionnairesStepsBo.getQuestionnairesId()); + query.executeUpdate(); } int count = 0; // adding the form step to questionnaire for the first time form @@ -3543,8 +3542,7 @@ public QuestionnairesStepsBo saveOrUpdateFromQuestionnaireStep( String updateQuery = "update QuestionnairesStepsBo QSBO set QSBO.destinationStep=:stepId" + " where " - + "QSBO.destinationStep=" - + String.valueOf(0) + + "QSBO.destinationStep='0'" + " and QSBO.sequenceNo=:sequenceNo" + " and QSBO.questionnairesId=:questionnairesId "; session @@ -3642,18 +3640,17 @@ public InstructionsBo saveOrUpdateInstructionsBo( .getType() .equalsIgnoreCase(FdahpStudyDesignerConstants.ACTION_TYPE_SAVE)) { questionnairesStepsBo.setStatus(false); - - query = - session - .createSQLQuery( - "update questionnaires q set q.status=0 where q.id=:questionnairesId ") - .setString("questionnairesId", questionnairesStepsBo.getQuestionnairesId()); - query.executeUpdate(); } else if (instructionsBo .getType() .equalsIgnoreCase(FdahpStudyDesignerConstants.ACTION_TYPE_COMPLETE)) { questionnairesStepsBo.setStatus(true); } + query = + session + .createSQLQuery( + "update questionnaires q set q.status=0 where q.id=:questionnairesId ") + .setString("questionnairesId", questionnairesStepsBo.getQuestionnairesId()); + query.executeUpdate(); } int count = 0; if ((instructionsBo.getQuestionnaireId() != null) @@ -3677,10 +3674,9 @@ public InstructionsBo saveOrUpdateInstructionsBo( String updateQuery = "update QuestionnairesStepsBo QSBO set QSBO.destinationStep=:stepId " + " where " - + "QSBO.destinationStep=" - + 0 + + "QSBO.destinationStep='0'" + " and QSBO.sequenceNo=:sequenceNo" - + " and QSBO.questionnairesId=:questionnairesId "; + + " and QSBO.questionnairesId=:questionnairesId"; session .createQuery(updateQuery) .setString("stepId", questionnairesStepsBo.getStepId()) @@ -4363,19 +4359,18 @@ public QuestionnairesStepsBo saveOrUpdateQuestionStep( .getType() .equalsIgnoreCase(FdahpStudyDesignerConstants.ACTION_TYPE_SAVE)) { addOrUpdateQuestionnairesStepsBo.setStatus(false); - - query = - session - .createSQLQuery( - "update questionnaires q set q.status=0 where q.id=:questionnairesId ") - .setString( - "questionnairesId", addOrUpdateQuestionnairesStepsBo.getQuestionnairesId()); - query.executeUpdate(); } else if (questionnairesStepsBo .getType() .equalsIgnoreCase(FdahpStudyDesignerConstants.ACTION_TYPE_COMPLETE)) { addOrUpdateQuestionnairesStepsBo.setStatus(true); } + query = + session + .createSQLQuery( + "update questionnaires q set q.status=0 where q.id=:questionnairesId ") + .setString( + "questionnairesId", addOrUpdateQuestionnairesStepsBo.getQuestionnairesId()); + query.executeUpdate(); } int count = 0; if (questionnairesStepsBo.getQuestionsBo() != null) { @@ -4701,8 +4696,7 @@ public QuestionnairesStepsBo saveOrUpdateQuestionStep( String updateQuery = "update QuestionnairesStepsBo QSBO set QSBO.destinationStep=:stepId " + " where " - + "QSBO.destinationStep=" - + 0 + + "QSBO.destinationStep='0'" + " and QSBO.sequenceNo=:sequenceNo" + " and QSBO.questionnairesId=:questionnairesId "; session @@ -5047,6 +5041,10 @@ public boolean isAnchorDateExistByQuestionnaire(String questionnaireId) { } catch (Exception e) { logger.error("StudyQuestionnaireDAOImpl - isAnchorDateExistByQuestionnaire() - ERROR ", e); + } finally { + if ((null != session) && session.isOpen()) { + session.close(); + } } logger.exit("isAnchorDateExistByQuestionnaire - Ends"); return isExist; @@ -5951,7 +5949,7 @@ public QuestionnaireBo cloneStudyQuestionnaire( && !existingQuestionResponseSubTypeList.isEmpty()) { for (QuestionResponseSubTypeBo questionResponseSubTypeBo : existingQuestionResponseSubTypeList) { - if (questionResponseSubTypeBo.getDestinationStepId() == null) { + if (StringUtils.isEmpty(questionResponseSubTypeBo.getDestinationStepId())) { sequenceSubTypeList.add(null); } else if ((questionResponseSubTypeBo.getDestinationStepId() != null) && questionResponseSubTypeBo.getDestinationStepId().equals("0")) { @@ -6004,7 +6002,7 @@ public QuestionnaireBo cloneStudyQuestionnaire( if ((existingQuestionResponseTypeList != null) && !existingQuestionResponseTypeList.isEmpty()) { for (QuestionReponseTypeBo questionResponseTypeBo : existingQuestionResponseTypeList) { - if (questionResponseTypeBo.getOtherDestinationStepId() == null) { + if (StringUtils.isEmpty(questionResponseTypeBo.getOtherDestinationStepId())) { sequenceTypeList.add(null); } else if ((questionResponseTypeBo.getOtherDestinationStepId() != null) && questionResponseTypeBo.getOtherDestinationStepId().equals("0")) { diff --git a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/UsersDAO.java b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/UsersDAO.java index a4c9dc72b3..76ad86dc58 100644 --- a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/UsersDAO.java +++ b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/UsersDAO.java @@ -62,4 +62,6 @@ public UserIdAccessLevelInfo addOrUpdateUserDetails( public RoleBO getUserRole(String roleId); public List getUserRoleList(); + + public String deleteByUserId(String userId); } diff --git a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/UsersDAOImpl.java b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/UsersDAOImpl.java index f23f212b77..fae2fc39e5 100644 --- a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/UsersDAOImpl.java +++ b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/UsersDAOImpl.java @@ -47,7 +47,7 @@ import org.slf4j.ext.XLogger; import org.slf4j.ext.XLoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.orm.hibernate3.HibernateTemplate; +import org.springframework.orm.hibernate5.HibernateTemplate; import org.springframework.stereotype.Repository; @Repository @@ -586,7 +586,7 @@ public List getUserList() { userBO.setRoleName(null != obj[4] ? String.valueOf(obj[4]) : ""); userBO.setEnabled(null != obj[5] ? (Boolean) obj[5] : false); userBO.setUserPassword(null != obj[6] ? String.valueOf(obj[6]) : ""); - userBO.setEmailChanged(null != obj[7] ? (Boolean) obj[7] : false); + userBO.setEmailChanged(null != obj[7] ? Byte.toUnsignedInt((Byte) (obj[7])) : 0); userBO.setAccessLevel(null != obj[8] ? String.valueOf(obj[8]) : ""); userBO.setUserFullName(userBO.getFirstName() + " " + userBO.getLastName()); userList.add(userBO); @@ -669,4 +669,46 @@ public List getUserRoleList() { logger.exit("getUserRoleList() - Ends"); return roleBOList; } + + @Override + public String deleteByUserId(String userId) { + logger.entry("begin deleteByUserId()"); + String message = FdahpStudyDesignerConstants.FAILURE; + Query query = null; + Session session = null; + try { + session = hibernateTemplate.getSessionFactory().openSession(); + Transaction transaction = session.beginTransaction(); + + query = + session + .createSQLQuery(" delete from user_permission_mapping where user_id =:userId ") + .setParameter("userId", userId); + query.executeUpdate(); + query = + session + .createSQLQuery(" delete from study_permission where user_id =:userId ") + .setParameter("userId", userId); + query.executeUpdate(); + query = + session + .createSQLQuery(" delete from users where user_id =:userId ") + .setParameter("userId", userId); + query.executeUpdate(); + + transaction.commit(); + message = FdahpStudyDesignerConstants.SUCCESS; + } catch (Exception e) { + if (null != transaction) { + transaction.rollback(); + } + logger.error("UsersDAOImpl - deleteByUserId() - ERROR", e); + } finally { + if (null != session) { + session.close(); + } + } + logger.exit("deleteByUserId() - Ends"); + return message; + } } diff --git a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/scheduler/FDASchedulerService.java b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/scheduler/FDASchedulerService.java index 463b7e192a..c411f90c73 100644 --- a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/scheduler/FDASchedulerService.java +++ b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/scheduler/FDASchedulerService.java @@ -74,7 +74,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.http.HttpStatus; -import org.springframework.orm.hibernate3.HibernateTemplate; +import org.springframework.orm.hibernate5.HibernateTemplate; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; @@ -300,5 +300,8 @@ private void updateNotification(PushNotificationBean pushNotificationBean) { .executeUpdate(); } trans.commit(); + if (session.isOpen()) { + session.close(); + } } } diff --git a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/scheduler/MoveCloudStorageSchedulerService.java b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/scheduler/MoveCloudStorageSchedulerService.java index 05ee9f3cbc..90c25833c7 100644 --- a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/scheduler/MoveCloudStorageSchedulerService.java +++ b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/scheduler/MoveCloudStorageSchedulerService.java @@ -30,10 +30,11 @@ import org.apache.log4j.Logger; import org.hibernate.Session; import org.hibernate.SessionFactory; +import org.hibernate.Transaction; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; -import org.springframework.orm.hibernate3.HibernateTemplate; +import org.springframework.orm.hibernate5.HibernateTemplate; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; @@ -68,12 +69,16 @@ public void setSessionFactory(SessionFactory sessionFactory) { initialDelayString = "${move.cloud.storage.initial.delay.ms}") public void moveCloudStorageStructure() { logger.info("moveCloudStorageStructure - Starts"); + Session session = null; + Transaction transaction = null; try { if (moveCloudStorageSchedulerEnable) { - Session session = hibernateTemplate.getSessionFactory().openSession(); + session = hibernateTemplate.getSessionFactory().openSession(); + transaction = session.beginTransaction(); + // LIMIT = 10 add order by SBO.createdOn desc List studyBoList = session @@ -98,9 +103,17 @@ public void moveCloudStorageStructure() { .executeUpdate(); } } + transaction.commit(); } catch (Exception e) { + if (null != transaction) { + transaction.rollback(); + } logger.error("moveCloudStorageStructure - ERROR", e.getCause()); e.printStackTrace(); + } finally { + if ((null != session) && session.isOpen()) { + session.close(); + } } logger.info("moveCloudStorageStructure - Ends"); } diff --git a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/service/LoginServiceImpl.java b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/service/LoginServiceImpl.java index ac7b5ebc6c..0069ca6f0c 100644 --- a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/service/LoginServiceImpl.java +++ b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/service/LoginServiceImpl.java @@ -414,7 +414,7 @@ public String sendPasswordResetLinkToMail( auditRequest.setUserId(String.valueOf(userdetails.getUserId())); auditLogEventHelper.logEvent(PASSWORD_HELP_REQUESTED, auditRequest); } - if ("".equals(type) && userdetails.getEmailChanged()) { + if ("".equals(type) && userdetails.getEmailChanged().equals(1)) { userdetails = null; } UserAttemptsBo userAttempts = loginDAO.getUserAttempts(email); @@ -591,7 +591,7 @@ public String validateEmailChangeVerification(String securityToken) { try { userBO = loginDAO.getUserBySecurityToken(securityToken); if (null != userBO) { - userBO.setEmailChanged(false); + userBO.setEmailChanged(0); userBO.setTokenUsed(true); result = loginDAO.updateUser(userBO); } @@ -614,7 +614,7 @@ public void sendLockedAccountPasswordResetLinkToMail( Integer.parseInt(propMap.get("accountlocked.resetLink.expiration.in.hour")); String passwordResetToken = RandomStringUtils.randomAlphanumeric(10); UserBO userdetails = loginDAO.getValidUserByEmail(email); - if (null != userdetails && !userdetails.getEmailChanged()) { + if (null != userdetails && userdetails.getEmailChanged().equals(0)) { userdetails.setSecurityToken(passwordResetToken); userdetails.setTokenUsed(false); userdetails.setTokenExpiryDate( diff --git a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/service/StudyActiveTasksServiceImpl.java b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/service/StudyActiveTasksServiceImpl.java index 955033585e..0f00794c52 100644 --- a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/service/StudyActiveTasksServiceImpl.java +++ b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/service/StudyActiveTasksServiceImpl.java @@ -446,7 +446,7 @@ public ActiveTaskBo saveOrUpdateActiveTask(ActiveTaskBo activeTaskBo, String cus if (activeTaskBo .getFrequency() .equalsIgnoreCase(FdahpStudyDesignerConstants.FREQUENCY_TYPE_ONE_TIME)) { - if (!activeTaskBo.getActiveTaskFrequenciesBo().getIsStudyLifeTime()) { + if (!activeTaskBo.getActiveTaskFrequenciesBo().getIsLaunchStudy()) { if (StringUtils.isNotBlank(activeTaskBo.getActiveTaskLifetimeStart()) && !("NA").equalsIgnoreCase(activeTaskBo.getActiveTaskLifetimeStart())) { addActiveTaskeBo.setActiveTaskLifetimeStart( @@ -457,7 +457,9 @@ public ActiveTaskBo saveOrUpdateActiveTask(ActiveTaskBo activeTaskBo, String cus } else { addActiveTaskeBo.setActiveTaskLifetimeStart(null); } + } + if (!activeTaskBo.getActiveTaskFrequenciesBo().getIsStudyLifeTime()) { if (StringUtils.isNotBlank(activeTaskBo.getActiveTaskLifetimeEnd()) && !("NA").equalsIgnoreCase(activeTaskBo.getActiveTaskLifetimeEnd())) { addActiveTaskeBo.setActiveTaskLifetimeEnd( diff --git a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/service/StudyExportImportService.java b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/service/StudyExportImportService.java index 4850ff6bf3..c4932292fe 100644 --- a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/service/StudyExportImportService.java +++ b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/service/StudyExportImportService.java @@ -90,7 +90,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DuplicateKeyException; import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.orm.hibernate3.HibernateTemplate; +import org.springframework.orm.hibernate5.HibernateTemplate; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; @@ -445,7 +445,8 @@ private void prepareInsertSqlQueriesForQuestionnaires( addQuestionsResponseSubTypeInsertSql( responseList, insertSqlStatements, customIdsMap, questionMap); - addQuestionsResponseTypeInsertSql(questionResponseTypeBo, insertSqlStatements, customIdsMap); + addQuestionsResponseTypeInsertSql( + questionResponseTypeBo, insertSqlStatements, customIdsMap, questionMap); addQuestionnairesStepsListInsertSql( questionnairesStepsList, insertSqlStatements, customIdsMap, questionMap); @@ -544,6 +545,7 @@ private void addComprehensionTestResponseBoListInsertSql( public String saveFileToCloudStorage(StudyBo studyBo, List insertSqlStatements) { StringBuilder content = new StringBuilder(); String message = FdahpStudyDesignerConstants.FAILURE; + Session session = null; try { for (String insertSqlStatement : insertSqlStatements) { if (StringUtils.isNotEmpty(insertSqlStatement)) { @@ -555,7 +557,7 @@ public String saveFileToCloudStorage(StudyBo studyBo, List insertSqlStat byte[] bytes = content.toString().getBytes(); Map map = FdahpStudyDesignerUtil.getAppProperties(); - Session session = hibernateTemplate.getSessionFactory().openSession(); + session = hibernateTemplate.getSessionFactory().openSession(); studyBo.setExportSqlByte(bytes); study.getResourcesFromStorage(session, studyBo); @@ -574,6 +576,10 @@ public String saveFileToCloudStorage(StudyBo studyBo, List insertSqlStat } catch (Exception e) { logger.error("Save file to cloud storage failed", e); return e.getMessage(); + } finally { + if ((null != session) && session.isOpen()) { + session.close(); + } } return message; } @@ -653,7 +659,8 @@ private void addActiveTaskCustomScheduleBoInsertSqlQuery( private void addQuestionsResponseTypeInsertSql( List questionResponseTypeBoList, List insertSqlStatements, - Map customIdsMap) + Map customIdsMap, + Map questionMap) throws Exception { if (CollectionUtils.isEmpty(questionResponseTypeBoList)) { @@ -688,7 +695,12 @@ private void addQuestionsResponseTypeInsertSql( questionResponseTypeBo.getMinValue(), questionResponseTypeBo.getMultipleLines(), questionResponseTypeBo.getOtherDescription(), - questionResponseTypeBo.getOtherDestinationStepId(), + StringUtils.isNotEmpty(questionResponseTypeBo.getOtherDestinationStepId()) + && questionResponseTypeBo + .getOtherDestinationStepId() + .equals(String.valueOf(0)) + ? String.valueOf(0) + : questionMap.get(questionResponseTypeBo.getOtherDestinationStepId()), questionResponseTypeBo.getOtherExclusive(), questionResponseTypeBo.getOtherIncludeText(), questionResponseTypeBo.getOtherParticipantFill(), diff --git a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/service/StudyQuestionnaireServiceImpl.java b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/service/StudyQuestionnaireServiceImpl.java index df3ecefb7d..0bba2b8afe 100644 --- a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/service/StudyQuestionnaireServiceImpl.java +++ b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/service/StudyQuestionnaireServiceImpl.java @@ -871,6 +871,8 @@ public QuestionnaireBo saveOrUpdateQuestionnaire( questionnaireBo.getStudyLifetimeStart(), FdahpStudyDesignerConstants.UI_SDF_DATE, FdahpStudyDesignerConstants.DB_SDF_DATE)); + } else { + addQuestionnaireBo.setStudyLifetimeStart(null); } } if (!questionnaireBo.getQuestionnairesFrequenciesBo().getIsStudyLifeTime()) { diff --git a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/service/StudyService.java b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/service/StudyService.java index 2fbdfd9ec0..15694fd9e6 100644 --- a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/service/StudyService.java +++ b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/service/StudyService.java @@ -212,4 +212,6 @@ public StudyBo replicateStudy( String copyVersion, SessionObject sessionObject, AuditLogEventRequest auditRequest); + + public String deleteById(String studyId, AuditLogEventRequest auditRequest); } diff --git a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/service/StudyServiceImpl.java b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/service/StudyServiceImpl.java index 6193107b11..c177f464df 100644 --- a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/service/StudyServiceImpl.java +++ b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/service/StudyServiceImpl.java @@ -1775,4 +1775,16 @@ public List getConsentList(String customStudyId) { logger.info("StudyServiceImpl - getConsentList() - Ends"); return consentBoList; } + + public String deleteById(String studyId, AuditLogEventRequest auditRequest) { + logger.entry("begin studydeleteById()"); + String message = FdahpStudyDesignerConstants.FAILURE; + try { + message = studyDAO.deleteById(studyId, auditRequest); + } catch (Exception e) { + logger.error("StudyServiceImpl - deleteStudyById() - ERROR", e); + } + logger.exit("deleteStudyByUserId() - Ends"); + return message; + } } diff --git a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/service/UsersService.java b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/service/UsersService.java index 0a0ec80ece..8bcf96ece5 100644 --- a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/service/UsersService.java +++ b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/service/UsersService.java @@ -65,4 +65,6 @@ public String addOrUpdateUserDetails( public RoleBO getUserRole(String roleId); public List getUserRoleList(); + + public String deleteByUserId(String userId); } diff --git a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/service/UsersServiceImpl.java b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/service/UsersServiceImpl.java index c7bdff091f..906a99424c 100644 --- a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/service/UsersServiceImpl.java +++ b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/service/UsersServiceImpl.java @@ -170,7 +170,7 @@ public String addOrUpdateUserDetails( userBO2.setLastName(null != userBO.getLastName() ? userBO.getLastName().trim() : ""); if (!userBO2.getUserEmail().equals(userBO.getUserEmail())) { emailIdChange = true; - userBO2.setEmailChanged(true); + userBO2.setEmailChanged(1); } userBO2.setUserEmail( (null != userBO.getUserEmail() ? userBO.getUserEmail().trim() : "").toLowerCase()); @@ -343,4 +343,17 @@ public List getUserRoleList() { logger.exit("getUserRoleList() - Ends"); return roleBOList; } + + @Override + public String deleteByUserId(String userId) { + logger.entry("begin deleteUserByUserId()"); + String message = FdahpStudyDesignerConstants.FAILURE; + try { + message = usersDAO.deleteByUserId(userId); + } catch (Exception e) { + logger.error("UsersServiceImpl - deleteUserByUserId() - ERROR", e); + } + logger.exit("deleteUserByUserId() - Ends"); + return message; + } } diff --git a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/util/FdahpStudyDesignerPreHandlerInterceptor.java b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/util/FdahpStudyDesignerPreHandlerInterceptor.java index 9ee7f3b1f3..77b5b23f50 100644 --- a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/util/FdahpStudyDesignerPreHandlerInterceptor.java +++ b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/util/FdahpStudyDesignerPreHandlerInterceptor.java @@ -135,7 +135,7 @@ public boolean preHandle( response.sendRedirect(sessionOutUrl + "?msg=" + timeoutMsg); logger.info("FdahpStudyDesignerPreHandlerInterceptor -preHandle(): force logout"); return false; - } else if (user.getEmailChanged()) { + } else if (user.getEmailChanged().equals(1)) { response.sendRedirect( sessionOutUrl + "?msg=" + propMap.get("email.not.varified.error")); logger.info("FdahpStudyDesignerPreHandlerInterceptor -preHandle(): email change"); diff --git a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/util/FdahpStudyDesignerUtil.java b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/util/FdahpStudyDesignerUtil.java index 4fcf895430..396da21f73 100644 --- a/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/util/FdahpStudyDesignerUtil.java +++ b/study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/util/FdahpStudyDesignerUtil.java @@ -719,11 +719,28 @@ public static String getRegExpression( regEx += "^A-Za-z0-9"; } if ((exceptCharacters != null) && StringUtils.isNotEmpty(exceptCharacters)) { - String[] exceptChar = exceptCharacters.split("\\|"); + String[] exceptChar = exceptCharacters.split(""); StringBuilder except = new StringBuilder(); + String escapeSplChar = ""; for (String element : exceptChar) { - except.append("^(?!.*" + element.trim().replace(" ", "") + ")"); + + for (int i = 0; i < element.length(); i++) { + if (!Character.isDigit(element.charAt(i)) + && !Character.isLetter(element.charAt(i)) + && !Character.isWhitespace(element.charAt(i))) { + if (element.charAt(i) == '|') { + escapeSplChar = escapeSplChar + element.charAt(i); + } else { + escapeSplChar = escapeSplChar + "\\" + element.charAt(i); + } + + } else { + escapeSplChar = escapeSplChar + "" + element.charAt(i); + } + } } + except.append("^(?!.*" + escapeSplChar.trim().replace(" ", "") + ")"); + regEx = except + regEx + "]+"; } else { regEx += "]+"; @@ -731,7 +748,30 @@ public static String getRegExpression( } else { if (validCharacters.equalsIgnoreCase(FdahpStudyDesignerConstants.ALLCHARACTERS)) { if ((exceptCharacters != null) && StringUtils.isNotEmpty(exceptCharacters)) { - regEx += "^(?:" + exceptCharacters.trim().replace(" ", "") + ")$"; + String[] exceptChar = exceptCharacters.split(""); + StringBuilder except = new StringBuilder(); + String escapeSplChar = ""; + for (String element : exceptChar) { + + for (int i = 0; i < element.length(); i++) { + + if (!Character.isDigit(element.charAt(i)) + && !Character.isLetter(element.charAt(i)) + && !Character.isWhitespace(element.charAt(i))) { + if (element.charAt(i) == '|') { + escapeSplChar = escapeSplChar + element.charAt(i); + } else { + escapeSplChar = escapeSplChar + "\\" + element.charAt(i); + } + + } else { + escapeSplChar = escapeSplChar + "" + element.charAt(i); + } + } + } + except.append("^(?:" + escapeSplChar.trim().replace(" ", "") + ")$"); + + regEx = except + regEx; } else { regEx += "[.]"; } @@ -1187,6 +1227,7 @@ public static Object[] unzip(String fileZip, String customId) { bf = new BufferedReader(new InputStreamReader(zip.getInputStream(entry))); obj = new Object[] {entry.getName(), bf}; } else if (FilenameUtils.getExtension(entry.getName()).equalsIgnoreCase("jpg") + || FilenameUtils.getExtension(entry.getName()).equalsIgnoreCase("jpeg") || FilenameUtils.getExtension(entry.getName()).equalsIgnoreCase("png")) { byte[] imageArray = getImage(zip.getInputStream(entry)); CustomMultipartFile customMultipartFile = diff --git a/study-builder/fdahpStudyDesigner/src/main/resources/application.properties b/study-builder/fdahpStudyDesigner/src/main/resources/application.properties index fed6e60afd..19b25ad8cc 100644 --- a/study-builder/fdahpStudyDesigner/src/main/resources/application.properties +++ b/study-builder/fdahpStudyDesigner/src/main/resources/application.properties @@ -56,16 +56,16 @@ security.oauth2.client.client-id=${CLIENT_ID} # SecretKey security.oauth2.client.client-secret=${SECRET_KEY} -# application version -applicationVersion=1.0 -release.version=2.0.9 - security.oauth2.token_endpoint=${SCIM_AUTH_URL}/oauth2/token security.oauth2.client.redirect-uri=${SCIM_AUTH_URL}/callback cloud.bucket.name.export.studies=${EXPORT_STUDIES_BUCKET_NAME} cloud.bucket.name=${GCP_BUCKET_NAME} +# application version +applicationVersion=1.0 +release.version=2.0.10 + # Update the organization name as desired orgName=${ORG_NAME} @@ -92,4 +92,5 @@ usermanagementServerDeactivateapp=${PARTICIPANT_USER_DATASTORE_URL}/apps/{custom userRegistrationServerAppMetadataUrl=${PARTICIPANT_USER_DATASTORE_URL}/apps/appmetadata +spring.jpa.hibernate.naming.strategy=org.hibernate.cfg.ImprovedNamingStrategy diff --git a/study-builder/fdahpStudyDesigner/src/main/resources/messageResource.properties b/study-builder/fdahpStudyDesigner/src/main/resources/messageResource.properties index c103dae860..8c6764baa0 100644 --- a/study-builder/fdahpStudyDesigner/src/main/resources/messageResource.properties +++ b/study-builder/fdahpStudyDesigner/src/main/resources/messageResource.properties @@ -82,7 +82,7 @@ update.eligibilitytest.success.message = Eligibility question updated save.comprehensiontest.success.message=Comprehension question added update.comprehensiontest.success.message=Comprehension question updated - +delete.study.success.message=Study deleted successfully # App-wide Notifications messages save.notification.success.message=Notification added update.notification.success.message=Notification updated @@ -104,6 +104,7 @@ update.profile.error.message=Sorry, an error occurred and your profile could not # User message add.user.success.message=Admin record added update.user.success.message=Admin details updated +delete.user.success.message=Admin details deleted addUpdate.user.error.message=Sorry, an error occurred and your request could not be processed. Please try again. email.not.varified.error= Please verify your email to sign-in diff --git a/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/ApplicationContext.xml b/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/ApplicationContext.xml index 5420e8aa5b..5a7dde037e 100644 --- a/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/ApplicationContext.xml +++ b/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/ApplicationContext.xml @@ -47,20 +47,20 @@ + value="com.mysql.cj.jdbc.Driver"/> + class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> - org.hibernate.dialect.MySQLDialect + org.hibernate.dialect.MySQL57Dialect true update false diff --git a/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/spring-security.xml b/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/spring-security.xml index d8afd1f43c..c4207184b3 100644 --- a/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/spring-security.xml +++ b/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/spring-security.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/security - http://www.springframework.org/schema/security/spring-security-3.2.xsd"> + http://www.springframework.org/schema/security/spring-security-5.6.xsd"> - diff --git a/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/spring-servlet.xml b/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/spring-servlet.xml index 684a551d7d..d961dc9c0d 100644 --- a/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/spring-servlet.xml +++ b/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/spring-servlet.xml @@ -32,13 +32,13 @@ class="org.springframework.web.servlet.view.UrlBasedViewResolver"> - org.springframework.web.servlet.view.tiles2.TilesView + org.springframework.web.servlet.view.tiles3.TilesView + class="org.springframework.web.servlet.view.tiles3.TilesConfigurer"> /WEB-INF/tiles-defs.xml diff --git a/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/templates/layout.jsp b/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/templates/layout.jsp index f5dd37f26f..3e9861c8ff 100644 --- a/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/templates/layout.jsp +++ b/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/templates/layout.jsp @@ -90,6 +90,8 @@ + + - +
@@ -204,5 +207,100 @@ return strTime; } + + + + + + + + + + diff --git a/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/view/apps/appActionListPage.jsp b/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/view/apps/appActionListPage.jsp index 9f2133e3b5..6b639432db 100644 --- a/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/view/apps/appActionListPage.jsp +++ b/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/view/apps/appActionListPage.jsp @@ -17,9 +17,7 @@ button#exportId { margin-right: 7px; } -.modal-footer { - border-top: none !important; -} + .modal-header { border-bottom: none !important; } diff --git a/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/view/apps/appList.jsp b/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/view/apps/appList.jsp index 23aa293a06..a5747dc880 100644 --- a/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/view/apps/appList.jsp +++ b/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/view/apps/appList.jsp @@ -17,7 +17,9 @@ #app_Wide_table_list tr th { padding-left: 20px !important; } - +span.sprites_icon.mr-lg.viewStudiesClass { + cursor: pointer; +} @@ -86,7 +88,7 @@ viewStudiesClass viewStudiesClass - " data-toggle="tooltip" data-placement="top" title="${app.studiesCount} associated studies" appId="${app.customAppId}"> + " data-toggle="tooltip" data-placement="top" title="${app.studiesCount} associated study(ies)" appId="${app.customAppId}"> cursor-none " src="../images/icons/file-list-line.svg" > diff --git a/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/view/errorPage.jsp b/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/view/errorPage.jsp index 04b3a149d1..93921d4bee 100644 --- a/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/view/errorPage.jsp +++ b/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/view/errorPage.jsp @@ -145,7 +145,7 @@ html, body { Page not found here - diff --git a/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/view/fdaAdminDashBoardPage.jsp b/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/view/fdaAdminDashBoardPage.jsp index 4c040f1a36..b3e5f6030b 100644 --- a/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/view/fdaAdminDashBoardPage.jsp +++ b/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/view/fdaAdminDashBoardPage.jsp @@ -51,14 +51,14 @@ @@ -84,21 +84,20 @@
+ autocomplete="off" style="margin-top: 0px !important;margin-bottom: 0px !important;">
${errMsg}
${sucMsg}

Create new password

-
+
- - +
@@ -115,11 +114,7 @@
-

- - Your account has been - deactivated. -

+
diff --git a/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/view/users/addOrEditUserPage.jsp b/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/view/users/addOrEditUserPage.jsp index c17adb8419..147a68a477 100644 --- a/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/view/users/addOrEditUserPage.jsp +++ b/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/view/users/addOrEditUserPage.jsp @@ -23,6 +23,20 @@ border-radius: 5px; cursor: pointer; } +button#deleteUser { + background: #cf0036 !important; + border-color: #cf0036 !important; + color: #fff; + padding: 4px 8px; + text-align: center; + margin-left: 9px; +} + + +input::-webkit-calendar-picker-indicator { + display: none !important; +} + @@ -51,7 +65,7 @@
+ test="${not empty userBO.userPassword && userBO.enabled && userBO.emailChanged eq '0'}">
Account status: @@ -98,7 +112,7 @@
- +
Account status:
+ test="${actionPage eq 'EDIT_PAGE' && not empty userBO.userPassword && userBO.emailChanged eq '0'}">
-
+
checked disabled + test="${empty userBO.userPassword || actionPage eq 'VIEW_PAGE' || userBO.emailChanged eq '1'}">disabled onclick="activateOrDeactivateUser('${userBO.userId}');"> @@ -466,6 +480,11 @@
+ + +
+ +
@@ -543,6 +562,9 @@ $('#roleId').on('change', function () { var element = $(this).find('option:selected').text(); + if(element != 'Superadmin' ){ + $('#enforcePasswordId').hide(); + }else $('#enforcePasswordId').show(); setStudySettingByRole(element); }); @@ -773,14 +795,16 @@ $('#inlineCheckbox6').on('click', function () { if ($(this).prop("checked") == true) { $(this).val(1); - } else if ($(this).prop("checked") == false) { + } else if ($(this).prop("checked") == false) { $(this).val(''); } + }); // Adding selected study items $(".study-addbtn").click(function () { - + var noSelected = $('#multiple :selected').length; + if(noSelected != 0 ){ $(".study-list .bootstrap-select .dropdown-menu ul.dropdown-menu li.selected").hide(); $(".study-list .bootstrap-select .dropdown-menu ul.dropdown-menu li").each(function () { @@ -788,7 +812,7 @@ $(this).remove(); } }); - + if ($('#inlineCheckbox4').prop("checked") == true) { $('#multiple :selected').each(function (i, sel) { var selVal = $(sel).val(); var selTxt = DOMPurify.sanitize($(sel).text()); @@ -802,7 +826,7 @@ + "" + " " - + "" + + "" + "" + "" @@ -813,17 +837,29 @@ $('.study-selected').append(existingStudyDiv); }); - + } else if ($('#inlineCheckbox4').prop("checked") == false) { + $(this).val(''); + + } + if ($(".changeView").find('.dropdown-menu').is(":hidden")){ + $('.dropdown-toggle').dropdown('toggle'); + var show_elements_count1 = $( ".study-list .dropdown-menu ul.dropdown-menu.inner" ).find( ":visible" ).length; + } + else var show_elements_count2 = $( ".study-list .dropdown-menu ul.dropdown-menu.inner" ).find( ":visible" ).length; + //var show_elements_count = $( ".study-list .dropdown-menu ul.dropdown-menu.inner" ).find( ":visible" ).length; $(".selectpicker").selectpicker('deselectAll'); var tot_items = $(".study-list .bootstrap-select .dropdown-menu ul.dropdown-menu li").length; var count = $(".study-selected-item").length; - if (count == tot_items) { - $(".study-list .bootstrap-select .dropdown-menu ul.dropdown-menu li").hide() - $(".study-list .bootstrap-select .dropdown-menu ul.dropdown-menu").append( - $("
  • ").attr("class","text-center").text("- All items are already selected -")); - } - + + if (show_elements_count1 == 0 || show_elements_count2 == 0) { + $(".study-list .bootstrap-select .dropdown-menu ul.dropdown-menu li").hide() + $(".study-list .bootstrap-select .dropdown-menu ul.dropdown-menu").append( + $("
  • ").attr("class","text-center").text("- All items are already selected -")); + } + + } + }); @@ -838,7 +874,8 @@ $(this).remove(); } }); - + if ($('#inlineCheckboxApp').prop("checked") == true) { + $('#multipleApps :selected').each(function (i, sel) { var selVal = $(sel).val(); var selTxt = DOMPurify.sanitize($(sel).text()); @@ -852,7 +889,7 @@ + "" + " " - + "" + + "
    " + "" + "" @@ -863,6 +900,11 @@ $('.app-selected').append(existingAppDiv); }); + } else if ($('#inlineCheckboxApp').prop("checked") == false) { + $(this).val(''); + } + + $(".selectpicker").selectpicker('deselectAll'); var tot_items = $(".app-list .bootstrap-select .dropdown-menu ul.dropdown-menu li").length; @@ -899,6 +941,7 @@ }); $('.addUpdate').on('click', function () { + var enforce=0; var email = $('#emailId').val(); var oldEmail = $('#emailId').attr('oldVal'); var isEmail; @@ -925,6 +968,7 @@ $('#emailId').parent().removeClass("has-danger").removeClass("has-error"); $('#emailId').parent().find(".help-block").empty(); saveUser(); + enforce=enforce+1; } else { $("body").removeClass("loading"); isFromValid($('.addUpdate').parents('form')); @@ -942,7 +986,11 @@ $('#emailId').parent().removeClass("has-danger").removeClass("has-error"); $('#emailId').parent().find(".help-block").empty(); saveUser(); + enforce=enforce+1; } + if(enforce==2){ + $('#enforcePasswordId').show(); + } }); @@ -1193,6 +1241,47 @@ setTimeout(hideDisplayMessage, 10000); } + function validateAdminStatus(obj) { + var buttonText = obj.id; + var messageText = ""; + if (buttonText) { + if (buttonText == 'deleteUser') { + messageText = "Are you sure you want to delete this admin?"; + bootbox.confirm({ + closeButton: false, + message: messageText, + buttons: { + 'cancel': { + label: 'Cancel', + }, + 'confirm': { + label: 'OK', + }, + }, + callback: function (result) { + if (result) { + deleteUserAdmin(); + } + } + });}}} + +function deleteUserAdmin(){ + var form = document.createElement('form'); + form.method = 'post'; + var input = document.createElement('input'); + input.type = 'hidden'; + input.name = 'userId'; + input.value = '${userBO.userId}'; + form.appendChild(input); + input = document.createElement('input'); + input.type = 'hidden'; + input.name = '${_csrf.parameterName}'; + input.value = '${_csrf.token}'; + form.appendChild(input); + form.action = '/studybuilder/adminUsersView/deleteUser.do'; + document.body.appendChild(form); + form.submit(); + } function addUser(){ var selectedStudies = ""; var permissionValues = ""; diff --git a/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/view/users/userListPage.jsp b/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/view/users/userListPage.jsp index 649a099f77..8e8d42eef7 100644 --- a/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/view/users/userListPage.jsp +++ b/study-builder/fdahpStudyDesigner/src/main/webapp/WEB-INF/view/users/userListPage.jsp @@ -118,17 +118,17 @@ title="Account status: Invitation sent, pending activation" title="Account status: Pending verification" + test="${user.emailChanged eq '1'}">title="Account status: Pending verification"
    title="Account status: Active" + test="${user.emailChanged eq '0' && not empty user.userPassword && user.enabled}">title="Account status: Active"
    title="Account status: Deactivated"> + test="${user.emailChanged eq '0' && not empty user.userPassword && not user.enabled}">title="Account status: Deactivated"> checked onchange="activateOrDeactivateUser('${user.userId}')" disabled> + test="${empty user.userPassword || user.emailChanged eq '1'}">disabled> diff --git a/study-builder/fdahpStudyDesigner/src/main/webapp/css/style.css b/study-builder/fdahpStudyDesigner/src/main/webapp/css/style.css index 6c7a36e5ca..219024a874 100644 --- a/study-builder/fdahpStudyDesigner/src/main/webapp/css/style.css +++ b/study-builder/fdahpStudyDesigner/src/main/webapp/css/style.css @@ -530,10 +530,11 @@ div.mce-edit-area { margin: 0 auto; text-align: center; position: absolute; - top: 12%; - bottom: 0; - left: 0; - right: 0; + top: 50% !important; + left: 50% !important; + transform: translate(-50%,-50%) !important; + margin-top: 0px !important; + margin-bottom: 0px !important; } .left-content-container ul { @@ -2646,7 +2647,10 @@ a:focus { #alignCenter { position: absolute; - top: 0px; + margin-top: 0 !important; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); } @@ -2750,4 +2754,8 @@ width:100% !important; .changeView div.dropdown-menu ul.dropdown-menu > li > a { padding: 8px 0px 8px 20px !important; } - \ No newline at end of file + + .note-icon-menu-check:before { + content: "\ea21"; + visibility: hidden !important; +} \ No newline at end of file diff --git a/study-builder/fdahpStudyDesigner/src/main/webapp/js/summernote-bs4.js b/study-builder/fdahpStudyDesigner/src/main/webapp/js/summernote-bs4.js new file mode 100644 index 0000000000..cdb2cccdc5 --- /dev/null +++ b/study-builder/fdahpStudyDesigner/src/main/webapp/js/summernote-bs4.js @@ -0,0 +1,7285 @@ +/** + * Super simple wysiwyg editor v0.8.9 + * https://summernote.org + * + * Copyright 2013- Alan Hong. and other contributors + * summernote may be freely distributed under the MIT license. + * + * Date: 2017-12-25T06:39Z + */ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')) : + typeof define === 'function' && define.amd ? define(['jquery'], factory) : + (factory(global.jQuery)); +}(this, (function ($$1) { 'use strict'; + +$$1 = $$1 && $$1.hasOwnProperty('default') ? $$1['default'] : $$1; + +var Renderer = /** @class */ (function () { + function Renderer(markup, children, options, callback) { + this.markup = markup; + this.children = children; + this.options = options; + this.callback = callback; + } + Renderer.prototype.render = function ($parent) { + var $node = $$1(this.markup); + if (this.options && this.options.contents) { + $node.html(this.options.contents); + } + if (this.options && this.options.className) { + $node.addClass(this.options.className); + } + if (this.options && this.options.data) { + $$1.each(this.options.data, function (k, v) { + $node.attr('data-' + k, v); + }); + } + if (this.options && this.options.click) { + $node.on('click', this.options.click); + } + if (this.children) { + var $container_1 = $node.find('.note-children-container'); + this.children.forEach(function (child) { + child.render($container_1.length ? $container_1 : $node); + }); + } + if (this.callback) { + this.callback($node, this.options); + } + if (this.options && this.options.callback) { + this.options.callback($node); + } + if ($parent) { + $parent.append($node); + } + return $node; + }; + return Renderer; +}()); +var renderer = { + create: function (markup, callback) { + return function () { + var options = typeof arguments[1] === 'object' ? arguments[1] : arguments[0]; + var children = $$1.isArray(arguments[0]) ? arguments[0] : []; + if (options && options.children) { + children = options.children; + } + return new Renderer(markup, children, options, callback); + }; + } +}; + +var editor = renderer.create('
    '); +var toolbar = renderer.create('
    '); +var editingArea = renderer.create('
    '); +var codable = renderer.create('