つくった
世の中にはAPNを頻繁に変える人もいるらしい
深夜に1時間半ぐらいで作った
なのでちゃんと動くか分からない
こんな感じ
iPhone単体でAPNのプロファイル作るやつできた
— ᴜᴢᴋ (@uzk17) December 2, 2019
要Pythonistahttps://t.co/IG7VQxyGOc pic.twitter.com/5HyxOSOpyh
コード
なるべく単一のコードで済むようにしたのでいろいろアレ
適当に作ったのでいろいろアレ
apn.py
# -*- coding: utf-8 -*-
import ui
import time
import base64
import console
import clipboard
import webbrowser
from http.server import HTTPServer, CGIHTTPRequestHandler
class Handler(CGIHTTPRequestHandler):
cgi_directories = ["./"]
class apnui(ui.View):
def __init__(self):
self.main_view = ui.View(frame=(0, 0, ui.get_screen_size()[
0], ui.get_screen_size()[1]))
self.main_view.name = 'APN Settings'
self.main_view.background_color = 'white'
space = 45
self.nameui = ui.TextField(frame=(self.main_view.width*0.2, space, self.main_view.width*0.8, 30))
self.nameui.alignment = ui.ALIGN_RIGHT
self.main_view.add_subview(self.nameui)
name_t = ui.TextView(frame=(0, space, self.main_view.width*0.2, 30))
name_t.alignment = ui.ALIGN_LEFT
name_t.text = 'Name'
self.main_view.add_subview(name_t)
self.passwd = ui.TextField(
frame=(self.main_view.width*0.2, space*2, self.main_view.width*0.8, 30))
self.passwd.alignment = ui.ALIGN_RIGHT
self.main_view.add_subview(self.passwd)
passwd_t = ui.TextView(frame=(0, space*2, self.main_view.width*0.2, 30))
passwd_t.alignment = ui.ALIGN_LEFT
passwd_t.text = 'Password'
self.main_view.add_subview(passwd_t)
self.uname = ui.TextField(
frame=(self.main_view.width*0.2, space*3, self.main_view.width*0.8, 30))
self.uname.alignment = ui.ALIGN_RIGHT
self.uname.text = ''
self.main_view.add_subview(self.uname)
uname_t = ui.TextView(frame=(0, space*3, self.main_view.width*0.2, 30))
uname_t.alignment = ui.ALIGN_LEFT
uname_t.text = 'UserName'
self.main_view.add_subview(uname_t)
self.button = ui.Button()
self.button.frame = (self.main_view.width*0.1, space*5, self.main_view.width*0.8, 30)
self.button.title = 'Complete'
self.button.action = self.button_tapped
self.button.background_color = (0, 0, 0, 0.5)
self.button.tint_color = ('white')
self.main_view.add_subview(self.button)
self.main_view.present('sheet')
def button_tapped(self, sender):
apnbase = '<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict> <key>ConsentText</key> <dict> <key>default</key> <string>ASEINet APN Configuration profile</string> </dict> <key>PayloadContent</key> <array> <dict> <key>AttachAPN</key> <dict> <key>Name</key> <string>{0}</string> <key>AuthenticationType</key> <string>CHAP</string> <key>Username</key> <string>{1}</string> <key>Password</key> <string>{2}</string> </dict> <key>APNs</key> <array> <dict> <key>Name</key> <string>{0}</string> <key>AuthenticationType</key> <string>CHAP</string> <key>Username</key> <string>{1}</string> <key>Password</key> <string>{2}</string> </dict> </array> <key>PayloadDisplayName</key> <string></string> <key>PayloadIdentifier</key> <string>com.aseinet.cellular</string> <key>PayloadOrganization</key> <string>ASEINet.NE.JP</string> <key>PayloadType</key> <string>com.apple.cellular</string> <key>PayloadUUID</key> <string>6B08253E-D5BB-4FC4-A5CD-825FB965B5AA</string> <key>PayloadVersion</key> <integer>1</integer> </dict> </array> <key>PayloadDisplayName</key> <string>ASEINet APN Profile (Ver. 1.2)</string> <key>PayloadDescription</key> <string>Apply APN-setting to your iOS device.</string> <key>PayloadIdentifier</key> <string>com.aseinet</string> <key>PayloadOrganization</key> <string>ASEINet.NE.JP</string> <key>PayloadRemovalDisallowed</key> <false/> <key>PayloadType</key> <string>Configuration</string> <key>PayloadUUID</key> <string>560EB0FF-BE89-46C7-8DC9-6CA77E1A4453</string> <key>PayloadVersion</key> <integer>1</integer></dict></plist>'.format(self.nameui.text,self.uname.text,self.passwd.text)
path_w = './apn.mobileconfig'
apnbase = apnbase.replace(' ','')
with open(path_w, mode='w') as f:
f.write(apnbase)
console.alert('WebServer Start','Copied url to clipboard','OK',hide_cancel_button=True)
self.button.title = 'Running Server...'
time.sleep(1)
clipboard.set('http://localhost:8080')
#console.alert('Running server...')
PORT = 8080
httpd = HTTPServer(("", PORT), Handler)
httpd.serve_forever()
v = apnui()
おわりに
需要あんのか?これ
Pythonistaが落ちるのはご愛嬌