├── .eslintrc.js
├── .github
└── workflows
│ └── npm.yml
├── .gitignore
├── .npmignore
├── CHANGELOG.md
├── LICENSE
├── README.md
├── app.plugin.js
├── example
├── .gitignore
├── App.tsx
├── app.json
├── assets
│ ├── adaptive-icon.png
│ ├── favicon.png
│ ├── icon.png
│ └── splash.png
├── babel.config.js
├── index.js
├── ios
│ ├── .gitignore
│ ├── .xcode.env
│ ├── Podfile
│ ├── Podfile.lock
│ ├── Podfile.properties.json
│ ├── exposhazamkitexample.xcodeproj
│ │ ├── project.pbxproj
│ │ └── xcshareddata
│ │ │ └── xcschemes
│ │ │ └── exposhazamkitexample.xcscheme
│ ├── exposhazamkitexample.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── exposhazamkitexample
│ │ ├── AppDelegate.h
│ │ ├── AppDelegate.mm
│ │ ├── Images.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ ├── App-Icon-1024x1024@1x.png
│ │ │ └── Contents.json
│ │ ├── Contents.json
│ │ ├── SplashScreen.imageset
│ │ │ ├── Contents.json
│ │ │ └── image.png
│ │ └── SplashScreenBackground.imageset
│ │ │ ├── Contents.json
│ │ │ └── image.png
│ │ ├── Info.plist
│ │ ├── SplashScreen.storyboard
│ │ ├── Supporting
│ │ └── Expo.plist
│ │ ├── exposhazamkitexample-Bridging-Header.h
│ │ ├── exposhazamkitexample.entitlements
│ │ ├── main.m
│ │ └── noop-file.swift
├── metro.config.js
├── package-lock.json
├── package.json
└── tsconfig.json
├── expo-module.config.json
├── ios
├── MatchedItem.swift
├── ShazamDelegate.swift
├── ShazamExceptions.swift
├── ShazamKitModule.podspec
└── ShazamKitModule.swift
├── package-lock.json
├── package.json
├── plugin
├── src
│ └── withShazamKit.ts
└── tsconfig.json
├── src
├── ExpoShazamKit.ts
├── ExpoShazamKit.types.ts
└── index.ts
└── tsconfig.json
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ["universe/native"],
4 | ignorePatterns: ["build"],
5 | };
6 |
--------------------------------------------------------------------------------
/.github/workflows/npm.yml:
--------------------------------------------------------------------------------
1 | name: Publish package
2 |
3 | on:
4 | release:
5 | types: [published]
6 |
7 | jobs:
8 | build:
9 | runs-on: ubuntu-latest
10 | steps:
11 | - uses: actions/checkout@v3
12 | - uses: actions/setup-node@v3
13 | with:
14 | node-version: "16.x"
15 | registry-url: "https://registry.npmjs.org"
16 | - run: yarn install
17 | - run: yarn build
18 | - run: npm publish
19 | env:
20 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
21 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # OSX
2 | #
3 | .DS_Store
4 |
5 | # VSCode
6 | .vscode/
7 | jsconfig.json
8 |
9 | # Xcode
10 | #
11 | build/
12 | *.pbxuser
13 | !default.pbxuser
14 | *.mode1v3
15 | !default.mode1v3
16 | *.mode2v3
17 | !default.mode2v3
18 | *.perspectivev3
19 | !default.perspectivev3
20 | xcuserdata
21 | *.xccheckout
22 | *.moved-aside
23 | DerivedData
24 | *.hmap
25 | *.ipa
26 | *.xcuserstate
27 | project.xcworkspace
28 |
29 | # Android/IJ
30 | #
31 | .classpath
32 | .cxx
33 | .gradle
34 | .idea
35 | .project
36 | .settings
37 | local.properties
38 | android.iml
39 |
40 | # Cocoapods
41 | #
42 | example/ios/Pods
43 |
44 | # Ruby
45 | example/vendor/
46 |
47 | # node.js
48 | #
49 | node_modules/
50 | npm-debug.log
51 | yarn-debug.log
52 | yarn-error.log
53 |
54 | # BUCK
55 | buck-out/
56 | \.buckd/
57 | android/app/libs
58 | android/keystores/debug.keystore
59 |
60 | # Expo
61 | .expo/*
62 |
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | # Exclude all top-level hidden directories by convention
2 | /.*/
3 |
4 | __mocks__
5 | __tests__
6 |
7 | /babel.config.js
8 | /android/src/androidTest/
9 | /android/src/test/
10 | /android/build/
11 | /example/
12 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Changelog
2 |
3 | All notable changes to this project will be documented in this file.
4 |
5 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6 | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7 |
8 | ## [Unreleased]
9 |
10 | ### Added
11 |
12 | - Changelog
13 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Alan Hughes
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Expo Shazamkit
2 |
3 | Shazam for React Native
4 |
5 | ## Preview
6 |
7 | https://user-images.githubusercontent.com/30924086/229935589-ef3e60ae-10f0-4e0d-aebf-a0ce06d8dba2.mov
8 |
9 | # Installation
10 |
11 | ```sh
12 | npx expo install expo-shazamkit
13 | ```
14 |
15 | For bare React Native projects, you must ensure that you have [installed and configured the `expo` package](https://docs.expo.dev/bare/installing-expo-modules/) before continuing.
16 |
17 | ## Configuration for iOS 🍏
18 |
19 | > This is only required for usage in bare React Native apps.
20 |
21 | Run `npx pod-install` after installing the npm package.
22 |
23 | Add the following to your `Info.plist`:
24 |
25 | ```xml
26 | NSMicrophoneUsageDescription
27 | $(PRODUCT_NAME) would like to access your microphone
28 | ```
29 |
30 | ShazmamKit is only available on iOS 15.0 and above. You'll need to set your deployment target to iOS 15.0 or above.
31 |
32 | ## Activate the ShazamKit service
33 |
34 | On your apple developer account page, under `Certificates, Identifiers & Profiles` select `Identifiers`. If you have already created an identifier for your app, select it. If not, create a new one. Under `App Services` enable `ShazamKit`.
35 |
36 | ### Plugin
37 |
38 | You need to request access to the microphone to record audio. You can use the plugin to set the message you would like or use the default `Allow $(PRODUCT_NAME) to access your microphone`.
39 |
40 | Also, you will need to set the deployment target to iOS 15.0 or above. You can do this by installing `expo-build-properties`
41 |
42 | `app.json`
43 |
44 | ```json
45 | {
46 | "plugins": [
47 | [
48 | "expo-shazamkit",
49 | {
50 | "microphonePermission": "Your permission message"
51 | }
52 | ],
53 | [
54 | "expo-build-properties",
55 | {
56 | "ios": {
57 | "deploymentTarget": "15.0"
58 | }
59 | }
60 | ]
61 | ]
62 | }
63 | ```
64 |
65 | ## Usage
66 |
67 | ```ts
68 | import * as Linking from "expo-linking";
69 | import * as ExpoShazamKit from "expo-shazamkit";
70 |
71 | // ...
72 | const [searching, setSearching] = useState(false);
73 | const [song, setSong] = useState(null);
74 |
75 | const startListening = async () => {
76 | try {
77 | if (song) {
78 | setSong(null);
79 | }
80 |
81 | setSearching(true);
82 | const result = await ExpoShazamKit.startListening();
83 | if (result.length > 0) {
84 | setSong(result[0]);
85 | } else {
86 | Alert.alert("No Match", "No songs found");
87 | }
88 |
89 | setSearching(false);
90 | } catch (error: any) {
91 | if (error instanceof Error) {
92 | Alert.alert("Error", error.message);
93 | }
94 | setSearching(false);
95 | }
96 | };
97 |
98 |
99 | {song && (
100 |
101 |
108 |
109 | {song.title}
110 |
111 | {song.artist}
112 |
113 |
114 |
115 |
124 |
125 |
126 |
127 | )}
128 |
129 | ;
130 | ```
131 |
132 | ### Available methods
133 |
134 | | Name | Description |
135 | | -------------------- | --------------------------------------------------------------------------------------------------------- |
136 | | `isAvailable` | Returns a boolean indicating if the library is available on the current platform |
137 | | `startListening` | async. Returns an array of matches. Usually only contains a single item |
138 | | `stopListening` | Stop the recording |
139 | | `addToShazamLibrary` | async. Adds the most recently discovered item to the users Shazam library. returns `{ success: boolean }` |
140 |
141 | # Contributing
142 |
143 | Contributions are welcome!
144 |
--------------------------------------------------------------------------------
/app.plugin.js:
--------------------------------------------------------------------------------
1 | module.exports = require("./plugin/build/withShazamKit");
2 |
--------------------------------------------------------------------------------
/example/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | .expo/
3 | dist/
4 | npm-debug.*
5 | *.jks
6 | *.p8
7 | *.p12
8 | *.key
9 | *.mobileprovision
10 | *.orig.*
11 | web-build/
12 |
13 | # macOS
14 | .DS_Store
15 |
16 | # Temporary files created by Metro to check the health of the file watcher
17 | .metro-health-check*
18 |
19 |
20 | android
--------------------------------------------------------------------------------
/example/App.tsx:
--------------------------------------------------------------------------------
1 | import * as Linking from "expo-linking";
2 | import * as ExpoShazamKit from "expo-shazamkit";
3 | import { MatchedItem } from "expo-shazamkit";
4 | import { MotiView } from "moti";
5 | import { useState } from "react";
6 | import {
7 | ActivityIndicator,
8 | Alert,
9 | Button,
10 | Image,
11 | Pressable,
12 | StyleSheet,
13 | Text,
14 | View,
15 | } from "react-native";
16 |
17 | export default function App() {
18 | const [searching, setSearching] = useState(false);
19 | const [song, setSong] = useState(null);
20 |
21 | const startListening = async () => {
22 | try {
23 | if (song) {
24 | setSong(null);
25 | }
26 | setSearching(true);
27 | const result = await ExpoShazamKit.startListening();
28 | if (result.length > 0) {
29 | setSong(result[0]);
30 | } else {
31 | Alert.alert("No Match", "No songs found");
32 | }
33 | setSearching(false);
34 | } catch (error: any) {
35 | if (error instanceof Error) {
36 | Alert.alert("Error", error.message);
37 | }
38 | setSearching(false);
39 | }
40 | };
41 |
42 | const addToShazamLibrary = async () => {
43 | const result = await ExpoShazamKit.addToShazamLibrary();
44 |
45 | if (result.success) {
46 | Alert.alert("Success", "Song added to Shazam Library");
47 | }
48 | };
49 |
50 | return (
51 |
52 |
53 | {song && (
54 |
64 |
74 |
75 |
76 | {song.title}
77 |
78 |
81 | {song.artist}
82 |
83 |
84 |
85 | Linking.openURL(song.appleMusicURL ?? "")}
88 | />
89 | Linking.openURL(song.webURL ?? "")}
92 | />
93 |
94 |
98 |
99 |
100 | )}
101 |
102 |
103 |
104 |
105 |
106 |
112 | {({ pressed }) => (
113 |
122 |
130 | Tap to Shazam
131 |
132 |
133 | )}
134 |
135 |
136 | {
142 | ExpoShazamKit.stopListening();
143 | if (searching) {
144 | setSearching(false);
145 | }
146 | }}
147 | >
148 | {({ pressed }) => (
149 |
158 |
166 | Stop
167 |
168 |
169 | )}
170 |
171 |
172 |
173 | );
174 | }
175 |
176 | function Listening({ searching }: { searching: boolean }) {
177 | if (!searching) {
178 | return null;
179 | }
180 |
181 | return (
182 |
183 |
184 | Listening...
185 |
186 | );
187 | }
188 |
189 | const styles = StyleSheet.create({
190 | container: {
191 | flex: 1,
192 | backgroundColor: "rgb(74, 111, 250)",
193 | paddingBottom: 50,
194 | },
195 | item: {
196 | alignItems: "center",
197 | backgroundColor: "white",
198 | margin: 20,
199 | borderRadius: 10,
200 | padding: 10,
201 | gap: 20,
202 | borderWidth: 1,
203 | borderColor: "black",
204 | },
205 | btn: {
206 | padding: 10,
207 | borderRadius: 10,
208 | width: 200,
209 | },
210 | btnText: {
211 | textAlign: "center",
212 | fontSize: 18,
213 | fontWeight: "bold",
214 | },
215 | });
216 |
--------------------------------------------------------------------------------
/example/app.json:
--------------------------------------------------------------------------------
1 | {
2 | "expo": {
3 | "name": "expo-shazamkit-example",
4 | "slug": "expo-shazamkit-example",
5 | "version": "1.0.0",
6 | "orientation": "portrait",
7 | "icon": "./assets/icon.png",
8 | "userInterfaceStyle": "light",
9 | "splash": {
10 | "image": "./assets/splash.png",
11 | "resizeMode": "contain",
12 | "backgroundColor": "#ffffff"
13 | },
14 | "assetBundlePatterns": ["**/*"],
15 | "ios": {
16 | "supportsTablet": true,
17 | "bundleIdentifier": "expo.community.modules.shazamkit.example",
18 | "infoPlist": {
19 | "NSMicrophoneUsageDescription": "$(PRODUCT_NAME) needs access to the microphone to identify songs."
20 | }
21 | },
22 | "android": {
23 | "adaptiveIcon": {
24 | "foregroundImage": "./assets/adaptive-icon.png",
25 | "backgroundColor": "#ffffff"
26 | },
27 | "package": "expo.community.modules.shazamkit.example"
28 | },
29 | "web": {
30 | "favicon": "./assets/favicon.png"
31 | },
32 | "plugins": [
33 | [
34 | "expo-build-properties",
35 | {
36 | "ios": {
37 | "deploymentTarget": "15.0"
38 | },
39 | "android": {
40 | "minSdkVersion": 24
41 | }
42 | }
43 | ]
44 | ]
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/example/assets/adaptive-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alanjhughes/expo-shazamkit/c6ccdc2a01799603220ad1afdb959046c011f2db/example/assets/adaptive-icon.png
--------------------------------------------------------------------------------
/example/assets/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alanjhughes/expo-shazamkit/c6ccdc2a01799603220ad1afdb959046c011f2db/example/assets/favicon.png
--------------------------------------------------------------------------------
/example/assets/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alanjhughes/expo-shazamkit/c6ccdc2a01799603220ad1afdb959046c011f2db/example/assets/icon.png
--------------------------------------------------------------------------------
/example/assets/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alanjhughes/expo-shazamkit/c6ccdc2a01799603220ad1afdb959046c011f2db/example/assets/splash.png
--------------------------------------------------------------------------------
/example/babel.config.js:
--------------------------------------------------------------------------------
1 | const path = require("path");
2 | /* global __dirname */
3 | module.exports = function (api) {
4 | api.cache(true);
5 | return {
6 | presets: ["babel-preset-expo"],
7 | plugins: [
8 | [
9 | "module-resolver",
10 | {
11 | extensions: [".tsx", ".ts", ".js", ".json"],
12 | alias: {
13 | // For development, we want to alias the library to the source
14 | "expo-shazamkit": path.join(__dirname, "..", "src", "index.ts"),
15 | },
16 | },
17 | ],
18 | "react-native-reanimated/plugin",
19 | ],
20 | };
21 | };
22 |
--------------------------------------------------------------------------------
/example/index.js:
--------------------------------------------------------------------------------
1 | import { registerRootComponent } from 'expo';
2 |
3 | import App from './App';
4 |
5 | // registerRootComponent calls AppRegistry.registerComponent('main', () => App);
6 | // It also ensures that whether you load the app in Expo Go or in a native build,
7 | // the environment is set up appropriately
8 | registerRootComponent(App);
9 |
--------------------------------------------------------------------------------
/example/ios/.gitignore:
--------------------------------------------------------------------------------
1 | # OSX
2 | #
3 | .DS_Store
4 |
5 | # Xcode
6 | #
7 | build/
8 | *.pbxuser
9 | !default.pbxuser
10 | *.mode1v3
11 | !default.mode1v3
12 | *.mode2v3
13 | !default.mode2v3
14 | *.perspectivev3
15 | !default.perspectivev3
16 | xcuserdata
17 | *.xccheckout
18 | *.moved-aside
19 | DerivedData
20 | *.hmap
21 | *.ipa
22 | *.xcuserstate
23 | project.xcworkspace
24 | .xcode.env.local
25 |
26 | # Bundle artifacts
27 | *.jsbundle
28 |
29 | # CocoaPods
30 | /Pods/
31 |
--------------------------------------------------------------------------------
/example/ios/.xcode.env:
--------------------------------------------------------------------------------
1 | # This `.xcode.env` file is versioned and is used to source the environment
2 | # used when running script phases inside Xcode.
3 | # To customize your local environment, you can create an `.xcode.env.local`
4 | # file that is not versioned.
5 |
6 | # NODE_BINARY variable contains the PATH to the node executable.
7 | #
8 | # Customize the NODE_BINARY variable here.
9 | # For example, to use nvm with brew, add the following line
10 | # . "$(brew --prefix nvm)/nvm.sh" --no-use
11 | export NODE_BINARY=$(command -v node)
12 |
--------------------------------------------------------------------------------
/example/ios/Podfile:
--------------------------------------------------------------------------------
1 | require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking")
2 | require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods")
3 |
4 | require 'json'
5 | podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}
6 |
7 | ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'
8 | ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']
9 |
10 | platform :ios, podfile_properties['ios.deploymentTarget'] || '13.0'
11 | install! 'cocoapods',
12 | :deterministic_uuids => false
13 |
14 | prepare_react_native_project!
15 |
16 | # If you are using a `react-native-flipper` your iOS build will fail when `NO_FLIPPER=1` is set.
17 | # because `react-native-flipper` depends on (FlipperKit,...), which will be excluded. To fix this,
18 | # you can also exclude `react-native-flipper` in `react-native.config.js`
19 | #
20 | # ```js
21 | # module.exports = {
22 | # dependencies: {
23 | # ...(process.env.NO_FLIPPER ? { 'react-native-flipper': { platforms: { ios: null } } } : {}),
24 | # }
25 | # }
26 | # ```
27 | flipper_config = FlipperConfiguration.disabled
28 | if ENV['NO_FLIPPER'] == '1' then
29 | # Explicitly disabled through environment variables
30 | flipper_config = FlipperConfiguration.disabled
31 | elsif podfile_properties.key?('ios.flipper') then
32 | # Configure Flipper in Podfile.properties.json
33 | if podfile_properties['ios.flipper'] == 'true' then
34 | flipper_config = FlipperConfiguration.enabled(["Debug", "Release"])
35 | elsif podfile_properties['ios.flipper'] != 'false' then
36 | flipper_config = FlipperConfiguration.enabled(["Debug", "Release"], { 'Flipper' => podfile_properties['ios.flipper'] })
37 | end
38 | end
39 |
40 | target 'exposhazamkitexample' do
41 | use_expo_modules!
42 | config = use_native_modules!
43 |
44 | use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks']
45 | use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS']
46 |
47 | # Flags change depending on the env values.
48 | flags = get_default_flags()
49 |
50 | use_react_native!(
51 | :path => config[:reactNativePath],
52 | :hermes_enabled => podfile_properties['expo.jsEngine'] == nil || podfile_properties['expo.jsEngine'] == 'hermes',
53 | :fabric_enabled => flags[:fabric_enabled],
54 | # An absolute path to your application root.
55 | :app_path => "#{Pod::Config.instance.installation_root}/..",
56 | # Note that if you have use_frameworks! enabled, Flipper will not work if enabled
57 | :flipper_configuration => flipper_config
58 | )
59 |
60 | post_install do |installer|
61 | react_native_post_install(
62 | installer,
63 | config[:reactNativePath],
64 | :mac_catalyst_enabled => false
65 | )
66 | __apply_Xcode_12_5_M1_post_install_workaround(installer)
67 |
68 | # This is necessary for Xcode 14, because it signs resource bundles by default
69 | # when building for devices.
70 | installer.target_installation_results.pod_target_installation_results
71 | .each do |pod_name, target_installation_result|
72 | target_installation_result.resource_bundle_targets.each do |resource_bundle_target|
73 | resource_bundle_target.build_configurations.each do |config|
74 | config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'
75 | end
76 | end
77 | end
78 | end
79 |
80 | post_integrate do |installer|
81 | begin
82 | expo_patch_react_imports!(installer)
83 | rescue => e
84 | Pod::UI.warn e
85 | end
86 | end
87 | end
88 |
--------------------------------------------------------------------------------
/example/ios/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - boost (1.76.0)
3 | - DoubleConversion (1.1.6)
4 | - EXApplication (5.3.1):
5 | - ExpoModulesCore
6 | - EXConstants (14.4.2):
7 | - ExpoModulesCore
8 | - EXFileSystem (15.4.4):
9 | - ExpoModulesCore
10 | - EXFont (11.4.0):
11 | - ExpoModulesCore
12 | - Expo (49.0.18):
13 | - ExpoModulesCore
14 | - ExpoImage (1.3.5):
15 | - ExpoModulesCore
16 | - SDWebImage (~> 5.15.8)
17 | - SDWebImageAVIFCoder (~> 0.10.0)
18 | - SDWebImageSVGCoder (~> 1.7.0)
19 | - SDWebImageWebPCoder (~> 0.11.0)
20 | - ExpoKeepAwake (12.3.0):
21 | - ExpoModulesCore
22 | - ExpoModulesCore (1.5.11):
23 | - RCT-Folly (= 2021.07.22.00)
24 | - React-Core
25 | - React-NativeModulesApple
26 | - React-RCTAppDelegate
27 | - ReactCommon/turbomodule/core
28 | - EXSplashScreen (0.20.5):
29 | - ExpoModulesCore
30 | - RCT-Folly (= 2021.07.22.00)
31 | - React-Core
32 | - FBLazyVector (0.72.6)
33 | - FBReactNativeSpec (0.72.6):
34 | - RCT-Folly (= 2021.07.22.00)
35 | - RCTRequired (= 0.72.6)
36 | - RCTTypeSafety (= 0.72.6)
37 | - React-Core (= 0.72.6)
38 | - React-jsi (= 0.72.6)
39 | - ReactCommon/turbomodule/core (= 0.72.6)
40 | - fmt (6.2.1)
41 | - glog (0.3.5)
42 | - hermes-engine (0.72.6):
43 | - hermes-engine/Pre-built (= 0.72.6)
44 | - hermes-engine/Pre-built (0.72.6)
45 | - libaom (3.0.0):
46 | - libvmaf (>= 2.2.0)
47 | - libavif (0.11.1):
48 | - libavif/libaom (= 0.11.1)
49 | - libavif/core (0.11.1)
50 | - libavif/libaom (0.11.1):
51 | - libaom (>= 2.0.0)
52 | - libavif/core
53 | - libevent (2.1.12)
54 | - libvmaf (2.3.1)
55 | - libwebp (1.3.2):
56 | - libwebp/demux (= 1.3.2)
57 | - libwebp/mux (= 1.3.2)
58 | - libwebp/sharpyuv (= 1.3.2)
59 | - libwebp/webp (= 1.3.2)
60 | - libwebp/demux (1.3.2):
61 | - libwebp/webp
62 | - libwebp/mux (1.3.2):
63 | - libwebp/demux
64 | - libwebp/sharpyuv (1.3.2)
65 | - libwebp/webp (1.3.2):
66 | - libwebp/sharpyuv
67 | - RCT-Folly (2021.07.22.00):
68 | - boost
69 | - DoubleConversion
70 | - fmt (~> 6.2.1)
71 | - glog
72 | - RCT-Folly/Default (= 2021.07.22.00)
73 | - RCT-Folly/Default (2021.07.22.00):
74 | - boost
75 | - DoubleConversion
76 | - fmt (~> 6.2.1)
77 | - glog
78 | - RCT-Folly/Futures (2021.07.22.00):
79 | - boost
80 | - DoubleConversion
81 | - fmt (~> 6.2.1)
82 | - glog
83 | - libevent
84 | - RCTRequired (0.72.6)
85 | - RCTTypeSafety (0.72.6):
86 | - FBLazyVector (= 0.72.6)
87 | - RCTRequired (= 0.72.6)
88 | - React-Core (= 0.72.6)
89 | - React (0.72.6):
90 | - React-Core (= 0.72.6)
91 | - React-Core/DevSupport (= 0.72.6)
92 | - React-Core/RCTWebSocket (= 0.72.6)
93 | - React-RCTActionSheet (= 0.72.6)
94 | - React-RCTAnimation (= 0.72.6)
95 | - React-RCTBlob (= 0.72.6)
96 | - React-RCTImage (= 0.72.6)
97 | - React-RCTLinking (= 0.72.6)
98 | - React-RCTNetwork (= 0.72.6)
99 | - React-RCTSettings (= 0.72.6)
100 | - React-RCTText (= 0.72.6)
101 | - React-RCTVibration (= 0.72.6)
102 | - React-callinvoker (0.72.6)
103 | - React-Codegen (0.72.6):
104 | - DoubleConversion
105 | - FBReactNativeSpec
106 | - glog
107 | - hermes-engine
108 | - RCT-Folly
109 | - RCTRequired
110 | - RCTTypeSafety
111 | - React-Core
112 | - React-jsi
113 | - React-jsiexecutor
114 | - React-NativeModulesApple
115 | - React-rncore
116 | - ReactCommon/turbomodule/bridging
117 | - ReactCommon/turbomodule/core
118 | - React-Core (0.72.6):
119 | - glog
120 | - hermes-engine
121 | - RCT-Folly (= 2021.07.22.00)
122 | - React-Core/Default (= 0.72.6)
123 | - React-cxxreact
124 | - React-hermes
125 | - React-jsi
126 | - React-jsiexecutor
127 | - React-perflogger
128 | - React-runtimeexecutor
129 | - React-utils
130 | - SocketRocket (= 0.6.1)
131 | - Yoga
132 | - React-Core/CoreModulesHeaders (0.72.6):
133 | - glog
134 | - hermes-engine
135 | - RCT-Folly (= 2021.07.22.00)
136 | - React-Core/Default
137 | - React-cxxreact
138 | - React-hermes
139 | - React-jsi
140 | - React-jsiexecutor
141 | - React-perflogger
142 | - React-runtimeexecutor
143 | - React-utils
144 | - SocketRocket (= 0.6.1)
145 | - Yoga
146 | - React-Core/Default (0.72.6):
147 | - glog
148 | - hermes-engine
149 | - RCT-Folly (= 2021.07.22.00)
150 | - React-cxxreact
151 | - React-hermes
152 | - React-jsi
153 | - React-jsiexecutor
154 | - React-perflogger
155 | - React-runtimeexecutor
156 | - React-utils
157 | - SocketRocket (= 0.6.1)
158 | - Yoga
159 | - React-Core/DevSupport (0.72.6):
160 | - glog
161 | - hermes-engine
162 | - RCT-Folly (= 2021.07.22.00)
163 | - React-Core/Default (= 0.72.6)
164 | - React-Core/RCTWebSocket (= 0.72.6)
165 | - React-cxxreact
166 | - React-hermes
167 | - React-jsi
168 | - React-jsiexecutor
169 | - React-jsinspector (= 0.72.6)
170 | - React-perflogger
171 | - React-runtimeexecutor
172 | - React-utils
173 | - SocketRocket (= 0.6.1)
174 | - Yoga
175 | - React-Core/RCTActionSheetHeaders (0.72.6):
176 | - glog
177 | - hermes-engine
178 | - RCT-Folly (= 2021.07.22.00)
179 | - React-Core/Default
180 | - React-cxxreact
181 | - React-hermes
182 | - React-jsi
183 | - React-jsiexecutor
184 | - React-perflogger
185 | - React-runtimeexecutor
186 | - React-utils
187 | - SocketRocket (= 0.6.1)
188 | - Yoga
189 | - React-Core/RCTAnimationHeaders (0.72.6):
190 | - glog
191 | - hermes-engine
192 | - RCT-Folly (= 2021.07.22.00)
193 | - React-Core/Default
194 | - React-cxxreact
195 | - React-hermes
196 | - React-jsi
197 | - React-jsiexecutor
198 | - React-perflogger
199 | - React-runtimeexecutor
200 | - React-utils
201 | - SocketRocket (= 0.6.1)
202 | - Yoga
203 | - React-Core/RCTBlobHeaders (0.72.6):
204 | - glog
205 | - hermes-engine
206 | - RCT-Folly (= 2021.07.22.00)
207 | - React-Core/Default
208 | - React-cxxreact
209 | - React-hermes
210 | - React-jsi
211 | - React-jsiexecutor
212 | - React-perflogger
213 | - React-runtimeexecutor
214 | - React-utils
215 | - SocketRocket (= 0.6.1)
216 | - Yoga
217 | - React-Core/RCTImageHeaders (0.72.6):
218 | - glog
219 | - hermes-engine
220 | - RCT-Folly (= 2021.07.22.00)
221 | - React-Core/Default
222 | - React-cxxreact
223 | - React-hermes
224 | - React-jsi
225 | - React-jsiexecutor
226 | - React-perflogger
227 | - React-runtimeexecutor
228 | - React-utils
229 | - SocketRocket (= 0.6.1)
230 | - Yoga
231 | - React-Core/RCTLinkingHeaders (0.72.6):
232 | - glog
233 | - hermes-engine
234 | - RCT-Folly (= 2021.07.22.00)
235 | - React-Core/Default
236 | - React-cxxreact
237 | - React-hermes
238 | - React-jsi
239 | - React-jsiexecutor
240 | - React-perflogger
241 | - React-runtimeexecutor
242 | - React-utils
243 | - SocketRocket (= 0.6.1)
244 | - Yoga
245 | - React-Core/RCTNetworkHeaders (0.72.6):
246 | - glog
247 | - hermes-engine
248 | - RCT-Folly (= 2021.07.22.00)
249 | - React-Core/Default
250 | - React-cxxreact
251 | - React-hermes
252 | - React-jsi
253 | - React-jsiexecutor
254 | - React-perflogger
255 | - React-runtimeexecutor
256 | - React-utils
257 | - SocketRocket (= 0.6.1)
258 | - Yoga
259 | - React-Core/RCTSettingsHeaders (0.72.6):
260 | - glog
261 | - hermes-engine
262 | - RCT-Folly (= 2021.07.22.00)
263 | - React-Core/Default
264 | - React-cxxreact
265 | - React-hermes
266 | - React-jsi
267 | - React-jsiexecutor
268 | - React-perflogger
269 | - React-runtimeexecutor
270 | - React-utils
271 | - SocketRocket (= 0.6.1)
272 | - Yoga
273 | - React-Core/RCTTextHeaders (0.72.6):
274 | - glog
275 | - hermes-engine
276 | - RCT-Folly (= 2021.07.22.00)
277 | - React-Core/Default
278 | - React-cxxreact
279 | - React-hermes
280 | - React-jsi
281 | - React-jsiexecutor
282 | - React-perflogger
283 | - React-runtimeexecutor
284 | - React-utils
285 | - SocketRocket (= 0.6.1)
286 | - Yoga
287 | - React-Core/RCTVibrationHeaders (0.72.6):
288 | - glog
289 | - hermes-engine
290 | - RCT-Folly (= 2021.07.22.00)
291 | - React-Core/Default
292 | - React-cxxreact
293 | - React-hermes
294 | - React-jsi
295 | - React-jsiexecutor
296 | - React-perflogger
297 | - React-runtimeexecutor
298 | - React-utils
299 | - SocketRocket (= 0.6.1)
300 | - Yoga
301 | - React-Core/RCTWebSocket (0.72.6):
302 | - glog
303 | - hermes-engine
304 | - RCT-Folly (= 2021.07.22.00)
305 | - React-Core/Default (= 0.72.6)
306 | - React-cxxreact
307 | - React-hermes
308 | - React-jsi
309 | - React-jsiexecutor
310 | - React-perflogger
311 | - React-runtimeexecutor
312 | - React-utils
313 | - SocketRocket (= 0.6.1)
314 | - Yoga
315 | - React-CoreModules (0.72.6):
316 | - RCT-Folly (= 2021.07.22.00)
317 | - RCTTypeSafety (= 0.72.6)
318 | - React-Codegen (= 0.72.6)
319 | - React-Core/CoreModulesHeaders (= 0.72.6)
320 | - React-jsi (= 0.72.6)
321 | - React-RCTBlob
322 | - React-RCTImage (= 0.72.6)
323 | - ReactCommon/turbomodule/core (= 0.72.6)
324 | - SocketRocket (= 0.6.1)
325 | - React-cxxreact (0.72.6):
326 | - boost (= 1.76.0)
327 | - DoubleConversion
328 | - glog
329 | - hermes-engine
330 | - RCT-Folly (= 2021.07.22.00)
331 | - React-callinvoker (= 0.72.6)
332 | - React-debug (= 0.72.6)
333 | - React-jsi (= 0.72.6)
334 | - React-jsinspector (= 0.72.6)
335 | - React-logger (= 0.72.6)
336 | - React-perflogger (= 0.72.6)
337 | - React-runtimeexecutor (= 0.72.6)
338 | - React-debug (0.72.6)
339 | - React-hermes (0.72.6):
340 | - DoubleConversion
341 | - glog
342 | - hermes-engine
343 | - RCT-Folly (= 2021.07.22.00)
344 | - RCT-Folly/Futures (= 2021.07.22.00)
345 | - React-cxxreact (= 0.72.6)
346 | - React-jsi
347 | - React-jsiexecutor (= 0.72.6)
348 | - React-jsinspector (= 0.72.6)
349 | - React-perflogger (= 0.72.6)
350 | - React-jsi (0.72.6):
351 | - boost (= 1.76.0)
352 | - DoubleConversion
353 | - glog
354 | - hermes-engine
355 | - RCT-Folly (= 2021.07.22.00)
356 | - React-jsiexecutor (0.72.6):
357 | - DoubleConversion
358 | - glog
359 | - hermes-engine
360 | - RCT-Folly (= 2021.07.22.00)
361 | - React-cxxreact (= 0.72.6)
362 | - React-jsi (= 0.72.6)
363 | - React-perflogger (= 0.72.6)
364 | - React-jsinspector (0.72.6)
365 | - React-logger (0.72.6):
366 | - glog
367 | - React-NativeModulesApple (0.72.6):
368 | - hermes-engine
369 | - React-callinvoker
370 | - React-Core
371 | - React-cxxreact
372 | - React-jsi
373 | - React-runtimeexecutor
374 | - ReactCommon/turbomodule/bridging
375 | - ReactCommon/turbomodule/core
376 | - React-perflogger (0.72.6)
377 | - React-RCTActionSheet (0.72.6):
378 | - React-Core/RCTActionSheetHeaders (= 0.72.6)
379 | - React-RCTAnimation (0.72.6):
380 | - RCT-Folly (= 2021.07.22.00)
381 | - RCTTypeSafety (= 0.72.6)
382 | - React-Codegen (= 0.72.6)
383 | - React-Core/RCTAnimationHeaders (= 0.72.6)
384 | - React-jsi (= 0.72.6)
385 | - ReactCommon/turbomodule/core (= 0.72.6)
386 | - React-RCTAppDelegate (0.72.6):
387 | - RCT-Folly
388 | - RCTRequired
389 | - RCTTypeSafety
390 | - React-Core
391 | - React-CoreModules
392 | - React-hermes
393 | - React-NativeModulesApple
394 | - React-RCTImage
395 | - React-RCTNetwork
396 | - React-runtimescheduler
397 | - ReactCommon/turbomodule/core
398 | - React-RCTBlob (0.72.6):
399 | - hermes-engine
400 | - RCT-Folly (= 2021.07.22.00)
401 | - React-Codegen (= 0.72.6)
402 | - React-Core/RCTBlobHeaders (= 0.72.6)
403 | - React-Core/RCTWebSocket (= 0.72.6)
404 | - React-jsi (= 0.72.6)
405 | - React-RCTNetwork (= 0.72.6)
406 | - ReactCommon/turbomodule/core (= 0.72.6)
407 | - React-RCTImage (0.72.6):
408 | - RCT-Folly (= 2021.07.22.00)
409 | - RCTTypeSafety (= 0.72.6)
410 | - React-Codegen (= 0.72.6)
411 | - React-Core/RCTImageHeaders (= 0.72.6)
412 | - React-jsi (= 0.72.6)
413 | - React-RCTNetwork (= 0.72.6)
414 | - ReactCommon/turbomodule/core (= 0.72.6)
415 | - React-RCTLinking (0.72.6):
416 | - React-Codegen (= 0.72.6)
417 | - React-Core/RCTLinkingHeaders (= 0.72.6)
418 | - React-jsi (= 0.72.6)
419 | - ReactCommon/turbomodule/core (= 0.72.6)
420 | - React-RCTNetwork (0.72.6):
421 | - RCT-Folly (= 2021.07.22.00)
422 | - RCTTypeSafety (= 0.72.6)
423 | - React-Codegen (= 0.72.6)
424 | - React-Core/RCTNetworkHeaders (= 0.72.6)
425 | - React-jsi (= 0.72.6)
426 | - ReactCommon/turbomodule/core (= 0.72.6)
427 | - React-RCTSettings (0.72.6):
428 | - RCT-Folly (= 2021.07.22.00)
429 | - RCTTypeSafety (= 0.72.6)
430 | - React-Codegen (= 0.72.6)
431 | - React-Core/RCTSettingsHeaders (= 0.72.6)
432 | - React-jsi (= 0.72.6)
433 | - ReactCommon/turbomodule/core (= 0.72.6)
434 | - React-RCTText (0.72.6):
435 | - React-Core/RCTTextHeaders (= 0.72.6)
436 | - React-RCTVibration (0.72.6):
437 | - RCT-Folly (= 2021.07.22.00)
438 | - React-Codegen (= 0.72.6)
439 | - React-Core/RCTVibrationHeaders (= 0.72.6)
440 | - React-jsi (= 0.72.6)
441 | - ReactCommon/turbomodule/core (= 0.72.6)
442 | - React-rncore (0.72.6)
443 | - React-runtimeexecutor (0.72.6):
444 | - React-jsi (= 0.72.6)
445 | - React-runtimescheduler (0.72.6):
446 | - glog
447 | - hermes-engine
448 | - RCT-Folly (= 2021.07.22.00)
449 | - React-callinvoker
450 | - React-debug
451 | - React-jsi
452 | - React-runtimeexecutor
453 | - React-utils (0.72.6):
454 | - glog
455 | - RCT-Folly (= 2021.07.22.00)
456 | - React-debug
457 | - ReactCommon/turbomodule/bridging (0.72.6):
458 | - DoubleConversion
459 | - glog
460 | - hermes-engine
461 | - RCT-Folly (= 2021.07.22.00)
462 | - React-callinvoker (= 0.72.6)
463 | - React-cxxreact (= 0.72.6)
464 | - React-jsi (= 0.72.6)
465 | - React-logger (= 0.72.6)
466 | - React-perflogger (= 0.72.6)
467 | - ReactCommon/turbomodule/core (0.72.6):
468 | - DoubleConversion
469 | - glog
470 | - hermes-engine
471 | - RCT-Folly (= 2021.07.22.00)
472 | - React-callinvoker (= 0.72.6)
473 | - React-cxxreact (= 0.72.6)
474 | - React-jsi (= 0.72.6)
475 | - React-logger (= 0.72.6)
476 | - React-perflogger (= 0.72.6)
477 | - RNReanimated (3.3.0):
478 | - DoubleConversion
479 | - FBLazyVector
480 | - glog
481 | - hermes-engine
482 | - RCT-Folly
483 | - RCTRequired
484 | - RCTTypeSafety
485 | - React-callinvoker
486 | - React-Core
487 | - React-Core/DevSupport
488 | - React-Core/RCTWebSocket
489 | - React-CoreModules
490 | - React-cxxreact
491 | - React-hermes
492 | - React-jsi
493 | - React-jsiexecutor
494 | - React-jsinspector
495 | - React-RCTActionSheet
496 | - React-RCTAnimation
497 | - React-RCTAppDelegate
498 | - React-RCTBlob
499 | - React-RCTImage
500 | - React-RCTLinking
501 | - React-RCTNetwork
502 | - React-RCTSettings
503 | - React-RCTText
504 | - ReactCommon/turbomodule/core
505 | - Yoga
506 | - SDWebImage (5.15.8):
507 | - SDWebImage/Core (= 5.15.8)
508 | - SDWebImage/Core (5.15.8)
509 | - SDWebImageAVIFCoder (0.10.1):
510 | - libavif (>= 0.11.0)
511 | - SDWebImage (~> 5.10)
512 | - SDWebImageSVGCoder (1.7.0):
513 | - SDWebImage/Core (~> 5.6)
514 | - SDWebImageWebPCoder (0.11.0):
515 | - libwebp (~> 1.0)
516 | - SDWebImage/Core (~> 5.15)
517 | - ShazamKitModule (0.1.2):
518 | - ExpoModulesCore
519 | - SocketRocket (0.6.1)
520 | - Yoga (1.14.0)
521 |
522 | DEPENDENCIES:
523 | - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`)
524 | - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
525 | - EXApplication (from `../node_modules/expo-application/ios`)
526 | - EXConstants (from `../node_modules/expo-constants/ios`)
527 | - EXFileSystem (from `../node_modules/expo-file-system/ios`)
528 | - EXFont (from `../node_modules/expo-font/ios`)
529 | - Expo (from `../node_modules/expo`)
530 | - ExpoImage (from `../node_modules/expo-image/ios`)
531 | - ExpoKeepAwake (from `../node_modules/expo-keep-awake/ios`)
532 | - ExpoModulesCore (from `../node_modules/expo-modules-core`)
533 | - EXSplashScreen (from `../node_modules/expo-splash-screen/ios`)
534 | - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
535 | - FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`)
536 | - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
537 | - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`)
538 | - libevent (~> 2.1.12)
539 | - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`)
540 | - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`)
541 | - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`)
542 | - React (from `../node_modules/react-native/`)
543 | - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`)
544 | - React-Codegen (from `build/generated/ios`)
545 | - React-Core (from `../node_modules/react-native/`)
546 | - React-Core/RCTWebSocket (from `../node_modules/react-native/`)
547 | - React-CoreModules (from `../node_modules/react-native/React/CoreModules`)
548 | - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`)
549 | - React-debug (from `../node_modules/react-native/ReactCommon/react/debug`)
550 | - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`)
551 | - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`)
552 | - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`)
553 | - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`)
554 | - React-logger (from `../node_modules/react-native/ReactCommon/logger`)
555 | - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`)
556 | - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`)
557 | - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`)
558 | - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`)
559 | - React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`)
560 | - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`)
561 | - React-RCTImage (from `../node_modules/react-native/Libraries/Image`)
562 | - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`)
563 | - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`)
564 | - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`)
565 | - React-RCTText (from `../node_modules/react-native/Libraries/Text`)
566 | - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`)
567 | - React-rncore (from `../node_modules/react-native/ReactCommon`)
568 | - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`)
569 | - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`)
570 | - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`)
571 | - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
572 | - RNReanimated (from `../node_modules/react-native-reanimated`)
573 | - ShazamKitModule (from `../../ios`)
574 | - Yoga (from `../node_modules/react-native/ReactCommon/yoga`)
575 |
576 | SPEC REPOS:
577 | trunk:
578 | - fmt
579 | - libaom
580 | - libavif
581 | - libevent
582 | - libvmaf
583 | - libwebp
584 | - SDWebImage
585 | - SDWebImageAVIFCoder
586 | - SDWebImageSVGCoder
587 | - SDWebImageWebPCoder
588 | - SocketRocket
589 |
590 | EXTERNAL SOURCES:
591 | boost:
592 | :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec"
593 | DoubleConversion:
594 | :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
595 | EXApplication:
596 | :path: "../node_modules/expo-application/ios"
597 | EXConstants:
598 | :path: "../node_modules/expo-constants/ios"
599 | EXFileSystem:
600 | :path: "../node_modules/expo-file-system/ios"
601 | EXFont:
602 | :path: "../node_modules/expo-font/ios"
603 | Expo:
604 | :path: "../node_modules/expo"
605 | ExpoImage:
606 | :path: "../node_modules/expo-image/ios"
607 | ExpoKeepAwake:
608 | :path: "../node_modules/expo-keep-awake/ios"
609 | ExpoModulesCore:
610 | :path: "../node_modules/expo-modules-core"
611 | EXSplashScreen:
612 | :path: "../node_modules/expo-splash-screen/ios"
613 | FBLazyVector:
614 | :path: "../node_modules/react-native/Libraries/FBLazyVector"
615 | FBReactNativeSpec:
616 | :path: "../node_modules/react-native/React/FBReactNativeSpec"
617 | glog:
618 | :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec"
619 | hermes-engine:
620 | :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec"
621 | :tag: hermes-2023-08-07-RNv0.72.4-813b2def12bc9df02654b3e3653ae4a68d0572e0
622 | RCT-Folly:
623 | :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec"
624 | RCTRequired:
625 | :path: "../node_modules/react-native/Libraries/RCTRequired"
626 | RCTTypeSafety:
627 | :path: "../node_modules/react-native/Libraries/TypeSafety"
628 | React:
629 | :path: "../node_modules/react-native/"
630 | React-callinvoker:
631 | :path: "../node_modules/react-native/ReactCommon/callinvoker"
632 | React-Codegen:
633 | :path: build/generated/ios
634 | React-Core:
635 | :path: "../node_modules/react-native/"
636 | React-CoreModules:
637 | :path: "../node_modules/react-native/React/CoreModules"
638 | React-cxxreact:
639 | :path: "../node_modules/react-native/ReactCommon/cxxreact"
640 | React-debug:
641 | :path: "../node_modules/react-native/ReactCommon/react/debug"
642 | React-hermes:
643 | :path: "../node_modules/react-native/ReactCommon/hermes"
644 | React-jsi:
645 | :path: "../node_modules/react-native/ReactCommon/jsi"
646 | React-jsiexecutor:
647 | :path: "../node_modules/react-native/ReactCommon/jsiexecutor"
648 | React-jsinspector:
649 | :path: "../node_modules/react-native/ReactCommon/jsinspector"
650 | React-logger:
651 | :path: "../node_modules/react-native/ReactCommon/logger"
652 | React-NativeModulesApple:
653 | :path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios"
654 | React-perflogger:
655 | :path: "../node_modules/react-native/ReactCommon/reactperflogger"
656 | React-RCTActionSheet:
657 | :path: "../node_modules/react-native/Libraries/ActionSheetIOS"
658 | React-RCTAnimation:
659 | :path: "../node_modules/react-native/Libraries/NativeAnimation"
660 | React-RCTAppDelegate:
661 | :path: "../node_modules/react-native/Libraries/AppDelegate"
662 | React-RCTBlob:
663 | :path: "../node_modules/react-native/Libraries/Blob"
664 | React-RCTImage:
665 | :path: "../node_modules/react-native/Libraries/Image"
666 | React-RCTLinking:
667 | :path: "../node_modules/react-native/Libraries/LinkingIOS"
668 | React-RCTNetwork:
669 | :path: "../node_modules/react-native/Libraries/Network"
670 | React-RCTSettings:
671 | :path: "../node_modules/react-native/Libraries/Settings"
672 | React-RCTText:
673 | :path: "../node_modules/react-native/Libraries/Text"
674 | React-RCTVibration:
675 | :path: "../node_modules/react-native/Libraries/Vibration"
676 | React-rncore:
677 | :path: "../node_modules/react-native/ReactCommon"
678 | React-runtimeexecutor:
679 | :path: "../node_modules/react-native/ReactCommon/runtimeexecutor"
680 | React-runtimescheduler:
681 | :path: "../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler"
682 | React-utils:
683 | :path: "../node_modules/react-native/ReactCommon/react/utils"
684 | ReactCommon:
685 | :path: "../node_modules/react-native/ReactCommon"
686 | RNReanimated:
687 | :path: "../node_modules/react-native-reanimated"
688 | ShazamKitModule:
689 | :path: "../../ios"
690 | Yoga:
691 | :path: "../node_modules/react-native/ReactCommon/yoga"
692 |
693 | SPEC CHECKSUMS:
694 | boost: 57d2868c099736d80fcd648bf211b4431e51a558
695 | DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54
696 | EXApplication: 042aa2e3f05258a16962ea1a9914bf288db9c9a1
697 | EXConstants: ce5bbea779da8031ac818c36bea41b10e14d04e1
698 | EXFileSystem: 2b826a3bf1071a4b80a8457e97124783d1ac860e
699 | EXFont: 738c44c390953ebcbab075a4848bfbef025fd9ee
700 | Expo: f446f9811b9dfc0abc05a1613966c8475bc6795e
701 | ExpoImage: 723efcb8d9377ae8645a6f7a1579305f5b80a76f
702 | ExpoKeepAwake: be4cbd52d9b177cde0fd66daa1913afa3161fc1d
703 | ExpoModulesCore: 51cb2e7ab4c8da14be3f40b66d54c1781002e99d
704 | EXSplashScreen: c0e7f2d4a640f3b875808ed0b88575538daf6d82
705 | FBLazyVector: 748c0ef74f2bf4b36cfcccf37916806940a64c32
706 | FBReactNativeSpec: 966f29e4e697de53a3b366355e8f57375c856ad9
707 | fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
708 | glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b
709 | hermes-engine: 8057e75cfc1437b178ac86c8654b24e7fead7f60
710 | libaom: 144606b1da4b5915a1054383c3a4459ccdb3c661
711 | libavif: 84bbb62fb232c3018d6f1bab79beea87e35de7b7
712 | libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
713 | libvmaf: 27f523f1e63c694d14d534cd0fddd2fab0ae8711
714 | libwebp: 1786c9f4ff8a279e4dac1e8f385004d5fc253009
715 | RCT-Folly: 424b8c9a7a0b9ab2886ffe9c3b041ef628fd4fb1
716 | RCTRequired: 28469809442eb4eb5528462705f7d852948c8a74
717 | RCTTypeSafety: e9c6c409fca2cc584e5b086862d562540cb38d29
718 | React: 769f469909b18edfe934f0539fffb319c4c61043
719 | React-callinvoker: e48ce12c83706401251921896576710d81e54763
720 | React-Codegen: a136b8094d39fd071994eaa935366e6be2239cb1
721 | React-Core: e548a186fb01c3a78a9aeeffa212d625ca9511bf
722 | React-CoreModules: d226b22d06ea1bc4e49d3c073b2c6cbb42265405
723 | React-cxxreact: 44a3560510ead6633b6e02f9fbbdd1772fb40f92
724 | React-debug: 238501490155574ae9f3f8dd1c74330eba30133e
725 | React-hermes: 46e66dc854124d7645c20bfec0a6be9542826ecd
726 | React-jsi: fbdaf4166bae60524b591b18c851b530c8cdb90c
727 | React-jsiexecutor: 3bf18ff7cb03cd8dfdce08fbbc0d15058c1d71ae
728 | React-jsinspector: 194e32c6aab382d88713ad3dd0025c5f5c4ee072
729 | React-logger: cebf22b6cf43434e471dc561e5911b40ac01d289
730 | React-NativeModulesApple: 02e35e9a51e10c6422f04f5e4076a7c02243fff2
731 | React-perflogger: e3596db7e753f51766bceadc061936ef1472edc3
732 | React-RCTActionSheet: 17ab132c748b4471012abbcdcf5befe860660485
733 | React-RCTAnimation: c8bbaab62be5817d2a31c36d5f2571e3f7dcf099
734 | React-RCTAppDelegate: af1c7dace233deba4b933cd1d6491fe4e3584ad1
735 | React-RCTBlob: 1bcf3a0341eb8d6950009b1ddb8aefaf46996b8c
736 | React-RCTImage: 670a3486b532292649b1aef3ffddd0b495a5cee4
737 | React-RCTLinking: bd7ab853144aed463903237e615fd91d11b4f659
738 | React-RCTNetwork: be86a621f3e4724758f23ad1fdce32474ab3d829
739 | React-RCTSettings: 4f3a29a6d23ffa639db9701bc29af43f30781058
740 | React-RCTText: adde32164a243103aaba0b1dc7b0a2599733873e
741 | React-RCTVibration: 6bd85328388ac2e82ae0ca11afe48ad5555b483a
742 | React-rncore: fda7b1ae5918fa7baa259105298a5487875a57c8
743 | React-runtimeexecutor: 57d85d942862b08f6d15441a0badff2542fd233c
744 | React-runtimescheduler: f23e337008403341177fc52ee4ca94e442c17ede
745 | React-utils: fa59c9a3375fb6f4aeb66714fd3f7f76b43a9f16
746 | ReactCommon: dd03c17275c200496f346af93a7b94c53f3093a4
747 | RNReanimated: 9f7068e43b9358a46a688d94a5a3adb258139457
748 | SDWebImage: cb032eba469c54e0000e78bcb0a13cdde0a52798
749 | SDWebImageAVIFCoder: 8348fef6d0ec69e129c66c9fe4d74fbfbf366112
750 | SDWebImageSVGCoder: 15a300a97ec1c8ac958f009c02220ac0402e936c
751 | SDWebImageWebPCoder: 295a6573c512f54ad2dd58098e64e17dcf008499
752 | ShazamKitModule: 4f6230a402d6d5417862108ea2a0362efaa1a822
753 | SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17
754 | Yoga: b76f1acfda8212aa16b7e26bcce3983230c82603
755 |
756 | PODFILE CHECKSUM: f0aae2ec6f28804ed55bd5d010f67c454c2b7d70
757 |
758 | COCOAPODS: 1.12.1
759 |
--------------------------------------------------------------------------------
/example/ios/Podfile.properties.json:
--------------------------------------------------------------------------------
1 | {
2 | "expo.jsEngine": "hermes",
3 | "EX_DEV_CLIENT_NETWORK_INSPECTOR": "true",
4 | "ios.deploymentTarget": "15.0"
5 | }
6 |
--------------------------------------------------------------------------------
/example/ios/exposhazamkitexample.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 54;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };
11 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
12 | 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
13 | 1F89DBBD6C64427294E4C01A /* noop-file.swift in Sources */ = {isa = PBXBuildFile; fileRef = E67BA863080F442CBE9AB78B /* noop-file.swift */; };
14 | 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; };
15 | 96905EF65AED1B983A6B3ABC /* libPods-exposhazamkitexample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-exposhazamkitexample.a */; };
16 | B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; };
17 | BB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; };
18 | /* End PBXBuildFile section */
19 |
20 | /* Begin PBXFileReference section */
21 | 13B07F961A680F5B00A75B9A /* exposhazamkitexample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = exposhazamkitexample.app; sourceTree = BUILT_PRODUCTS_DIR; };
22 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = exposhazamkitexample/AppDelegate.h; sourceTree = ""; };
23 | 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = exposhazamkitexample/AppDelegate.mm; sourceTree = ""; };
24 | 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = exposhazamkitexample/Images.xcassets; sourceTree = ""; };
25 | 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = exposhazamkitexample/Info.plist; sourceTree = ""; };
26 | 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = exposhazamkitexample/main.m; sourceTree = ""; };
27 | 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-exposhazamkitexample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-exposhazamkitexample.a"; sourceTree = BUILT_PRODUCTS_DIR; };
28 | 6C2E3173556A471DD304B334 /* Pods-exposhazamkitexample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-exposhazamkitexample.debug.xcconfig"; path = "Target Support Files/Pods-exposhazamkitexample/Pods-exposhazamkitexample.debug.xcconfig"; sourceTree = ""; };
29 | 7A4D352CD337FB3A3BF06240 /* Pods-exposhazamkitexample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-exposhazamkitexample.release.xcconfig"; path = "Target Support Files/Pods-exposhazamkitexample/Pods-exposhazamkitexample.release.xcconfig"; sourceTree = ""; };
30 | 8A82B89308DD41518B40C1CD /* exposhazamkitexample-Bridging-Header.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "exposhazamkitexample-Bridging-Header.h"; path = "exposhazamkitexample/exposhazamkitexample-Bridging-Header.h"; sourceTree = ""; };
31 | AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = exposhazamkitexample/SplashScreen.storyboard; sourceTree = ""; };
32 | BB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = ""; };
33 | E67BA863080F442CBE9AB78B /* noop-file.swift */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.swift; name = "noop-file.swift"; path = "exposhazamkitexample/noop-file.swift"; sourceTree = ""; };
34 | ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
35 | FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-exposhazamkitexample/ExpoModulesProvider.swift"; sourceTree = ""; };
36 | /* End PBXFileReference section */
37 |
38 | /* Begin PBXFrameworksBuildPhase section */
39 | 13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
40 | isa = PBXFrameworksBuildPhase;
41 | buildActionMask = 2147483647;
42 | files = (
43 | 96905EF65AED1B983A6B3ABC /* libPods-exposhazamkitexample.a in Frameworks */,
44 | );
45 | runOnlyForDeploymentPostprocessing = 0;
46 | };
47 | /* End PBXFrameworksBuildPhase section */
48 |
49 | /* Begin PBXGroup section */
50 | 13B07FAE1A68108700A75B9A /* exposhazamkitexample */ = {
51 | isa = PBXGroup;
52 | children = (
53 | BB2F792B24A3F905000567C9 /* Supporting */,
54 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */,
55 | 13B07FB01A68108700A75B9A /* AppDelegate.mm */,
56 | 13B07FB51A68108700A75B9A /* Images.xcassets */,
57 | 13B07FB61A68108700A75B9A /* Info.plist */,
58 | 13B07FB71A68108700A75B9A /* main.m */,
59 | AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */,
60 | E67BA863080F442CBE9AB78B /* noop-file.swift */,
61 | 8A82B89308DD41518B40C1CD /* exposhazamkitexample-Bridging-Header.h */,
62 | );
63 | name = exposhazamkitexample;
64 | sourceTree = "";
65 | };
66 | 2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
67 | isa = PBXGroup;
68 | children = (
69 | ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
70 | 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-exposhazamkitexample.a */,
71 | );
72 | name = Frameworks;
73 | sourceTree = "";
74 | };
75 | 832341AE1AAA6A7D00B99B32 /* Libraries */ = {
76 | isa = PBXGroup;
77 | children = (
78 | );
79 | name = Libraries;
80 | sourceTree = "";
81 | };
82 | 83CBB9F61A601CBA00E9B192 = {
83 | isa = PBXGroup;
84 | children = (
85 | 13B07FAE1A68108700A75B9A /* exposhazamkitexample */,
86 | 832341AE1AAA6A7D00B99B32 /* Libraries */,
87 | 83CBBA001A601CBA00E9B192 /* Products */,
88 | 2D16E6871FA4F8E400B85C8A /* Frameworks */,
89 | D65327D7A22EEC0BE12398D9 /* Pods */,
90 | D7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */,
91 | );
92 | indentWidth = 2;
93 | sourceTree = "";
94 | tabWidth = 2;
95 | usesTabs = 0;
96 | };
97 | 83CBBA001A601CBA00E9B192 /* Products */ = {
98 | isa = PBXGroup;
99 | children = (
100 | 13B07F961A680F5B00A75B9A /* exposhazamkitexample.app */,
101 | );
102 | name = Products;
103 | sourceTree = "";
104 | };
105 | 92DBD88DE9BF7D494EA9DA96 /* exposhazamkitexample */ = {
106 | isa = PBXGroup;
107 | children = (
108 | FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */,
109 | );
110 | name = exposhazamkitexample;
111 | sourceTree = "";
112 | };
113 | BB2F792B24A3F905000567C9 /* Supporting */ = {
114 | isa = PBXGroup;
115 | children = (
116 | BB2F792C24A3F905000567C9 /* Expo.plist */,
117 | );
118 | name = Supporting;
119 | path = exposhazamkitexample/Supporting;
120 | sourceTree = "";
121 | };
122 | D65327D7A22EEC0BE12398D9 /* Pods */ = {
123 | isa = PBXGroup;
124 | children = (
125 | 6C2E3173556A471DD304B334 /* Pods-exposhazamkitexample.debug.xcconfig */,
126 | 7A4D352CD337FB3A3BF06240 /* Pods-exposhazamkitexample.release.xcconfig */,
127 | );
128 | path = Pods;
129 | sourceTree = "";
130 | };
131 | D7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */ = {
132 | isa = PBXGroup;
133 | children = (
134 | 92DBD88DE9BF7D494EA9DA96 /* exposhazamkitexample */,
135 | );
136 | name = ExpoModulesProviders;
137 | sourceTree = "";
138 | };
139 | /* End PBXGroup section */
140 |
141 | /* Begin PBXNativeTarget section */
142 | 13B07F861A680F5B00A75B9A /* exposhazamkitexample */ = {
143 | isa = PBXNativeTarget;
144 | buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "exposhazamkitexample" */;
145 | buildPhases = (
146 | 08A4A3CD28434E44B6B9DE2E /* [CP] Check Pods Manifest.lock */,
147 | FD10A7F022414F080027D42C /* Start Packager */,
148 | B72C1BA71A5EADE48AAF6468 /* [Expo] Configure project */,
149 | 13B07F871A680F5B00A75B9A /* Sources */,
150 | 13B07F8C1A680F5B00A75B9A /* Frameworks */,
151 | 13B07F8E1A680F5B00A75B9A /* Resources */,
152 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
153 | 800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */,
154 | 9FC0E56796DED1A0EA24250C /* [CP] Embed Pods Frameworks */,
155 | );
156 | buildRules = (
157 | );
158 | dependencies = (
159 | );
160 | name = exposhazamkitexample;
161 | productName = exposhazamkitexample;
162 | productReference = 13B07F961A680F5B00A75B9A /* exposhazamkitexample.app */;
163 | productType = "com.apple.product-type.application";
164 | };
165 | /* End PBXNativeTarget section */
166 |
167 | /* Begin PBXProject section */
168 | 83CBB9F71A601CBA00E9B192 /* Project object */ = {
169 | isa = PBXProject;
170 | attributes = {
171 | LastUpgradeCheck = 1130;
172 | TargetAttributes = {
173 | 13B07F861A680F5B00A75B9A = {
174 | LastSwiftMigration = 1250;
175 | };
176 | };
177 | };
178 | buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "exposhazamkitexample" */;
179 | compatibilityVersion = "Xcode 3.2";
180 | developmentRegion = en;
181 | hasScannedForEncodings = 0;
182 | knownRegions = (
183 | en,
184 | Base,
185 | );
186 | mainGroup = 83CBB9F61A601CBA00E9B192;
187 | productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
188 | projectDirPath = "";
189 | projectRoot = "";
190 | targets = (
191 | 13B07F861A680F5B00A75B9A /* exposhazamkitexample */,
192 | );
193 | };
194 | /* End PBXProject section */
195 |
196 | /* Begin PBXResourcesBuildPhase section */
197 | 13B07F8E1A680F5B00A75B9A /* Resources */ = {
198 | isa = PBXResourcesBuildPhase;
199 | buildActionMask = 2147483647;
200 | files = (
201 | BB2F792D24A3F905000567C9 /* Expo.plist in Resources */,
202 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
203 | 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */,
204 | );
205 | runOnlyForDeploymentPostprocessing = 0;
206 | };
207 | /* End PBXResourcesBuildPhase section */
208 |
209 | /* Begin PBXShellScriptBuildPhase section */
210 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = {
211 | isa = PBXShellScriptBuildPhase;
212 | buildActionMask = 2147483647;
213 | files = (
214 | );
215 | inputPaths = (
216 | );
217 | name = "Bundle React Native code and images";
218 | outputPaths = (
219 | );
220 | runOnlyForDeploymentPostprocessing = 0;
221 | shellPath = /bin/sh;
222 | shellScript = "if [[ -f \"$PODS_ROOT/../.xcode.env\" ]]; then\n source \"$PODS_ROOT/../.xcode.env\"\nfi\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\n# The project root by default is one level up from the ios directory\nexport PROJECT_ROOT=\"$PROJECT_DIR\"/..\n\nif [[ \"$CONFIGURATION\" = *Debug* ]]; then\n export SKIP_BUNDLING=1\nfi\nif [[ -z \"$ENTRY_FILE\" ]]; then\n # Set the entry JS file using the bundler's entry resolution.\n export ENTRY_FILE=\"$(\"$NODE_BINARY\" -e \"require('expo/scripts/resolveAppEntry')\" \"$PROJECT_ROOT\" ios relative | tail -n 1)\"\nfi\n\nif [[ -z \"$CLI_PATH\" ]]; then\n # Use Expo CLI\n export CLI_PATH=\"$(\"$NODE_BINARY\" --print \"require.resolve('@expo/cli')\")\"\nfi\nif [[ -z \"$BUNDLE_COMMAND\" ]]; then\n # Default Expo CLI command for bundling\n export BUNDLE_COMMAND=\"export:embed\"\nfi\n\n`\"$NODE_BINARY\" --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/react-native-xcode.sh'\"`\n\n";
223 | };
224 | 08A4A3CD28434E44B6B9DE2E /* [CP] Check Pods Manifest.lock */ = {
225 | isa = PBXShellScriptBuildPhase;
226 | buildActionMask = 2147483647;
227 | files = (
228 | );
229 | inputFileListPaths = (
230 | );
231 | inputPaths = (
232 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
233 | "${PODS_ROOT}/Manifest.lock",
234 | );
235 | name = "[CP] Check Pods Manifest.lock";
236 | outputFileListPaths = (
237 | );
238 | outputPaths = (
239 | "$(DERIVED_FILE_DIR)/Pods-exposhazamkitexample-checkManifestLockResult.txt",
240 | );
241 | runOnlyForDeploymentPostprocessing = 0;
242 | shellPath = /bin/sh;
243 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
244 | showEnvVarsInLog = 0;
245 | };
246 | 800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */ = {
247 | isa = PBXShellScriptBuildPhase;
248 | buildActionMask = 2147483647;
249 | files = (
250 | );
251 | inputPaths = (
252 | "${PODS_ROOT}/Target Support Files/Pods-exposhazamkitexample/Pods-exposhazamkitexample-resources.sh",
253 | "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/EXConstants.bundle",
254 | "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle",
255 | );
256 | name = "[CP] Copy Pods Resources";
257 | outputPaths = (
258 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXConstants.bundle",
259 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle",
260 | );
261 | runOnlyForDeploymentPostprocessing = 0;
262 | shellPath = /bin/sh;
263 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-exposhazamkitexample/Pods-exposhazamkitexample-resources.sh\"\n";
264 | showEnvVarsInLog = 0;
265 | };
266 | 9FC0E56796DED1A0EA24250C /* [CP] Embed Pods Frameworks */ = {
267 | isa = PBXShellScriptBuildPhase;
268 | buildActionMask = 2147483647;
269 | files = (
270 | );
271 | inputPaths = (
272 | "${PODS_ROOT}/Target Support Files/Pods-exposhazamkitexample/Pods-exposhazamkitexample-frameworks.sh",
273 | "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes",
274 | );
275 | name = "[CP] Embed Pods Frameworks";
276 | outputPaths = (
277 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework",
278 | );
279 | runOnlyForDeploymentPostprocessing = 0;
280 | shellPath = /bin/sh;
281 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-exposhazamkitexample/Pods-exposhazamkitexample-frameworks.sh\"\n";
282 | showEnvVarsInLog = 0;
283 | };
284 | B72C1BA71A5EADE48AAF6468 /* [Expo] Configure project */ = {
285 | isa = PBXShellScriptBuildPhase;
286 | alwaysOutOfDate = 1;
287 | buildActionMask = 2147483647;
288 | files = (
289 | );
290 | inputFileListPaths = (
291 | );
292 | inputPaths = (
293 | );
294 | name = "[Expo] Configure project";
295 | outputFileListPaths = (
296 | );
297 | outputPaths = (
298 | );
299 | runOnlyForDeploymentPostprocessing = 0;
300 | shellPath = /bin/sh;
301 | shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-exposhazamkitexample/expo-configure-project.sh\"\n";
302 | };
303 | FD10A7F022414F080027D42C /* Start Packager */ = {
304 | isa = PBXShellScriptBuildPhase;
305 | buildActionMask = 2147483647;
306 | files = (
307 | );
308 | inputFileListPaths = (
309 | );
310 | inputPaths = (
311 | );
312 | name = "Start Packager";
313 | outputFileListPaths = (
314 | );
315 | outputPaths = (
316 | );
317 | runOnlyForDeploymentPostprocessing = 0;
318 | shellPath = /bin/sh;
319 | shellScript = "if [[ -f \"$PODS_ROOT/../.xcode.env\" ]]; then\n source \"$PODS_ROOT/../.xcode.env\"\nfi\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\nexport RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > `$NODE_BINARY --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/.packager.env'\"`\nif [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\n if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\n if ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\n echo \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\n exit 2\n fi\n else\n open `$NODE_BINARY --print \"require('path').dirname(require.resolve('expo/package.json')) + '/scripts/launchPackager.command'\"` || echo \"Can't start packager automatically\"\n fi\nfi\n";
320 | showEnvVarsInLog = 0;
321 | };
322 | /* End PBXShellScriptBuildPhase section */
323 |
324 | /* Begin PBXSourcesBuildPhase section */
325 | 13B07F871A680F5B00A75B9A /* Sources */ = {
326 | isa = PBXSourcesBuildPhase;
327 | buildActionMask = 2147483647;
328 | files = (
329 | 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,
330 | 13B07FC11A68108700A75B9A /* main.m in Sources */,
331 | B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */,
332 | 1F89DBBD6C64427294E4C01A /* noop-file.swift in Sources */,
333 | );
334 | runOnlyForDeploymentPostprocessing = 0;
335 | };
336 | /* End PBXSourcesBuildPhase section */
337 |
338 | /* Begin XCBuildConfiguration section */
339 | 13B07F941A680F5B00A75B9A /* Debug */ = {
340 | isa = XCBuildConfiguration;
341 | baseConfigurationReference = 6C2E3173556A471DD304B334 /* Pods-exposhazamkitexample.debug.xcconfig */;
342 | buildSettings = {
343 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
344 | CLANG_ENABLE_MODULES = YES;
345 | CODE_SIGN_ENTITLEMENTS = exposhazamkitexample/exposhazamkitexample.entitlements;
346 | CURRENT_PROJECT_VERSION = 1;
347 | DEVELOPMENT_TEAM = 4A897PS7ZW;
348 | ENABLE_BITCODE = NO;
349 | GCC_PREPROCESSOR_DEFINITIONS = (
350 | "$(inherited)",
351 | "FB_SONARKIT_ENABLED=1",
352 | );
353 | INFOPLIST_FILE = exposhazamkitexample/Info.plist;
354 | IPHONEOS_DEPLOYMENT_TARGET = 15.0;
355 | LD_RUNPATH_SEARCH_PATHS = (
356 | "$(inherited)",
357 | "@executable_path/Frameworks",
358 | );
359 | MARKETING_VERSION = 1.0;
360 | OTHER_LDFLAGS = (
361 | "$(inherited)",
362 | "-ObjC",
363 | "-lc++",
364 | );
365 | OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG";
366 | PRODUCT_BUNDLE_IDENTIFIER = expo.community.modules.shazamkit.example;
367 | PRODUCT_NAME = exposhazamkitexample;
368 | SWIFT_OBJC_BRIDGING_HEADER = "exposhazamkitexample/exposhazamkitexample-Bridging-Header.h";
369 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
370 | SWIFT_VERSION = 5.0;
371 | TARGETED_DEVICE_FAMILY = "1,2";
372 | VERSIONING_SYSTEM = "apple-generic";
373 | };
374 | name = Debug;
375 | };
376 | 13B07F951A680F5B00A75B9A /* Release */ = {
377 | isa = XCBuildConfiguration;
378 | baseConfigurationReference = 7A4D352CD337FB3A3BF06240 /* Pods-exposhazamkitexample.release.xcconfig */;
379 | buildSettings = {
380 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
381 | CLANG_ENABLE_MODULES = YES;
382 | CODE_SIGN_ENTITLEMENTS = exposhazamkitexample/exposhazamkitexample.entitlements;
383 | CURRENT_PROJECT_VERSION = 1;
384 | DEVELOPMENT_TEAM = 4A897PS7ZW;
385 | INFOPLIST_FILE = exposhazamkitexample/Info.plist;
386 | IPHONEOS_DEPLOYMENT_TARGET = 15.0;
387 | LD_RUNPATH_SEARCH_PATHS = (
388 | "$(inherited)",
389 | "@executable_path/Frameworks",
390 | );
391 | MARKETING_VERSION = 1.0;
392 | OTHER_LDFLAGS = (
393 | "$(inherited)",
394 | "-ObjC",
395 | "-lc++",
396 | );
397 | OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
398 | PRODUCT_BUNDLE_IDENTIFIER = expo.community.modules.shazamkit.example;
399 | PRODUCT_NAME = exposhazamkitexample;
400 | SWIFT_OBJC_BRIDGING_HEADER = "exposhazamkitexample/exposhazamkitexample-Bridging-Header.h";
401 | SWIFT_VERSION = 5.0;
402 | TARGETED_DEVICE_FAMILY = "1,2";
403 | VERSIONING_SYSTEM = "apple-generic";
404 | };
405 | name = Release;
406 | };
407 | 83CBBA201A601CBA00E9B192 /* Debug */ = {
408 | isa = XCBuildConfiguration;
409 | buildSettings = {
410 | ALWAYS_SEARCH_USER_PATHS = NO;
411 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
412 | CLANG_CXX_LANGUAGE_STANDARD = "c++17";
413 | CLANG_CXX_LIBRARY = "libc++";
414 | CLANG_ENABLE_MODULES = YES;
415 | CLANG_ENABLE_OBJC_ARC = YES;
416 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
417 | CLANG_WARN_BOOL_CONVERSION = YES;
418 | CLANG_WARN_COMMA = YES;
419 | CLANG_WARN_CONSTANT_CONVERSION = YES;
420 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
421 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
422 | CLANG_WARN_EMPTY_BODY = YES;
423 | CLANG_WARN_ENUM_CONVERSION = YES;
424 | CLANG_WARN_INFINITE_RECURSION = YES;
425 | CLANG_WARN_INT_CONVERSION = YES;
426 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
427 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
428 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
429 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
430 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
431 | CLANG_WARN_STRICT_PROTOTYPES = YES;
432 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
433 | CLANG_WARN_UNREACHABLE_CODE = YES;
434 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
435 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
436 | COPY_PHASE_STRIP = NO;
437 | ENABLE_STRICT_OBJC_MSGSEND = YES;
438 | ENABLE_TESTABILITY = YES;
439 | "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386;
440 | GCC_C_LANGUAGE_STANDARD = gnu99;
441 | GCC_DYNAMIC_NO_PIC = NO;
442 | GCC_NO_COMMON_BLOCKS = YES;
443 | GCC_OPTIMIZATION_LEVEL = 0;
444 | GCC_PREPROCESSOR_DEFINITIONS = (
445 | "DEBUG=1",
446 | "$(inherited)",
447 | _LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION,
448 | );
449 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
450 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
451 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
452 | GCC_WARN_UNDECLARED_SELECTOR = YES;
453 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
454 | GCC_WARN_UNUSED_FUNCTION = YES;
455 | GCC_WARN_UNUSED_VARIABLE = YES;
456 | IPHONEOS_DEPLOYMENT_TARGET = 13.0;
457 | LD_RUNPATH_SEARCH_PATHS = (
458 | /usr/lib/swift,
459 | "$(inherited)",
460 | );
461 | LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\"";
462 | MTL_ENABLE_DEBUG_INFO = YES;
463 | ONLY_ACTIVE_ARCH = YES;
464 | OTHER_CFLAGS = "$(inherited)";
465 | OTHER_CPLUSPLUSFLAGS = "$(inherited)";
466 | OTHER_LDFLAGS = (
467 | "$(inherited)",
468 | "-Wl",
469 | "-ld_classic",
470 | );
471 | REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
472 | SDKROOT = iphoneos;
473 | };
474 | name = Debug;
475 | };
476 | 83CBBA211A601CBA00E9B192 /* Release */ = {
477 | isa = XCBuildConfiguration;
478 | buildSettings = {
479 | ALWAYS_SEARCH_USER_PATHS = NO;
480 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
481 | CLANG_CXX_LANGUAGE_STANDARD = "c++17";
482 | CLANG_CXX_LIBRARY = "libc++";
483 | CLANG_ENABLE_MODULES = YES;
484 | CLANG_ENABLE_OBJC_ARC = YES;
485 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
486 | CLANG_WARN_BOOL_CONVERSION = YES;
487 | CLANG_WARN_COMMA = YES;
488 | CLANG_WARN_CONSTANT_CONVERSION = YES;
489 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
490 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
491 | CLANG_WARN_EMPTY_BODY = YES;
492 | CLANG_WARN_ENUM_CONVERSION = YES;
493 | CLANG_WARN_INFINITE_RECURSION = YES;
494 | CLANG_WARN_INT_CONVERSION = YES;
495 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
496 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
497 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
498 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
499 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
500 | CLANG_WARN_STRICT_PROTOTYPES = YES;
501 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
502 | CLANG_WARN_UNREACHABLE_CODE = YES;
503 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
504 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
505 | COPY_PHASE_STRIP = YES;
506 | ENABLE_NS_ASSERTIONS = NO;
507 | ENABLE_STRICT_OBJC_MSGSEND = YES;
508 | "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386;
509 | GCC_C_LANGUAGE_STANDARD = gnu99;
510 | GCC_NO_COMMON_BLOCKS = YES;
511 | GCC_PREPROCESSOR_DEFINITIONS = (
512 | "$(inherited)",
513 | _LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION,
514 | );
515 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
516 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
517 | GCC_WARN_UNDECLARED_SELECTOR = YES;
518 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
519 | GCC_WARN_UNUSED_FUNCTION = YES;
520 | GCC_WARN_UNUSED_VARIABLE = YES;
521 | IPHONEOS_DEPLOYMENT_TARGET = 13.0;
522 | LD_RUNPATH_SEARCH_PATHS = (
523 | /usr/lib/swift,
524 | "$(inherited)",
525 | );
526 | LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\"";
527 | MTL_ENABLE_DEBUG_INFO = NO;
528 | OTHER_CFLAGS = "$(inherited)";
529 | OTHER_CPLUSPLUSFLAGS = "$(inherited)";
530 | OTHER_LDFLAGS = (
531 | "$(inherited)",
532 | "-Wl",
533 | "-ld_classic",
534 | );
535 | REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
536 | SDKROOT = iphoneos;
537 | VALIDATE_PRODUCT = YES;
538 | };
539 | name = Release;
540 | };
541 | /* End XCBuildConfiguration section */
542 |
543 | /* Begin XCConfigurationList section */
544 | 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "exposhazamkitexample" */ = {
545 | isa = XCConfigurationList;
546 | buildConfigurations = (
547 | 13B07F941A680F5B00A75B9A /* Debug */,
548 | 13B07F951A680F5B00A75B9A /* Release */,
549 | );
550 | defaultConfigurationIsVisible = 0;
551 | defaultConfigurationName = Release;
552 | };
553 | 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "exposhazamkitexample" */ = {
554 | isa = XCConfigurationList;
555 | buildConfigurations = (
556 | 83CBBA201A601CBA00E9B192 /* Debug */,
557 | 83CBBA211A601CBA00E9B192 /* Release */,
558 | );
559 | defaultConfigurationIsVisible = 0;
560 | defaultConfigurationName = Release;
561 | };
562 | /* End XCConfigurationList section */
563 | };
564 | rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
565 | }
566 |
--------------------------------------------------------------------------------
/example/ios/exposhazamkitexample.xcodeproj/xcshareddata/xcschemes/exposhazamkitexample.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
33 |
39 |
40 |
41 |
42 |
43 |
53 |
55 |
61 |
62 |
63 |
64 |
70 |
72 |
78 |
79 |
80 |
81 |
83 |
84 |
87 |
88 |
89 |
--------------------------------------------------------------------------------
/example/ios/exposhazamkitexample.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/example/ios/exposhazamkitexample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/example/ios/exposhazamkitexample/AppDelegate.h:
--------------------------------------------------------------------------------
1 | #import
2 | #import
3 | #import
4 |
5 | @interface AppDelegate : EXAppDelegateWrapper
6 |
7 | @end
8 |
--------------------------------------------------------------------------------
/example/ios/exposhazamkitexample/AppDelegate.mm:
--------------------------------------------------------------------------------
1 | #import "AppDelegate.h"
2 |
3 | #import
4 | #import
5 |
6 | @implementation AppDelegate
7 |
8 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
9 | {
10 | self.moduleName = @"main";
11 |
12 | // You can add your custom initial props in the dictionary below.
13 | // They will be passed down to the ViewController used by React Native.
14 | self.initialProps = @{};
15 |
16 | return [super application:application didFinishLaunchingWithOptions:launchOptions];
17 | }
18 |
19 | - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
20 | {
21 | #if DEBUG
22 | return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@".expo/.virtual-metro-entry"];
23 | #else
24 | return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
25 | #endif
26 | }
27 |
28 | // Linking API
29 | - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary *)options {
30 | return [super application:application openURL:url options:options] || [RCTLinkingManager application:application openURL:url options:options];
31 | }
32 |
33 | // Universal Links
34 | - (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray> * _Nullable))restorationHandler {
35 | BOOL result = [RCTLinkingManager application:application continueUserActivity:userActivity restorationHandler:restorationHandler];
36 | return [super application:application continueUserActivity:userActivity restorationHandler:restorationHandler] || result;
37 | }
38 |
39 | // Explicitly define remote notification delegates to ensure compatibility with some third-party libraries
40 | - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
41 | {
42 | return [super application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
43 | }
44 |
45 | // Explicitly define remote notification delegates to ensure compatibility with some third-party libraries
46 | - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
47 | {
48 | return [super application:application didFailToRegisterForRemoteNotificationsWithError:error];
49 | }
50 |
51 | // Explicitly define remote notification delegates to ensure compatibility with some third-party libraries
52 | - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
53 | {
54 | return [super application:application didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler];
55 | }
56 |
57 | @end
58 |
--------------------------------------------------------------------------------
/example/ios/exposhazamkitexample/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alanjhughes/expo-shazamkit/c6ccdc2a01799603220ad1afdb959046c011f2db/example/ios/exposhazamkitexample/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png
--------------------------------------------------------------------------------
/example/ios/exposhazamkitexample/Images.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images": [
3 | {
4 | "filename": "App-Icon-1024x1024@1x.png",
5 | "idiom": "universal",
6 | "platform": "ios",
7 | "size": "1024x1024"
8 | }
9 | ],
10 | "info": {
11 | "version": 1,
12 | "author": "expo"
13 | }
14 | }
--------------------------------------------------------------------------------
/example/ios/exposhazamkitexample/Images.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "expo"
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/example/ios/exposhazamkitexample/Images.xcassets/SplashScreen.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images": [
3 | {
4 | "idiom": "universal",
5 | "filename": "image.png",
6 | "scale": "1x"
7 | },
8 | {
9 | "idiom": "universal",
10 | "scale": "2x"
11 | },
12 | {
13 | "idiom": "universal",
14 | "scale": "3x"
15 | }
16 | ],
17 | "info": {
18 | "version": 1,
19 | "author": "expo"
20 | }
21 | }
--------------------------------------------------------------------------------
/example/ios/exposhazamkitexample/Images.xcassets/SplashScreen.imageset/image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alanjhughes/expo-shazamkit/c6ccdc2a01799603220ad1afdb959046c011f2db/example/ios/exposhazamkitexample/Images.xcassets/SplashScreen.imageset/image.png
--------------------------------------------------------------------------------
/example/ios/exposhazamkitexample/Images.xcassets/SplashScreenBackground.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images": [
3 | {
4 | "idiom": "universal",
5 | "filename": "image.png",
6 | "scale": "1x"
7 | },
8 | {
9 | "idiom": "universal",
10 | "scale": "2x"
11 | },
12 | {
13 | "idiom": "universal",
14 | "scale": "3x"
15 | }
16 | ],
17 | "info": {
18 | "version": 1,
19 | "author": "expo"
20 | }
21 | }
--------------------------------------------------------------------------------
/example/ios/exposhazamkitexample/Images.xcassets/SplashScreenBackground.imageset/image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alanjhughes/expo-shazamkit/c6ccdc2a01799603220ad1afdb959046c011f2db/example/ios/exposhazamkitexample/Images.xcassets/SplashScreenBackground.imageset/image.png
--------------------------------------------------------------------------------
/example/ios/exposhazamkitexample/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CADisableMinimumFrameDurationOnPhone
6 |
7 | CFBundleDevelopmentRegion
8 | $(DEVELOPMENT_LANGUAGE)
9 | CFBundleDisplayName
10 | expo-shazamkit-example
11 | CFBundleExecutable
12 | $(EXECUTABLE_NAME)
13 | CFBundleIdentifier
14 | $(PRODUCT_BUNDLE_IDENTIFIER)
15 | CFBundleInfoDictionaryVersion
16 | 6.0
17 | CFBundleName
18 | $(PRODUCT_NAME)
19 | CFBundlePackageType
20 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
21 | CFBundleShortVersionString
22 | 1.0.0
23 | CFBundleSignature
24 | ????
25 | CFBundleURLTypes
26 |
27 |
28 | CFBundleURLSchemes
29 |
30 | expo.community.modules.shazamkit.example
31 |
32 |
33 |
34 | CFBundleVersion
35 | 1
36 | LSRequiresIPhoneOS
37 |
38 | NSAppTransportSecurity
39 |
40 | NSAllowsArbitraryLoads
41 |
42 | NSExceptionDomains
43 |
44 | localhost
45 |
46 | NSExceptionAllowsInsecureHTTPLoads
47 |
48 |
49 |
50 |
51 | NSMicrophoneUsageDescription
52 | $(PRODUCT_NAME) needs access to the microphone
53 | UILaunchStoryboardName
54 | SplashScreen
55 | UIRequiredDeviceCapabilities
56 |
57 | armv7
58 |
59 | UIRequiresFullScreen
60 |
61 | UIStatusBarStyle
62 | UIStatusBarStyleDefault
63 | UISupportedInterfaceOrientations
64 |
65 | UIInterfaceOrientationPortrait
66 | UIInterfaceOrientationPortraitUpsideDown
67 |
68 | UISupportedInterfaceOrientations~ipad
69 |
70 | UIInterfaceOrientationPortrait
71 | UIInterfaceOrientationPortraitUpsideDown
72 | UIInterfaceOrientationLandscapeLeft
73 | UIInterfaceOrientationLandscapeRight
74 |
75 | UIUserInterfaceStyle
76 | Light
77 | UIViewControllerBasedStatusBarAppearance
78 |
79 |
80 |
81 |
--------------------------------------------------------------------------------
/example/ios/exposhazamkitexample/SplashScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/example/ios/exposhazamkitexample/Supporting/Expo.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | EXUpdatesCheckOnLaunch
6 | ALWAYS
7 | EXUpdatesEnabled
8 |
9 | EXUpdatesLaunchWaitMs
10 | 0
11 | EXUpdatesSDKVersion
12 | 49.0.0
13 |
14 |
--------------------------------------------------------------------------------
/example/ios/exposhazamkitexample/exposhazamkitexample-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | //
2 | // Use this file to import your target's public headers that you would like to expose to Swift.
3 | //
4 |
--------------------------------------------------------------------------------
/example/ios/exposhazamkitexample/exposhazamkitexample.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | aps-environment
6 | development
7 |
8 |
--------------------------------------------------------------------------------
/example/ios/exposhazamkitexample/main.m:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | #import "AppDelegate.h"
4 |
5 | int main(int argc, char * argv[]) {
6 | @autoreleasepool {
7 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
8 | }
9 | }
10 |
11 |
--------------------------------------------------------------------------------
/example/ios/exposhazamkitexample/noop-file.swift:
--------------------------------------------------------------------------------
1 | //
2 | // @generated
3 | // A blank Swift file must be created for native modules with Swift files to work correctly.
4 | //
5 |
--------------------------------------------------------------------------------
/example/metro.config.js:
--------------------------------------------------------------------------------
1 | // Learn more https://docs.expo.io/guides/customizing-metro
2 | const { getDefaultConfig } = require("expo/metro-config");
3 | const path = require("path");
4 |
5 | /* global __dirname */
6 | const config = getDefaultConfig(__dirname);
7 |
8 | // npm v7+ will install ../node_modules/react-native because of peerDependencies.
9 | // To prevent the incompatible react-native bewtween ./node_modules/react-native and ../node_modules/react-native,
10 | // excludes the one from the parent folder when bundling.
11 | config.resolver.blockList = [
12 | ...Array.from(config.resolver.blockList ?? []),
13 | new RegExp(path.resolve("..", "node_modules", "react-native")),
14 | ];
15 |
16 | config.resolver.nodeModulesPaths = [
17 | path.resolve(__dirname, "./node_modules"),
18 | path.resolve(__dirname, "../node_modules"),
19 | ];
20 |
21 | config.watchFolders = [path.resolve(__dirname, "..")];
22 |
23 | config.transformer.getTransformOptions = async () => ({
24 | transform: {
25 | experimentalImportSupport: false,
26 | inlineRequires: true,
27 | },
28 | });
29 |
30 | module.exports = config;
31 |
--------------------------------------------------------------------------------
/example/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "expo-shazamkit-example",
3 | "version": "1.0.0",
4 | "scripts": {
5 | "start": "expo start --dev-client",
6 | "android": "expo run:android",
7 | "ios": "expo run:ios",
8 | "web": "expo start --web"
9 | },
10 | "dependencies": {
11 | "expo": "^49.0.18",
12 | "expo-build-properties": "~0.8.3",
13 | "expo-image": "~1.3.5",
14 | "expo-linking": "~5.0.2",
15 | "expo-splash-screen": "~0.20.5",
16 | "expo-status-bar": "~1.6.0",
17 | "moti": "^0.24.2",
18 | "react": "18.2.0",
19 | "react-native": "0.72.6",
20 | "react-native-reanimated": "~3.3.0"
21 | },
22 | "devDependencies": {
23 | "@babel/core": "^7.20.0",
24 | "@types/react": "~18.2.14",
25 | "typescript": "^5.1.3"
26 | },
27 | "private": true,
28 | "expo": {
29 | "autolinking": {
30 | "nativeModulesDir": ".."
31 | }
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/example/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "expo/tsconfig.base",
3 | "compilerOptions": {
4 | "strict": true,
5 | "paths": {
6 | "expo-shazamkit": ["../src/index"],
7 | "expo-shazamkit/*": ["../src/*"]
8 | }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/expo-module.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "platforms": ["ios"],
3 | "ios": {
4 | "modules": ["ShazamKitModule"]
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/ios/MatchedItem.swift:
--------------------------------------------------------------------------------
1 | import ExpoModulesCore
2 |
3 | internal struct MatchedItem: Record {
4 | @Field
5 | var title: String? = nil
6 | @Field
7 | var artist: String? = nil
8 | @Field
9 | var shazamID: String? = nil
10 | @Field
11 | var appleMusicID: String? = nil
12 | @Field
13 | var appleMusicURL: String? = nil
14 | @Field
15 | var artworkURL: String? = nil
16 | @Field
17 | var genres: [String] = []
18 | @Field
19 | var webURL: String? = nil
20 | @Field
21 | var subtitle: String? = nil
22 | @Field
23 | var videoURL: String? = nil
24 | @Field
25 | var explicitContent: Bool = false
26 | @Field
27 | var matchOffset: Double = 0.0
28 | }
29 |
--------------------------------------------------------------------------------
/ios/ShazamDelegate.swift:
--------------------------------------------------------------------------------
1 | import ShazamKit
2 |
3 | protocol ResultHandler {
4 | func didFind(match: SHMatch)
5 | func didNotFind(match: SHSignature)
6 | }
7 |
8 | class ShazamDelegate: NSObject, SHSessionDelegate {
9 | private let resultHandler: ResultHandler
10 |
11 | init(resultHandler: ResultHandler) {
12 | self.resultHandler = resultHandler
13 | }
14 |
15 | func session(_ session: SHSession, didFind match: SHMatch) {
16 | resultHandler.didFind(match: match)
17 | }
18 |
19 | func session(_ session: SHSession, didNotFindMatchFor signature: SHSignature, error: Error?) {
20 | resultHandler.didNotFind(match: signature)
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/ios/ShazamExceptions.swift:
--------------------------------------------------------------------------------
1 | import ExpoModulesCore
2 |
3 | internal class SearchInProgressException: Exception {
4 | override var reason: String {
5 | "Search is already in progress. Please cancel current search and try again"
6 | }
7 | }
8 |
9 | internal class NoMatchException: Exception {
10 | override var reason: String {
11 | "Could not find a match"
12 | }
13 | }
14 |
15 | internal class FailedToStartAudioEngine: Exception {
16 | override var reason: String {
17 | "Audio engine could not be started. Try again"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/ios/ShazamKitModule.podspec:
--------------------------------------------------------------------------------
1 | require 'json'
2 |
3 | package = JSON.parse(File.read(File.join(__dir__, '..', 'package.json')))
4 |
5 | Pod::Spec.new do |s|
6 | s.name = 'ShazamKitModule'
7 | s.version = package['version']
8 | s.summary = package['description']
9 | s.description = package['description']
10 | s.license = package['license']
11 | s.author = package['author']
12 | s.homepage = package['homepage']
13 | s.platform = :ios, '15.0'
14 | s.swift_version = '5.4'
15 | s.source = { git: 'https://github.com/alanjhughes/expo-shazamkit' }
16 | s.static_framework = true
17 |
18 | s.dependency 'ExpoModulesCore'
19 |
20 | # Swift/Objective-C compatibility
21 | s.pod_target_xcconfig = {
22 | 'DEFINES_MODULE' => 'YES',
23 | 'SWIFT_COMPILATION_MODE' => 'wholemodule'
24 | }
25 |
26 | s.source_files = "**/*.{h,m,swift}"
27 | end
28 |
--------------------------------------------------------------------------------
/ios/ShazamKitModule.swift:
--------------------------------------------------------------------------------
1 | import ExpoModulesCore
2 | import ShazamKit
3 |
4 | public class ShazamKitModule: Module, ResultHandler {
5 | private let session = SHSession()
6 | private var delegate: ShazamDelegate?
7 |
8 | private let audioEngine = AVAudioEngine()
9 | private let mixerNode = AVAudioMixerNode()
10 |
11 | private var pendingPromise: Promise?
12 |
13 | private var latestResults = [SHMediaItem]()
14 |
15 | public func definition() -> ModuleDefinition {
16 | Name("ExpoShazamKit")
17 |
18 | OnCreate {
19 | delegate = ShazamDelegate(resultHandler: self)
20 | session.delegate = delegate
21 | configureAudioEngine()
22 | }
23 |
24 | Function("isAvailable") {
25 | return true
26 | }
27 |
28 | AsyncFunction("startListening") { (promise: Promise) in
29 | if pendingPromise != nil {
30 | promise.reject(SearchInProgressException())
31 | return
32 | }
33 |
34 | pendingPromise = promise
35 |
36 | do {
37 | try findMatch()
38 | } catch {
39 | promise.reject(error)
40 | pendingPromise = nil
41 | }
42 | }
43 |
44 | AsyncFunction("addToShazamLibrary") { (promise: Promise) in
45 | if latestResults.isEmpty {
46 | promise.resolve(["success": false])
47 | return
48 | }
49 |
50 | SHMediaLibrary.default.add(latestResults) { [weak self] error in
51 | if error != nil {
52 | promise.resolve(["success": false])
53 | }
54 |
55 | self?.latestResults.removeAll()
56 | promise.resolve(["success": true])
57 | }
58 | }
59 |
60 | Function("stopListening") {
61 | stopListening()
62 | }
63 | }
64 |
65 | func didFind(match: SHMatch) {
66 | guard let promise = pendingPromise else {
67 | log.error("Shazam module: promise has been lost")
68 | stopListening()
69 | return
70 | }
71 |
72 | stopListening()
73 |
74 | let items = match.mediaItems.map { item in
75 | MatchedItem(
76 | title: item.title,
77 | artist: item.artist,
78 | shazamID: item.shazamID,
79 | appleMusicID: item.appleMusicID,
80 | appleMusicURL: item.appleMusicURL?.absoluteString,
81 | artworkURL: item.artworkURL?.absoluteString,
82 | genres: item.genres,
83 | webURL: item.webURL?.absoluteString,
84 | subtitle: item.subtitle,
85 | videoURL: item.videoURL?.absoluteString,
86 | explicitContent: item.explicitContent,
87 | matchOffset: Double(item.matchOffset.description) ?? 0.0
88 | )
89 | }
90 |
91 | latestResults = match.mediaItems
92 | promise.resolve(items)
93 | }
94 |
95 | func didNotFind(match: SHSignature) {
96 | guard let promise = pendingPromise else {
97 | log.error("ExpoShazamKit: promise has been lost")
98 | return
99 | }
100 |
101 | promise.reject(NoMatchException())
102 | stopListening()
103 | }
104 |
105 | private func findMatch() throws {
106 | guard !audioEngine.isRunning else { return }
107 | let audioSession = AVAudioSession.sharedInstance()
108 | try audioSession.setCategory(.playAndRecord)
109 |
110 | audioSession.requestRecordPermission { [weak self] success in
111 | guard success, let self else { return }
112 | do {
113 | try self.audioEngine.start()
114 | } catch {
115 | self.pendingPromise?.reject(FailedToStartAudioEngine())
116 | self.pendingPromise = nil
117 | }
118 | }
119 | }
120 |
121 | private func stopListening() {
122 | audioEngine.stop()
123 | pendingPromise = nil
124 | }
125 |
126 | private func configureAudioEngine() {
127 | let inputFormat = audioEngine.inputNode.inputFormat(forBus: 0)
128 | let outputFormat = AVAudioFormat(standardFormatWithSampleRate: inputFormat.sampleRate, channels: 1)
129 |
130 | audioEngine.attach(mixerNode)
131 |
132 | audioEngine.connect(audioEngine.inputNode, to: mixerNode, format: inputFormat)
133 | audioEngine.connect(mixerNode, to: audioEngine.outputNode, format: outputFormat)
134 |
135 | mixerNode.installTap(onBus: 0, bufferSize: 2048, format: outputFormat) { buffer, audioTime in
136 | self.addAudio(buffer: buffer, audioTime: audioTime)
137 | }
138 | }
139 |
140 | private func addAudio(buffer: AVAudioPCMBuffer, audioTime: AVAudioTime) {
141 | session.matchStreamingBuffer(buffer, at: audioTime)
142 | }
143 | }
144 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "expo-shazamkit",
3 | "version": "1.0.0",
4 | "description": "ShazamKit for React Native",
5 | "main": "build/index.js",
6 | "types": "build/index.d.ts",
7 | "scripts": {
8 | "build": "expo-module build",
9 | "build:plugin": "expo-module build plugin",
10 | "clean": "expo-module clean",
11 | "lint": "expo-module lint",
12 | "test": "expo-module test",
13 | "prepare": "expo-module prepare",
14 | "prepublishOnly": "expo-module prepublishOnly",
15 | "expo-module": "expo-module",
16 | "open:ios": "open -a \"Xcode\" example/ios",
17 | "open:android": "open -a \"Android Studio\" example/android"
18 | },
19 | "keywords": [
20 | "react-native",
21 | "expo",
22 | "ShazamKit",
23 | "shazam",
24 | "music",
25 | "ios"
26 | ],
27 | "repository": "https://github.com/alanjhughes/expo-shazamkit",
28 | "bugs": {
29 | "url": "https://github.com/alanjhughes/expo-shazamkit/issues"
30 | },
31 | "author": "Alan Hughes (https://github.com/alanjhughes)",
32 | "license": "MIT",
33 | "homepage": "https://github.com/alanjhughes/expo-shazamkit#readme",
34 | "dependencies": {},
35 | "devDependencies": {
36 | "@types/react": "~18.2.14",
37 | "expo-module-scripts": "^3.1.0",
38 | "expo-modules-core": "^1.5.11"
39 | },
40 | "peerDependencies": {
41 | "expo": "*",
42 | "react": "*",
43 | "react-native": "*"
44 | },
45 | "prettier": {
46 | "arrowParens": "avoid",
47 | "trailingComma": "all"
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/plugin/src/withShazamKit.ts:
--------------------------------------------------------------------------------
1 | import { ConfigPlugin, createRunOncePlugin } from "@expo/config-plugins";
2 |
3 | const pkg = require("expo-shazamkit/package.json");
4 |
5 | const MICROPHONE_USAGE = "Allow $(PRODUCT_NAME) to access your microphone";
6 |
7 | const withShazamKit: ConfigPlugin<{
8 | microphonePermission?: string;
9 | }> = (config, { microphonePermission } = {}) => {
10 | if (!config.ios) config.ios = {};
11 | if (!config.ios.infoPlist) config.ios.infoPlist = {};
12 | config.ios.infoPlist.NSMicrophoneUsageDescription =
13 | microphonePermission ||
14 | config.ios.infoPlist.NSMicrophoneUsageDescription ||
15 | MICROPHONE_USAGE;
16 |
17 | return config;
18 | };
19 |
20 | export default createRunOncePlugin(withShazamKit, pkg.name, pkg.version);
21 |
--------------------------------------------------------------------------------
/plugin/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "expo-module-scripts/tsconfig.plugin",
3 | "compilerOptions": {
4 | "outDir": "build",
5 | "rootDir": "src"
6 | },
7 | "include": ["./src"],
8 | "exclude": ["**/__mocks__/*", "**/__tests__/*"]
9 | }
10 |
--------------------------------------------------------------------------------
/src/ExpoShazamKit.ts:
--------------------------------------------------------------------------------
1 | import { NativeModulesProxy } from "expo-modules-core";
2 |
3 | export default NativeModulesProxy.ExpoShazamKit || {
4 | isAvailable(): boolean {
5 | return false;
6 | },
7 |
8 | startListening() {},
9 |
10 | stopListening() {},
11 |
12 | addToShazamLibrary() {
13 | return { success: false };
14 | },
15 |
16 | addListener() {
17 | // Nothing to do; unsupported platform.
18 | return Promise.resolve();
19 | },
20 |
21 | removeListeners() {
22 | // Nothing to do; unsupported platform.
23 | return Promise.resolve();
24 | },
25 | };
26 |
--------------------------------------------------------------------------------
/src/ExpoShazamKit.types.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * An object that represents the metadata for a matched reference signature.
3 | */
4 | export type MatchedItem = {
5 | /**
6 | * A title for the media item.
7 | */
8 | title?: string;
9 | /**
10 | * The name of the artist for the media item, such as the performer of a song.
11 | */
12 | artist?: string;
13 | /**
14 | * The Shazam ID for the song.
15 | */
16 | shazamID?: string;
17 | /**
18 | * The Apple Music ID for the song.
19 | */
20 | appleMusicID?: string;
21 | /**
22 | * A link to the Apple Music page that contains the full information for the song.
23 | */
24 | appleMusicURL?: string;
25 | /**
26 | * The URL for artwork for the media item, such as an album cover.
27 | */
28 | artworkURL?: string;
29 | /**
30 | * An array of genre names for the media item.
31 | */
32 | genres: string[];
33 | /**
34 | * A link to the Shazam Music catalog page that contains the full information for the song.
35 | */
36 | webURL?: string;
37 | /**
38 | * The Apple Music ID for the song.
39 | */
40 | subtitle?: string;
41 | /**
42 | * The URL for a video for the media item, such as a music video.
43 | */
44 | videoURL?: string | null;
45 | /**
46 | * A Boolean value that indicates whether the media item contains explicit content.
47 | */
48 | explicitContent: boolean;
49 | /**
50 | * The timecode in the reference recording that matches the start of the query, in seconds.
51 | */
52 | matchOffset: number;
53 | };
54 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | import ExpoShazamKit from "./ExpoShazamKit";
2 | import { MatchedItem } from "./ExpoShazamKit.types";
3 |
4 | export function isAvailable(): boolean {
5 | return ExpoShazamKit.isAvailable();
6 | }
7 |
8 | export async function startListening(): Promise {
9 | return await ExpoShazamKit.startListening();
10 | }
11 |
12 | export function stopListening() {
13 | ExpoShazamKit.stopListening();
14 | }
15 |
16 | export async function addToShazamLibrary(): Promise<{ success: boolean }> {
17 | return await ExpoShazamKit.addToShazamLibrary();
18 | }
19 |
20 | export { MatchedItem };
21 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | // @generated by expo-module-scripts
2 | {
3 | "extends": "expo-module-scripts/tsconfig.base",
4 | "compilerOptions": {
5 | "outDir": "./build"
6 | },
7 | "include": ["./src"],
8 | "exclude": ["**/__mocks__/*", "**/__tests__/*"]
9 | }
10 |
--------------------------------------------------------------------------------