Code Monkey home page Code Monkey logo

isign's Introduction

isign

A tool and library to re-sign iOS applications, without proprietary Apple software.

For example, an iOS app in development would probably only run on the developer's iPhone. isign can alter the app so that it can run on another developer's iPhone.

Apple tools already exist to do this. But with isign, now you can do this on operating systems like Linux.

Table of contents

Installing

Linux

The latest version of isign can be installed via PyPi:

$ pip install isign

Mac OS X

On Mac OS X, there are a lot of prerequisites, so the pip method probably won't work. The easiest method is to use git to clone the source code repository and run the install script:

$ git clone https://github.com/saucelabs/isign.git
$ cd isign
$ sudo ./INSTALL.sh

How to get started

All the libraries and tools that isign needs to run will work on both Linux and Mac OS X. However, you will need a Mac to export your Apple developer credentials.

If you're like most iOS developers, credentials are confusing -- if so check out the documentation on credentials on Github.

You should have a key and certificate in Keychain Access, and a provisioning profile associated with that certificate, that you can use to sign iOS apps for one or more of your own iOS devices.

In Keychain Access, open the Certificates. Find the certificate you use to sign apps. Right click on it and export the key as a .p12 file, let's say Certificates.p12. If Keychain asks you for a password to protect this file, just leave it blank.

Next, let's extract the key and certificate you need, into a standard PEM format.

$ isign_export_creds.sh ~/Certificates.p12

If you get prompted for a password, just press Return.

By default, isign_export_creds.sh will put these files into ~/.isign, which is the standard place to put isign configuration files.

Finally, you need a provisioning profile from the Apple Developer Portal that uses the same certificate. If you've never dealt with this, the provisioning profile is what tells the phone that you Apple has okayed you installing apps onto this particular phone.

If you develop with XCode, you might have a provisioning profile already. On the Mac where you develop with XCode, try running the isign_guess_mobileprovision.sh script. If you typically have only a few provisioning profiles and install on one phone, it might find it.

Anyway, once you have a .mobileprovision file, move it to ~/.isign/isign.mobileprovision.

The end result should look like this:

$ ls -l ~/.isign
-r--r--r--    1 alice  staff  2377 Sep  4 14:17 certificate.pem
-r--r--r--    1 alice  staff  9770 Nov 23 13:30 isign.mobileprovision
-r--------    1 alice  staff  1846 Sep  4 14:17 key.pem

And now you're ready to start re-signing apps!

How to use isign

If you've installed all the files in the proper locations above, then isign can be now invoked on any iOS .app directory, or .ipa archive, or .app.zip zipped directory. For example:

$ isign -o resigned.ipa my.ipa
archived Ipa to /home/alice/resigned.ipa

You can also call it from Python:

from isign import isign

isign.resign("my.ipa", output_path="resigned.ipa")

isign command line arguments

# Resigning by specifying all credentials, input file, and output file
$ isign -c /path/to/mycert.pem -k ~/mykey.pem -p path/to/my.mobileprovision \
        -o resigned.ipa original.ipa

# Resigning, with credentials under default filenames in ~/.isign - less to type!
$ isign -o resigned.ipa original.ipa

# Modify Info.plist properties in resigned app
$ isign -i CFBundleIdentifier=com.example.myapp,CFBundleName=MyApp -o resigned.ipa original.ipa

# Display Info.plist properties from an app as JSON
$ isign -d my.ipa

# Get help
$ isign -h

-a <path>, --apple-cert <path>

Path to Apple certificate in PEM format. This is already included in the library, so you will likely never need it. In the event that the certificates need to be changed, See the Apple Certificate documentation.

-c <path>, --certificate <path>

Path to your certificate in PEM format. Defaults to $HOME/.isign/certificate.pem.

-d, --display

For the application path, display the information property list (Info.plist) as JSON.

-h, --help

Show a help message and exit.

-i, --info

While resigning, add or update info in the application's information property list (Info.plist). Takes a comma-separated list of key=value pairs, such as CFBundleIdentifier=com.example.app,CFBundleName=ExampleApp. Use with caution! See Apple documentation for valid Info.plist keys.

