Versions
- Python :3.10 or 3.9 tried both
- MacOS version :13.3.1 ventura
- XCode Version :14.3 or 14.2
- Cython version :0.29.3
Describe the bug
When running my xcode project getting Command PhaseScriptExecution failed with a nonzero exit code.
To Reproduce
make env, install kivy-ios with development version, toolchain build python3 kivy pillow,toolchain pip --no-deps kivymd,toolchain pip install geopy requests scipy sounddevice, toolchain pip install git+https://github.com/openai/whisper.git ,toolchain create WeatherPsychic /Users/suhaan/Documents/Suhaans_mac_python_programs/weatherapp/, open weatherpsychic-ios/weatherpsychic.xcodeproj, and run and get Command PhaseScriptExecution failed with a nonzero exit code.When clicking on it nothing appears same if say reveal in project navigator.After Sometime the error comes.
Expected behavior
program to work
Logs
Command PhaseScriptExecution failed with a nonzero exit code
Screenshots
Additional context
Code:
from kivymd.app import MDApp
from kivymd.uix.dialog import MDDialog
from kivymd.uix.label import MDLabel
from kivymd.uix.screen import MDScreen
from kivymd.uix.button import MDRectangleFlatButton, MDFlatButton
import whisper
import sounddevice as sd
from scipy.io.wavfile import write
import os
from kivy.lang import Builder
from kivymd.uix.textfield import MDTextField
from kivy.config import Config
from kivy.uix.image import Image
from kivymd.uix.button import MDIconButton
import requests
token='serect'
city_helper ="""
MDTextField:
hint_text: "Enter city name with country or state"
helper_text: "eg: Rock Hill,us or 29730, US"
helper_text_mode: "on_focus"
pos_hint: {'center_x':0.35,'center_y':0.8}
size_hint_x: None
width:680
icon_right: "weather-partly-cloudy"
mode:"fill"
on_text_validate: self.s
"""
from geopy.geocoders import Nominatim
def cptizefirtword(word):
result = ""
for i in word:
if i.isupper():
result=result+" "+i.upper()
else:
result=result+i
return result[1:]
def get_location_info(lat, long):
geolocator = Nominatim(user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36')
location = geolocator.reverse(f"{lat}, {long}")
address = location.raw['address']
city = address.get('city', '')
state = address.get('state', '')
country = address.get('country', '')
if not city:
return f"{state}, {country}"
return f"{city}, {state}, {country}"
#5386fe8b412f65c8fe185582a8a170a7
def citytocords(cityname):
geolocator = Nominatim(user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36")
c=geolocator.geocode(cityname)
long=c.longitude
lat=c.latitude
return f"{lat},{long}"
# Search for current weather in London (Great Britain) and get details
def get_weather( latitude: float, longitude: float, language: str = "en", timezone: str = "America/New_York",
dataSets: list[str] = ["currentWeather", "forecastDaily"]) -> dict:
url = f"https://weatherkit.apple.com/api/v1/weather/{language}/{latitude}/{longitude}"
headers = {
"Authorization": f"Bearer {token}"
}
params = {
"timezone": timezone,
"dataSets": ",".join(dataSets)
}
response = requests.get(url, headers=headers, params=params)
return response.json()
class Weatherapp(MDApp):
def has_numbers(self,inputString):
return any(char.isdigit() for char in inputString)
def build(self):
self.screen = MDScreen()
I=Image(source='apple.png',pos_hint={'center_x':0.125,'center_y':0.1})
I1=MDLabel(text='Weather',pos_hint={'center_x':0.65,'center_y':0.1},font_style='H4')
self.l1 = MDLabel(text='Weather Psychic',pos_hint={'center_x':0.6,'center_y':0.86},font_style='H4')
self.l2 = MDLabel(text='', pos_hint={'center_x': 0.825, 'center_y': 0.57})
self.l3 = MDLabel(text='', pos_hint={'center_x': 0.8, 'center_y': 0.44})
self.l4 = MDLabel(text='', pos_hint={'center_x': 0.8, 'center_y': 0.38})
#self.l6 =MDLabel(text='Alerts:', pos_hint={'center_x': 0.525, 'center_y': 0.45})
self.l5 = MDLabel(text='[b][/b]', pos_hint={'center_x': 0.8, 'center_y': 0.65},markup=True,font_style='H1')
self.l7 = MDLabel(text='',pos_hint={'center_x': 0.8, 'center_y': 0.53},bold=True,font_style='H5')
self.l8 = MDLabel(text='',pos_hint={'center_x': 0.8, 'center_y': 0.48},bold=True,font_style='H5')
self.l9 = MDLabel(text='', pos_hint={'center_x': 0.8, 'center_y': 0.41})
self.city = MDTextField(hint_text= "city,ctry or zipcode,ctry",
helper_text= "eg: Rock Hill,us or 29730,us",
helper_text_mode= "on_focus",
pos_hint= {'center_x':0.35,'center_y':0.78},
size_hint_x= None,
width=680,
mode="fill")#Builder.load_string(city_helper)
#tool=Builder.load_string(ts)
#keyboard=VKeyboard(on_key_up=self.keyup)
IB1=MDIconButton(icon="microphone",pos_hint={"center_x": 0.03, "center_y": 0.78},on_release=self.record)
c1= MDRectangleFlatButton(text='Celsius',pos_hint={'center_x':0.2,'center_y':0.3},on_release=self.c)
d1= MDRectangleFlatButton(text='Dark Theme',pos_hint={'center_x':0.55,'center_y':0.2},on_release=self.d)
l1= MDRectangleFlatButton(text='White Theme',pos_hint={'center_x':0.22,'center_y':0.2},on_release=self.l)
b1 = MDRectangleFlatButton(text='Search',pos_hint={'center_x':0.73,'center_y':0.78},on_release=self.showresults)
f1 = MDRectangleFlatButton(text='Fahrenheit',pos_hint={'center_x':0.55,'center_y':0.3},on_release=self.f)
clear1 = MDRectangleFlatButton(text='Clear Text',pos_hint={'center_x':0.55,'center_y':0.15},on_release=self.clear)
self.screen.add_widget(I)
self.screen.add_widget(self.city)
self.screen.add_widget(self.l1)
self.screen.add_widget(self.l7)
self.screen.add_widget(I1)
self.screen.add_widget(d1)
self.screen.add_widget(l1)
self.screen.add_widget(b1)
self.screen.add_widget(c1)
self.screen.add_widget(f1)
self.screen.add_widget(IB1)
self.screen.add_widget(clear1)
#self.screen.add_widget(keyboard)
self.screen.add_widget(self.l2)
self.screen.add_widget(self.l3)
self.screen.add_widget(self.l4)
self.screen.add_widget(self.l5)
self.screen.add_widget(self.l8)
self.screen.add_widget(self.l9)
#screen.add_widget(tool)
return self.screen
def c(self,obj):
try:
geolocator = Nominatim(user_agent="Mozilla/5.0 (X11; CrOS aarch64 15236.80.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.5414.125 Safari/537.36")
c=geolocator.geocode(self.city.text)
long=c.longitude
lat=c.latitude
print(lat,long)
# url = f"https://weatherkit.apple.com/api/v1/weather/en/{lat}/{long}"
# response = requests.get(url, headers=headers, params=params)
# w=response.json()
w=get_weather(lat,long)
hum=w['currentWeather']['humidity']
wd=w['currentWeather']['windDirection']
ds=w['currentWeather']['conditionCode']
t=round(w['currentWeather']['temperature'])
mint=round(w['forecastDaily']['days'][0]['temperatureMin'])
maxt=round(w['forecastDaily']['days'][0]['temperatureMax'])
ww=w['currentWeather']['windSpeed']
fl=round(w['currentWeather']['temperatureApparent'])
hum=str(hum).strip('0')
hum=hum.strip('.')
#self.l1.text=f"{get_location_info(lat=lat,long=long)}"
self.l2.text = f'{ds}'
#self.l6.text = f'Alerts:{alert(c[0],c[1])}'
self.l3.text = f'Wind Speed: {round(ww/1.609)} mph Wind Degree: {wd} '
self.l4.text = f'Humidity: {hum}%'
self.l5.text = f'[b]{t}°[/b]'
self.l7.text = f'H:{maxt} L:{mint}'
self.l8.text=f"Feels Like:{fl}°"
except:
self.dialog = MDDialog(title='Error',
text='Please enter a city,country name or try again in 60 seconds', size_hint=(0.8, 1),
buttons=[MDFlatButton(text='Close', on_release=self.close_dialog),
]
)
#self.dialog.open()
def d(self,i):
self.theme_cls.theme_style="Dark"
def l(self,i):
self.theme_cls.theme_style="Light"
# def s(self, value):
# if value:
# print('MDTextField clicked')
# c=self.city.text.split(',')
# print(c)
# list_of_tuples = reg.ids_for(c[0], matching='like')
# #print(list_of_tuples)
# stufflike=[]
# latl=[]
# lonl=[]
# for i in range(len(list_of_tuples)):
# stufflike.append(list_of_tuples[i][4])
# stufflike.append(list_of_tuples[i][5])
# #print(stufflike)
# #print(self.city.text)
# for index, element in enumerate(stufflike):
# if index % 2 == 0:
# latl.append(element)
# else:
# lonl.append(element)
# #print(len(latl),len(lonl))
# cities=[]
# for i in range(len(latl)):
# cities.append(get_location_info(latl[i],lonl[i]))
# print(cities)
def showresults(self,obj):
try:
geolocator = Nominatim(user_agent="Mozilla/5.0 (X11; CrOS aarch64 15236.80.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.5414.125 Safari/537.36")
c=geolocator.geocode(self.city.text)
long=c.longitude
lat=c.latitude
print(lat,long)
# url = f"https://weatherkit.apple.com/api/v1/weather/en/{lat}/{long}"
# response = requests.get(url, headers=headers, params=params)
# w=response.json()
# print(w)
w=get_weather(lat,long)
hum=w['currentWeather']['humidity']
wd=w['currentWeather']['windDirection']
ds=w['currentWeather']['conditionCode']
ds=cptizefirtword(str(ds))
t=round(w['currentWeather']['temperature']*1.8+32)
mint=round(w['forecastDaily']['days'][0]['temperatureMin']*1.8+32)
maxt=round(w['forecastDaily']['days'][0]['temperatureMax']*1.8+32)
ww=round(w['currentWeather']['windSpeed'])
fl=round(w['currentWeather']['temperatureApparent']*1.8+32)
hum=str(hum).strip('0')
hum=hum.strip('.')
self.l1.text=f"{get_location_info(lat=lat,long=long)}"
self.l2.text = f'{ds}'
#self.l6.text = f'Alerts:{alert(c[0],c[1])}'
self.l3.text = f'Wind Speed: {round(ww/1.609)} mph'
self.l4.text = f'Humidity: {hum}%'
self.l5.text = f'[b]{t}°[/b]'
self.l7.text = f'H:{maxt} L:{mint}'
self.l8.text=f"Feels Like:{fl}°"
self.l9.text=f'Wind Degree: {wd}'
except:
self.dialog = MDDialog(title='Error',
text='Please enter a city,country name or try again in 60 seconds', size_hint=(0.8, 1),
buttons=[MDFlatButton(text='Close', on_release=self.close_dialog),
]
)
self.dialog.open()
# def keyup(self,keyboard,keycode,*args):
# if isinstance(keycode,tuple):
# keycode=keycode[1]
# t=self.city.text
# if keycode=="spacebar":
# keycode=" "
# if keycode=="backspace":
# t=t[:-1]
# keycode=''
# if keycode=='enter':
# keycode=''
# self.showresults('f')
#self.city.text=f"{t}{keycode}"
def f(self,obj):
try:
geolocator = Nominatim(user_agent="Mozilla/5.0 (X11; CrOS aarch64 15236.80.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.5414.125 Safari/537.36")
c=geolocator.geocode(self.city.text)
long=c.longitude
lat=c.latitude
print(lat,long)
# url = f"https://weatherkit.apple.com/api/v1/weather/en/{lat}/{long}"
# response = requests.get(url, headers=headers, params=params)
# w=response.json()
# print(w)
w=get_weather(lat,long)
hum=w['currentWeather']['humidity']
wd=w['currentWeather']['windDirection']
ds=w['currentWeather']['conditionCode']
ds=cptizefirtword(str(ds))
t=round(w['currentWeather']['temperature']*1.8+32)
mint=round(w['forecastDaily']['days'][0]['temperatureMin']*1.8+32)
maxt=round(w['forecastDaily']['days'][0]['temperatureMax']*1.8+32)
ww=round(w['currentWeather']['windSpeed'])
fl=round(w['currentWeather']['temperatureApparent']*1.8+32)
hum=str(hum).strip('0')
hum=hum.strip('.')
#self.l1.text=f"{get_location_info(lat=lat,long=long)}"
self.l2.text = f'{ds}'
#self.l6.text = f'Alerts:{alert(c[0],c[1])}'
self.l3.text = f'Wind Speed: {round(ww/1.609)} mph'
self.l4.text = f'Humidity: {hum}%'
self.l5.text = f'[b]{t}°[/b]'
self.l7.text = f'H:{maxt} L:{mint}'
self.l8.text=f"Feels Like:{fl}°"
self.l9.text=f'Wind Degree: {wd}'
except:
self.dialog = MDDialog(title='Error',
text='Please enter a city,country name or try again in 60 seconds', size_hint=(0.8, 1),
buttons=[MDFlatButton(text='Close', on_release=self.close_dialog),
]
)
self.dialog.open()
def close_dialog(self, obj):
self.dialog.dismiss()
def record(self,j):
try:
fs = 44100
duration = 3
myrecording = sd.rec(int(duration * fs), samplerate=fs, channels=1)
sd.wait()
write('output.wav', fs, myrecording)
model = whisper.load_model("base")
result = model.transcribe("output.wav",fp16=False)
res=str(result["text"]).strip('.')
self.city.text=res
os.remove('output.wav')
except:
self.dialog = MDDialog(title='Error',
text='Please try again.It only last for 3 seconds.If you spam it, it might not work.', size_hint=(0.8, 1),
buttons=[MDFlatButton(text='Close', on_release=self.close_dialog),
]
)
self.dialog.open()
def clear(self,j):
self.city.text=''
Weatherapp().run()