2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

iOSシミュレータとiOS実機のCヘッダファイルの差分を調べた

Last updated at Posted at 2016-07-06

iOSシミュレータとiOS実機とでかなり環境が違うことはiOS開発者の方なら常識だと思います。両者でCPUアーキテクチャが違うのはもちろんですが、iOS実機のサンドボックス環境は様々な制約がかかっており、シミュレータで動くコードが実機で動かないなんてことも珍しくありません。

ところで、先日iOSシミュレータで動作確認していたCのソースコードを初めて実機向けにビルドしようと思ったら「sys/user.hが見つからないよ」というコンパイルエラーが出ました。「iOSシミュレータ環境とiOS実機とでヘッダファイルの有無まで変わる」というのは理屈上あり得ることではありますが、本当に違うならシミュレータ環境の存在価値って何なの?という気持ちになりますね。

とはいえ愚痴っていても仕方がないので、両環境のヘッダファイルの差分を一覧にしてみました。

調査方法

XCode7.3.1環境。下記2ディレクトリの差分からCPU名っぽいディレクトリ名のファイルを除去。

$(xcrun --sdk iphonesimulator --show-sdk-path)/usr/include
$(xcrun --sdk iphoneos --show-sdk-path)/usr/include

iOSシミュレータ向けビルド環境にしか無いヘッダファイル

下記ファイルはiOS実機向けビルド環境では存在しません。