-k <path>, --key <path>

Path to your private key in PEM format. Defaults to $HOME/.isign/key.pem.

-n <directory>, --credentials <directory>

Equivalent to:

-k <directory>/key.pem
-c <directory>/certificate.pem
-p <directory>/isign.mobileprovision

-o <path>, --output <path>

Path to write the re-signed application. Defaults to out in your current working directory.

-p <path>, --provisioning-profile <path>

Path to your provisioning profile. This should be associated with your certificate. Defaults to $HOME/.isign/isign.mobileprovision.

-v, --verbose

More verbose logs will be printed to STDERR.

Application path

The app to be resigned is specified on the command line after other arguments. The application path is typically an IPA, but can also be a .app directory or even a zipped .app directory. When resigning, isign will always create an archive of the same type as the original.

Contributing

Sauce Labs open source projects have a Code of Conduct. In short, we try to respect each other, listen, and be helpful.

Development happens on our Github repository. File an issue, or fork the code!

You'll probably want to create some kind of python virtualenv, so you don't have to touch your system python or its libraries. virtualenvwrapper is a good tool for this.

Then, just do the following:

$ git clone https://github.com/saucelabs/isign.git
$ cd isign
$ dev/setup.sh
$ ./run_tests.sh

If the tests don't pass please file an issue. Please keep the tests up to date as you develop.

Note: some tests require Apple's codesign to run, so they are skipped unless you run them on a Macintosh computer with developer tools.

Okay, if all the tests passed, you now have an 'editable' install of isign. Any edits to this repo will affect (for instance) how the isign command line tool works.

Sauce Labs supports ongoing public isign development. isign is a part of our infrastructure for the iOS Real Device Cloud, which allows customers to test apps and websites on real iOS devices. isign has been successfully re-signing submitted customer apps in production since June 2015.

More documentation

See the docs directory of this repository for random stuff that didn't fit here.

Authors

Neil Kandalgaonkar is the main developer and maintainer.

Proof of concept by Steven Hazel and Neil Kandalgaonkar.

Reference scripts using Apple tools by Michael Han.

Ported to python3 by Subho Halder and dhilipsiva

Supported by Appknox - https://www.appknox.com

isign's People

Contributors

0x5e avatar brainsik avatar cfal avatar chillaranand avatar codeaholicguy avatar cosmosgenius avatar dhilipsiva avatar dweinstein avatar fin7710 avatar jlipps avatar justindhill avatar kwilson6744 avatar leofantast avatar mskmkt0704 avatar msnively avatar neilk avatar paulbramos avatar praseetha-kr avatar rib avatar ryu2 avatar sah avatar sergioph avatar subho007 avatar sureshdsk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

isign's Issues

Signing from scratch seems to currently be broken

If I've cross-compiled a binary via clang + ld64 (without using XCode) then the code path for signing from scratch doesn't seem to be working currently.

The first issue I hit was that makesig.py doesn't have a line like:

log = logging.getLogger(__name__)

(so any log.xyz() calls result in an exception)

I guess it implies that no one else is trying to do this and maybe the code has bitrotted? :/

Then I git an issue that I guess was introduced with the python3 port maybe being more fussy about strings/binary data and currently have a hack like:

diff --git a/isign/makesig.py b/isign/makesig.py
index 736d3f3..3def60a 100644
--- a/isign/makesig.py
+++ b/isign/makesig.py
@@ -15,6 +15,7 @@ from . import macho
 from . import macho_cs
 from . import utils
 
+log = logging.getLogger(__name__)
 
 def make_arg(data_type, arg):
     if data_type.name == 'Data':
