【问题标题】:Undocumented iPhone APIs - Discovery and Use未记录的 iPhone API - 发现和使用
【发布时间】:2012-06-20 00:24:11
【问题描述】:

有一些 iPhone 应用程序使用未记录的 API 进行一些幕后花招,并取得了有效的结果。

  1. 如何获取未记录的 iPhone API 列表?

  2. 这些 API 中是否有第三方现成的文档?

【问题讨论】:

  • 玩起来很有趣,但我不建议在您想在 App Store 中获得的任何应用程序中使用它们。仅仅因为其他人进来并不意味着这是一个好主意。但我也喜欢在我自己的个人(未发布)应用程序中玩弄它们。

标签: iphone objective-c api


【解决方案1】:

您可以使用classdump 获取 iPhone SDK 的列表,但我不知道(不)存在第三方文档。不过,您可能可以通过阅读它们的名称来了解这些方法的作用。

【讨论】:

    【解决方案2】:

    Erica Sadun,最受尊敬的 iPhone 黑客之一,正好有一本关于这方面的书。大多数未记录的头文件也可以从她的网站中提取。

    【讨论】:

      【解决方案3】:

      我找到了一个 perl 脚本(source= arstechnika),它从 iPhone SDK 的公共和私有框架构建了一个标头文件夹。但是我收到一个错误(类转储失败,返回 16777215 ),如果我运行它。

          #!/usr/bin/perl
      #
      # 24 November 2008
      # Framework Dumping utility; requires class-dump
      #
      
      use strict;
      
      use Cwd;
      use File::Path;
      
      my $HOME = (getpwuid($<))[7] || $ENV{'HOME'} 
        or die "Could not find your home directory!";
      
      # This command must be in your path.
      # http://www.codethecode.com/projects/class-dump/
      my $CLASS_DUMP = 'class-dump'; 
      
      # Public Frameworks
      dump_frameworks('/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.0.sdk/System/Library/Frameworks',
                      'Frameworks');
      
      # Private Frameworks
      dump_frameworks('/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.0.sdk/System/Library/PrivateFrameworks',
                      'PrivateFrameworks');
      
      sub dump_frameworks
      {
        my($dir, $subdir) = @_;
      
        opendir(my $dirh, $dir) or die "Could not opendir($dir) - $!";
      
        # Iterate through each framework found in the directory
        foreach my $file (grep { /\.framework$/ } readdir($dirh))
        {
          # Extract the framework name
          (my $fname = $file) =~ s/\.framework$//;
          print "Framework: $fname\n";
      
          my $headers_dir = "$HOME/Headers/$subdir/$fname";
      
          # Create the folder to store the headers
          mkpath($headers_dir);
      
          # Perform the class-dump
          my $cwd = cwd();
          chdir($headers_dir) or die "Could not chdir($headers_dir) - $!";
      
          system($CLASS_DUMP, '-H', "$dir/$file");
      
          if(my $ret = $? >> 8)
          {
            die "$CLASS_DUMP failed, returning $ret\n";
          }
      
          chdir($cwd) or die "Could not chdir($cwd) - $!";
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2010-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多