aliasdb.h
ar.h
arpa/ftp.h
arpa/telnet.h
arpa/tftp.h
atm/atm_types.h
bootparams.h
bsm/audit_domain.h
bsm/audit_errno.h
bsm/audit_fcntl.h
bsm/audit_internal.h
bsm/audit_kevents.h
bsm/audit_record.h
bsm/audit_socket_type.h
crt_externs.h
curses.h
default_pager/default_pager_object.h
default_pager/default_pager_types.h
device/device_port.h
disktab.h
editline/readline.h
eti.h
form.h
fsproperties.h
get_compat.h
hfs/hfs_encodings.h
hfs/hfs_format.h
hfs/hfs_mount.h
hfs/hfs_unistr.h
histedit.h
kern/exc_resource.h
kern/kern_cdata.h
libc.h
libcharset.h
libkern/machine/OSByteOrder.h
libkern/OSDebug.h
libkern/OSKextLib.h
libkern/OSReturn.h
libkern/OSThermalNotification.h
libkern/OSTypes.h
libproc.h
localcharset.h
MacErrors.h
mach/machine/sdt.h
mach/machine/sdt_isa.h
mach/sdt.h
mach/shared_memory_server.h
mach/shared_region.h
mach_debug/mach_debug.h
machine/_limits.h
machine/byte_order.h
machine/fasttrap_isa.h
machine/profile.h
machine/vmparam.h
menu.h
miscfs/devfs/devfs.h
miscfs/specfs/specdev.h
miscfs/union/union.h
monitor.h
nc_tparm.h
ncurses.h
ncurses_dll.h
net/bpf.h
net/dlil.h
net/if_arp.h
net/if_llc.h
net/if_media.h
net/if_mib.h
net/if_types.h
net/if_utun.h
net/kext_net.h
net/ndrv.h
net/route.h
netinet/bootp.h
netinet/icmp6.h
netinet/icmp_var.h
netinet/if_ether.h
netinet/igmp.h
netinet/igmp_var.h
netinet/in_pcb.h
netinet/in_var.h
netinet/ip6.h
netinet/ip_icmp.h
netinet/ip_var.h
netinet/tcp_fsm.h
netinet/tcp_seq.h
netinet/tcp_timer.h
netinet/tcp_var.h
netinet/tcpip.h
netinet/udp.h
netinet/udp_var.h
netinet6/ah.h
netinet6/esp.h
netinet6/in6_var.h
netinet6/ipcomp.h
netinet6/nd6.h
netinet6/raw_ip6.h
netkey/keysock.h
nfs/krpc.h
nfs/nfs.h
nfs/nfs_gss.h
nfs/nfs_ioctl.h
nfs/nfs_lock.h
nfs/nfsdiskless.h
nfs/nfsm_subs.h
nfs/nfsmount.h
nfs/nfsnode.h
nfs/nfsproto.h
nfs/nfsrvcache.h
nfs/rpcv2.h
nfs/xdr_subs.h
nlist.h
NSSystemDirectories.h
objc/hashtable.h
objc/hashtable2.h
objc/List.h
objc/objc-class.h
objc/objc-load.h
objc/objc-runtime.h
objc/Object.h
objc/Protocol.h
panel.h
pexpert/boot.h
pexpert/machine/boot.h
pexpert/machine/protos.h
pexpert/pexpert.h
pexpert/protos.h
printerdb.h
protocols/routed.h
protocols/rwhod.h
protocols/talkd.h
protocols/timed.h
ranlib.h
readline/history.h
readline/readline.h
rpc/pmap_clnt.h
rpc/pmap_prot.h
rpc/pmap_rmt.h
rpcsvc/yp_prot.h
rpcsvc/ypclnt.h
security/audit/audit_ioctl.h
security/mac.h
security/mac_policy.h
servers/key_defs.h
servers/ls_defs.h
servers/netname.h
servers/netname_defs.h
servers/nm_defs.h
sgtty.h
sqlite3_private.h
stab.h
strhash.h
struct.h
sys/acct.h
sys/buf.h
sys/conf.h
sys/dir.h
sys/disk.h
sys/dkstat.h
sys/domain.h
sys/dtrace.h
sys/dtrace_glue.h
sys/dtrace_impl.h
sys/ev.h
sys/fasttrap.h
sys/fasttrap_isa.h
sys/filedesc.h
sys/gmon.h
sys/ioctl_compat.h
sys/kdebug.h
sys/kern_control.h
sys/kern_event.h
sys/kernel.h
sys/kernel_types.h
sys/loadable_fs.h
sys/lockf.h
sys/malloc.h
sys/mbuf.h
sys/msgbuf.h
sys/netport.h
sys/pipe.h
sys/posix_sem.h
sys/posix_shm.h
sys/proc_info.h
sys/protosw.h
sys/ptrace.h
sys/random.h
sys/reboot.h
sys/resourcevar.h
sys/sbuf.h
sys/sdt.h
sys/signalvar.h
sys/socketvar.h
sys/sys_domain.h
sys/tprintf.h
sys/trace.h
sys/tty.h
sys/ttychars.h
sys/ttydev.h
sys/ubc.h
sys/unpcb.h
sys/user.h
sys/utfconv.h
sys/vadvise.h
sys/vcmd.h
sys/vmmeter.h
sys/vmparam.h
sys/vnioctl.h
sys/vnode.h
sys/vnode_if.h
sys/vstat.h
term.h
term_entry.h
termcap.h
tic.h
tidy/buffio.h
tidy/platform.h
tidy/tidy.h
tidy/tidyenum.h
timeconv.h
tzfile.h
unctrl.h
vfs/vfs_support.h

無くても仕方ないものが多い印象ではあります。特にsys/以下はそうですね。TTY・アカウント管理・共有メモリ周りなどが無いのはAndroid NDK環境と通じるところがあります。

iOS実機向けビルド環境にだけ存在するヘッダファイル一覧

下記ファイルはiOSシミュレータ向けビルド環境では存在しません。

rpcsvc/bootparam_prot.h
rpcsvc/klm_prot.h
rpcsvc/mount.h
rpcsvc/nfs_prot.h
rpcsvc/nlm_prot.h
rpcsvc/rex.h
rpcsvc/rnusers.h
rpcsvc/rquota.h
rpcsvc/rstat.h
rpcsvc/rusers.h
rpcsvc/rwall.h
rpcsvc/sm_inter.h
rpcsvc/spray.h
rpcsvc/yp.h
rpcsvc/yppasswd.h

yp(NIS)やその他RPC関連のヘッダですね…。おそらく整理しきれてないだけでしょう。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?