@@ -119,7 +120,7 @@ def make_basic_codesig(entitlements_file, drs, code_limit, hashes, signer, ident
     empty_hash = "\x00" * 20
 
     if not signer.is_adhoc():
-        teamID = signer._get_team_id() + '\x00'
+        teamID = signer._get_team_id() + '\x00'.encode('ascii')
         cd = construct.Container(cd_start=None,
                                  version=0x20200,
                                  flags=0,

I currently get this output running with --verbose

Signing with apple_cert: /home/bob/.local/lib/python3.6/site-packages/isign/apple_credentials/applecerts.pem
Signing with key: /home/bob/.isign/key.pem
Signing with certificate: /home/bob/.isign/certificate.pem
Signing with provisioning_profile: /home/bob/.isign/isign.mobileprovision
is_native: True
File <snip/>/Payload/Test.app matched as AppArchive
unarchiving to temp... <snip/>/Payload/Test.app -> /tmp/isign-e6q3qjfs
wrote Entitlements to /tmp/isign-e6q3qjfs/Entitlements.plist
working on /tmp/isign-e6q3qjfs/Test
found thin binary: cputype 16777228, cpusubtype 0
codesig len: 704
Existing LC_CODE_SIGNATURE missing entitlements
signing from scratch!
signing from scratch
codesig offset: 113504
new cL: 0x1bb60
new nCS: 28
ident: <snip/>.Test
codelimit: 113504
removing ua: /tmp/isign-e6q3qjfs
Traceback (most recent call last):
  File "/home/bob/.local/lib/python3.6/site-packages/construct/adapters.py", line 100, in _decode
    return self.decoding[obj]
KeyError: 16777216

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 444, in _parse
    obj.append(self.subcon._parse(stream, context))
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 672, in _parse
    subobj = sc._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 976, in _parse
    obj = self.subcon._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 1295, in _parse
    return self.bound._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 672, in _parse
    subobj = sc._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 1011, in _parse
    return self.subcon._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 853, in _parse
    obj = self.cases.get(key, self.default)._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 672, in _parse
    subobj = sc._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 1295, in _parse
    return self.bound._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 672, in _parse
    subobj = sc._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 853, in _parse
    obj = self.cases.get(key, self.default)._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 735, in _parse
    subobj = sc._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 1295, in _parse
    return self.bound._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 672, in _parse
    subobj = sc._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 853, in _parse
    obj = self.cases.get(key, self.default)._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 735, in _parse
    subobj = sc._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 1295, in _parse
    return self.bound._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 672, in _parse
    subobj = sc._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 853, in _parse
    obj = self.cases.get(key, self.default)._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 735, in _parse
    subobj = sc._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 1295, in _parse
    return self.bound._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 672, in _parse
    subobj = sc._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 853, in _parse
    obj = self.cases.get(key, self.default)._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 735, in _parse
    subobj = sc._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 672, in _parse
    subobj = sc._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 288, in _parse
    return self._decode(self.subcon._parse(stream, context), context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/adapters.py", line 104, in _decode
    obj, self.subcon.name))
construct.adapters.MappingError: no decoding mapping for 16777216 [matchOp]

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 444, in _parse
    obj.append(self.subcon._parse(stream, context))
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 672, in _parse
    subobj = sc._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 853, in _parse
    obj = self.cases.get(key, self.default)._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 976, in _parse
    obj = self.subcon._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 1295, in _parse
    return self.bound._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 672, in _parse
    subobj = sc._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 1011, in _parse
    return self.subcon._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 853, in _parse
    obj = self.cases.get(key, self.default)._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 672, in _parse
    subobj = sc._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 447, in _parse
    raise ArrayError("expected %d, found %d" % (count, c), sys.exc_info()[1])
construct.core.ArrayError: ('expected 1, found 0', MappingError('no decoding mapping for 16777216 [matchOp]',))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/bob/.local/bin/isign", line 251, in <module>
    isign.resign(app_path, **kwargs)
  File "/home/bob/.local/lib/python3.6/site-packages/isign/isign.py", line 83, in resign
    alternate_entitlements_path)
  File "/home/bob/.local/lib/python3.6/site-packages/isign/archive.py", line 409, in resign
    ua.bundle.resign(deep, signer, provisioning_profile, alternate_entitlements_path)
  File "/home/bob/.local/lib/python3.6/site-packages/isign/bundle.py", line 266, in resign
    super(App, self).resign(deep, signer)
  File "/home/bob/.local/lib/python3.6/site-packages/isign/bundle.py", line 181, in resign
    self.sign(deep, signer)
  File "/home/bob/.local/lib/python3.6/site-packages/isign/bundle.py", line 176, in sign
    executable = self.signable_class(self, self.get_executable_path(), signer)
  File "/home/bob/.local/lib/python3.6/site-packages/isign/signable.py", line 44, in __init__
    self.arches = self._parse_arches()
  File "/home/bob/.local/lib/python3.6/site-packages/isign/signable.py", line 65, in _parse_arches
    self.file_end))
  File "/home/bob/.local/lib/python3.6/site-packages/isign/signable.py", line 99, in _get_arch
    0, self.signer, self.bundle.get_info_prop('CFBundleIdentifier'))
  File "/home/bob/.local/lib/python3.6/site-packages/isign/makesig.py", line 255, in make_signature
    ident)
  File "/home/bob/.local/lib/python3.6/site-packages/isign/makesig.py", line 223, in make_basic_codesig
    return macho_cs.Blob.parse(chunk)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 188, in parse
    return self.parse_stream(BytesIO(data))
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 198, in parse_stream
    return self._parse(stream, Container())
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 1295, in _parse
    return self.bound._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 672, in _parse
    subobj = sc._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 1011, in _parse
    return self.subcon._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 853, in _parse
    obj = self.cases.get(key, self.default)._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 672, in _parse
    subobj = sc._parse(stream, context)
  File "/home/bob/.local/lib/python3.6/site-packages/construct/core.py", line 447, in _parse
    raise ArrayError("expected %d, found %d" % (count, c), sys.exc_info()[1])
construct.core.ArrayError: ('expected 4, found 1', ArrayError('expected 1, found 0', MappingError('no decoding mapping for 16777216 [matchOp]',)))

Install into Linux machine

How can I install your fork into a Linux machine?
I tried cloning repo and then sudo ./INSTALL.sh but I got:

Traceback (most recent call last):
  File "/usr/local/bin/isign", line 4, in <module>
    __import__('pkg_resources').run_script('ak-isign==0.10.7', 'isign')
  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 739, in run_script
    self.require(requires)[0].run_script(script_name, ns)
  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 1494, in run_script
    exec(code, namespace, namespace)
  File "/usr/local/lib/python2.7/dist-packages/ak_isign-0.10.7-py2.7.egg/EGG-INFO/scripts/isign", line 4, in <module>
    from isign import isign
  File "/usr/local/lib/python2.7/dist-packages/ak_isign-0.10.7-py2.7.egg/isign/isign.py", line 7, in <module>
    from . import archive
  File "/usr/local/lib/python2.7/dist-packages/ak_isign-0.10.7-py2.7.egg/isign/archive.py", line 85
    class Archive(object, metaclass=abc.ABCMeta):

AttributeError: 'ZipInfo' object has no attribute 'is_dir'

Seems strange but I get this error on my ubuntu 16.04 system with Python 3.5

any ideas?
Traceback (most recent call last): File "/usr/local/bin/isign", line 251, in <module> isign.resign(app_path, **kwargs) File "/usr/local/lib/python3.5/dist-packages/isign/isign.py", line 83, in resign alternate_entitlements_path) File "/usr/local/lib/python3.5/dist-packages/isign/archive.py", line 405, in resign ua = archive.unarchive_to_temp() File "/usr/local/lib/python3.5/dist-packages/isign/archive.py", line 253, in unarchive_to_temp self.extract_to(self.path, containing_dir) File "/usr/local/lib/python3.5/dist-packages/isign/archive.py", line 264, in extract_to if fileinfo.is_dir(): AttributeError: 'ZipInfo' object has no attribute 'is_dir'

error AdhocSigner

file:
--- isign/codesig.py", line 242, in set_codedirectories
code :
--- code_directory.data.teamID = signer.team_id
error:
--- AttributeError: 'AdhocSigner' object has no attribute 'team_id'

MacOS re-sign error

Hi, On Mac OS 10.11.6

Traceback (most recent call last):
  File "/usr/local/bin/isign", line 4, in <module>
    __import__('pkg_resources').run_script('ak-isign==0.10.7', 'isign')
  File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 743, in run_script
    self.require(requires)[0].run_script(script_name, ns)
  File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 1531, in run_script
    exec(code, namespace, namespace)
  File "/usr/local/lib/python2.7/site-packages/ak_isign-0.10.7-py2.7.egg/EGG-INFO/scripts/isign", line 4, in <module>
    from isign import isign
  File "/usr/local/lib/python2.7/site-packages/ak_isign-0.10.7-py2.7.egg/isign/isign.py", line 7, in <module>
    from . import archive
  File "/usr/local/lib/python2.7/site-packages/ak_isign-0.10.7-py2.7.egg/isign/archive.py", line 85
    class Archive(object, metaclass=abc.ABCMeta):
                                   ^
SyntaxError: invalid syntax

Have you any guess ? I'm not au Python dev.

Regards, Yoann

construct.core.ArrayError: ('expected 51, found 9', MappingError('no decoding mapping for 50 [cmd]',))

Could not sign IPA due to the following error:

File "/usr/local/bin/isign", line 4, in <module> __import__('pkg_resources').run_script('ak-isign==0.10.14', 'isign') File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 658, in run_script self.require(requires)[0].run_script(script_name, ns) File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 1438, in run_script exec(code, namespace, namespace) File "/usr/local/lib/python3.6/dist-packages/ak_isign-0.10.14-py3.6.egg/EGG-INFO/scripts/isign", line 251, in <module> isign.resign(app_path, **kwargs) File "/usr/local/lib/python3.6/dist-packages/ak_isign-0.10.14-py3.6.egg/isign/isign.py", line 83, in resign alternate_entitlements_path) File "/usr/local/lib/python3.6/dist-packages/ak_isign-0.10.14-py3.6.egg/isign/archive.py", line 412, in resign ua.bundle.resign(deep, signer, provisioning_profile, alternate_entitlements_path) File "/usr/local/lib/python3.6/dist-packages/ak_isign-0.10.14-py3.6.egg/isign/bundle.py", line 294, in resign super(App, self).resign(deep, signer) File "/usr/local/lib/python3.6/dist-packages/ak_isign-0.10.14-py3.6.egg/isign/bundle.py", line 181, in resign self.sign(deep, signer) File "/usr/local/lib/python3.6/dist-packages/ak_isign-0.10.14-py3.6.egg/isign/bundle.py", line 176, in sign executable = self.signable_class(self, self.get_executable_path(), signer) File "/usr/local/lib/python3.6/dist-packages/ak_isign-0.10.14-py3.6.egg/isign/signable.py", line 40, in __init__ self.m = macho.MachoFile.parse_stream(self.f) File "/usr/local/lib/python3.6/dist-packages/ak_construct-2.5.2-py3.6.egg/construct/core.py", line 198, in parse_stream return self._parse(stream, Container()) File "/usr/local/lib/python3.6/dist-packages/ak_construct-2.5.2-py3.6.egg/construct/core.py", line 672, in _parse subobj = sc._parse(stream, context) File "/usr/local/lib/python3.6/dist-packages/ak_construct-2.5.2-py3.6.egg/construct/core.py", line 853, in _parse obj = self.cases.get(key, self.default)._parse(stream, context) File "/usr/local/lib/python3.6/dist-packages/ak_construct-2.5.2-py3.6.egg/construct/core.py", line 672, in _parse subobj = sc._parse(stream, context) File "/usr/local/lib/python3.6/dist-packages/ak_construct-2.5.2-py3.6.egg/construct/core.py", line 271, in _parse return self.subcon._parse(stream, context) File "/usr/local/lib/python3.6/dist-packages/ak_construct-2.5.2-py3.6.egg/construct/core.py", line 447, in _parse raise ArrayError("expected %d, found %d" % (count, c), sys.exc_info()[1]) construct.core.ArrayError: ('expected 51, found 9', MappingError('no decoding mapping for 50 [cmd]',))

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.